/ Hex Artifact Content
Login

Artifact dd30e0e695e56795ce6cd0694499bb64af48cc16:


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 64 65 66 20  time..*/.#ifdef 
5990: 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
59a0: 49 4f 4e 0a 63 6f 6e 73 74 20 69 6e 74 20 73 71  ION.const int sq
59b0: 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 65  lite3one = 1;.#e
59c0: 6c 73 65 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  lse.extern const
59d0: 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b   int sqlite3one;
59e0: 0a 23 65 6e 64 69 66 0a 23 69 66 20 28 64 65 66  .#endif.#if (def
59f0: 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20 7c  ined(i386)     |
5a00: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36  | defined(__i386
5a10: 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  __)   || defined
5a20: 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20 20  (_M_IX86) ||    
5a30: 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f  \.     defined(_
5a40: 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64 65 66 69  _x86_64) || defi
5a50: 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20  ned(__x86_64__) 
5a60: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36  || defined(_M_X6
5a70: 34 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20  4)  ||    \.    
5a80: 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36   defined(_M_AMD6
5a90: 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d  4) || defined(_M
5aa0: 5f 41 52 4d 29 20 20 20 20 20 7c 7c 20 64 65 66  _ARM)     || def
5ab0: 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c  ined(__x86)   ||
5ac0: 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e      \.     defin
5ad0: 65 64 28 5f 5f 61 72 6d 5f 5f 29 29 20 26 26 20  ed(__arm__)) && 
5ae0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
5af0: 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45  RUNTIME_BYTEORDE
5b00: 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  R).# define SQLI
5b10: 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20  TE_BYTEORDER    
5b20: 31 32 33 34 0a 23 20 64 65 66 69 6e 65 20 53 51  1234.# define SQ
5b30: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20  LITE_BIGENDIAN  
5b40: 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c    0.# define SQL
5b50: 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e  ITE_LITTLEENDIAN
5b60: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
5b70: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20  TE_UTF16NATIVE  
5b80: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a 23  SQLITE_UTF16LE.#
5b90: 65 6e 64 69 66 0a 23 69 66 20 28 64 65 66 69 6e  endif.#if (defin
5ba0: 65 64 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20  ed(sparc)    || 
5bb0: 64 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29  defined(__ppc__)
5bc0: 29 20 20 5c 0a 20 20 20 20 26 26 20 21 64 65 66  )  \.    && !def
5bd0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 52 55 4e 54  ined(SQLITE_RUNT
5be0: 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23  IME_BYTEORDER).#
5bf0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
5c00: 59 54 45 4f 52 44 45 52 20 20 20 20 34 33 32 31  YTEORDER    4321
5c10: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5c20: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 31 0a  _BIGENDIAN    1.
5c30: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5c40: 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a 23  LITTLEENDIAN 0.#
5c50: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55   define SQLITE_U
5c60: 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49  TF16NATIVE  SQLI
5c70: 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6e 64 69  TE_UTF16BE.#endi
5c80: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
5c90: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 29  QLITE_BYTEORDER)
5ca0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5cb0: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 30 20  _BYTEORDER    0 
5cc0: 20 20 20 20 2f 2a 20 30 20 6d 65 61 6e 73 20 22      /* 0 means "
5cd0: 75 6e 6b 6e 6f 77 6e 20 61 74 20 63 6f 6d 70 69  unknown at compi
5ce0: 6c 65 2d 74 69 6d 65 22 20 2a 2f 0a 23 20 64 65  le-time" */.# de
5cf0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45  fine SQLITE_BIGE
5d00: 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72  NDIAN    (*(char
5d10: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
5d20: 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==0).# define SQ
5d30: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
5d40: 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71  N (*(char *)(&sq
5d50: 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20  lite3one)==1).# 
5d60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54  define SQLITE_UT
5d70: 46 31 36 4e 41 54 49 56 45 20 20 28 53 51 4c 49  F16NATIVE  (SQLI
5d80: 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c  TE_BIGENDIAN?SQL
5d90: 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49  ITE_UTF16BE:SQLI
5da0: 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64  TE_UTF16LE).#end
5db0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61  if../*.** Consta
5dc0: 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67  nts for the larg
5dd0: 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74  est and smallest
5de0: 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74   possible 64-bit
5df0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73   signed integers
5e00: 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  ..** These macro
5e10: 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20 74  s are designed t
5e20: 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79  o work correctly
5e30: 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20   on both 32-bit 
5e40: 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f  and 64-bit.** co
5e50: 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66  mpilers..*/.#def
5e60: 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36  ine LARGEST_INT6
5e70: 34 20 20 28 30 78 66 66 66 66 66 66 66 66 7c 28  4  (0xffffffff|(
5e80: 28 28 69 36 34 29 30 78 37 66 66 66 66 66 66 66  ((i64)0x7fffffff
5e90: 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20  )<<32)).#define 
5ea0: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28  SMALLEST_INT64 (
5eb0: 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47  ((i64)-1) - LARG
5ec0: 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20 0a  EST_INT64)../* .
5ed0: 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e 75  ** Round up a nu
5ee0: 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78 74  mber to the next
5ef0: 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c 65   larger multiple
5f00: 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73 20   of 8.  This is 
5f10: 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65  used.** to force
5f20: 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e   8-byte alignmen
5f30: 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63 68  t on 64-bit arch
5f40: 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64  itectures..*/.#d
5f50: 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29 20  efine ROUND8(x) 
5f60: 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37 29      (((x)+7)&~7)
5f70: 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f  ../*.** Round do
5f80: 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65 73  wn to the neares
5f90: 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a  t multiple of 8.
5fa0: 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44  */.#define ROUND
5fb0: 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e 37  DOWN8(x) ((x)&~7
5fc0: 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20  )../*.** Assert 
5fd0: 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65 72  that the pointer
5fe0: 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74 6f   X is aligned to
5ff0: 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e 64   an 8-byte bound
6000: 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61  ary.  This.** ma
6010: 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c 79  cro is used only
6020: 20 77 69 74 68 69 6e 20 61 73 73 65 72 74 28 29   within assert()
6030: 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
6040: 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a  the code gets.**
6050: 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72   all alignment r
6060: 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72 72  estrictions corr
6070: 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70  ect..**.** Excep
6080: 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f 42  t, if SQLITE_4_B
6090: 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c  YTE_ALIGNED_MALL
60a0: 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74  OC is defined, t
60b0: 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72  hen the.** under
60c0: 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69  lying malloc() i
60d0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69  mplementation mi
60e0: 67 68 74 20 72 65 74 75 72 6e 20 75 73 20 34 2d  ght return us 4-
60f0: 62 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20  byte aligned.** 
6100: 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74 68  pointers.  In th
6110: 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65  at case, only ve
6120: 72 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69 67  rify 4-byte alig
6130: 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66  nment..*/.#ifdef
6140: 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41   SQLITE_4_BYTE_A
6150: 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20  LIGNED_MALLOC.# 
6160: 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54  define EIGHT_BYT
6170: 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20  E_ALIGNMENT(X)  
6180: 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d   ((((char*)(X) -
6190: 20 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d 30   (char*)0)&3)==0
61a0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
61b0: 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47   EIGHT_BYTE_ALIG
61c0: 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63  NMENT(X)   ((((c
61d0: 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72  har*)(X) - (char
61e0: 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64  *)0)&7)==0).#end
61f0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c  if../*.** Disabl
6200: 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f  e MMAP on platfo
6210: 72 6d 73 20 77 68 65 72 65 20 69 74 20 69 73 20  rms where it is 
6220: 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72  known to not wor
6230: 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  k.*/.#if defined
6240: 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c  (__OpenBSD__) ||
6250: 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54   defined(__QNXNT
6260: 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51 4c  O__).# undef SQL
6270: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
6280: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
6290: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
62a0: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
62b0: 44 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20  Default maximum 
62c0: 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75  size of memory u
62d0: 73 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61  sed by memory-ma
62e0: 70 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65 20  pped I/O in the 
62f0: 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f  VFS.*/.#ifdef __
6300: 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64  APPLE__.# includ
6310: 65 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74 69  e <TargetConditi
6320: 6f 6e 61 6c 73 2e 68 3e 0a 23 20 69 66 20 54 41  onals.h>.# if TA
6330: 52 47 45 54 5f 4f 53 5f 49 50 48 4f 4e 45 0a 23  RGET_OS_IPHONE.#
6340: 20 20 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f     undef SQLITE_
6350: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
6360: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
6370: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a  MAX_MMAP_SIZE 0.
6380: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
6390: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41  ifndef SQLITE_MA
63a0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66  X_MMAP_SIZE.# if
63b0: 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78   defined(__linux
63c0: 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e  __) \.  || defin
63d0: 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c  ed(_WIN32) \.  |
63e0: 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50  | (defined(__APP
63f0: 4c 45 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64  LE__) && defined
6400: 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20  (__MACH__)) \.  
6410: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e  || defined(__sun
6420: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
6430: 28 5f 5f 46 72 65 65 42 53 44 5f 5f 29 20 5c 0a  (__FreeBSD__) \.
6440: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 44    || defined(__D
6450: 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a 23 20 20 20  ragonFly__).#   
6460: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
6470: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 78 37 66  X_MMAP_SIZE 0x7f
6480: 66 66 30 30 30 30 20 20 2f 2a 20 32 31 34 37 34  ff0000  /* 21474
6490: 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c 73 65 0a  18112 */.# else.
64a0: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
64b0: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
64c0: 30 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69  0.# endif.# defi
64d0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
64e0: 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 2f 2a 20  AP_SIZE_xc 1 /* 
64f0: 65 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69  exclude from cti
6500: 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  me.c */.#endif..
6510: 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c  /*.** The defaul
6520: 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a  t MMAP_SIZE is z
6530: 65 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66  ero on all platf
6540: 6f 72 6d 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20  orms.  Or, even 
6550: 69 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64  if a larger.** d
6560: 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45  efault MMAP_SIZE
6570: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 74   is specified at
6580: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d   compile-time, m
6590: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 69 74  ake sure that it
65a0: 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63   does.** not exc
65b0: 65 65 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  eed the maximum 
65c0: 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69  mmap size..*/.#i
65d0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
65e0: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  AULT_MMAP_SIZE.#
65f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
6600: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
6610: 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   0.# define SQLI
6620: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
6630: 53 49 5a 45 5f 78 63 20 31 20 20 2f 2a 20 45 78  SIZE_xc 1  /* Ex
6640: 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65  clude from ctime
6650: 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  .c */.#endif.#if
6660: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
6670: 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49 54 45  MMAP_SIZE>SQLITE
6680: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
6690: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45   undef SQLITE_DE
66a0: 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a  FAULT_MMAP_SIZE.
66b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
66c0: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
66d0: 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  E SQLITE_MAX_MMA
66e0: 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f  P_SIZE.#endif../
66f0: 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f 66  *.** Only one of
6700: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
6710: 54 41 54 33 20 6f 72 20 53 51 4c 49 54 45 5f 45  TAT3 or SQLITE_E
6720: 4e 41 42 4c 45 5f 53 54 41 54 34 20 63 61 6e 20  NABLE_STAT4 can 
6730: 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a 20 50  be defined..** P
6740: 72 69 6f 72 69 74 79 20 69 73 20 67 69 76 65 6e  riority is given
6750: 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   to SQLITE_ENABL
6760: 45 5f 53 54 41 54 34 2e 20 20 49 66 20 65 69 74  E_STAT4.  If eit
6770: 68 65 72 20 61 72 65 20 64 65 66 69 6e 65 64 2c  her are defined,
6780: 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e 65 20   also.** define 
6790: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
67a0: 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f 0a  AT3_OR_STAT4.*/.
67b0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
67c0: 41 42 4c 45 5f 53 54 41 54 34 0a 23 20 75 6e 64  ABLE_STAT4.# und
67d0: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
67e0: 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20  _STAT3.# define 
67f0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
6800: 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23  AT3_OR_STAT4 1.#
6810: 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  elif SQLITE_ENAB
6820: 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e  LE_STAT3.# defin
6830: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
6840: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31  STAT3_OR_STAT4 1
6850: 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e  .#elif SQLITE_EN
6860: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
6870: 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  AT4.# undef SQLI
6880: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
6890: 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64 69 66 0a  OR_STAT4.#endif.
68a0: 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54 52 41  ./*.** SELECTTRA
68b0: 43 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c 6c 20  CE_ENABLED will 
68c0: 62 65 20 65 69 74 68 65 72 20 31 20 6f 72 20 30  be either 1 or 0
68d0: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
68e0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a 2a 20  ether or not.** 
68f0: 74 68 65 20 53 65 6c 65 63 74 20 71 75 65 72 79  the Select query
6900: 20 67 65 6e 65 72 61 74 6f 72 20 74 72 61 63 69   generator traci
6910: 6e 67 20 6c 6f 67 69 63 20 69 73 20 74 75 72 6e  ng logic is turn
6920: 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 64 65  ed on..*/.#if de
6930: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
6940: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UG) || defined(S
6950: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c  QLITE_ENABLE_SEL
6960: 45 43 54 54 52 41 43 45 29 0a 23 20 64 65 66 69  ECTTRACE).# defi
6970: 6e 65 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45  ne SELECTTRACE_E
6980: 4e 41 42 4c 45 44 20 31 0a 23 65 6c 73 65 0a 23  NABLED 1.#else.#
6990: 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52   define SELECTTR
69a0: 41 43 45 5f 45 4e 41 42 4c 45 44 20 30 0a 23 65  ACE_ENABLED 0.#e
69b0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
69c0: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
69d0: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
69e0: 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  re is used to st
69f0: 6f 72 65 20 74 68 65 20 62 75 73 79 2d 68 61 6e  ore the busy-han
6a00: 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  dler.** callback
6a10: 20 66 6f 72 20 61 20 67 69 76 65 6e 20 73 71 6c   for a given sql
6a20: 69 74 65 20 68 61 6e 64 6c 65 2e 20 0a 2a 2a 0a  ite handle. .**.
6a30: 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62 75  ** The sqlite.bu
6a40: 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65 72  syHandler member
6a50: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20 73   of the sqlite s
6a60: 74 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20 74  truct contains t
6a70: 68 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c 62  he busy.** callb
6a80: 61 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74 61  ack for the data
6a90: 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61 63  base handle. Eac
6aa0: 68 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20 76  h pager opened v
6ab0: 69 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a  ia the sqlite.**
6ac0: 20 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73 65   handle is passe
6ad0: 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 73  d a pointer to s
6ae0: 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65  qlite.busyHandle
6af0: 72 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e 64  r. The busy-hand
6b00: 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20  ler.** callback 
6b10: 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 76  is currently inv
6b20: 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20 77  oked only from w
6b30: 69 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a 2a  ithin pager.c..*
6b40: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
6b50: 20 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75 73   BusyHandler Bus
6b60: 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63 74  yHandler;.struct
6b70: 20 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a 20   BusyHandler {. 
6b80: 20 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76 6f   int (*xFunc)(vo
6b90: 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54  id *,int);  /* T
6ba0: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
6bb0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67   */.  void *pArg
6bc0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
6bd0: 20 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74 6f   /* First arg to
6be0: 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a   busy callback *
6bf0: 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20 20  /.  int nBusy;  
6c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
6c10: 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69  * Incremented wi
6c20: 74 68 20 65 61 63 68 20 62 75 73 79 20 63 61 6c  th each busy cal
6c30: 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e  l */.};../*.** N
6c40: 61 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65  ame of the maste
6c50: 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  r database table
6c60: 2e 20 20 54 68 65 20 6d 61 73 74 65 72 20 64 61  .  The master da
6c70: 74 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20  tabase table.** 
6c80: 69 73 20 61 20 73 70 65 63 69 61 6c 20 74 61 62  is a special tab
6c90: 6c 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  le that holds th
6ca0: 65 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74 72  e names and attr
6cb0: 69 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a  ibutes of all.**
6cc0: 20 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e 64   user tables and
6cd0: 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65   indices..*/.#de
6ce0: 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45  fine MASTER_NAME
6cf0: 20 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f 6d         "sqlite_m
6d00: 61 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20 54  aster".#define T
6d10: 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20  EMP_MASTER_NAME 
6d20: 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61   "sqlite_temp_ma
6d30: 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ster"../*.** The
6d40: 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68   root-page of th
6d50: 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73  e master databas
6d60: 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66  e table..*/.#def
6d70: 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20  ine MASTER_ROOT 
6d80: 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54        1../*.** T
6d90: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73  he name of the s
6da0: 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a  chema table..*/.
6db0: 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 54  #define SCHEMA_T
6dc0: 41 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49 54  ABLE(x)  ((!OMIT
6dd0: 5f 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31 29  _TEMPDB)&&(x==1)
6de0: 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d  ?TEMP_MASTER_NAM
6df0: 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a  E:MASTER_NAME)..
6e00: 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65  /*.** A convenie
6e10: 6e 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20 72  nce macro that r
6e20: 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
6e30: 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e  r of elements in
6e40: 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f  .** an array..*/
6e50: 0a 23 64 65 66 69 6e 65 20 41 72 72 61 79 53 69  .#define ArraySi
6e60: 7a 65 28 58 29 20 20 20 20 28 28 69 6e 74 29 28  ze(X)    ((int)(
6e70: 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66  sizeof(X)/sizeof
6e80: 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20  (X[0])))../*.** 
6e90: 44 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65  Determine if the
6ea0: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 70   argument is a p
6eb0: 6f 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23  ower of two.*/.#
6ec0: 64 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f 66  define IsPowerOf
6ed0: 54 77 6f 28 58 29 20 28 28 28 58 29 26 28 28 58  Two(X) (((X)&((X
6ee0: 29 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a  )-1))==0)../*.**
6ef0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76   The following v
6f00: 61 6c 75 65 20 61 73 20 61 20 64 65 73 74 72 75  alue as a destru
6f10: 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75 73  ctor means to us
6f20: 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  e sqlite3DbFree(
6f30: 29 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65  )..** The sqlite
6f40: 33 44 62 46 72 65 65 28 29 20 72 6f 75 74 69 6e  3DbFree() routin
6f50: 65 20 72 65 71 75 69 72 65 73 20 74 77 6f 20 70  e requires two p
6f60: 61 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65 61  arameters instea
6f70: 64 20 6f 66 20 74 68 65 20 0a 2a 2a 20 6f 6e 65  d of the .** one
6f80: 20 70 61 72 61 6d 65 74 65 72 20 74 68 61 74 20   parameter that 
6f90: 64 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d  destructors norm
6fa0: 61 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77  ally want.  So w
6fb0: 65 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64  e have to introd
6fc0: 75 63 65 20 0a 2a 2a 20 74 68 69 73 20 6d 61 67  uce .** this mag
6fd0: 69 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68  ic value that th
6fe0: 65 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20  e code knows to 
6ff0: 68 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74  handle different
7000: 6c 79 2e 20 20 41 6e 79 20 0a 2a 2a 20 70 6f 69  ly.  Any .** poi
7010: 6e 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68  nter will work h
7020: 65 72 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69  ere as long as i
7030: 74 20 69 73 20 64 69 73 74 69 6e 63 74 20 66 72  t is distinct fr
7040: 6f 6d 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  om SQLITE_STATIC
7050: 0a 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54  .** and SQLITE_T
7060: 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65  RANSIENT..*/.#de
7070: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41  fine SQLITE_DYNA
7080: 4d 49 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f  MIC   ((sqlite3_
7090: 64 65 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29  destructor_type)
70a0: 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a  sqlite3MallocSiz
70b0: 65 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53  e)../*.** When S
70c0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69  QLITE_OMIT_WSD i
70d0: 73 20 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65  s defined, it me
70e0: 61 6e 73 20 74 68 61 74 20 74 68 65 20 74 61 72  ans that the tar
70f0: 67 65 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65  get platform doe
7100: 73 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74  s.** not support
7110: 20 57 72 69 74 61 62 6c 65 20 53 74 61 74 69 63   Writable Static
7120: 20 44 61 74 61 20 28 57 53 44 29 20 73 75 63 68   Data (WSD) such
7130: 20 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73   as global and s
7140: 74 61 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e  tatic variables.
7150: 0a 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65  .** All variable
7160: 73 20 6d 75 73 74 20 65 69 74 68 65 72 20 62 65  s must either be
7170: 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72   on the stack or
7180: 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
7190: 6f 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74  ocated from.** t
71a0: 68 65 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57  he heap.  When W
71b0: 53 44 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65  SD is unsupporte
71c0: 64 2c 20 74 68 65 20 76 61 72 69 61 62 6c 65 20  d, the variable 
71d0: 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61  declarations sca
71e0: 74 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67  ttered.** throug
71f0: 68 6f 75 74 20 74 68 65 20 53 51 4c 69 74 65 20  hout the SQLite 
7200: 63 6f 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65  code must become
7210: 20 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65   constants inste
7220: 61 64 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f  ad.  The SQLITE_
7230: 57 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20  WSD.** macro is 
7240: 75 73 65 64 20 66 6f 72 20 74 68 69 73 20 70 75  used for this pu
7250: 72 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74  rpose.  And inst
7260: 65 61 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69  ead of referenci
7270: 6e 67 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a  ng the variable.
7280: 2a 2a 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20  ** directly, we 
7290: 75 73 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74  use its constant
72a0: 20 61 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f   as a key to loo
72b0: 6b 75 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65  kup the run-time
72c0: 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75   allocated.** bu
72d0: 66 66 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20  ffer that holds 
72e0: 72 65 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20  real variable.  
72f0: 54 68 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20  The constant is 
7300: 61 6c 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c  also the initial
7310: 69 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20  izer.** for the 
7320: 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74  run-time allocat
7330: 65 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a  ed buffer..**.**
7340: 20 49 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61   In the usual ca
7350: 73 65 20 77 68 65 72 65 20 57 53 44 20 69 73 20  se where WSD is 
7360: 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53  supported, the S
7370: 51 4c 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c  QLITE_WSD and GL
7380: 4f 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62  OBAL.** macros b
7390: 65 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64  ecome no-ops and
73a0: 20 68 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f   have zero perfo
73b0: 72 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a  rmance impact..*
73c0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
73d0: 4f 4d 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69  OMIT_WSD.  #defi
73e0: 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f  ne SQLITE_WSD co
73f0: 6e 73 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c  nst.  #define GL
7400: 4f 42 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29  OBAL(t,v) (*(t*)
7410: 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64  sqlite3_wsd_find
7420: 28 28 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69  ((void*)&(v), si
7430: 7a 65 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66  zeof(v))).  #def
7440: 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  ine sqlite3Globa
7450: 6c 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73  lConfig GLOBAL(s
7460: 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
7470: 66 69 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66  fig, sqlite3Conf
7480: 69 67 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  ig).  int sqlite
7490: 33 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e  3_wsd_init(int N
74a0: 2c 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64  , int J);.  void
74b0: 20 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69   *sqlite3_wsd_fi
74c0: 6e 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20  nd(void *K, int 
74d0: 4c 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  L);.#else.  #def
74e0: 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20 0a  ine SQLITE_WSD .
74f0: 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c    #define GLOBAL
7500: 28 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69 6e  (t,v) v.  #defin
7510: 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  e sqlite3GlobalC
7520: 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e  onfig sqlite3Con
7530: 66 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  fig.#endif../*.*
7540: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
7550: 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20  macros are used 
7560: 74 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d 70  to suppress comp
7570: 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61 6e  iler warnings an
7580: 64 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20  d to.** make it 
7590: 63 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20 72  clear to human r
75a0: 65 61 64 65 72 73 20 77 68 65 6e 20 61 20 66 75  eaders when a fu
75b0: 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72  nction parameter
75c0: 20 69 73 20 64 65 6c 69 62 65 72 61 74 65 6c 79   is deliberately
75d0: 20 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64   .** left unused
75e0: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
75f0: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20   of a function. 
7600: 54 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70  This usually hap
7610: 70 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66  pens when.** a f
7620: 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65  unction is calle
7630: 64 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e  d via a function
7640: 20 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78   pointer. For ex
7650: 61 6d 70 6c 65 20 74 68 65 20 0a 2a 2a 20 69 6d  ample the .** im
7660: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
7670: 61 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65  an SQL aggregate
7680: 20 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d   step callback m
7690: 61 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a  ay not use the.*
76a0: 2a 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69  * parameter indi
76b0: 63 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65  cating the numbe
76c0: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70  r of arguments p
76d0: 61 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67  assed to the agg
76e0: 72 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74  regate,.** if it
76f0: 20 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73   knows that this
7700: 20 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73   is enforced els
7710: 65 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68  ewhere..**.** Wh
7720: 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61  en a function pa
7730: 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75  rameter is not u
7740: 73 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69  sed at all withi
7750: 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20  n the body of a 
7760: 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20  function,.** it 
7770: 69 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d  is generally nam
7780: 65 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20  ed "NotUsed" or 
7790: 22 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61  "NotUsed2" to ma
77a0: 6b 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63  ke things even c
77b0: 6c 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76  learer..** Howev
77c0: 65 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73  er, these macros
77d0: 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65   may also be use
77e0: 64 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61  d to suppress wa
77f0: 72 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74  rnings related t
7800: 6f 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20  o.** parameters 
7810: 74 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20  that may or may 
7820: 6e 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65  not be used depe
7830: 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61  nding on compila
7840: 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a  tion options..**
7850: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f   For example tho
7860: 73 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e  se parameters on
7870: 6c 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72  ly used in asser
7880: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  t() statements. 
7890: 49 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65  In these.** case
78a0: 73 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73  s the parameters
78b0: 20 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65   are named as pe
78c0: 72 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76  r the usual conv
78d0: 65 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66  entions..*/.#def
78e0: 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ine UNUSED_PARAM
78f0: 45 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78  ETER(x) (void)(x
7900: 29 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  ).#define UNUSED
7910: 5f 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29  _PARAMETER2(x,y)
7920: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
7930: 52 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41  R(x),UNUSED_PARA
7940: 4d 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20  METER(y)../*.** 
7950: 46 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63  Forward referenc
7960: 65 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73  es to structures
7970: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
7980: 63 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e  ct AggInfo AggIn
7990: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
79a0: 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41  ct AuthContext A
79b0: 75 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65  uthContext;.type
79c0: 64 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69  def struct Autoi
79d0: 6e 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e  ncInfo AutoincIn
79e0: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
79f0: 63 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63  ct Bitvec Bitvec
7a00: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7a10: 20 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71   CollSeq CollSeq
7a20: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7a30: 20 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a   Column Column;.
7a40: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44  typedef struct D
7a50: 62 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74  b Db;.typedef st
7a60: 72 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65  ruct Schema Sche
7a70: 6d 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ma;.typedef stru
7a80: 63 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79  ct Expr Expr;.ty
7a90: 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70  pedef struct Exp
7aa0: 72 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a  rList ExprList;.
7ab0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45  typedef struct E
7ac0: 78 70 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e  xprSpan ExprSpan
7ad0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7ae0: 20 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65   FKey FKey;.type
7af0: 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44  def struct FuncD
7b00: 65 73 74 72 75 63 74 6f 72 20 46 75 6e 63 44 65  estructor FuncDe
7b10: 73 74 72 75 63 74 6f 72 3b 0a 74 79 70 65 64 65  structor;.typede
7b20: 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  f struct FuncDef
7b30: 20 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64 65   FuncDef;.typede
7b40: 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  f struct FuncDef
7b50: 48 61 73 68 20 46 75 6e 63 44 65 66 48 61 73 68  Hash FuncDefHash
7b60: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7b70: 20 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a   IdList IdList;.
7b80: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49  typedef struct I
7b90: 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65  ndex Index;.type
7ba0: 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78  def struct Index
7bb0: 53 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d 70  Sample IndexSamp
7bc0: 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  le;.typedef stru
7bd0: 63 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79 43  ct KeyClass KeyC
7be0: 6c 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73 74  lass;.typedef st
7bf0: 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79  ruct KeyInfo Key
7c00: 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74  Info;.typedef st
7c10: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c  ruct Lookaside L
7c20: 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64 65  ookaside;.typede
7c30: 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  f struct Lookasi
7c40: 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65  deSlot Lookaside
7c50: 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73 74  Slot;.typedef st
7c60: 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75  ruct Module Modu
7c70: 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  le;.typedef stru
7c80: 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e  ct NameContext N
7c90: 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65  ameContext;.type
7ca0: 64 65 66 20 73 74 72 75 63 74 20 50 61 72 73 65  def struct Parse
7cb0: 20 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66 20   Parse;.typedef 
7cc0: 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67  struct PrintfArg
7cd0: 75 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72 67  uments PrintfArg
7ce0: 75 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66 20  uments;.typedef 
7cf0: 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f  struct RowSet Ro
7d00: 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74  wSet;.typedef st
7d10: 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53  ruct Savepoint S
7d20: 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65  avepoint;.typede
7d30: 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  f struct Select 
7d40: 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20  Select;.typedef 
7d50: 73 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72  struct SQLiteThr
7d60: 65 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64  ead SQLiteThread
7d70: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7d80: 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65   SelectDest Sele
7d90: 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20  ctDest;.typedef 
7da0: 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53  struct SrcList S
7db0: 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20  rcList;.typedef 
7dc0: 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20  struct StrAccum 
7dd0: 53 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65  StrAccum;.typede
7de0: 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54  f struct Table T
7df0: 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74  able;.typedef st
7e00: 72 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54  ruct TableLock T
7e10: 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65  ableLock;.typede
7e20: 66 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54  f struct Token T
7e30: 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  oken;.typedef st
7e40: 72 75 63 74 20 54 72 65 65 56 69 65 77 20 54 72  ruct TreeView Tr
7e50: 65 65 56 69 65 77 3b 0a 74 79 70 65 64 65 66 20  eeView;.typedef 
7e60: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 54  struct Trigger T
7e70: 72 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20  rigger;.typedef 
7e80: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72  struct TriggerPr
7e90: 67 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79  g TriggerPrg;.ty
7ea0: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
7eb0: 67 67 65 72 53 74 65 70 20 54 72 69 67 67 65 72  ggerStep Trigger
7ec0: 53 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74  Step;.typedef st
7ed0: 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63  ruct UnpackedRec
7ee0: 6f 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ord UnpackedReco
7ef0: 72 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  rd;.typedef stru
7f00: 63 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65  ct VTable VTable
7f10: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7f20: 20 56 74 61 62 43 74 78 20 56 74 61 62 43 74 78   VtabCtx VtabCtx
7f30: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7f40: 20 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a   Walker Walker;.
7f50: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57  typedef struct W
7f60: 68 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e  hereInfo WhereIn
7f70: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
7f80: 63 74 20 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f  ct With With;../
7f90: 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75 72 63  *.** Defer sourc
7fa0: 69 6e 67 20 76 64 62 65 2e 68 20 61 6e 64 20 62  ing vdbe.h and b
7fb0: 74 72 65 65 2e 68 20 75 6e 74 69 6c 20 61 66 74  tree.h until aft
7fc0: 65 72 20 74 68 65 20 22 75 38 22 20 61 6e 64 20  er the "u8" and 
7fd0: 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65 72  .** "BusyHandler
7fe0: 22 20 74 79 70 65 64 65 66 73 2e 20 76 64 62 65  " typedefs. vdbe
7ff0: 2e 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65 73  .h also requires
8000: 20 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f 70   a few of the op
8010: 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  aque.** pointer 
8020: 74 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e 63  types (i.e. Func
8030: 44 65 66 29 20 64 65 66 69 6e 65 64 20 61 62 6f  Def) defined abo
8040: 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  ve..*/.#include 
8050: 22 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75  "btree.h".#inclu
8060: 64 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e 63  de "vdbe.h".#inc
8070: 6c 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a 23  lude "pager.h".#
8080: 69 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65 2e  include "pcache.
8090: 68 22 0a 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73  h"..#include "os
80a0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75  .h".#include "mu
80b0: 74 65 78 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45  tex.h".../*.** E
80c0: 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c  ach database fil
80d0: 65 20 74 6f 20 62 65 20 61 63 63 65 73 73 65 64  e to be accessed
80e0: 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 20 69   by the system i
80f0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  s an instance.**
8100: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
8110: 67 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68  g structure.  Th
8120: 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79  ere are normally
8130: 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73 74   two of these st
8140: 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74  ructures.** in t
8150: 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20  he sqlite.aDb[] 
8160: 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20 69  array.  aDb[0] i
8170: 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
8180: 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20  ase file and.** 
8190: 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64 61  aDb[1] is the da
81a0: 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
81b0: 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61   to hold tempora
81c0: 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64 69  ry tables.  Addi
81d0: 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61  tional.** databa
81e0: 73 65 73 20 6d 61 79 20 62 65 20 61 74 74 61 63  ses may be attac
81f0: 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44  hed..*/.struct D
8200: 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  b {.  char *zNam
8210: 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  e;         /* Na
8220: 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74 61 62  me of this datab
8230: 61 73 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a  ase */.  Btree *
8240: 70 42 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  pBt;          /*
8250: 20 54 68 65 20 42 2a 54 72 65 65 20 73 74 72 75   The B*Tree stru
8260: 63 74 75 72 65 20 66 6f 72 20 74 68 69 73 20 64  cture for this d
8270: 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a  atabase file */.
8280: 20 20 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65    u8 safety_leve
8290: 6c 3b 20 20 20 20 20 2f 2a 20 48 6f 77 20 61 67  l;     /* How ag
82a0: 67 72 65 73 73 69 76 65 20 61 74 20 73 79 6e 63  gressive at sync
82b0: 69 6e 67 20 64 61 74 61 20 74 6f 20 64 69 73 6b  ing data to disk
82c0: 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
82d0: 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f  chema;     /* Po
82e0: 69 6e 74 65 72 20 74 6f 20 64 61 74 61 62 61 73  inter to databas
82f0: 65 20 73 63 68 65 6d 61 20 28 70 6f 73 73 69 62  e schema (possib
8300: 6c 79 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b  ly shared) */.};
8310: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
8320: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
8330: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 73  wing structure s
8340: 74 6f 72 65 73 20 61 20 64 61 74 61 62 61 73 65  tores a database
8350: 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d   schema..**.** M
8360: 6f 73 74 20 53 63 68 65 6d 61 20 6f 62 6a 65 63  ost Schema objec
8370: 74 73 20 61 72 65 20 61 73 73 6f 63 69 61 74 65  ts are associate
8380: 64 20 77 69 74 68 20 61 20 42 74 72 65 65 2e 20  d with a Btree. 
8390: 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20 69   The exception i
83a0: 73 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d 61 20  s.** the Schema 
83b0: 66 6f 72 20 74 68 65 20 54 45 4d 50 20 64 61 74  for the TEMP dat
83c0: 61 62 61 65 73 20 28 73 71 6c 69 74 65 33 2e 61  abaes (sqlite3.a
83d0: 44 62 5b 31 5d 29 20 77 68 69 63 68 20 69 73 20  Db[1]) which is 
83e0: 66 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a  free-standing..*
83f0: 2a 20 49 6e 20 73 68 61 72 65 64 20 63 61 63 68  * In shared cach
8400: 65 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65  e mode, a single
8410: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 63   Schema object c
8420: 61 6e 20 62 65 20 73 68 61 72 65 64 20 62 79 20  an be shared by 
8430: 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65  multiple.** Btre
8440: 65 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f  es that refer to
8450: 20 74 68 65 20 73 61 6d 65 20 75 6e 64 65 72 6c   the same underl
8460: 79 69 6e 67 20 42 74 53 68 61 72 65 64 20 6f 62  ying BtShared ob
8470: 6a 65 63 74 2e 0a 2a 2a 20 0a 2a 2a 20 53 63 68  ject..** .** Sch
8480: 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ema objects are 
8490: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
84a0: 61 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74  allocated when t
84b0: 68 65 20 6c 61 73 74 20 42 74 72 65 65 20 74 68  he last Btree th
84c0: 61 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73  at.** references
84d0: 20 74 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79   them is destroy
84e0: 65 64 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53  ed.   The TEMP S
84f0: 63 68 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c  chema is manuall
8500: 79 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71  y freed by.** sq
8510: 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a  lite3_close()..*
8520: 0a 2a 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73  .** A thread mus
8530: 74 20 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d  t be holding a m
8540: 75 74 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72  utex on the corr
8550: 65 73 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20  esponding Btree 
8560: 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61  in order.** to a
8570: 63 63 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e  ccess Schema con
8580: 74 65 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c  tent.  This impl
8590: 69 65 73 20 74 68 61 74 20 74 68 65 20 74 68 72  ies that the thr
85a0: 65 61 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65  ead must also be
85b0: 0a 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75  .** holding a mu
85c0: 74 65 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74  tex on the sqlit
85d0: 65 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f  e3 connection po
85e0: 69 6e 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20  inter that owns 
85f0: 74 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f  the Btree..** Fo
8600: 72 20 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c  r a TEMP Schema,
8610: 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63   only the connec
8620: 74 69 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65  tion mutex is re
8630: 71 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63  quired..*/.struc
8640: 74 20 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74  t Schema {.  int
8650: 20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20   schema_cookie; 
8660: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63    /* Database sc
8670: 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d  hema version num
8680: 62 65 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ber for this fil
8690: 65 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65  e */.  int iGene
86a0: 72 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47  ration;     /* G
86b0: 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65  eneration counte
86c0: 72 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20  r.  Incremented 
86d0: 77 69 74 68 20 65 61 63 68 20 63 68 61 6e 67 65  with each change
86e0: 20 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61   */.  Hash tblHa
86f0: 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  sh;        /* Al
8700: 6c 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64  l tables indexed
8710: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
8720: 73 68 20 69 64 78 48 61 73 68 3b 20 20 20 20 20  sh idxHash;     
8730: 20 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64     /* All (named
8740: 29 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65  ) indices indexe
8750: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
8760: 61 73 68 20 74 72 69 67 48 61 73 68 3b 20 20 20  ash trigHash;   
8770: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67      /* All trigg
8780: 65 72 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  ers indexed by n
8790: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b  ame */.  Hash fk
87a0: 65 79 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a  eyHash;       /*
87b0: 20 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79   All foreign key
87c0: 73 20 62 79 20 72 65 66 65 72 65 6e 63 65 64 20  s by referenced 
87d0: 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  table name */.  
87e0: 54 61 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20  Table *pSeqTab; 
87f0: 20 20 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69       /* The sqli
8800: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
8810: 65 20 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e  e used by AUTOIN
8820: 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20  CREMENT */.  u8 
8830: 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20  file_format;    
8840: 20 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d    /* Schema form
8850: 61 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74  at version for t
8860: 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38  his file */.  u8
8870: 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
8880: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
8890: 69 6e 67 20 75 73 65 64 20 62 79 20 74 68 69 73  ing used by this
88a0: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75   database */.  u
88b0: 31 36 20 73 63 68 65 6d 61 46 6c 61 67 73 3b 20  16 schemaFlags; 
88c0: 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73      /* Flags ass
88d0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
88e0: 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e  s schema */.  in
88f0: 74 20 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20  t cache_size;   
8900: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
8910: 70 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20  pages to use in 
8920: 74 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a  the cache */.};.
8930: 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  ./*.** These mac
8940: 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
8950: 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72  to test, set, or
8960: 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74   clear bits in t
8970: 68 65 20 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d  he .** Db.pSchem
8980: 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  a->flags field..
8990: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73  */.#define DbHas
89a0: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
89b0: 20 20 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49      (((D)->aDb[I
89c0: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
89d0: 61 46 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29  aFlags&(P))==(P)
89e0: 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 41  ).#define DbHasA
89f0: 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  nyProperty(D,I,P
8a00: 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d  )  (((D)->aDb[I]
8a10: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
8a20: 46 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23  Flags&(P))!=0).#
8a30: 64 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70  define DbSetProp
8a40: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20  erty(D,I,P)     
8a50: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
8a60: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
8a70: 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 44 62  |=(P).#define Db
8a80: 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 44 2c  ClearProperty(D,
8a90: 49 2c 50 29 20 20 20 28 44 29 2d 3e 61 44 62 5b  I,P)   (D)->aDb[
8aa0: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  I].pSchema->sche
8ab0: 6d 61 46 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f  maFlags&=~(P)../
8ac0: 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
8ad0: 75 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70  ues for the DB.p
8ae0: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69  Schema->flags fi
8af0: 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44  eld..**.** The D
8b00: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66  B_SchemaLoaded f
8b10: 6c 61 67 20 69 73 20 73 65 74 20 61 66 74 65 72  lag is set after
8b20: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
8b30: 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a  hema has been.**
8b40: 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72   read into inter
8b50: 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e  nal hash tables.
8b60: 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65  .**.** DB_Unrese
8b70: 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61  tViews means tha
8b80: 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69  t one or more vi
8b90: 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20  ews have column 
8ba0: 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61  names that.** ha
8bb0: 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f  ve been filled o
8bc0: 75 74 2e 20 20 49 66 20 74 68 65 20 73 63 68 65  ut.  If the sche
8bd0: 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73  ma changes, thes
8be0: 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d  e column names m
8bf0: 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20  ight.** changes 
8c00: 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77 20  and so the view 
8c10: 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20  will need to be 
8c20: 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  reset..*/.#defin
8c30: 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65  e DB_SchemaLoade
8c40: 64 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20  d    0x0001  /* 
8c50: 54 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 62  The schema has b
8c60: 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64  een loaded */.#d
8c70: 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74  efine DB_Unreset
8c80: 56 69 65 77 73 20 20 20 20 30 78 30 30 30 32 20  Views    0x0002 
8c90: 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68   /* Some views h
8ca0: 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75  ave defined colu
8cb0: 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66  mn names */.#def
8cc0: 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20  ine DB_Empty    
8cd0: 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
8ce0: 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d  * The file is em
8cf0: 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79  pty (length 0 by
8d00: 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  tes) */../*.** T
8d10: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66  he number of dif
8d20: 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20  ferent kinds of 
8d30: 74 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20  things that can 
8d40: 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73  be limited.** us
8d50: 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ing the sqlite3_
8d60: 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63  limit() interfac
8d70: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  e..*/.#define SQ
8d80: 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51  LITE_N_LIMIT (SQ
8d90: 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45  LITE_LIMIT_WORKE
8da0: 52 5f 54 48 52 45 41 44 53 2b 31 29 0a 0a 2f 2a  R_THREADS+1)../*
8db0: 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** Lookaside ma
8dc0: 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66  lloc is a set of
8dd0: 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66   fixed-size buff
8de0: 65 72 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ers that can be 
8df0: 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73  used.** to satis
8e00: 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65  fy small transie
8e10: 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  nt memory alloca
8e20: 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f  tion requests fo
8e30: 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73  r objects.** ass
8e40: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70  ociated with a p
8e50: 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61  articular databa
8e60: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
8e70: 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f  The use of.** lo
8e80: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70  okaside malloc p
8e90: 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69 66  rovides a signif
8ea0: 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63  icant performanc
8eb0: 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a  e enhancement.**
8ec0: 20 28 61 70 70 72 6f 78 20 31 30 25 29 20 62 79   (approx 10%) by
8ed0: 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f   avoiding numero
8ee0: 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72  us malloc/free r
8ef0: 65 71 75 65 73 74 73 20 77 68 69 6c 65 20 70 61  equests while pa
8f00: 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61  rsing.** SQL sta
8f10: 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54  tements..**.** T
8f20: 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72  he Lookaside str
8f30: 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e  ucture holds con
8f40: 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72  figuration infor
8f50: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
8f60: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** lookaside ma
8f70: 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20  lloc subsystem. 
8f80: 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20   Each available 
8f90: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
8fa0: 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b  n in.** the look
8fb0: 61 73 69 64 65 20 73 75 62 73 79 73 74 65 6d 20  aside subsystem 
8fc0: 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c  is stored on a l
8fd0: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f  inked list of Lo
8fe0: 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f  okasideSlot.** o
8ff0: 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f  bjects..**.** Lo
9000: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
9010: 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c  ons are only all
9020: 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73  owed for objects
9030: 20 74 68 61 74 20 61 72 65 20 61 73 73 6f 63 69   that are associ
9040: 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70  ated.** with a p
9050: 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61  articular databa
9060: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
9070: 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e  Hence, schema in
9080: 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74  formation cannot
9090: 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e  .** be stored in
90a0: 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75   lookaside becau
90b0: 73 65 20 69 6e 20 73 68 61 72 65 64 20 63 61 63  se in shared cac
90c0: 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65  he mode the sche
90d0: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  ma information.*
90e0: 2a 20 69 73 20 73 68 61 72 65 64 20 62 79 20 6d  * is shared by m
90f0: 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65  ultiple database
9100: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54   connections.  T
9110: 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20  herefore, while 
9120: 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d  parsing.** schem
9130: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74  a information, t
9140: 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e  he Lookaside.bEn
9150: 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c  abled flag is cl
9160: 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a  eared so that.**
9170: 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   lookaside alloc
9180: 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75  ations are not u
9190: 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74  sed to construct
91a0: 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65   the schema obje
91b0: 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c  cts..*/.struct L
91c0: 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 31 36  ookaside {.  u16
91d0: 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20   sz;            
91e0: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
91f0: 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62  each buffer in b
9200: 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e  ytes */.  u8 bEn
9210: 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  abled;          
9220: 20 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64 69    /* False to di
9230: 73 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73  sable new lookas
9240: 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ide allocations 
9250: 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65  */.  u8 bMalloce
9260: 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
9270: 54 72 75 65 20 69 66 20 70 53 74 61 72 74 20 6f  True if pStart o
9280: 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c  btained from sql
9290: 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f  ite3_malloc() */
92a0: 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20  .  int nOut;    
92b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
92c0: 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72 73 20  mber of buffers 
92d0: 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65  currently checke
92e0: 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d  d out */.  int m
92f0: 78 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  xOut;           
9300: 20 20 20 2f 2a 20 48 69 67 68 77 61 74 65 72 20     /* Highwater 
9310: 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f  mark for nOut */
9320: 0a 20 20 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d  .  int anStat[3]
9330: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a  ;          /* 0:
9340: 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65 20   hits.  1: size 
9350: 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c  misses.  2: full
9360: 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f   misses */.  Loo
9370: 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65  kasideSlot *pFre
9380: 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  e;   /* List of 
9390: 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72  available buffer
93a0: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74  s */.  void *pSt
93b0: 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  art;           /
93c0: 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f 66 20  * First byte of 
93d0: 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79  available memory
93e0: 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64   space */.  void
93f0: 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
9400: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
9410: 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76  e past end of av
9420: 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f  ailable space */
9430: 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61  .};.struct Looka
9440: 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f  sideSlot {.  Loo
9450: 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78  kasideSlot *pNex
9460: 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75  t;    /* Next bu
9470: 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74  ffer in the list
9480: 20 6f 66 20 66 72 65 65 20 62 75 66 66 65 72 73   of free buffers
9490: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
94a0: 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66  hash table for f
94b0: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
94c0: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20  ons..**.** Hash 
94d0: 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74 72  each FuncDef str
94e0: 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20  ucture into one 
94f0: 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48 61  of the FuncDefHa
9500: 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a  sh.a[] slots..**
9510: 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20   Collisions are 
9520: 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e 70  on the FuncDef.p
9530: 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73  Hash chain..*/.s
9540: 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73  truct FuncDefHas
9550: 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61  h {.  FuncDef *a
9560: 5b 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48  [23];       /* H
9570: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
9580: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23  nctions */.};..#
9590: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
95a0: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
95b0: 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69  ./*.** Informati
95c0: 6f 6e 20 68 65 6c 64 20 69 6e 20 74 68 65 20 22  on held in the "
95d0: 73 71 6c 69 74 65 33 22 20 64 61 74 61 62 61 73  sqlite3" databas
95e0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a  e connection obj
95f0: 65 63 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20  ect and used.** 
9600: 74 6f 20 6d 61 6e 61 67 65 20 75 73 65 72 20 61  to manage user a
9610: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a  uthentication..*
9620: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
9630: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
9640: 68 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  h sqlite3_userau
9650: 74 68 3b 0a 73 74 72 75 63 74 20 73 71 6c 69 74  th;.struct sqlit
9660: 65 33 5f 75 73 65 72 61 75 74 68 20 7b 0a 20 20  e3_userauth {.  
9670: 75 38 20 61 75 74 68 4c 65 76 65 6c 3b 20 20 20  u8 authLevel;   
9680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9690: 20 43 75 72 72 65 6e 74 20 61 75 74 68 65 6e 74   Current authent
96a0: 69 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f  ication level */
96b0: 0a 20 20 69 6e 74 20 6e 41 75 74 68 50 57 3b 20  .  int nAuthPW; 
96c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
96d0: 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
96e0: 7a 41 75 74 68 50 57 20 69 6e 20 62 79 74 65 73  zAuthPW in bytes
96f0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74   */.  char *zAut
9700: 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20  hPW;            
9710: 20 20 20 20 2f 2a 20 50 61 73 73 77 6f 72 64 20      /* Password 
9720: 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69  used to authenti
9730: 63 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  cate */.  char *
9740: 7a 41 75 74 68 55 73 65 72 3b 20 20 20 20 20 20  zAuthUser;      
9750: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20          /* User 
9760: 6e 61 6d 65 20 75 73 65 64 20 74 6f 20 61 75 74  name used to aut
9770: 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a  henticate */.};.
9780: 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  ./* Allowed valu
9790: 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 75  es for sqlite3_u
97a0: 73 65 72 61 75 74 68 2e 61 75 74 68 4c 65 76 65  serauth.authLeve
97b0: 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  l */.#define UAU
97c0: 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30  TH_Unknown     0
97d0: 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69       /* Authenti
97e0: 63 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63  cation not yet c
97f0: 68 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e  hecked */.#defin
9800: 65 20 55 41 55 54 48 5f 46 61 69 6c 20 20 20 20  e UAUTH_Fail    
9810: 20 20 20 20 31 20 20 20 20 20 2f 2a 20 55 73 65      1     /* Use
9820: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
9830: 20 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69   failed */.#defi
9840: 6e 65 20 55 41 55 54 48 5f 55 73 65 72 20 20 20  ne UAUTH_User   
9850: 20 20 20 20 20 32 20 20 20 20 20 2f 2a 20 41 75       2     /* Au
9860: 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61  thenticated as a
9870: 20 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a   normal user */.
9880: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 41 64  #define UAUTH_Ad
9890: 6d 69 6e 20 20 20 20 20 20 20 33 20 20 20 20 20  min       3     
98a0: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64  /* Authenticated
98b0: 20 61 73 20 61 6e 20 61 64 6d 69 6e 69 73 74 72   as an administr
98c0: 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63  ator */../* Func
98d0: 74 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20  tions used only 
98e0: 62 79 20 75 73 65 72 20 61 75 74 68 6f 72 69 7a  by user authoriz
98f0: 61 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69  ation logic */.i
9900: 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75  nt sqlite3UserAu
9910: 74 68 54 61 62 6c 65 28 63 6f 6e 73 74 20 63 68  thTable(const ch
9920: 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
9930: 33 55 73 65 72 41 75 74 68 43 68 65 63 6b 4c 6f  3UserAuthCheckLo
9940: 67 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  gin(sqlite3*,con
9950: 73 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76  st char*,u8*);.v
9960: 6f 69 64 20 73 71 6c 69 74 65 33 55 73 65 72 41  oid sqlite3UserA
9970: 75 74 68 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  uthInit(sqlite3*
9980: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
9990: 72 79 70 74 46 75 6e 63 28 73 71 6c 69 74 65 33  ryptFunc(sqlite3
99a0: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
99b0: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
99c0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
99d0: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
99e0: 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ATION */../*.** 
99f0: 74 79 70 65 64 65 66 20 66 6f 72 20 74 68 65 20  typedef for the 
9a00: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61  authorization ca
9a10: 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e  llback function.
9a20: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
9a30: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
9a40: 41 54 49 4f 4e 0a 20 20 74 79 70 65 64 65 66 20  ATION.  typedef 
9a50: 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61  int (*sqlite3_xa
9a60: 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  uth)(void*,int,c
9a70: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
9a80: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
9a90: 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  r*,.            
9aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ab0: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20     const char*, 
9ac0: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
9ad0: 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 69 6e  lse.  typedef in
9ae0: 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74  t (*sqlite3_xaut
9af0: 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  h)(void*,int,con
9b00: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
9b10: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
9b20: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
9b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b40: 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23   const char*);.#
9b50: 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  endif.../*.** Ea
9b60: 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
9b70: 65 63 74 69 6f 6e 20 69 73 20 61 6e 20 69 6e 73  ection is an ins
9b80: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
9b90: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
9ba0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69  ..*/.struct sqli
9bb0: 74 65 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  te3 {.  sqlite3_
9bc0: 76 66 73 20 2a 70 56 66 73 3b 20 20 20 20 20 20  vfs *pVfs;      
9bd0: 20 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e 74 65        /* OS Inte
9be0: 72 66 61 63 65 20 2a 2f 0a 20 20 73 74 72 75 63  rface */.  struc
9bf0: 74 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20  t Vdbe *pVdbe;  
9c00: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74           /* List
9c10: 20 6f 66 20 61 63 74 69 76 65 20 76 69 72 74 75   of active virtu
9c20: 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 20  al machines */. 
9c30: 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43   CollSeq *pDfltC
9c40: 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  oll;           /
9c50: 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f  * The default co
9c60: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
9c70: 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20 20 73   (BINARY) */.  s
9c80: 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75  qlite3_mutex *mu
9c90: 74 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  tex;         /* 
9ca0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78  Connection mutex
9cb0: 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b 20 20   */.  Db *aDb;  
9cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9cd0: 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65      /* All backe
9ce0: 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62  nds */.  int nDb
9cf0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9d00: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
9d10: 20 6f 66 20 62 61 63 6b 65 6e 64 73 20 63 75 72   of backends cur
9d20: 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f  rently in use */
9d30: 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 20 20 20  .  int flags;   
9d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d50: 20 2f 2a 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75   /* Miscellaneou
9d60: 73 20 66 6c 61 67 73 2e 20 53 65 65 20 62 65 6c  s flags. See bel
9d70: 6f 77 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74  ow */.  i64 last
9d80: 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20 20  Rowid;          
9d90: 20 20 20 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f        /* ROWID o
9da0: 66 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69 6e  f most recent in
9db0: 73 65 72 74 20 28 73 65 65 20 61 62 6f 76 65 29  sert (see above)
9dc0: 20 2a 2f 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70   */.  i64 szMmap
9dd0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9de0: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d      /* Default m
9df0: 6d 61 70 5f 73 69 7a 65 20 73 65 74 74 69 6e 67  map_size setting
9e00: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
9e10: 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20  nt openFlags;   
9e20: 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61 73      /* Flags pas
9e30: 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f 76  sed to sqlite3_v
9e40: 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20  fs.xOpen() */.  
9e50: 69 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20 20  int errCode;    
9e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9e70: 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72   Most recent err
9e80: 6f 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45 5f  or code (SQLITE_
9e90: 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d  *) */.  int errM
9ea0: 61 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ask;            
9eb0: 20 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75 6c        /* & resul
9ec0: 74 20 63 6f 64 65 73 20 77 69 74 68 20 74 68 69  t codes with thi
9ed0: 73 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  s before returni
9ee0: 6e 67 20 2a 2f 0a 20 20 75 31 36 20 64 62 4f 70  ng */.  u16 dbOp
9ef0: 74 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  tFlags;         
9f00: 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 74        /* Flags t
9f10: 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61 62 6c 65  o enable/disable
9f20: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a   optimizations *
9f30: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
9f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9f50: 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
9f60: 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43  ng */.  u8 autoC
9f70: 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20  ommit;          
9f80: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75 74        /* The aut
9f90: 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a  o-commit flag. *
9fa0: 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f 72  /.  u8 temp_stor
9fb0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
9fc0: 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20    /* 1: file 2: 
9fd0: 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75 6c  memory 0: defaul
9fe0: 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63  t */.  u8 malloc
9ff0: 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20 20  Failed;         
a000: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
a010: 77 65 20 68 61 76 65 20 73 65 65 6e 20 61 20 6d  we have seen a m
a020: 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f  alloc failure */
a030: 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f  .  u8 dfltLockMo
a040: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
a050: 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b   /* Default lock
a060: 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74  ing-mode for att
a070: 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20 20 73  ached dbs */.  s
a080: 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78 74 41  igned char nextA
a090: 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a 20  utovac;      /* 
a0a0: 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e 67 20  Autovac setting 
a0b0: 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20  after VACUUM if 
a0c0: 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75 70 70  >=0 */.  u8 supp
a0d0: 72 65 73 73 45 72 72 3b 20 20 20 20 20 20 20 20  ressErr;        
a0e0: 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74         /* Do not
a0f0: 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d 65 73   issue error mes
a100: 73 61 67 65 73 20 69 66 20 74 72 75 65 20 2a 2f  sages if true */
a110: 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66  .  u8 vtabOnConf
a120: 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  lict;           
a130: 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
a140: 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61 62 5f  urn for s3_vtab_
a150: 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f  on_conflict() */
a160: 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61 63 74  .  u8 isTransact
a170: 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  ionSavepoint;   
a180: 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20   /* True if the 
a190: 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f  outermost savepo
a1a0: 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f 0a 20  int is a TS */. 
a1b0: 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69 7a   int nextPagesiz
a1c0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
a1d0: 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74 65 72  * Pagesize after
a1e0: 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f   VACUUM if >0 */
a1f0: 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20 20  .  u32 magic;   
a200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a210: 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65 72   /* Magic number
a220: 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62 72   for detect libr
a230: 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20  ary misuse */.  
a240: 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20 20  int nChange;    
a250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a260: 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   Value returned 
a270: 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  by sqlite3_chang
a280: 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54  es() */.  int nT
a290: 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20 20  otalChange;     
a2a0: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
a2b0: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
a2c0: 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67  ite3_total_chang
a2d0: 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c  es() */.  int aL
a2e0: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49  imit[SQLITE_N_LI
a2f0: 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74  MIT];   /* Limit
a300: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 53  s */.  int nMaxS
a310: 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20 20 20 20  orterMmap;      
a320: 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
a330: 73 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e 73 20  size of regions 
a340: 6d 61 70 70 65 64 20 62 79 20 73 6f 72 74 65 72  mapped by sorter
a350: 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 71 6c   */.  struct sql
a360: 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20 20  ite3InitInfo {  
a370: 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69      /* Informati
a380: 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67 20 69  on used during i
a390: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f  nitialization */
a3a0: 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75 6d  .    int newTnum
a3b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a3c0: 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66 20   /* Rootpage of 
a3d0: 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69 74  table being init
a3e0: 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75  ialized */.    u
a3f0: 38 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  8 iDb;          
a400: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
a410: 69 63 68 20 64 62 20 66 69 6c 65 20 69 73 20 62  ich db file is b
a420: 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
a430: 20 2a 2f 0a 20 20 20 20 75 38 20 62 75 73 79 3b   */.    u8 busy;
a440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a450: 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66 20 63      /* TRUE if c
a460: 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c  urrently initial
a470: 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75 38 20  izing */.    u8 
a480: 6f 72 70 68 61 6e 54 72 69 67 67 65 72 3b 20 20  orphanTrigger;  
a490: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74           /* Last
a4a0: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6f 72   statement is or
a4b0: 70 68 61 6e 65 64 20 54 45 4d 50 20 74 72 69 67  phaned TEMP trig
a4c0: 67 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 69 6d  ger */.    u8 im
a4d0: 70 6f 73 74 65 72 54 61 62 6c 65 3b 20 20 20 20  posterTable;    
a4e0: 20 20 20 20 20 20 20 2f 2a 20 42 75 69 6c 64 69         /* Buildi
a4f0: 6e 67 20 61 6e 20 69 6d 70 6f 73 74 65 72 20 74  ng an imposter t
a500: 61 62 6c 65 20 2a 2f 0a 20 20 7d 20 69 6e 69 74  able */.  } init
a510: 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63 74  ;.  int nVdbeAct
a520: 69 76 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ive;            
a530: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56    /* Number of V
a540: 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20 72  DBEs currently r
a550: 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  unning */.  int 
a560: 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20 20 20  nVdbeRead;      
a570: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
a580: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44  ber of active VD
a590: 42 45 73 20 74 68 61 74 20 72 65 61 64 20 6f 72  BEs that read or
a5a0: 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20   write */.  int 
a5b0: 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20 20 20  nVdbeWrite;     
a5c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
a5d0: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44  ber of active VD
a5e0: 42 45 73 20 74 68 61 74 20 72 65 61 64 20 61 6e  BEs that read an
a5f0: 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74  d write */.  int
a600: 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20 20   nVdbeExec;     
a610: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
a620: 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63  mber of nested c
a630: 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63  alls to VdbeExec
a640: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44 65  () */.  int nVDe
a650: 73 74 72 6f 79 3b 20 20 20 20 20 20 20 20 20 20  stroy;          
a660: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
a670: 6f 66 20 61 63 74 69 76 65 20 4f 50 5f 56 44 65  of active OP_VDe
a680: 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73  stroy operations
a690: 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e   */.  int nExten
a6a0: 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  sion;           
a6b0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
a6c0: 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69 6f   loaded extensio
a6d0: 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61  ns */.  void **a
a6e0: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
a6f0: 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f        /* Array o
a700: 66 20 73 68 61 72 65 64 20 6c 69 62 72 61 72 79  f shared library
a710: 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 76 6f   handles */.  vo
a720: 69 64 20 28 2a 78 54 72 61 63 65 29 28 76 6f 69  id (*xTrace)(voi
a730: 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  d*,const char*);
a740: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 61 63 65          /* Trace
a750: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
a760: 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20  oid *pTraceArg; 
a770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a780: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
a790: 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63  ment to the trac
a7a0: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
a7b0: 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29  void (*xProfile)
a7c0: 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61  (void*,const cha
a7d0: 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f  r*,u64);  /* Pro
a7e0: 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  filing function 
a7f0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66  */.  void *pProf
a800: 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20  ileArg;         
a810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a820: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72  * Argument to pr
a830: 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a  ofile function *
a840: 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69  /.  void *pCommi
a850: 74 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  tArg;           
a860: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
a870: 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c  t to xCommitCall
a880: 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20 69  back() */   .  i
a890: 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c  nt (*xCommitCall
a8a0: 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20  back)(void*);   
a8b0: 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65   /* Invoked at e
a8c0: 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a  very commit. */.
a8d0: 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63    void *pRollbac
a8e0: 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  kArg;           
a8f0: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
a900: 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c  to xRollbackCall
a910: 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20 76  back() */   .  v
a920: 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43  oid (*xRollbackC
a930: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b  allback)(void*);
a940: 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65   /* Invoked at e
a950: 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a  very commit. */.
a960: 20 20 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41    void *pUpdateA
a970: 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70  rg;.  void (*xUp
a980: 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f  dateCallback)(vo
a990: 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63  id*,int, const c
a9a0: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
a9b0: 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a  ,sqlite_int64);.
a9c0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
a9d0: 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a  MIT_WAL.  int (*
a9e0: 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f  xWalCallback)(vo
a9f0: 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c  id *, sqlite3 *,
aa00: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
aa10: 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61  nt);.  void *pWa
aa20: 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76  lArg;.#endif.  v
aa30: 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64  oid(*xCollNeeded
aa40: 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
aa50: 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f  ,int eTextRep,co
aa60: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
aa70: 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31  id(*xCollNeeded1
aa80: 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  6)(void*,sqlite3
aa90: 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63  *,int eTextRep,c
aaa0: 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76  onst void*);.  v
aab0: 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64  oid *pCollNeeded
aac0: 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  Arg;.  sqlite3_v
aad0: 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20  alue *pErr;     
aae0: 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63       /* Most rec
aaf0: 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67  ent error messag
ab00: 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  e */.  union {. 
ab10: 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20     volatile int 
ab20: 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f  isInterrupted; /
ab30: 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69 74 65  * True if sqlite
ab40: 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73 20  3_interrupt has 
ab50: 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20  been called */. 
ab60: 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65     double notUse
ab70: 64 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  d1;            /
ab80: 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20  * Spacer */.  } 
ab90: 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20  u1;.  Lookaside 
aba0: 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20  lookaside;      
abb0: 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65      /* Lookaside
abc0: 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72   malloc configur
abd0: 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66  ation */.#ifndef
abe0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
abf0: 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c  HORIZATION.  sql
ac00: 69 74 65 33 5f 78 61 75 74 68 20 78 41 75 74 68  ite3_xauth xAuth
ac10: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63  ;          /* Ac
ac20: 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69  cess authorizati
ac30: 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  on function */. 
ac40: 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b   void *pAuthArg;
ac50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ac60: 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74  * 1st argument t
ac70: 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74  o the access aut
ac80: 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65  h function */.#e
ac90: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
aca0: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
acb0: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74  S_CALLBACK.  int
acc0: 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f   (*xProgress)(vo
acd0: 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68  id *);     /* Th
ace0: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
acf0: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
ad00: 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20  ProgressArg;    
ad10: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
ad20: 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65  nt to the progre
ad30: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ss callback */. 
ad40: 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72   unsigned nProgr
ad50: 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f  essOps;        /
ad60: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f  * Number of opco
ad70: 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73  des for progress
ad80: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e   callback */.#en
ad90: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
ada0: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
adb0: 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61  ABLE.  int nVTra
adc0: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
add0: 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65       /* Allocate
ade0: 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e  d size of aVTran
adf0: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64  s */.  Hash aMod
ae00: 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ule;            
ae10: 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65       /* populate
ae20: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65  d by sqlite3_cre
ae30: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
ae40: 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62    VtabCtx *pVtab
ae50: 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ctx;            
ae60: 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61  /* Context for a
ae70: 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65  ctive vtab conne
ae80: 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56  ct/create */.  V
ae90: 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b  Table **aVTrans;
aea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
aeb0: 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77  Virtual tables w
aec0: 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63  ith open transac
aed0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c  tions */.  VTabl
aee0: 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20  e *pDisconnect; 
aef0: 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74     /* Disconnect
af00: 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73   these in next s
af10: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
af20: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e   */.#endif.  Fun
af30: 63 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b 20  cDefHash aFunc; 
af40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61             /* Ha
af50: 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e  sh table of conn
af60: 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  ection functions
af70: 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c   */.  Hash aColl
af80: 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Seq;            
af90: 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61      /* All colla
afa0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a  ting sequences *
afb0: 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20  /.  BusyHandler 
afc0: 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20  busyHandler;    
afd0: 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61    /* Busy callba
afe0: 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74  ck */.  Db aDbSt
aff0: 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20  atic[2];        
b000: 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20        /* Static 
b010: 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20  space for the 2 
b020: 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73  default backends
b030: 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
b040: 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20  *pSavepoint;    
b050: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
b060: 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73  ctive savepoints
b070: 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69   */.  int busyTi
b080: 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20  meout;          
b090: 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64      /* Busy hand
b0a0: 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20  ler timeout, in 
b0b0: 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  msec */.  int nS
b0c0: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
b0d0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
b0e0: 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63  r of non-transac
b0f0: 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  tion savepoints 
b100: 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d  */.  int nStatem
b110: 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ent;            
b120: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
b130: 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74  nested statement
b140: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a  -transactions  *
b150: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
b160: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
b170: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
b180: 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68  d constraints th
b190: 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  is transaction. 
b1a0: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
b1b0: 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
b1c0: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
b1d0: 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e  ed immediate con
b1e0: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  straints */.  in
b1f0: 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b  t *pnBytesFreed;
b200: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
b210: 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72  f not NULL, incr
b220: 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62  ement this in Db
b230: 46 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65 66  Free() */.#ifdef
b240: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
b250: 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f  NLOCK_NOTIFY.  /
b260: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
b270: 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c  variables are al
b280: 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 74  l protected by t
b290: 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52  he STATIC_MASTER
b2a0: 20 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f   .  ** mutex, no
b2b0: 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74  t by sqlite3.mut
b2c0: 65 78 2e 20 54 68 65 79 20 61 72 65 20 75 73 65  ex. They are use
b2d0: 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74  d by code in not
b2e0: 69 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20 20 2a  ify.c. .  **.  *
b2f0: 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b  * When X.pUnlock
b300: 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74  Connection==Y, t
b310: 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58  hat means that X
b320: 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20   is waiting for 
b330: 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b  Y to.  ** unlock
b340: 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20   so that it can 
b350: 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20  proceed..  **.  
b360: 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b  ** When X.pBlock
b370: 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59  ingConnection==Y
b380: 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
b390: 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74  t something that
b3a0: 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72   X tried.  ** tr
b3b0: 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74  ied to do recent
b3c0: 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68 20 61  ly failed with a
b3d0: 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  n SQLITE_LOCKED 
b3e0: 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63  error due to loc
b3f0: 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20  ks.  ** held by 
b400: 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  Y..  */.  sqlite
b410: 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e  3 *pBlockingConn
b420: 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65  ection; /* Conne
b430: 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65  ction that cause
b440: 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  d SQLITE_LOCKED 
b450: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55  */.  sqlite3 *pU
b460: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b  nlockConnection;
b470: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
b480: 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63  nnection to watc
b490: 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a  h for unlock */.
b4a0: 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41    void *pUnlockA
b4b0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
b4c0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
b4d0: 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f  ent to xUnlockNo
b4e0: 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tify */.  void (
b4f0: 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28  *xUnlockNotify)(
b500: 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20  void **, int);  
b510: 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79  /* Unlock notify
b520: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73   callback */.  s
b530: 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f  qlite3 *pNextBlo
b540: 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  cked;        /* 
b550: 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20  Next in list of 
b560: 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e  all blocked conn
b570: 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69  ections */.#endi
b580: 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
b590: 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54  USER_AUTHENTICAT
b5a0: 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 75 73  ION.  sqlite3_us
b5b0: 65 72 61 75 74 68 20 61 75 74 68 3b 20 20 20 20  erauth auth;    
b5c0: 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68      /* User auth
b5d0: 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72  entication infor
b5e0: 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66  mation */.#endif
b5f0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63  .};../*.** A mac
b600: 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74  ro to discover t
b610: 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61  he encoding of a
b620: 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64   database..*/.#d
b630: 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43  efine SCHEMA_ENC
b640: 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b  (db) ((db)->aDb[
b650: 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29  0].pSchema->enc)
b660: 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29  .#define ENC(db)
b670: 20 20 20 20 20 20 20 20 28 28 64 62 29 2d 3e 65          ((db)->e
b680: 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  nc)../*.** Possi
b690: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74  ble values for t
b6a0: 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73  he sqlite3.flags
b6b0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
b6c0: 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 20 20  ITE_VdbeTrace   
b6d0: 20 20 20 30 78 30 30 30 30 30 30 30 31 20 20 2f     0x00000001  /
b6e0: 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63 65 20  * True to trace 
b6f0: 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a  VDBE execution *
b700: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b710: 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20  _InternChanges  
b720: 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20 55  0x00000002  /* U
b730: 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20  ncommitted Hash 
b740: 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f  table changes */
b750: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b760: 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30  FullFSync      0
b770: 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20 55 73  x00000004  /* Us
b780: 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20  e full fsync on 
b790: 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23  the backend */.#
b7a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b  define SQLITE_Ck
b7b0: 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30  ptFullFSync  0x0
b7c0: 30 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20  0000008  /* Use 
b7d0: 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63  full fsync for c
b7e0: 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65  heckpoint */.#de
b7f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68  fine SQLITE_Cach
b800: 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30  eSpill     0x000
b810: 30 30 30 31 30 20 20 2f 2a 20 4f 4b 20 74 6f 20  00010  /* OK to 
b820: 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68  spill pager cach
b830: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
b840: 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73  ITE_FullColNames
b850: 20 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f     0x00000020  /
b860: 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75  * Show full colu
b870: 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45  mn names on SELE
b880: 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  CT */.#define SQ
b890: 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d  LITE_ShortColNam
b8a0: 65 73 20 20 30 78 30 30 30 30 30 30 34 30 20 20  es  0x00000040  
b8b0: 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f  /* Show short co
b8c0: 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23  lumns names */.#
b8d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
b8e0: 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78 30  untRows      0x0
b8f0: 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e  0000080  /* Coun
b900: 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62  t rows changed b
b910: 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20  y INSERT, */.   
b920: 20 20 20 20 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 2f 2a 20 20 20 44 45 4c 45         /*   DELE
b950: 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e  TE, or UPDATE an
b960: 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20  d return */.    
b970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b990: 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63        /*   the c
b9a0: 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c  ount using a cal
b9b0: 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e  lback. */.#defin
b9c0: 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c  e SQLITE_NullCal
b9d0: 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30 30 31  lback   0x000001
b9e0: 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  00  /* Invoke th
b9f0: 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20  e callback once 
ba00: 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20  if the */.      
ba10: 20 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 2f 2a 20 20 20 72 65 73 75 6c 74 20      /*   result 
ba40: 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a  set is empty */.
ba50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
ba60: 71 6c 54 72 61 63 65 20 20 20 20 20 20 20 30 78  qlTrace       0x
ba70: 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44 65 62  00000200  /* Deb
ba80: 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20  ug print SQL as 
ba90: 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23  it executes */.#
baa0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
bab0: 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30 78 30  beListing    0x0
bac0: 30 30 30 30 34 30 30 20 20 2f 2a 20 44 65 62 75  0000400  /* Debu
bad0: 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44  g listings of VD
bae0: 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23  BE programs */.#
baf0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72  define SQLITE_Wr
bb00: 69 74 65 53 63 68 65 6d 61 20 20 20 20 30 78 30  iteSchema    0x0
bb10: 30 30 30 30 38 30 30 20 20 2f 2a 20 4f 4b 20 74  0000800  /* OK t
bb20: 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f  o update SQLITE_
bb30: 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e  MASTER */.#defin
bb40: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64  e SQLITE_VdbeAdd
bb50: 6f 70 54 72 61 63 65 20 30 78 30 30 30 30 31 30  opTrace 0x000010
bb60: 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c  00  /* Trace sql
bb70: 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 29 20  ite3VdbeAddOp() 
bb80: 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65  calls */.#define
bb90: 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68   SQLITE_IgnoreCh
bba0: 65 63 6b 73 20 20 20 30 78 30 30 30 30 32 30 30  ecks   0x0000200
bbb0: 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66  0  /* Do not enf
bbc0: 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74  orce check const
bbd0: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
bbe0: 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63  e SQLITE_ReadUnc
bbf0: 6f 6d 6d 69 74 74 65 64 20 30 78 30 30 30 34 30  ommitted 0x00040
bc00: 30 30 20 20 2f 2a 20 46 6f 72 20 73 68 61 72 65  00  /* For share
bc10: 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a  d-cache mode */.
bc20: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
bc30: 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78  egacyFileFmt  0x
bc40: 30 30 30 30 38 30 30 30 20 20 2f 2a 20 43 72 65  00008000  /* Cre
bc50: 61 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65  ate new database
bc60: 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f  s in format 1 */
bc70: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bc80: 52 65 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30  RecoveryMode   0
bc90: 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20 49 67  x00010000  /* Ig
bca0: 6e 6f 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f  nore schema erro
bcb0: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
bcc0: 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65  LITE_ReverseOrde
bcd0: 72 20 20 20 30 78 30 30 30 32 30 30 30 30 20 20  r   0x00020000  
bce0: 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64  /* Reverse unord
bcf0: 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a  ered SELECTs */.
bd00: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
bd10: 65 63 54 72 69 67 67 65 72 73 20 20 20 20 30 78  ecTriggers    0x
bd20: 30 30 30 34 30 30 30 30 20 20 2f 2a 20 45 6e 61  00040000  /* Ena
bd30: 62 6c 65 20 72 65 63 75 72 73 69 76 65 20 74 72  ble recursive tr
bd40: 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e  iggers */.#defin
bd50: 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e  e SQLITE_Foreign
bd60: 4b 65 79 73 20 20 20 20 30 78 30 30 30 38 30 30  Keys    0x000800
bd70: 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66  00  /* Enforce f
bd80: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
bd90: 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69  raints  */.#defi
bda0: 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e  ne SQLITE_AutoIn
bdb0: 64 65 78 20 20 20 20 20 20 30 78 30 30 31 30 30  dex      0x00100
bdc0: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61  000  /* Enable a
bdd0: 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73  utomatic indexes
bde0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
bdf0: 54 45 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e  TE_PreferBuiltin
be00: 20 20 30 78 30 30 32 30 30 30 30 30 20 20 2f 2a    0x00200000  /*
be10: 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62   Preference to b
be20: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f  uilt-in funcs */
be30: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
be40: 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30  LoadExtension  0
be50: 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e  x00400000  /* En
be60: 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  able load_extens
be70: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
be80: 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67  QLITE_EnableTrig
be90: 67 65 72 20 20 30 78 30 30 38 30 30 30 30 30 20  ger  0x00800000 
bea0: 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
beb0: 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  le triggers */.#
bec0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65  define SQLITE_De
bed0: 66 65 72 46 4b 73 20 20 20 20 20 20 20 30 78 30  ferFKs       0x0
bee0: 31 30 30 30 30 30 30 20 20 2f 2a 20 44 65 66 65  1000000  /* Defe
bef0: 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61  r all FK constra
bf00: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
bf10: 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79  SQLITE_QueryOnly
bf20: 20 20 20 20 20 20 30 78 30 32 30 30 30 30 30 30        0x02000000
bf30: 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74    /* Disable dat
bf40: 61 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f  abase changes */
bf50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bf60: 56 64 62 65 45 51 50 20 20 20 20 20 20 20 20 30  VdbeEQP        0
bf70: 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20 44 65  x04000000  /* De
bf80: 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55 45 52  bug EXPLAIN QUER
bf90: 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e  Y PLAN */.#defin
bfa0: 65 20 53 51 4c 49 54 45 5f 56 61 63 75 75 6d 20  e SQLITE_Vacuum 
bfb0: 20 20 20 20 20 20 20 20 30 78 30 38 30 30 30 30          0x080000
bfc0: 30 30 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79  00  /* Currently
bfd0: 20 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a   in a VACUUM */.
bfe0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
bff0: 65 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20 30 78  ellSizeCk     0x
c000: 31 30 30 30 30 30 30 30 20 20 2f 2a 20 43 68 65  10000000  /* Che
c010: 63 6b 20 62 74 72 65 65 20 63 65 6c 6c 20 73 69  ck btree cell si
c020: 7a 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 0a  zes on load */..
c030: 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74  ./*.** Bits of t
c040: 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70 74  he sqlite3.dbOpt
c050: 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61 74  Flags field that
c060: 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68 65   are used by the
c070: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74  .** sqlite3_test
c080: 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f  _control(SQLITE_
c090: 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a  TESTCTRL_OPTIMIZ
c0a0: 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65  ATIONS,...) inte
c0b0: 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65  rface to.** sele
c0c0: 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65 20  ctively disable 
c0d0: 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61  various optimiza
c0e0: 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tions..*/.#defin
c0f0: 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46 6c  e SQLITE_QueryFl
c100: 61 74 74 65 6e 65 72 20 30 78 30 30 30 31 20 20  attener 0x0001  
c110: 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74 65   /* Query flatte
c120: 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ning */.#define 
c130: 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63  SQLITE_ColumnCac
c140: 68 65 20 20 20 20 30 78 30 30 30 32 20 20 20 2f  he    0x0002   /
c150: 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a  * Column cache *
c160: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c170: 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20 20  _GroupByOrder   
c180: 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f 55  0x0004   /* GROU
c190: 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52 44  PBY cover of ORD
c1a0: 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ERBY */.#define 
c1b0: 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75 74  SQLITE_FactorOut
c1c0: 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20 2f  Const 0x0008   /
c1d0: 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f  * Constant facto
c1e0: 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20 20 20  ring */./*      
c1f0: 20 20 20 20 20 20 20 20 20 20 6e 6f 74 20 75 73            not us
c200: 65 64 20 20 20 20 30 78 30 30 31 30 20 20 20 2f  ed    0x0010   /
c210: 2f 20 57 61 73 3a 20 53 51 4c 49 54 45 5f 49 64  / Was: SQLITE_Id
c220: 78 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a 23 64  xRealAsInt */.#d
c230: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73  efine SQLITE_Dis
c240: 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30  tinctOpt    0x00
c250: 32 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54  20   /* DISTINCT
c260: 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a   using indexes *
c270: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c280: 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20  _CoverIdxScan   
c290: 30 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76 65  0x0040   /* Cove
c2a0: 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73  ring index scans
c2b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c2c0: 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69  TE_OrderByIdxJoi
c2d0: 6e 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f 52  n 0x0080   /* OR
c2e0: 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20  DER BY of joins 
c2f0: 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  via index */.#de
c300: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62 71  fine SQLITE_Subq
c310: 43 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31 30  Coroutine  0x010
c320: 30 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65 20  0   /* Evaluate 
c330: 73 75 62 71 75 65 72 69 65 73 20 61 73 20 63 6f  subqueries as co
c340: 72 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66  routines */.#def
c350: 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73  ine SQLITE_Trans
c360: 69 74 69 76 65 20 20 20 20 20 30 78 30 32 30 30  itive     0x0200
c370: 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65     /* Transitive
c380: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
c390: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f  #define SQLITE_O
c3a0: 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78  mitNoopJoin   0x
c3b0: 30 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75  0400   /* Omit u
c3c0: 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e 20  nused tables in 
c3d0: 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  joins */.#define
c3e0: 20 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20 20   SQLITE_Stat34  
c3f0: 20 20 20 20 20 20 20 30 78 30 38 30 30 20 20 20         0x0800   
c400: 2f 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72 20  /* Use STAT3 or 
c410: 53 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 23 64  STAT4 data */.#d
c420: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 75 72  efine SQLITE_Cur
c430: 73 6f 72 48 69 6e 74 73 20 20 20 20 30 78 32 30  sorHints    0x20
c440: 30 30 20 20 20 2f 2a 20 41 64 64 20 4f 50 5f 43  00   /* Add OP_C
c450: 75 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f 64 65  ursorHint opcode
c460: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
c470: 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20  ITE_AllOpts     
c480: 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41     0xffff   /* A
c490: 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ll optimizations
c4a0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f   */../*.** Macro
c4b0: 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68  s for testing wh
c4c0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74  ether or not opt
c4d0: 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65  imizations are e
c4e0: 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c  nabled or disabl
c4f0: 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ed..*/.#ifndef S
c500: 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
c510: 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e 65 20  IN_TEST.#define 
c520: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61  OptimizationDisa
c530: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
c540: 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61  (((db)->dbOptFla
c550: 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23  gs&(mask))!=0).#
c560: 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74  define Optimizat
c570: 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d  ionEnabled(db, m
c580: 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64  ask)   (((db)->d
c590: 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29  bOptFlags&(mask)
c5a0: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64 65 66  )==0).#else.#def
c5b0: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
c5c0: 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  Disabled(db, mas
c5d0: 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20 4f 70  k)  0.#define Op
c5e0: 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65  timizationEnable
c5f0: 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 31 0a  d(db, mask)   1.
c600: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
c610: 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74 20  turn true if it 
c620: 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e  OK to factor con
c630: 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
c640: 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69  s into the initi
c650: 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64  alization.** cod
c660: 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  e. The argument 
c670: 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63  is a Parse objec
c680: 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67  t for the code g
c690: 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65  enerator..*/.#de
c6a0: 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72  fine ConstFactor
c6b0: 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f  Ok(P) ((P)->okCo
c6c0: 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a  nstFactor)../*.*
c6d0: 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
c6e0: 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  s for the sqlite
c6f0: 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a  .magic field..**
c700: 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65   The numbers are
c710: 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e   obtained at ran
c720: 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20  dom and have no 
c730: 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c  special meaning,
c740: 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62   other.** than b
c750: 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72  eing distinct fr
c760: 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a  om one another..
c770: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c780: 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20  E_MAGIC_OPEN    
c790: 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20   0xa029a697  /* 
c7a0: 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e  Database is open
c7b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c7c0: 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20  TE_MAGIC_CLOSED 
c7d0: 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a    0x9f3c2d33  /*
c7e0: 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f   Database is clo
c7f0: 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  sed */.#define S
c800: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b  QLITE_MAGIC_SICK
c810: 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30 20       0x4b771290 
c820: 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77   /* Error and aw
c830: 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a  aiting close */.
c840: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
c850: 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30 78  AGIC_BUSY     0x
c860: 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74  f03b7906  /* Dat
c870: 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20  abase currently 
c880: 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  in use */.#defin
c890: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45  e SQLITE_MAGIC_E
c8a0: 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37 39  RROR    0xb53579
c8b0: 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45  30  /* An SQLITE
c8c0: 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63  _MISUSE error oc
c8d0: 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e  curred */.#defin
c8e0: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a  e SQLITE_MAGIC_Z
c8f0: 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66 63  OMBIE   0x64cffc
c900: 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74  7f  /* Close wit
c910: 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  h last statement
c920: 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   close */../*.**
c930: 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69   Each SQL functi
c940: 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  on is defined by
c950: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
c960: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  the following.**
c970: 20 73 74 72 75 63 74 75 72 65 2e 20 20 41 20 70   structure.  A p
c980: 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
c990: 74 72 75 63 74 75 72 65 20 69 73 20 73 74 6f 72  tructure is stor
c9a0: 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ed in the sqlite
c9b0: 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20 74  .aFunc.** hash t
c9c0: 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c 74  able.  When mult
c9d0: 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 68  iple functions h
c9e0: 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  ave the same nam
c9f0: 65 2c 20 74 68 65 20 68 61 73 68 20 74 61 62 6c  e, the hash tabl
ca00: 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20 61  e.** points to a
ca10: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   linked list of 
ca20: 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73  these structures
ca30: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63  ..*/.struct Func
ca40: 44 65 66 20 7b 0a 20 20 69 31 36 20 6e 41 72 67  Def {.  i16 nArg
ca50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
ca60: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
ca70: 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75  nts.  -1 means u
ca80: 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31  nlimited */.  u1
ca90: 36 20 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20  6 funcFlags;    
caa0: 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69     /* Some combi
cab0: 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45  nation of SQLITE
cac0: 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69  _FUNC_* */.  voi
cad0: 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20  d *pUserData;   
cae0: 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70    /* User data p
caf0: 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75  arameter */.  Fu
cb00: 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20  ncDef *pNext;   
cb10: 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74     /* Next funct
cb20: 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61  ion with same na
cb30: 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  me */.  void (*x
cb40: 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f  Func)(sqlite3_co
cb50: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
cb60: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20  e3_value**); /* 
cb70: 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e  Regular function
cb80: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 74   */.  void (*xSt
cb90: 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ep)(sqlite3_cont
cba0: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
cbb0: 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67  _value**); /* Ag
cbc0: 67 72 65 67 61 74 65 20 73 74 65 70 20 2a 2f 0a  gregate step */.
cbd0: 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69    void (*xFinali
cbe0: 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ze)(sqlite3_cont
cbf0: 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20  ext*);          
cc00: 20 20 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61        /* Aggrega
cc10: 74 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a  te finalizer */.
cc20: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
cc30: 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61         /* SQL na
cc40: 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
cc50: 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66  on. */.  FuncDef
cc60: 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a   *pHash;      /*
cc70: 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66   Next with a dif
cc80: 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20  ferent name but 
cc90: 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f  the same hash */
cca0: 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  .  FuncDestructo
ccb0: 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20  r *pDestructor; 
ccc0: 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63    /* Reference c
ccd0: 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f  ounted destructo
cce0: 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b  r function */.};
ccf0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ../*.** This str
cd00: 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61  ucture encapsula
cd10: 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74  tes a user-funct
cd20: 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63  ion destructor c
cd30: 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63  allback (as.** c
cd40: 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67 20  onfigured using 
cd50: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
cd60: 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66 65  v2()) and a refe
cd70: 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57  rence counter. W
cd80: 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75  hen.** create_fu
cd90: 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63  nction_v2() is c
cda0: 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20  alled to create 
cdb0: 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  a function with 
cdc0: 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a  a destructor,.**
cdd0: 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74   a single object
cde0: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
cdf0: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63   allocated. Func
ce00: 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20  Destructor.nRef 
ce10: 69 73 20 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68  is set to .** th
ce20: 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63  e number of Func
ce30: 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61  Def objects crea
ce40: 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f 72  ted (either 1 or
ce50: 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   3, depending on
ce60: 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e   whether.** or n
ce70: 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ot the specified
ce80: 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c   encoding is SQL
ce90: 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75  ITE_ANY). The Fu
cea0: 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f  ncDef.pDestructo
ceb0: 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65  r.** member of e
cec0: 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46  ach of the new F
ced0: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69  uncDef objects i
cee0: 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74  s set to point t
cef0: 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a  o the allocated.
cf00: 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  ** FuncDestructo
cf10: 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66  r..**.** Thereaf
cf20: 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66  ter, when one of
cf30: 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a   the FuncDef obj
cf40: 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c  ects is deleted,
cf50: 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a   the reference.*
cf60: 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20  * count on this 
cf70: 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d  object is decrem
cf80: 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72  ented. When it r
cf90: 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64 65  eaches 0, the de
cfa0: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69  structor.** is i
cfb0: 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46  nvoked and the F
cfc0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73 74  uncDestructor st
cfd0: 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a  ructure freed..*
cfe0: 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 73  /.struct FuncDes
cff0: 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20  tructor {.  int 
d000: 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78  nRef;.  void (*x
d010: 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
d020: 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  ;.  void *pUserD
d030: 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  ata;.};../*.** P
d040: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
d050: 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73  or FuncDef.flags
d060: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
d070: 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59   _LENGTH and _TY
d080: 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d  PEOF.** values m
d090: 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74  ust correspond t
d0a0: 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41  o OPFLAG_LENGTHA
d0b0: 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59  RG and OPFLAG_TY
d0c0: 50 45 4f 46 41 52 47 2e 20 20 41 6e 64 0a 2a 2a  PEOFARG.  And.**
d0d0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
d0e0: 53 54 41 4e 54 20 6d 75 73 74 20 62 65 20 74 68  STANT must be th
d0f0: 65 20 73 61 6d 65 20 61 73 20 53 51 4c 49 54 45  e same as SQLITE
d100: 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43 2e 20  _DETERMINISTIC. 
d110: 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73   There.** are as
d120: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
d130: 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f  s in the code to
d140: 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2f   verify this..*/
d150: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d160: 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78  FUNC_ENCMASK  0x
d170: 30 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55  0003 /* SQLITE_U
d180: 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  TF8, SQLITE_UTF1
d190: 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a  6BE or UTF16LE *
d1a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d1b0: 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30  _FUNC_LIKE     0
d1c0: 78 30 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61  x0004 /* Candida
d1d0: 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20  te for the LIKE 
d1e0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a  optimization */.
d1f0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
d200: 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78 30  UNC_CASE     0x0
d210: 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73  008 /* Case-sens
d220: 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20  itive LIKE-type 
d230: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
d240: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
d250: 45 50 48 45 4d 20 20 20 20 30 78 30 30 31 30 20  EPHEM    0x0010 
d260: 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44  /* Ephemeral.  D
d270: 65 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20  elete with VDBE 
d280: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d290: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
d2a0: 30 78 30 30 32 30 20 2f 2a 20 73 71 6c 69 74 65  0x0020 /* sqlite
d2b0: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
d2c0: 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65  ) might be calle
d2d0: 64 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  d*/.#define SQLI
d2e0: 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20  TE_FUNC_LENGTH  
d2f0: 20 30 78 30 30 34 30 20 2f 2a 20 42 75 69 6c 74   0x0040 /* Built
d300: 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75 6e  -in length() fun
d310: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
d320: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50   SQLITE_FUNC_TYP
d330: 45 4f 46 20 20 20 30 78 30 30 38 30 20 2f 2a 20  EOF   0x0080 /* 
d340: 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28  Built-in typeof(
d350: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
d360: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
d370: 43 5f 43 4f 55 4e 54 20 20 20 20 30 78 30 31 30  C_COUNT    0x010
d380: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f  0 /* Built-in co
d390: 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61 74 65  unt(*) aggregate
d3a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d3b0: 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45  TE_FUNC_COALESCE
d3c0: 20 30 78 30 32 30 30 20 2f 2a 20 42 75 69 6c 74   0x0200 /* Built
d3d0: 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20 6f  -in coalesce() o
d3e0: 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64  r ifnull() */.#d
d3f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
d400: 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 30 34 30  C_UNLIKELY 0x040
d410: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e  0 /* Built-in un
d420: 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74 69 6f  likely() functio
d430: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
d440: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
d450: 54 20 30 78 30 38 30 30 20 2f 2a 20 43 6f 6e 73  T 0x0800 /* Cons
d460: 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76 65  tant inputs give
d470: 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70   a constant outp
d480: 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ut */.#define SQ
d490: 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
d4a0: 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72 75     0x1000 /* Tru
d4b0: 65 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20  e for min() and 
d4c0: 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65 73  max() aggregates
d4d0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d4e0: 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20  TE_FUNC_SLOCHNG 
d4f0: 20 30 78 32 30 30 30 20 2f 2a 20 22 53 6c 6f 77   0x2000 /* "Slow
d500: 20 43 68 61 6e 67 65 22 2e 20 56 61 6c 75 65 20   Change". Value 
d510: 63 6f 6e 73 74 61 6e 74 20 64 75 72 69 6e 67 20  constant during 
d520: 61 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  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 2a 2a 20 73 69 6e 67 6c 65 20        ** single 
d550: 71 75 65 72 79 20 2d 20 6d 69 67 68 74 20 63 68  query - might ch
d560: 61 6e 67 65 20 6f 76 65 72 20 74 69 6d 65 20 2a  ange over time *
d570: 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  /../*.** The fol
d580: 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63  lowing three mac
d590: 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c  ros, FUNCTION(),
d5a0: 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20   LIKEFUNC() and 
d5b0: 41 47 47 52 45 47 41 54 45 28 29 20 61 72 65 0a  AGGREGATE() are.
d5c0: 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61 74  ** used to creat
d5d0: 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65  e the initialize
d5e0: 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44  rs for the FuncD
d5f0: 65 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a  ef structures..*
d600: 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28  *.**   FUNCTION(
d610: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
d620: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
d630: 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
d640: 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75  eate a scalar fu
d650: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
d660: 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  n of a function 
d670: 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 69 6d  zName .**     im
d680: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66  plemented by C f
d690: 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68  unction xFunc th
d6a0: 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
d6b0: 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a  arguments. The.*
d6c0: 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61 73 73  *     value pass
d6d0: 65 64 20 61 73 20 69 41 72 67 20 69 73 20 63 61  ed as iArg is ca
d6e0: 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20  st to a (void*) 
d6f0: 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62  and made availab
d700: 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65  le.**     as the
d710: 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69   user-data (sqli
d720: 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29  te3_user_data())
d730: 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f   for the functio
d740: 6e 2e 20 49 66 20 0a 2a 2a 20 20 20 20 20 61 72  n. If .**     ar
d750: 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72  gument bNC is tr
d760: 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c  ue, then the SQL
d770: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
d780: 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a  L flag is set..*
d790: 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e  *.**   VFUNCTION
d7a0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
d7b0: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
d7c0: 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43  **     Like FUNC
d7d0: 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f  TION except it o
d7e0: 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f  mits the SQLITE_
d7f0: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c  FUNC_CONSTANT fl
d800: 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46 55 4e  ag..**.**   DFUN
d810: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
d820: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
d830: 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65  unc).**     Like
d840: 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74   FUNCTION except
d850: 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51   it omits the SQ
d860: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
d870: 4e 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a 20 20  NT flag and.**  
d880: 20 20 20 61 64 64 73 20 74 68 65 20 53 51 4c 49     adds the SQLI
d890: 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20  TE_FUNC_SLOCHNG 
d8a0: 66 6c 61 67 2e 20 20 55 73 65 64 20 66 6f 72 20  flag.  Used for 
d8b0: 64 61 74 65 20 26 20 74 69 6d 65 20 66 75 6e 63  date & time func
d8c0: 74 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61 6e 64  tions.**     and
d8d0: 20 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b 65 20   functions like 
d8e0: 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29  sqlite_version()
d8f0: 20 74 68 61 74 20 63 61 6e 20 63 68 61 6e 67 65   that can change
d900: 2c 20 62 75 74 20 6e 6f 74 20 64 75 72 69 6e 67  , but not during
d910: 0a 2a 2a 20 20 20 20 20 61 20 73 69 6e 67 6c 65  .**     a single
d920: 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 20 20   query..**.**   
d930: 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
d940: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
d950: 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29  , xStep, xFinal)
d960: 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
d970: 63 72 65 61 74 65 20 61 6e 20 61 67 67 72 65 67  create an aggreg
d980: 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  ate function def
d990: 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  inition implemen
d9a0: 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68  ted by.**     th
d9b0: 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53  e C functions xS
d9c0: 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20  tep and xFinal. 
d9d0: 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 70  The first four p
d9e0: 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20  arameters.**    
d9f0: 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64   are interpreted
da00: 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79   in the same way
da10: 20 61 73 20 74 68 65 20 66 69 72 73 74 20 34 20   as the first 4 
da20: 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a  parameters to.**
da30: 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e       FUNCTION().
da40: 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e  .**.**   LIKEFUN
da50: 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70  C(zName, nArg, p
da60: 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20  Arg, flags).**  
da70: 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74     Used to creat
da80: 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74  e a scalar funct
da90: 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  ion definition o
daa0: 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61  f a function zNa
dab0: 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68 61 74 20  me .**     that 
dac0: 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67  accepts nArg arg
dad0: 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d  uments and is im
dae0: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63  plemented by a c
daf0: 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20 20 20 20  all to C .**    
db00: 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75   function likeFu
db10: 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72  nc. Argument pAr
db20: 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
db30: 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65  void *) and made
db40: 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c  .**     availabl
db50: 65 20 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f  e as the functio
db60: 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c  n user-data (sql
db70: 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29  ite3_user_data()
db80: 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75  ). The.**     Fu
db90: 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69  ncDef.flags vari
dba0: 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74  able is set to t
dbb0: 68 65 20 76 61 6c 75 65 20 70 61 73 73 65 64 20  he value passed 
dbc0: 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20  as the flags.** 
dbd0: 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a      parameter..*
dbe0: 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49  /.#define FUNCTI
dbf0: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
dc00: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
dc10: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
dc20: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
dc30: 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62  T|SQLITE_UTF8|(b
dc40: 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  NC*SQLITE_FUNC_N
dc50: 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53  EEDCOLL), \.   S
dc60: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
dc70: 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63  (iArg), 0, xFunc
dc80: 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
dc90: 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 56 46  0, 0}.#define VF
dca0: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
dcb0: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
dcc0: 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
dcd0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62  , SQLITE_UTF8|(b
dce0: 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  NC*SQLITE_FUNC_N
dcf0: 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53  EEDCOLL), \.   S
dd00: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
dd10: 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63  (iArg), 0, xFunc
dd20: 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
dd30: 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 44 46  0, 0}.#define DF
dd40: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
dd50: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
dd60: 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
dd70: 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  , SQLITE_FUNC_SL
dd80: 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46  OCHNG|SQLITE_UTF
dd90: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
dda0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
ddb0: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
ddc0: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
ddd0: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
dde0: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
ddf0: 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d  e FUNCTION2(zNam
de00: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
de10: 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61  NC, xFunc, extra
de20: 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67  Flags) \.  {nArg
de30: 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e  ,SQLITE_FUNC_CON
de40: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
de50: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
de60: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74  NC_NEEDCOLL)|ext
de70: 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c  raFlags,\.   SQL
de80: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
de90: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
dea0: 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c  0, 0, #zName, 0,
deb0: 20 30 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f   0}.#define STR_
dec0: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
ded0: 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c  nArg, pArg, bNC,
dee0: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
def0: 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53  g, SQLITE_FUNC_S
df00: 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54  LOCHNG|SQLITE_UT
df10: 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
df20: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
df30: 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46 75  .   pArg, 0, xFu
df40: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
df50: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
df60: 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20  LIKEFUNC(zName, 
df70: 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73  nArg, arg, flags
df80: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
df90: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
dfa0: 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c  T|SQLITE_UTF8|fl
dfb0: 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20  ags, \.   (void 
dfc0: 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75  *)arg, 0, likeFu
dfd0: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
dfe0: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
dff0: 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
e000: 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20   nArg, arg, nc, 
e010: 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c  xStep, xFinal) \
e020: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
e030: 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45  _UTF8|(nc*SQLITE
e040: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
e050: 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
e060: 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c  _TO_PTR(arg), 0,
e070: 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c   0, xStep,xFinal
e080: 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 23 64 65  ,#zName,0,0}.#de
e090: 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 32 28  fine AGGREGATE2(
e0a0: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
e0b0: 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69  , nc, xStep, xFi
e0c0: 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61 67 73 29  nal, extraFlags)
e0d0: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
e0e0: 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49  TE_UTF8|(nc*SQLI
e0f0: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
e100: 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a  )|extraFlags, \.
e110: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
e120: 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30 2c  _PTR(arg), 0, 0,
e130: 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a   xStep,xFinal,#z
e140: 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a  Name,0,0}../*.**
e150: 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76   All current sav
e160: 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72  epoints are stor
e170: 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed in a linked l
e180: 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a  ist starting at.
e190: 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65  ** sqlite3.pSave
e1a0: 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74  point. The first
e1b0: 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20   element in the 
e1c0: 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74  list is the most
e1d0: 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65   recently.** ope
e1e0: 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53  ned savepoint. S
e1f0: 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64  avepoints are ad
e200: 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20  ded to the list 
e210: 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f  by the vdbe.** O
e220: 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
e230: 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ruction..*/.stru
e240: 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20  ct Savepoint {. 
e250: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
e260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e270: 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e       /* Savepoin
e280: 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d  t name (nul-term
e290: 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34  inated) */.  i64
e2a0: 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20   nDeferredCons; 
e2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2c0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65   /* Number of de
e2d0: 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74  ferred fk violat
e2e0: 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ions */.  i64 nD
e2f0: 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20  eferredImmCons; 
e300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e310: 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72   Number of defer
e320: 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20  red imm fk. */. 
e330: 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78   Savepoint *pNex
e340: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
e350: 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73       /* Parent s
e360: 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79  avepoint (if any
e370: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ) */.};../*.** T
e380: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
e390: 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63   used as the sec
e3a0: 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f  ond parameter to
e3b0: 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e   sqlite3Savepoin
e3c0: 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74  t(),.** and as t
e3d0: 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
e3e0: 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69  o the OP_Savepoi
e3f0: 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  nt instruction..
e400: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50  */.#define SAVEP
e410: 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20  OINT_BEGIN      
e420: 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  0.#define SAVEPO
e430: 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31  INT_RELEASE    1
e440: 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
e450: 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a  NT_ROLLBACK   2.
e460: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
e470: 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74  ite module (virt
e480: 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ual table defini
e490: 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64  tion) is defined
e4a0: 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e   by an.** instan
e4b0: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
e4c0: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73  ing structure, s
e4d0: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c  tored in the sql
e4e0: 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20  ite3.aModule.** 
e4f0: 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73  hash table..*/.s
e500: 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20  truct Module {. 
e510: 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
e520: 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20  odule *pModule; 
e530: 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63        /* Callbac
e540: 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20  k pointers */.  
e550: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
e560: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
e570: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73       /* Name pas
e580: 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f  sed to create_mo
e590: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  dule() */.  void
e5a0: 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20   *pAux;         
e5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5c0: 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64 20   /* pAux passed 
e5d0: 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
e5e0: 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
e5f0: 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
e600: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
e610: 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f  Module destructo
e620: 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  r function */.  
e630: 54 61 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b 20  Table *pEpoTab; 
e640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e650: 20 20 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75       /* Eponymou
e660: 73 20 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73  s table for this
e670: 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f   module */.};../
e680: 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  *.** information
e690: 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75   about each colu
e6a0: 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62  mn of an SQL tab
e6b0: 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e  le is held in an
e6c0: 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20   instance.** of 
e6d0: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a  this structure..
e6e0: 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e  */.struct Column
e6f0: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
e700: 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66  ;     /* Name of
e710: 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   this column */.
e720: 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20    Expr *pDflt;  
e730: 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61     /* Default va
e740: 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75  lue of this colu
e750: 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44  mn */.  char *zD
e760: 66 6c 74 3b 20 20 20 20 20 2f 2a 20 4f 72 69 67  flt;     /* Orig
e770: 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65  inal text of the
e780: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 2a   default value *
e790: 2f 0a 20 20 63 68 61 72 20 2a 7a 54 79 70 65 3b  /.  char *zType;
e7a0: 20 20 20 20 20 2f 2a 20 44 61 74 61 20 74 79 70       /* Data typ
e7b0: 65 20 66 6f 72 20 74 68 69 73 20 63 6f 6c 75 6d  e for this colum
e7c0: 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  n */.  char *zCo
e7d0: 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61  ll;     /* Colla
e7e0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20  ting sequence.  
e7f0: 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65  If NULL, use the
e800: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38   default */.  u8
e810: 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f   notNull;      /
e820: 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f  * An OE_ code fo
e830: 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54  r handling a NOT
e840: 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
e850: 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
e860: 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66  ity;   /* One of
e870: 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
e880: 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  ... values */.  
e890: 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20 20 20  u8 szEst;       
e8a0: 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69   /* Estimated si
e8b0: 7a 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  ze of this colum
e8c0: 6e 2e 20 20 49 4e 54 3d 3d 31 20 2a 2f 0a 20 20  n.  INT==1 */.  
e8d0: 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20  u8 colFlags;    
e8e0: 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70   /* Boolean prop
e8f0: 65 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c  erties.  See COL
e900: 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65  FLAG_ defines be
e910: 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c  low */.};../* Al
e920: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
e930: 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73   Column.colFlags
e940: 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c  :.*/.#define COL
e950: 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78  FLAG_PRIMKEY  0x
e960: 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  0001    /* Colum
e970: 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 65  n is part of the
e980: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a   primary key */.
e990: 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
e9a0: 48 49 44 44 45 4e 20 20 20 30 78 30 30 30 32 20  HIDDEN   0x0002 
e9b0: 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63     /* A hidden c
e9c0: 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75  olumn in a virtu
e9d0: 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a  al table */../*.
e9e0: 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20  ** A "Collating 
e9f0: 53 65 71 75 65 6e 63 65 22 20 69 73 20 64 65 66  Sequence" is def
ea00: 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61  ined by an insta
ea10: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
ea20: 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72  wing.** structur
ea30: 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c  e. Conceptually,
ea40: 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71   a collating seq
ea50: 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f  uence consists o
ea60: 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20  f a name and.** 
ea70: 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75  a comparison rou
ea80: 74 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65  tine that define
ea90: 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74  s the order of t
eaa0: 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a  hat sequence..**
eab0: 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78  .** If CollSeq.x
eac0: 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20  Cmp is NULL, it 
ead0: 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a  means that the.*
eae0: 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * collating sequ
eaf0: 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65  ence is undefine
eb00: 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c  d.  Indices buil
eb10: 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65  t on an undefine
eb20: 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73  d.** collating s
eb30: 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20  equence may not 
eb40: 62 65 20 72 65 61 64 20 6f 72 20 77 72 69 74 74  be read or writt
eb50: 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f  en..*/.struct Co
eb60: 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a  llSeq {.  char *
eb70: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
eb80: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
eb90: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
eba0: 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64  e, UTF-8 encoded
ebb0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
ebc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
ebd0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e  ext encoding han
ebe0: 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a  dled by xCmp() *
ebf0: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b  /.  void *pUser;
ec00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
ec10: 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78  st argument to x
ec20: 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28  Cmp() */.  int (
ec30: 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74  *xCmp)(void*,int
ec40: 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
ec50: 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29  nt, const void*)
ec60: 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29  ;.  void (*xDel)
ec70: 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73  (void*);  /* Des
ec80: 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65  tructor for pUse
ec90: 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  r */.};../*.** A
eca0: 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20   sort order can 
ecb0: 62 65 20 65 69 74 68 65 72 20 41 53 43 20 6f 72  be either ASC or
ecc0: 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e   DESC..*/.#defin
ecd0: 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20  e SQLITE_SO_ASC 
ece0: 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74        0  /* Sort
ecf0: 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72   in ascending or
ed00: 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  der */.#define S
ed10: 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20  QLITE_SO_DESC   
ed20: 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e     1  /* Sort in
ed30: 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72   ascending order
ed40: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ed50: 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45 44 20  TE_SO_UNDEFINED 
ed60: 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f 72  -1 /* No sort or
ed70: 64 65 72 20 73 70 65 63 69 66 69 65 64 20 2a 2f  der specified */
ed80: 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61  ../*.** Column a
ed90: 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a  ffinity types..*
eda0: 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20  *.** These used 
edb0: 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63  to have mnemonic
edc0: 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66   name like 'i' f
edd0: 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  or SQLITE_AFF_IN
ede0: 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27  TEGER and.** 't'
edf0: 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f   for SQLITE_AFF_
ee00: 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61  TEXT.  But we ca
ee10: 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20  n save a little 
ee20: 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76  space and improv
ee30: 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61  e.** the speed a
ee40: 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65   little by numbe
ee50: 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20  ring the values 
ee60: 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 20 20  consecutively.  
ee70: 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65  .**.** But rathe
ee80: 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74  r than start wit
ee90: 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67  h 0 or 1, we beg
eea0: 69 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54 68  in with 'A'.  Th
eeb0: 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20  at way,.** when 
eec0: 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74  multiple affinit
eed0: 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63  y types are conc
eee0: 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20  atenated into a 
eef0: 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73  string and.** us
ef00: 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65  ed as the P4 ope
ef10: 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20  rand, they will 
ef20: 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65  be more readable
ef30: 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73  ..**.** Note als
ef40: 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72  o that the numer
ef50: 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f  ic types are gro
ef60: 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f  uped together so
ef70: 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a   that testing.**
ef80: 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74   for a numeric t
ef90: 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ype is a single 
efa0: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64  comparison.  And
efb0: 20 74 68 65 20 42 4c 4f 42 20 74 79 70 65 20 69   the BLOB type i
efc0: 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66  s first..*/.#def
efd0: 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 42  ine SQLITE_AFF_B
efe0: 4c 4f 42 20 20 20 20 20 27 41 27 0a 23 64 65 66  LOB     'A'.#def
eff0: 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  ine SQLITE_AFF_T
f000: 45 58 54 20 20 20 20 20 27 42 27 0a 23 64 65 66  EXT     'B'.#def
f010: 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  ine SQLITE_AFF_N
f020: 55 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65 66  UMERIC  'C'.#def
f030: 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  ine SQLITE_AFF_I
f040: 4e 54 45 47 45 52 20 20 27 44 27 0a 23 64 65 66  NTEGER  'D'.#def
f050: 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52  ine SQLITE_AFF_R
f060: 45 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64 65  EAL     'E'..#de
f070: 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75  fine sqlite3IsNu
f080: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29  mericAffinity(X)
f090: 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41    ((X)>=SQLITE_A
f0a0: 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a  FF_NUMERIC)../*.
f0b0: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46  ** The SQLITE_AF
f0c0: 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61  F_MASK values ma
f0d0: 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e  sks off the sign
f0e0: 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20  ificant bits of 
f0f0: 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76  an.** affinity v
f100: 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69 6e  alue. .*/.#defin
f110: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
f120: 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a  K     0x47../*.*
f130: 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74  * Additional bit
f140: 20 76 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e   values that can
f150: 20 62 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e   be ORed with an
f160: 20 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75   affinity withou
f170: 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68  t.** changing th
f180: 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a  e affinity..**.*
f190: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54  * The SQLITE_NOT
f1a0: 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63  NULL flag is a c
f1b0: 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55  ombination of NU
f1c0: 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e  LLEQ and JUMPIFN
f1d0: 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65  ULL..** It cause
f1e0: 73 20 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f  s an assert() to
f1f0: 20 66 69 72 65 20 69 66 20 65 69 74 68 65 72 20   fire if either 
f200: 6f 70 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d  operand to a com
f210: 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61  parison.** opera
f220: 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74  tor is NULL.  It
f230: 20 69 73 20 61 64 64 65 64 20 74 6f 20 63 65 72   is added to cer
f240: 74 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20  tain comparison 
f250: 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20  operators to.** 
f260: 70 72 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f  prove that the o
f270: 70 65 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61  perands are alwa
f280: 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ys NOT NULL..*/.
f290: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a  #define SQLITE_J
f2a0: 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30  UMPIFNULL   0x10
f2b0: 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69    /* jumps if ei
f2c0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
f2d0: 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
f2e0: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20  SQLITE_STOREP2  
f2f0: 20 20 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f      0x20  /* Sto
f300: 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  re result in reg
f310: 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e  [P2] rather than
f320: 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65   jump */.#define
f330: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20   SQLITE_NULLEQ  
f340: 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55       0x80  /* NU
f350: 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  LL=NULL */.#defi
f360: 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c  ne SQLITE_NOTNUL
f370: 4c 20 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20  L      0x90  /* 
f380: 41 73 73 65 72 74 20 74 68 61 74 20 6f 70 65 72  Assert that oper
f390: 61 6e 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e  ands are never N
f3a0: 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  ULL */../*.** An
f3b0: 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20   object of this 
f3c0: 74 79 70 65 20 69 73 20 63 72 65 61 74 65 64 20  type is created 
f3d0: 66 6f 72 20 65 61 63 68 20 76 69 72 74 75 61 6c  for each virtual
f3e0: 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69   table present i
f3f0: 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73  n.** the databas
f400: 65 20 73 63 68 65 6d 61 2e 20 0a 2a 2a 0a 2a 2a  e schema. .**.**
f410: 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65   If the database
f420: 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65   schema is share
f430: 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69 73  d, then there is
f440: 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66   one instance of
f450: 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75   this.** structu
f460: 72 65 20 66 6f 72 20 65 61 63 68 20 64 61 74 61  re for each data
f470: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
f480: 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74 20  (sqlite3*) that 
f490: 75 73 65 73 20 74 68 65 20 73 68 61 72 65 64 0a  uses the shared.
f4a0: 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20  ** schema. This 
f4b0: 69 73 20 62 65 63 61 75 73 65 20 65 61 63 68 20  is because each 
f4c0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
f4d0: 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74 73  ion requires its
f4e0: 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69   own unique.** i
f4f0: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 73  nstance of the s
f500: 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
f510: 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63 65  dle used to acce
f520: 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  ss the virtual t
f530: 61 62 6c 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65  able .** impleme
f540: 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33  ntation. sqlite3
f550: 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 63  _vtab* handles c
f560: 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65 64  an not be shared
f570: 20 62 65 74 77 65 65 6e 20 0a 2a 2a 20 64 61 74   between .** dat
f580: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
f590: 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65  s, even when the
f5a0: 20 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e 2d   rest of the in-
f5b0: 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 20  memory database 
f5c0: 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68  .** schema is sh
f5d0: 61 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70  ared, as the imp
f5e0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65  lementation ofte
f5f0: 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64 61 74  n stores the dat
f600: 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  abase.** connect
f610: 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65  ion handle passe
f620: 64 20 74 6f 20 69 74 20 76 69 61 20 74 68 65 20  d to it via the 
f630: 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43  xConnect() or xC
f640: 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a  reate() method.*
f650: 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c  * during initial
f660: 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c  ization internal
f670: 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62 61 73  ly. This databas
f680: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
f690: 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20  dle may.** then 
f6a0: 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20 76  be used by the v
f6b0: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
f6c0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61  lementation to a
f6d0: 63 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65  ccess real table
f6e0: 73 20 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65  s .** within the
f6f0: 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68   database. So th
f700: 61 74 20 74 68 65 79 20 61 70 70 65 61 72 20 61  at they appear a
f710: 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 61  s part of the ca
f720: 6c 6c 65 72 73 20 0a 2a 2a 20 74 72 61 6e 73 61  llers .** transa
f730: 63 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63  ction, these acc
f740: 65 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65  esses need to be
f750: 20 6d 61 64 65 20 76 69 61 20 74 68 65 20 73 61   made via the sa
f760: 6d 65 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20  me database .** 
f770: 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68  connection as th
f780: 61 74 20 75 73 65 64 20 74 6f 20 65 78 65 63 75  at used to execu
f790: 74 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e  te SQL operation
f7a0: 73 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c  s on the virtual
f7b0: 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c   table..**.** Al
f7c0: 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  l VTable objects
f7d0: 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
f7e0: 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62   to a single tab
f7f0: 6c 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a  le in a shared.*
f800: 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  * database schem
f810: 61 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20  a are initially 
f820: 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b  stored in a link
f830: 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20  ed-list pointed 
f840: 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62  to by.** the Tab
f850: 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65  le.pVTable membe
f860: 72 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68  r variable of th
f870: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
f880: 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a  Table object..**
f890: 20 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33   When an sqlite3
f8a0: 5f 70 72 65 70 61 72 65 28 29 20 6f 70 65 72 61  _prepare() opera
f8b0: 74 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64  tion is required
f8c0: 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76   to access the v
f8d0: 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c  irtual.** table,
f8e0: 20 69 74 20 73 65 61 72 63 68 65 73 20 74 68 65   it searches the
f8f0: 20 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56 54   list for the VT
f900: 61 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73  able that corres
f910: 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20  ponds to the.** 
f920: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
f930: 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72  ion doing the pr
f940: 65 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f  eparing so as to
f950: 20 75 73 65 20 74 68 65 20 63 6f 72 72 65 63 74   use the correct
f960: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62  .** sqlite3_vtab
f970: 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20  * handle in the 
f980: 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a  compiled query..
f990: 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e  **.** When an in
f9a0: 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62  -memory Table ob
f9b0: 6a 65 63 74 20 69 73 20 64 65 6c 65 74 65 64 20  ject is deleted 
f9c0: 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65  (for example whe
f9d0: 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  n the.** schema 
f9e0: 69 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65  is being reloade
f9f0: 64 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f  d for some reaso
fa00: 6e 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f  n), the VTable o
fa10: 62 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 20 0a  bjects are not .
fa20: 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74  ** deleted and t
fa30: 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  he sqlite3_vtab*
fa40: 20 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74   handles are not
fa50: 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65 64   xDisconnect()ed
fa60: 20 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79   .** immediately
fa70: 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79 20  . Instead, they 
fa80: 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74  are moved from t
fa90: 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65  he Table.pVTable
faa0: 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74   list to.** anot
fab0: 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  her linked list 
fac0: 68 65 61 64 65 64 20 62 79 20 74 68 65 20 73 71  headed by the sq
fad0: 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63  lite3.pDisconnec
fae0: 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a  t member of the.
faf0: 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ** corresponding
fb00: 20 73 71 6c 69 74 65 33 20 73 74 72 75 63 74 75   sqlite3 structu
fb10: 72 65 2e 20 54 68 65 79 20 61 72 65 20 74 68 65  re. They are the
fb20: 6e 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63 6f  n deleted/xDisco
fb30: 6e 6e 65 63 74 65 64 20 0a 2a 2a 20 6e 65 78 74  nnected .** next
fb40: 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65 6e   time a statemen
fb50: 74 20 69 73 20 70 72 65 70 61 72 65 64 20 75 73  t is prepared us
fb60: 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65 33  ing said sqlite3
fb70: 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65 0a  *. This is done.
fb80: 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61 64  ** to avoid dead
fb90: 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76 6f  lock issues invo
fba0: 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73  lving multiple s
fbb0: 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74  qlite3.mutex mut
fbc0: 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74  exes..** Refer t
fbd0: 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65  o comments above
fbe0: 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65   function sqlite
fbf0: 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
fc00: 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c  ) for an.** expl
fc10: 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77 68  anation as to wh
fc20: 79 20 69 74 20 69 73 20 73 61 66 65 20 74 6f 20  y it is safe to 
fc30: 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f 20  add an entry to 
fc40: 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63  an sqlite3.pDisc
fc50: 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77  onnect.** list w
fc60: 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74  ithout holding t
fc70: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
fc80: 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d   sqlite3.mutex m
fc90: 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  utex..**.** The 
fca0: 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63  memory for objec
fcb0: 74 73 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ts of this type 
fcc0: 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61  is always alloca
fcd0: 74 65 64 20 62 79 20 0a 2a 2a 20 73 71 6c 69 74  ted by .** sqlit
fce0: 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73  e3DbMalloc(), us
fcf0: 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ing the connecti
fd00: 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65 64  on handle stored
fd10: 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61 73   in VTable.db as
fd20: 20 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61   .** the first a
fd30: 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  rgument..*/.stru
fd40: 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71  ct VTable {.  sq
fd50: 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
fd60: 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
fd70: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  ase connection a
fd80: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
fd90: 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d  his table */.  M
fda0: 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20  odule *pMod;    
fdb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
fdc0: 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d  ter to module im
fdd0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a  plementation */.
fde0: 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
fdf0: 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50  pVtab;      /* P
fe00: 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69  ointer to vtab i
fe10: 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74  nstance */.  int
fe20: 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
fe30: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
fe40: 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   of pointers to 
fe50: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 2a  this structure *
fe60: 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69  /.  u8 bConstrai
fe70: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
fe80: 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61   True if constra
fe90: 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72 74  ints are support
fea0: 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76  ed */.  int iSav
feb0: 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20  epoint;         
fec0: 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68    /* Depth of th
fed0: 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63  e SAVEPOINT stac
fee0: 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70  k */.  VTable *p
fef0: 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
ff00: 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b   /* Next in link
ff10: 65 64 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f  ed list (see abo
ff20: 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ve) */.};../*.**
ff30: 20 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20   The schema for 
ff40: 65 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20 61  each SQL table a
ff50: 6e 64 20 76 69 65 77 20 69 73 20 72 65 70 72 65  nd view is repre
ff60: 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
ff70: 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  .** by an instan
ff80: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
ff90: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
ffa0: 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b  /.struct Table {
ffb0: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
ffc0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
ffd0: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  of the table or 
ffe0: 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e  view */.  Column
fff0: 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f   *aCol;        /
10000 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
10010 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  out each column 
10020 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64  */.  Index *pInd
10030 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  ex;       /* Lis
10040 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73  t of SQL indexes
10050 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20   on this table. 
10060 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65  */.  Select *pSe
10070 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c  lect;     /* NUL
10080 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50  L for tables.  P
10090 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74  oints to definit
100a0 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a  ion if a view. *
100b0 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b  /.  FKey *pFKey;
100c0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b           /* Link
100d0 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66  ed list of all f
100e0 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74  oreign keys in t
100f0 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63  his table */.  c
10100 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20  har *zColAff;   
10110 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65      /* String de
10120 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e  fining the affin
10130 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ity of each colu
10140 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  mn */.  ExprList
10150 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20   *pCheck;    /* 
10160 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  All CHECK constr
10170 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20 20  aints */.       
10180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10190 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20 75 73  /*   ... also us
101a0 65 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d  ed as column nam
101b0 65 20 6c 69 73 74 20 69 6e 20 61 20 56 49 45 57  e list in a VIEW
101c0 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20   */.  int tnum; 
101d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f             /* Ro
101e0 6f 74 20 42 54 72 65 65 20 70 61 67 65 20 66 6f  ot BTree page fo
101f0 72 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  r this table */.
10200 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20    i16 iPKey;    
10210 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74         /* If not
10220 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20 61   negative, use a
10230 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68  Col[iPKey] as th
10240 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36  e rowid */.  i16
10250 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20   nCol;          
10260 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
10270 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74  olumns in this t
10280 61 62 6c 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52  able */.  u16 nR
10290 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ef;            /
102a0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e  * Number of poin
102b0 74 65 72 73 20 74 6f 20 74 68 69 73 20 54 61 62  ters to this Tab
102c0 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e  le */.  LogEst n
102d0 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20  RowLogEst;   /* 
102e0 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20 69  Estimated rows i
102f0 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73  n table - from s
10300 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c  qlite_stat1 tabl
10310 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a  e */.  LogEst sz
10320 54 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45  TabRow;     /* E
10330 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66  stimated size of
10340 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77 20   each table row 
10350 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69 66 64  in bytes */.#ifd
10360 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
10370 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45  _COSTMULT.  LogE
10380 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20  st costMult;    
10390 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c   /* Cost multipl
103a0 69 65 72 20 66 6f 72 20 75 73 69 6e 67 20 74 68  ier for using th
103b0 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64  is table */.#end
103c0 69 66 0a 20 20 75 38 20 74 61 62 46 6c 61 67 73  if.  u8 tabFlags
103d0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
103e0 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73  k of TF_* values
103f0 20 2a 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66   */.  u8 keyConf
10400 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68  ;          /* Wh
10410 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65  at to do in case
10420 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63   of uniqueness c
10430 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79  onflict on iPKey
10440 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
10450 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42  TE_OMIT_ALTERTAB
10460 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f  LE.  int addColO
10470 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66  ffset;    /* Off
10480 73 65 74 20 69 6e 20 43 52 45 41 54 45 20 54 41  set in CREATE TA
10490 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20  BLE stmt to add 
104a0 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  a new column */.
104b0 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
104c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
104d0 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d  ALTABLE.  int nM
104e0 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f  oduleArg;      /
104f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
10500 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64  ments to the mod
10510 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  ule */.  char **
10520 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a  azModuleArg;  /*
10530 20 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20 73 63   0: module 1: sc
10540 68 65 6d 61 20 32 3a 20 76 74 61 62 20 6e 61 6d  hema 2: vtab nam
10550 65 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f 0a  e 3...: args */.
10560 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c    VTable *pVTabl
10570 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f  e;     /* List o
10580 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  f VTable objects
10590 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72  . */.#endif.  Tr
105a0 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b  igger *pTrigger;
105b0 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72     /* List of tr
105c0 69 67 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e  iggers stored in
105d0 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63   pSchema */.  Sc
105e0 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
105f0 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61     /* Schema tha
10600 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20  t contains this 
10610 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65  table */.  Table
10620 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20   *pNextZombie;  
10630 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50  /* Next on the P
10640 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20  arse.pZombieTab 
10650 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
10660 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
10670 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62 46 6c   for Table.tabFl
10680 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f  ags..**.** TF_OO
10690 4f 48 69 64 64 65 6e 20 61 70 70 6c 69 65 73 20  OHidden applies 
106a0 74 6f 20 74 61 62 6c 65 73 20 6f 72 20 76 69 65  to tables or vie
106b0 77 20 74 68 61 74 20 68 61 76 65 20 68 69 64 64  w that have hidd
106c0 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20  en columns that 
106d0 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20  are.** followed 
106e0 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f  by non-hidden co
106f0 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65 3a  lumns.  Example:
10700 20 20 22 43 52 45 41 54 45 20 56 49 52 54 55 41    "CREATE VIRTUA
10710 4c 20 54 41 42 4c 45 20 78 20 55 53 49 4e 47 0a  L TABLE x USING.
10720 2a 2a 20 76 74 61 62 31 28 61 20 48 49 44 44 45  ** vtab1(a HIDDE
10730 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63 65 20  N, b);".  Since 
10740 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69 64  "b" is a non-hid
10750 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20 22  den column but "
10760 61 22 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a 2a  a" is hidden,.**
10770 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65   the TF_OOOHidde
10780 6e 20 61 74 74 72 69 62 75 74 65 20 77 6f 75 6c  n attribute woul
10790 64 20 61 70 70 6c 79 20 69 6e 20 74 68 69 73 20  d apply in this 
107a0 63 61 73 65 2e 20 20 53 75 63 68 20 74 61 62 6c  case.  Such tabl
107b0 65 73 20 72 65 71 75 69 72 65 0a 2a 2a 20 73 70  es require.** sp
107c0 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 64  ecial handling d
107d0 75 72 69 6e 67 20 49 4e 53 45 52 54 20 70 72 6f  uring INSERT pro
107e0 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66  cessing..*/.#def
107f0 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20  ine TF_Readonly 
10800 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
10810 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74  * Read-only syst
10820 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  em table */.#def
10830 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61 6c  ine TF_Ephemeral
10840 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f         0x02    /
10850 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74  * An ephemeral t
10860 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
10870 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79  TF_HasPrimaryKey
10880 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 61     0x04    /* Ta
10890 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61 72  ble has a primar
108a0 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65  y key */.#define
108b0 20 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e   TF_Autoincremen
108c0 74 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 49  t   0x08    /* I
108d0 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
108e0 65 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d  ey is autoincrem
108f0 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ent */.#define T
10900 46 5f 56 69 72 74 75 61 6c 20 20 20 20 20 20 20  F_Virtual       
10910 20 20 30 78 31 30 20 20 20 20 2f 2a 20 49 73 20    0x10    /* Is 
10920 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
10930 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69  */.#define TF_Wi
10940 74 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78  thoutRowid    0x
10950 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69  20    /* No rowi
10960 64 2e 20 20 50 52 49 4d 41 52 59 20 4b 45 59 20  d.  PRIMARY KEY 
10970 69 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64  is the key */.#d
10980 65 66 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62  efine TF_NoVisib
10990 6c 65 52 6f 77 69 64 20 20 30 78 34 30 20 20 20  leRowid  0x40   
109a0 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73 69   /* No user-visi
109b0 62 6c 65 20 22 72 6f 77 69 64 22 20 63 6f 6c 75  ble "rowid" colu
109c0 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  mn */.#define TF
109d0 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20 20 20  _OOOHidden      
109e0 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d   0x80    /* Out-
109f0 6f 66 2d 4f 72 64 65 72 20 68 69 64 64 65 6e 20  of-Order hidden 
10a00 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 0a 0a 2f 2a 0a  columns */.../*.
10a10 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20 77  ** Test to see w
10a20 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20  hether or not a 
10a30 74 61 62 6c 65 20 69 73 20 61 20 76 69 72 74 75  table is a virtu
10a40 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20  al table.  This 
10a50 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20  is.** done as a 
10a60 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74  macro so that it
10a70 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a   will be optimiz
10a80 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74  ed out when virt
10a90 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70  ual.** table sup
10aa0 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20  port is omitted 
10ab0 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a  from the build..
10ac0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
10ad0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
10ae0 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73  BLE.#  define Is
10af0 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20  Virtual(X)      
10b00 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
10b10 26 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30  & TF_Virtual)!=0
10b20 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  ).#else.#  defin
10b30 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20  e IsVirtual(X)  
10b40 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a      0.#endif../*
10b50 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65  .** Macros to de
10b60 74 65 72 6d 69 6e 65 20 69 66 20 61 20 63 6f 6c  termine if a col
10b70 75 6d 6e 20 69 73 20 68 69 64 64 65 6e 2e 20 20  umn is hidden.  
10b80 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e  IsOrdinaryHidden
10b90 43 6f 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c 79  Column().** only
10ba0 20 77 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d 76   works for non-v
10bb0 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 28 6f  irtual tables (o
10bc0 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73 20 61  rdinary tables a
10bd0 6e 64 20 76 69 65 77 73 29 20 61 6e 64 20 69 73  nd views) and is
10be0 0a 2a 2a 20 61 6c 77 61 79 73 20 66 61 6c 73 65  .** always false
10bf0 20 75 6e 6c 65 73 73 20 53 51 4c 49 54 45 5f 45   unless SQLITE_E
10c00 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c  NABLE_HIDDEN_COL
10c10 55 4d 4e 53 20 69 73 20 64 65 66 69 6e 65 64 2e  UMNS is defined.
10c20 20 20 54 68 65 0a 2a 2a 20 49 73 48 69 64 64 65    The.** IsHidde
10c30 6e 43 6f 6c 75 6d 6e 28 29 20 6d 61 63 72 6f 20  nColumn() macro 
10c40 69 73 20 67 65 6e 65 72 61 6c 20 70 75 72 70 6f  is general purpo
10c50 73 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  se..*/.#if defin
10c60 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
10c70 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 29  _HIDDEN_COLUMNS)
10c80 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64  .#  define IsHid
10c90 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20  denColumn(X)    
10ca0 20 20 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46       (((X)->colF
10cb0 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48  lags & COLFLAG_H
10cc0 49 44 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65  IDDEN)!=0).#  de
10cd0 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48  fine IsOrdinaryH
10ce0 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28  iddenColumn(X) (
10cf0 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  ((X)->colFlags &
10d00 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29   COLFLAG_HIDDEN)
10d10 21 3d 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69  !=0).#elif !defi
10d20 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
10d30 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20  VIRTUALTABLE).# 
10d40 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e   define IsHidden
10d50 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20  Column(X)       
10d60 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67    (((X)->colFlag
10d70 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44  s & COLFLAG_HIDD
10d80 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e  EN)!=0).#  defin
10d90 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64  e IsOrdinaryHidd
10da0 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65  enColumn(X) 0.#e
10db0 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73  lse.#  define Is
10dc0 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
10dd0 20 20 20 20 20 20 20 20 30 0a 23 20 20 64 65 66          0.#  def
10de0 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69  ine IsOrdinaryHi
10df0 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a  ddenColumn(X) 0.
10e00 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65 73  #endif.../* Does
10e10 20 74 68 65 20 74 61 62 6c 65 20 68 61 76 65 20   the table have 
10e20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  a rowid */.#defi
10e30 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29 20 20  ne HasRowid(X)  
10e40 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61     (((X)->tabFla
10e50 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52  gs & TF_WithoutR
10e60 6f 77 69 64 29 3d 3d 30 29 0a 23 64 65 66 69 6e  owid)==0).#defin
10e70 65 20 56 69 73 69 62 6c 65 52 6f 77 69 64 28 58  e VisibleRowid(X
10e80 29 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67  ) (((X)->tabFlag
10e90 73 20 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65  s & TF_NoVisible
10ea0 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a  Rowid)==0)../*.*
10eb0 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b  * Each foreign k
10ec0 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73  ey constraint is
10ed0 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
10ee0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
10ef0 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41  ructure..**.** A
10f00 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20   foreign key is 
10f10 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
10f20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65  two tables.  The
10f30 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73   "from" table is
10f40 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68  .** the table th
10f50 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  at contains the 
10f60 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
10f70 65 20 74 68 61 74 20 63 72 65 61 74 65 73 20 74  e that creates t
10f80 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  he foreign.** ke
10f90 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61 62  y.  The "to" tab
10fa0 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c 65 20  le is the table 
10fb0 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e  that is named in
10fc0 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
10fd0 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69  clause..** Consi
10fe0 64 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65  der this example
10ff0 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41  :.**.**     CREA
11000 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a  TE TABLE ex1(.**
11010 20 20 20 20 20 20 20 61 20 49 4e 54 45 47 45 52         a INTEGER
11020 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a   PRIMARY KEY,.**
11030 20 20 20 20 20 20 20 62 20 49 4e 54 45 47 45 52         b INTEGER
11040 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20   CONSTRAINT fk1 
11050 52 45 46 45 52 45 4e 43 45 53 20 65 78 32 28 78  REFERENCES ex2(x
11060 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a  ).**     );.**.*
11070 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65  * For foreign ke
11080 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f  y "fk1", the fro
11090 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31 22  m-table is "ex1"
110a0 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c   and the to-tabl
110b0 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45  e is "ex2"..** E
110c0 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a  quivalent names:
110d0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d  .**.**     from-
110e0 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74  table == child-t
110f0 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f  able.**       to
11100 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74  -table == parent
11110 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63  -table.**.** Eac
11120 68 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  h REFERENCES cla
11130 75 73 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e  use generates an
11140 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
11150 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
11160 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73  ture.** which is
11170 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
11180 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68   from-table.  Th
11190 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20  e to-table need 
111a0 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a  not exist when.*
111b0 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65  * the from-table
111c0 20 69 73 20 63 72 65 61 74 65 64 2e 20 20 54 68   is created.  Th
111d0 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74  e existence of t
111e0 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e  he to-table is n
111f0 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a  ot checked..**.*
11200 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c  * The list of al
11210 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68  l parents for ch
11220 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73 20 68  ild Table X is h
11230 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a  eld at X.pFKey..
11240 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20  **.** A list of 
11250 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72  all children for
11260 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a   a table named Z
11270 20 28 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f   (which might no
11280 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a  t even exist).**
11290 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65   is held in Sche
112a0 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68  ma.fkeyHash with
112b0 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a   a hash key of Z
112c0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79  ..*/.struct FKey
112d0 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f   {.  Table *pFro
112e0 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  m;     /* Table 
112f0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52  containing the R
11300 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
11310 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f   (aka: Child) */
11320 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72  .  FKey *pNextFr
11330 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65  om;  /* Next FKe
11340 79 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  y with the same 
11350 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70  in pFrom. Next p
11360 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a  arent of pFrom *
11370 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20  /.  char *zTo;  
11380 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
11390 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20   table that the 
113a0 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61  key points to (a
113b0 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20  ka: Parent) */. 
113c0 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20   FKey *pNextTo; 
113d0 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20     /* Next with 
113e0 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65  the same zTo. Ne
113f0 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e  xt child of zTo.
11400 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65   */.  FKey *pPre
11410 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69  vTo;    /* Previ
11420 6f 75 73 20 77 69 74 68 20 74 68 65 20 73 61 6d  ous with the sam
11430 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e  e zTo */.  int n
11440 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Col;         /* 
11450 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
11460 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f  s in this key */
11470 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32  .  /* EV: R-3032
11480 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20  3-21917 */.  u8 
11490 69 73 44 65 66 65 72 72 65 64 3b 20 20 20 20 20  isDeferred;     
114a0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e    /* True if con
114b0 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67  straint checking
114c0 20 69 73 20 64 65 66 65 72 72 65 64 20 74 69 6c   is deferred til
114d0 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38  l COMMIT */.  u8
114e0 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20   aAction[2];    
114f0 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45      /* ON DELETE
11500 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61   and ON UPDATE a
11510 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69  ctions, respecti
11520 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65  vely */.  Trigge
11530 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b  r *apTrigger[2];
11540 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72 20  /* Triggers for 
11550 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e  aAction[] action
11560 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43  s */.  struct sC
11570 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20  olMap {      /* 
11580 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d  Mapping of colum
11590 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63  ns in pFrom to c
115a0 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f  olumns in zTo */
115b0 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20  .    int iFrom; 
115c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
115d0 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  dex of column in
115e0 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68   pFrom */.    ch
115f0 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20  ar *zCol;       
11600 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63      /* Name of c
11610 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49  olumn in zTo.  I
11620 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41  f NULL use PRIMA
11630 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43  RY KEY */.  } aC
11640 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20  ol[1];          
11650 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66    /* One entry f
11660 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20  or each of nCol 
11670 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f  columns */.};../
11680 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70  *.** SQLite supp
11690 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72  orts many differ
116a0 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f  ent ways to reso
116b0 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  lve a constraint
116c0 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c  .** error.  ROLL
116d0 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20  BACK processing 
116e0 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e  means that a con
116f0 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
11700 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20  n.** causes the 
11710 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
11720 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64  cess to fail and
11730 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
11740 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20   transaction.** 
11750 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
11760 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73  k.  ABORT proces
11770 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f  sing means the o
11780 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63  peration in proc
11790 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64  ess.** fails and
117a0 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67   any prior chang
117b0 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65  es from that one
117c0 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62   operation are b
117d0 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75  acked out,.** bu
117e0 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  t the transactio
117f0 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20  n is not rolled 
11800 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63  back.  FAIL proc
11810 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61  essing means tha
11820 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69  t.** the operati
11830 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73  on in progress s
11840 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73  tops and returns
11850 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20   an error code. 
11860 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68   But prior.** ch
11870 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68 65  anges due to the
11880 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20   same operation 
11890 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f  are not backed o
118a0 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61  ut and no rollba
118b0 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49  ck.** occurs.  I
118c0 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74  GNORE means that
118d0 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20   the particular 
118e0 72 6f 77 20 74 68 61 74 20 63 61 75 73 65 64 20  row that caused 
118f0 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  the constraint.*
11900 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69  * error is not i
11910 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74  nserted or updat
11920 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20  ed.  Processing 
11930 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f  continues and no
11940 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74   error.** is ret
11950 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20  urned.  REPLACE 
11960 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65 65 78  means that preex
11970 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
11980 72 6f 77 73 20 74 68 61 74 20 63 61 75 73 65 64  rows that caused
11990 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e  .** a UNIQUE con
119a0 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
119b0 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f  n are removed so
119c0 20 74 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e   that the new in
119d0 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74  sert or.** updat
119e0 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20  e can proceed.  
119f0 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69  Processing conti
11a00 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f  nues and no erro
11a10 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a  r is reported..*
11a20 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53  *.** RESTRICT, S
11a30 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43  ETNULL, and CASC
11a40 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c  ADE actions appl
11a50 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67  y only to foreig
11a60 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52  n keys..** RESTR
11a70 49 43 54 20 69 73 20 74 68 65 20 73 61 6d 65 20  ICT is the same 
11a80 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d  as ABORT for IMM
11a90 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b  EDIATE foreign k
11aa0 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73  eys and the.** s
11ab0 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20  ame as ROLLBACK 
11ac0 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65 79  for DEFERRED key
11ad0 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e  s.  SETNULL mean
11ae0 73 20 74 68 61 74 20 74 68 65 20 66 6f 72 65 69  s that the forei
11af0 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74  gn.** key is set
11b00 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41   to NULL.  CASCA
11b10 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20  DE means that a 
11b20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
11b30 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72   of the.** refer
11b40 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20  enced table row 
11b50 69 73 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e  is propagated in
11b60 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74 20  to the row that 
11b70 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72  holds the.** for
11b80 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a  eign key..** .**
11b90 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
11ba0 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61  ymbolic values a
11bb0 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72  re used to recor
11bc0 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20  d which type.** 
11bd0 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b  of action to tak
11be0 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  e..*/.#define OE
11bf0 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a  _None     0   /*
11c00 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e   There is no con
11c10 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b  straint to check
11c20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52   */.#define OE_R
11c30 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46  ollback 1   /* F
11c40 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ail the operatio
11c50 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74  n and rollback t
11c60 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  he transaction *
11c70 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f  /.#define OE_Abo
11c80 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63  rt    2   /* Bac
11c90 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75  k out changes bu
11ca0 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b  t do no rollback
11cb0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
11cc0 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20  #define OE_Fail 
11cd0 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20      3   /* Stop 
11ce0 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75  the operation bu
11cf0 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f  t leave all prio
11d00 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  r changes */.#de
11d10 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20  fine OE_Ignore  
11d20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74   4   /* Ignore t
11d30 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74  he error. Do not
11d40 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f   do the INSERT o
11d50 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  r UPDATE */.#def
11d60 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20  ine OE_Replace  
11d70 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78  5   /* Delete ex
11d80 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74  isting record, t
11d90 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72  hen do INSERT or
11da0 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66   UPDATE */..#def
11db0 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20  ine OE_Restrict 
11dc0 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20  6   /* OE_Abort 
11dd0 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f  for IMMEDIATE, O
11de0 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44  E_Rollback for D
11df0 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69  EFERRED */.#defi
11e00 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37  ne OE_SetNull  7
11e10 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f     /* Set the fo
11e20 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20  reign key value 
11e30 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  to NULL */.#defi
11e40 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 38  ne OE_SetDflt  8
11e50 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f     /* Set the fo
11e60 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20  reign key value 
11e70 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a  to its default *
11e80 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73  /.#define OE_Cas
11e90 63 61 64 65 20 20 39 20 20 20 2f 2a 20 43 61 73  cade  9   /* Cas
11ea0 63 61 64 65 20 74 68 65 20 63 68 61 6e 67 65 73  cade the changes
11eb0 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f   */..#define OE_
11ec0 44 65 66 61 75 6c 74 20 20 31 30 20 20 2f 2a 20  Default  10  /* 
11ed0 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65 20  Do whatever the 
11ee0 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69  default action i
11ef0 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  s */.../*.** An 
11f00 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
11f10 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
11f20 75 72 65 20 69 73 20 70 61 73 73 65 64 20 61 73  ure is passed as
11f30 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
11f40 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65  gument to sqlite
11f50 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20  3VdbeKeyCompare 
11f60 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 63  and is used to c
11f70 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63  ontrol the .** c
11f80 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65  omparison of the
11f90 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e   two index keys.
11fa0 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74  .**.** Note that
11fb0 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e   aSortOrder[] an
11fc0 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e  d aColl[] have n
11fd0 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20  Field+1 slots.  
11fe0 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69  There.** are nFi
11ff0 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68  eld slots for th
12000 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20  e columns of an 
12010 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65  index then one e
12020 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72  xtra slot.** for
12030 20 74 68 65 20 72 6f 77 69 64 20 61 74 20 74 68   the rowid at th
12040 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  e end..*/.struct
12050 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32   KeyInfo {.  u32
12060 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
12070 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
12080 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73  ferences to this
12090 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20   KeyInfo object 
120a0 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
120b0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
120c0 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20   encoding - one 
120d0 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54  of the SQLITE_UT
120e0 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  F* values */.  u
120f0 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  16 nField;      
12100 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
12110 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  key columns in t
12120 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31  he index */.  u1
12130 36 20 6e 58 46 69 65 6c 64 3b 20 20 20 20 20 20  6 nXField;      
12140 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
12150 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e 64 20 74 68  olumns beyond th
12160 65 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f  e key columns */
12170 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
12180 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
12190 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
121a0 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74  n */.  u8 *aSort
121b0 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f  Order;     /* So
121c0 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63  rt order for eac
121d0 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43  h column. */.  C
121e0 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d  ollSeq *aColl[1]
121f0 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20  ;  /* Collating 
12200 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63  sequence for eac
12210 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65  h term of the ke
12220 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  y */.};../*.** T
12230 68 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73  his object holds
12240 20 61 20 72 65 63 6f 72 64 20 77 68 69 63 68 20   a record which 
12250 68 61 73 20 62 65 65 6e 20 70 61 72 73 65 64 20  has been parsed 
12260 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64  out into individ
12270 75 61 6c 0a 2a 2a 20 66 69 65 6c 64 73 2c 20 66  ual.** fields, f
12280 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
12290 6f 66 20 64 6f 69 6e 67 20 61 20 63 6f 6d 70 61  of doing a compa
122a0 72 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72  rison..**.** A r
122b0 65 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65  ecord is an obje
122c0 63 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ct that contains
122d0 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65   one or more fie
122e0 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20  lds of data..** 
122f0 52 65 63 6f 72 64 73 20 61 72 65 20 75 73 65 64  Records are used
12300 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f   to store the co
12310 6e 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65  ntent of a table
12320 20 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72   row and to stor
12330 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20  e.** the key of 
12340 61 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f  an index.  A blo
12350 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20  b encoding of a 
12360 72 65 63 6f 72 64 20 69 73 20 63 72 65 61 74 65  record is create
12370 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d  d by.** the OP_M
12380 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65  akeRecord opcode
12390 20 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e 64   of the VDBE and
123a0 20 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64   is disassembled
123b0 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f   by the.** OP_Co
123c0 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  lumn opcode..**.
123d0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
123e0 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 73 65  f this object se
123f0 72 76 65 73 20 61 73 20 61 20 22 6b 65 79 22 20  rves as a "key" 
12400 66 6f 72 20 64 6f 69 6e 67 20 61 20 73 65 61 72  for doing a sear
12410 63 68 20 6f 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65  ch on.** an inde
12420 78 20 62 2b 74 72 65 65 2e 20 54 68 65 20 67 6f  x b+tree. The go
12430 61 6c 20 6f 66 20 74 68 65 20 73 65 61 72 63 68  al of the search
12440 20 69 73 20 74 6f 20 66 69 6e 64 20 74 68 65 20   is to find the 
12450 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 69 73  entry that.** is
12460 20 63 6c 6f 73 65 64 20 74 6f 20 74 68 65 20 6b   closed to the k
12470 65 79 20 64 65 73 63 72 69 62 65 64 20 62 79 20  ey described by 
12480 74 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68  this object.  Th
12490 69 73 20 6f 62 6a 65 63 74 20 6d 69 67 68 74 20  is object might 
124a0 68 6f 6c 64 0a 2a 2a 20 6a 75 73 74 20 61 20 70  hold.** just a p
124b0 72 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79  refix of the key
124c0 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  .  The number of
124d0 20 66 69 65 6c 64 73 20 69 73 20 67 69 76 65 6e   fields is given
124e0 20 62 79 0a 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d   by.** pKeyInfo-
124f0 3e 6e 46 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54  >nField..**.** T
12500 68 65 20 72 31 20 61 6e 64 20 72 32 20 66 69 65  he r1 and r2 fie
12510 6c 64 73 20 61 72 65 20 74 68 65 20 76 61 6c 75  lds are the valu
12520 65 73 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20  es to return if 
12530 74 68 69 73 20 6b 65 79 20 69 73 20 6c 65 73 73  this key is less
12540 20 74 68 61 6e 0a 2a 2a 20 6f 72 20 67 72 65 61   than.** or grea
12550 74 65 72 20 74 68 61 6e 20 61 20 6b 65 79 20 69  ter than a key i
12560 6e 20 74 68 65 20 62 74 72 65 65 2c 20 72 65 73  n the btree, res
12570 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 73  pectively.  Thes
12580 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a  e are normally.*
12590 2a 20 2d 31 20 61 6e 64 20 2b 31 20 72 65 73 70  * -1 and +1 resp
125a0 65 63 74 69 76 65 6c 79 2c 20 62 75 74 20 6d 69  ectively, but mi
125b0 67 68 74 20 62 65 20 69 6e 76 65 72 74 65 64 20  ght be inverted 
125c0 74 6f 20 2b 31 20 61 6e 64 20 2d 31 20 69 66 20  to +1 and -1 if 
125d0 74 68 65 20 62 2d 74 72 65 65 0a 2a 2a 20 69 73  the b-tree.** is
125e0 20 69 6e 20 44 45 53 43 20 6f 72 64 65 72 2e 0a   in DESC order..
125f0 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f  **.** The key co
12600 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f  mparison functio
12610 6e 73 20 61 63 74 75 61 6c 6c 79 20 72 65 74 75  ns actually retu
12620 72 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 77 68  rn default_rc wh
12630 65 6e 20 74 68 65 79 20 66 69 6e 64 0a 2a 2a 20  en they find.** 
12640 61 6e 20 65 71 75 61 6c 73 20 63 6f 6d 70 61 72  an equals compar
12650 69 73 6f 6e 2e 20 20 64 65 66 61 75 6c 74 5f 72  ison.  default_r
12660 63 20 63 61 6e 20 62 65 20 2d 31 2c 20 30 2c 20  c can be -1, 0, 
12670 6f 72 20 2b 31 2e 20 20 49 66 20 74 68 65 72 65  or +1.  If there
12680 20 61 72 65 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65   are.** multiple
12690 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20   entries in the 
126a0 62 2d 74 72 65 65 20 77 69 74 68 20 74 68 65 20  b-tree with the 
126b0 73 61 6d 65 20 6b 65 79 20 28 77 68 65 6e 20 6f  same key (when o
126c0 6e 6c 79 20 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61  nly looking.** a
126d0 74 20 74 68 65 20 66 69 72 73 74 20 70 4b 65 79  t the first pKey
126e0 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 73 2c 29 20  Info->nFields,) 
126f0 74 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63 20  then default_rc 
12700 63 61 6e 20 62 65 20 73 65 74 20 74 6f 20 2d 31  can be set to -1
12710 20 74 6f 20 0a 2a 2a 20 63 61 75 73 65 20 74 68   to .** cause th
12720 65 20 73 65 61 72 63 68 20 74 6f 20 66 69 6e 64  e search to find
12730 20 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2c   the last match,
12740 20 6f 72 20 2b 31 20 74 6f 20 63 61 75 73 65 20   or +1 to cause 
12750 74 68 65 20 73 65 61 72 63 68 20 74 6f 0a 2a 2a  the search to.**
12760 20 66 69 6e 64 20 74 68 65 20 66 69 72 73 74 20   find the first 
12770 6d 61 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  match..**.** The
12780 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20   key comparison 
12790 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73  functions will s
127a0 65 74 20 65 71 53 65 65 6e 20 74 6f 20 74 72 75  et eqSeen to tru
127b0 65 20 69 66 20 74 68 65 79 20 65 76 65 72 0a 2a  e if they ever.*
127c0 2a 20 67 65 74 20 61 6e 64 20 65 71 75 61 6c 20  * get and equal 
127d0 72 65 73 75 6c 74 73 20 77 68 65 6e 20 63 6f 6d  results when com
127e0 70 61 72 69 6e 67 20 74 68 69 73 20 73 74 72 75  paring this stru
127f0 63 74 75 72 65 20 74 6f 20 61 20 62 2d 74 72 65  cture to a b-tre
12800 65 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 57 68 65  e record..** Whe
12810 6e 20 64 65 66 61 75 6c 74 5f 72 63 21 3d 30 2c  n default_rc!=0,
12820 20 74 68 65 20 73 65 61 72 63 68 20 6d 69 67 68   the search migh
12830 74 20 65 6e 64 20 75 70 20 6f 6e 20 74 68 65 20  t end up on the 
12840 72 65 63 6f 72 64 20 69 6d 6d 65 64 69 61 74 65  record immediate
12850 6c 79 0a 2a 2a 20 62 65 66 6f 72 65 20 74 68 65  ly.** before the
12860 20 66 69 72 73 74 20 6d 61 74 63 68 20 6f 72 20   first match or 
12870 69 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65  immediately afte
12880 72 20 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68  r the last match
12890 2e 20 20 54 68 65 0a 2a 2a 20 65 71 53 65 65 6e  .  The.** eqSeen
128a0 20 66 69 65 6c 64 20 77 69 6c 6c 20 69 6e 64 69   field will indi
128b0 63 61 74 65 20 77 68 65 74 68 65 72 20 6f 72 20  cate whether or 
128c0 6e 6f 74 20 61 6e 20 65 78 61 63 74 20 6d 61 74  not an exact mat
128d0 63 68 20 65 78 69 73 74 73 20 69 6e 20 74 68 65  ch exists in the
128e0 0a 2a 2a 20 62 2d 74 72 65 65 2e 0a 2a 2f 0a 73  .** b-tree..*/.s
128f0 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65  truct UnpackedRe
12900 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f  cord {.  KeyInfo
12910 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20   *pKeyInfo;  /* 
12920 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f  Collation and so
12930 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61  rt-order informa
12940 74 69 6f 6e 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61  tion */.  Mem *a
12950 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Mem;          /*
12960 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36   Values */.  u16
12970 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
12980 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
12990 74 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d  tries in apMem[]
129a0 20 2a 2f 0a 20 20 69 38 20 64 65 66 61 75 6c 74   */.  i8 default
129b0 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d  _rc;      /* Com
129c0 70 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 69  parison result i
129d0 66 20 6b 65 79 73 20 61 72 65 20 65 71 75 61 6c  f keys are equal
129e0 20 2a 2f 0a 20 20 75 38 20 65 72 72 43 6f 64 65   */.  u8 errCode
129f0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72  ;         /* Err
12a00 6f 72 20 64 65 74 65 63 74 65 64 20 62 79 20 78  or detected by x
12a10 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 20 28 43  RecordCompare (C
12a20 4f 52 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d 29  ORRUPT or NOMEM)
12a30 20 2a 2f 0a 20 20 69 38 20 72 31 3b 20 20 20 20   */.  i8 r1;    
12a40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
12a50 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20  ue to return if 
12a60 28 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a 20  (lhs > rhs) */. 
12a70 20 69 38 20 72 32 3b 20 20 20 20 20 20 20 20 20   i8 r2;         
12a80 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
12a90 20 72 65 74 75 72 6e 20 69 66 20 28 72 68 73 20   return if (rhs 
12aa0 3c 20 6c 68 73 29 20 2a 2f 0a 20 20 75 38 20 65  < lhs) */.  u8 e
12ab0 71 53 65 65 6e 3b 20 20 20 20 20 20 20 20 20 20  qSeen;          
12ac0 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 20 65 71  /* True if an eq
12ad0 75 61 6c 69 74 79 20 63 6f 6d 70 61 72 69 73 6f  uality compariso
12ae0 6e 20 68 61 73 20 62 65 65 6e 20 73 65 65 6e 20  n has been seen 
12af0 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  */.};.../*.** Ea
12b00 63 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20  ch SQL index is 
12b10 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
12b20 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69  emory by an.** i
12b30 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
12b40 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
12b50 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  re..**.** The co
12b60 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62  lumns of the tab
12b70 6c 65 20 74 68 61 74 20 61 72 65 20 74 6f 20 62  le that are to b
12b80 65 20 69 6e 64 65 78 65 64 20 61 72 65 20 64 65  e indexed are de
12b90 73 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68  scribed.** by th
12ba0 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65  e aiColumn[] fie
12bb0 6c 64 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ld of this struc
12bc0 74 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  ture.  For examp
12bd0 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77  le, suppose.** w
12be0 65 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f  e have the follo
12bf0 77 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69  wing table and i
12c00 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ndex:.**.**     
12c10 43 52 45 41 54 45 20 54 41 42 4c 45 20 45 78 31  CREATE TABLE Ex1
12c20 28 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c  (c1 int, c2 int,
12c30 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20   c3 text);.**   
12c40 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 45    CREATE INDEX E
12c50 78 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29  x2 ON Ex1(c3,c1)
12c60 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54  ;.**.** In the T
12c70 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 64  able structure d
12c80 65 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e  escribing Ex1, n
12c90 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74  Col==3 because t
12ca0 68 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65  here are.** thre
12cb0 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  e columns in the
12cc0 20 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20   table.  In the 
12cd0 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20  Index structure 
12ce0 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78  describing.** Ex
12cf0 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69  2, nColumn==2 si
12d00 6e 63 65 20 32 20 6f 66 20 74 68 65 20 33 20 63  nce 2 of the 3 c
12d10 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72  olumns of Ex1 ar
12d20 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68  e indexed..** Th
12d30 65 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c  e value of aiCol
12d40 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20  umn is {2, 0}.  
12d50 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62  aiColumn[0]==2 b
12d60 65 63 61 75 73 65 20 74 68 65 20 0a 2a 2a 20 66  ecause the .** f
12d70 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  irst column to b
12d80 65 20 69 6e 64 65 78 65 64 20 28 63 33 29 20 68  e indexed (c3) h
12d90 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32  as an index of 2
12da0 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a   in Ex1.aCol[]..
12db0 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f  ** The second co
12dc0 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78  lumn to be index
12dd0 65 64 20 28 63 31 29 20 68 61 73 20 61 6e 20 69  ed (c1) has an i
12de0 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20  ndex of 0 in.** 
12df0 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63  Ex1.aCol[], henc
12e00 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31  e Ex2.aiColumn[1
12e10 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ]==0..**.** The 
12e20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69  Index.onError fi
12e30 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77  eld determines w
12e40 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
12e50 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  e indexed column
12e60 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69  s.** must be uni
12e70 71 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20  que and what to 
12e80 64 6f 20 69 66 20 74 68 65 79 20 61 72 65 20 6e  do if they are n
12e90 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e  ot.  When Index.
12ea0 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c  onError=OE_None,
12eb0 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69  .** it means thi
12ec0 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75  s is not a uniqu
12ed0 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77  e index.  Otherw
12ee0 69 73 65 20 69 74 20 69 73 20 61 20 75 6e 69 71  ise it is a uniq
12ef0 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20  ue index.** and 
12f00 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64  the value of Ind
12f10 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63  ex.onError indic
12f20 61 74 65 20 74 68 65 20 77 68 69 63 68 20 63 6f  ate the which co
12f30 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
12f40 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20  n .** algorithm 
12f50 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76  to employ whenev
12f60 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73  er an attempt is
12f70 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20   made to insert 
12f80 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20  a non-unique.** 
12f90 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57  element..**.** W
12fa0 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 20 43  hile parsing a C
12fb0 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72 20 43  REATE TABLE or C
12fc0 52 45 41 54 45 20 49 4e 44 45 58 20 73 74 61 74  REATE INDEX stat
12fd0 65 6d 65 6e 74 20 69 6e 20 6f 72 64 65 72 20 74  ement in order t
12fe0 6f 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 56 44  o.** generate VD
12ff0 42 45 20 63 6f 64 65 20 28 61 73 20 6f 70 70 6f  BE code (as oppo
13000 73 65 64 20 74 6f 20 70 61 72 73 69 6e 67 20 6f  sed to parsing o
13010 6e 65 20 72 65 61 64 20 66 72 6f 6d 20 61 6e 20  ne read from an 
13020 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 2a 2a  sqlite_master.**
13030 20 74 61 62 6c 65 20 61 73 20 70 61 72 74 20 6f   table as part o
13040 66 20 70 61 72 73 69 6e 67 20 61 6e 20 65 78 69  f parsing an exi
13050 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 73  sting database s
13060 63 68 65 6d 61 29 2c 20 74 72 61 6e 73 69 65 6e  chema), transien
13070 74 20 69 6e 73 74 61 6e 63 65 73 0a 2a 2a 20 6f  t instances.** o
13080 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
13090 20 6d 61 79 20 62 65 20 63 72 65 61 74 65 64 2e   may be created.
130a0 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68   In this case th
130b0 65 20 49 6e 64 65 78 2e 74 6e 75 6d 20 76 61 72  e Index.tnum var
130c0 69 61 62 6c 65 20 69 73 0a 2a 2a 20 75 73 65 64  iable is.** used
130d0 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 61 64   to store the ad
130e0 64 72 65 73 73 20 6f 66 20 61 20 56 44 42 45 20  dress of a VDBE 
130f0 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 6e 6f 74  instruction, not
13100 20 61 20 64 61 74 61 62 61 73 65 20 70 61 67 65   a database page
13110 0a 2a 2a 20 6e 75 6d 62 65 72 20 28 69 74 20 63  .** number (it c
13120 61 6e 6e 6f 74 20 2d 20 74 68 65 20 64 61 74 61  annot - the data
13130 62 61 73 65 20 70 61 67 65 20 69 73 20 6e 6f 74  base page is not
13140 20 61 6c 6c 6f 63 61 74 65 64 20 75 6e 74 69 6c   allocated until
13150 20 74 68 65 20 56 44 42 45 0a 2a 2a 20 70 72 6f   the VDBE.** pro
13160 67 72 61 6d 20 69 73 20 65 78 65 63 75 74 65 64  gram is executed
13170 29 2e 20 53 65 65 20 63 6f 6e 76 65 72 74 54 6f  ). See convertTo
13180 57 69 74 68 6f 75 74 52 6f 77 69 64 54 61 62 6c  WithoutRowidTabl
13190 65 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  e() for details.
131a0 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78  .*/.struct Index
131b0 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
131c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
131d0 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69 6e   Name of this in
131e0 64 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61 69  dex */.  i16 *ai
131f0 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
13200 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d    /* Which colum
13210 6e 73 20 61 72 65 20 75 73 65 64 20 62 79 20 74  ns are used by t
13220 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74 20  his index.  1st 
13230 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  is 0 */.  LogEst
13240 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b 20 20   *aiRowLogEst;  
13250 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59     /* From ANALY
13260 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73 65  ZE: Est. rows se
13270 6c 65 63 74 65 64 20 62 79 20 65 61 63 68 20 63  lected by each c
13280 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65  olumn */.  Table
13290 20 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20 20   *pTable;       
132a0 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74      /* The SQL t
132b0 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65 78  able being index
132c0 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43  ed */.  char *zC
132d0 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20 20  olAff;          
132e0 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e   /* String defin
132f0 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79  ing the affinity
13300 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
13310 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 78  */.  Index *pNex
13320 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
13330 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78 20   The next index 
13340 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
13350 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 2a  the same table *
13360 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
13370 65 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ema;         /* 
13380 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e  Schema containin
13390 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  g this index */.
133a0 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72    u8 *aSortOrder
133b0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6f  ;          /* fo
133c0 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54  r each column: T
133d0 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65  rue==DESC, False
133e0 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 68 61 72 20  ==ASC */.  char 
133f0 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 20 20  **azColl;       
13400 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20      /* Array of 
13410 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
13420 63 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64  ce names for ind
13430 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50  ex */.  Expr *pP
13440 61 72 74 49 64 78 57 68 65 72 65 3b 20 20 20 20  artIdxWhere;    
13450 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65   /* WHERE clause
13460 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64   for partial ind
13470 69 63 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ices */.  ExprLi
13480 73 74 20 2a 61 43 6f 6c 45 78 70 72 3b 20 20 20  st *aColExpr;   
13490 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 65 78 70     /* Column exp
134a0 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e  ressions */.  in
134b0 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  t tnum;         
134c0 20 20 20 20 20 20 20 2f 2a 20 44 42 20 50 61 67         /* DB Pag
134d0 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f  e containing roo
134e0 74 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20  t of this index 
134f0 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49 64  */.  LogEst szId
13500 78 52 6f 77 3b 20 20 20 20 20 20 20 20 20 2f 2a  xRow;         /*
13510 20 45 73 74 69 6d 61 74 65 64 20 61 76 65 72 61   Estimated avera
13520 67 65 20 72 6f 77 20 73 69 7a 65 20 69 6e 20 62  ge row size in b
13530 79 74 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b  ytes */.  u16 nK
13540 65 79 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  eyCol;          
13550 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13560 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20  columns forming 
13570 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36  the key */.  u16
13580 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   nColumn;       
13590 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
135a0 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65  of columns store
135b0 64 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a  d in the index *
135c0 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20  /.  u8 onError; 
135d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
135e0 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e  OE_Abort, OE_Ign
135f0 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c  ore, OE_Replace,
13600 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20   or OE_None */. 
13610 20 75 6e 73 69 67 6e 65 64 20 69 64 78 54 79 70   unsigned idxTyp
13620 65 3a 32 3b 20 20 20 20 20 20 2f 2a 20 31 3d 3d  e:2;      /* 1==
13630 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41  UNIQUE, 2==PRIMA
13640 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54  RY KEY, 0==CREAT
13650 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73  E INDEX */.  uns
13660 69 67 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64  igned bUnordered
13670 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69  :1;   /* Use thi
13680 73 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f  s index for == o
13690 72 20 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c  r IN queries onl
136a0 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  y */.  unsigned 
136b0 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20  uniqNotNull:1;  
136c0 2f 2a 20 54 72 75 65 20 69 66 20 55 4e 49 51 55  /* True if UNIQU
136d0 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66  E and NOT NULL f
136e0 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a  or all columns *
136f0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52  /.  unsigned isR
13700 65 73 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20  esized:1;    /* 
13710 54 72 75 65 20 69 66 20 72 65 73 69 7a 65 49 6e  True if resizeIn
13720 64 65 78 4f 62 6a 65 63 74 28 29 20 68 61 73 20  dexObject() has 
13730 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20  been called */. 
13740 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 76 65   unsigned isCove
13750 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75  ring:1;   /* Tru
13760 65 20 69 66 20 74 68 69 73 20 69 73 20 61 20 63  e if this is a c
13770 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f  overing index */
13780 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 53 6b  .  unsigned noSk
13790 69 70 53 63 61 6e 3a 31 3b 20 20 20 2f 2a 20 44  ipScan:1;   /* D
137a0 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20 75 73 65  o not try to use
137b0 20 73 6b 69 70 2d 73 63 61 6e 20 69 66 20 74 72   skip-scan if tr
137c0 75 65 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  ue */.#ifdef SQL
137d0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
137e0 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20  _OR_STAT4.  int 
137f0 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20  nSample;        
13800 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13810 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53  f elements in aS
13820 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  ample[] */.  int
13830 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20   nSampleCol;    
13840 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
13850 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45   IndexSample.anE
13860 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f  q[] and so on */
13870 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67  .  tRowcnt *aAvg
13880 45 71 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  Eq;         /* A
13890 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65  verage nEq value
138a0 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69  s for keys not i
138b0 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49  n aSample */.  I
138c0 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d  ndexSample *aSam
138d0 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c  ple;    /* Sampl
138e0 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d  es of the left-m
138f0 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f  ost key */.  tRo
13900 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20  wcnt *aiRowEst; 
13910 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67        /* Non-log
13920 61 72 69 74 68 6d 69 63 20 73 74 61 74 31 20 64  arithmic stat1 d
13930 61 74 61 20 66 6f 72 20 74 68 69 73 20 69 6e 64  ata for this ind
13940 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  ex */.  tRowcnt 
13950 6e 52 6f 77 45 73 74 30 3b 20 20 20 20 20 20 20  nRowEst0;       
13960 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68   /* Non-logarith
13970 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  mic number of ro
13980 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ws in the index 
13990 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
139a0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
139b0 65 73 20 66 6f 72 20 49 6e 64 65 78 2e 69 64 78  es for Index.idx
139c0 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  Type.*/.#define 
139d0 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 41  SQLITE_IDXTYPE_A
139e0 50 50 44 45 46 20 20 20 20 20 20 30 20 20 20 2f  PPDEF      0   /
139f0 2a 20 43 72 65 61 74 65 64 20 75 73 69 6e 67 20  * Created using 
13a00 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
13a10 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
13a20 44 58 54 59 50 45 5f 55 4e 49 51 55 45 20 20 20  DXTYPE_UNIQUE   
13a30 20 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d     1   /* Implem
13a40 65 6e 74 73 20 61 20 55 4e 49 51 55 45 20 63 6f  ents a UNIQUE co
13a50 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
13a60 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
13a70 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 20 20 32  PE_PRIMARYKEY  2
13a80 20 20 20 2f 2a 20 49 73 20 74 68 65 20 50 52 49     /* Is the PRI
13a90 4d 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65  MARY KEY for the
13aa0 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65   table */../* Re
13ab0 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64  turn true if ind
13ac0 65 78 20 58 20 69 73 20 61 20 50 52 49 4d 41 52  ex X is a PRIMAR
13ad0 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23  Y KEY index */.#
13ae0 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72 79  define IsPrimary
13af0 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28 28 58  KeyIndex(X)  ((X
13b00 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c 49  )->idxType==SQLI
13b10 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41  TE_IDXTYPE_PRIMA
13b20 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72  RYKEY)../* Retur
13b30 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20  n true if index 
13b40 58 20 69 73 20 61 20 55 4e 49 51 55 45 20 69 6e  X is a UNIQUE in
13b50 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  dex */.#define I
13b60 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29 20  sUniqueIndex(X) 
13b70 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72       ((X)->onErr
13b80 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a  or!=OE_None)../*
13b90 20 54 68 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c   The Index.aiCol
13ba0 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61 72 65  umn[] values are
13bb0 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69   normally positi
13bc0 76 65 20 69 6e 74 65 67 65 72 2e 20 20 42 75 74  ve integer.  But
13bd0 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 73 6f  .** there are so
13be0 6d 65 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75  me negative valu
13bf0 65 73 20 74 68 61 74 20 68 61 76 65 20 73 70 65  es that have spe
13c00 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f  cial meaning:.*/
13c10 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49  .#define XN_ROWI
13c20 44 20 20 20 20 20 28 2d 31 29 20 20 20 20 20 2f  D     (-1)     /
13c30 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  * Indexed column
13c40 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f   is the rowid */
13c50 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45 58 50 52  .#define XN_EXPR
13c60 20 20 20 20 20 20 28 2d 32 29 20 20 20 20 20 2f        (-2)     /
13c70 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  * Indexed column
13c80 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f   is an expressio
13c90 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  n */../*.** Each
13ca0 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69   sample stored i
13cb0 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  n the sqlite_sta
13cc0 74 33 20 74 61 62 6c 65 20 69 73 20 72 65 70 72  t3 table is repr
13cd0 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
13ce0 79 20 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74  y .** using a st
13cf0 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73 20  ructure of this 
13d00 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d  type.  See docum
13d10 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20  entation at the 
13d20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e  top of the.** an
13d30 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66  alyze.c source f
13d40 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ile for addition
13d50 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
13d60 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53  */.struct IndexS
13d70 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a  ample {.  void *
13d80 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50  p;          /* P
13d90 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65  ointer to sample
13da0 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  d record */.  in
13db0 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  t n;            
13dc0 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72  /* Size of recor
13dd0 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  d in bytes */.  
13de0 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20  tRowcnt *anEq;  
13df0 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
13e00 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 74   of rows where t
13e10 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68  he key equals th
13e20 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74  is sample */.  t
13e30 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20  Rowcnt *anLt;   
13e40 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
13e50 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65  of rows where ke
13e60 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
13e70 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
13e80 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20  tRowcnt *anDLt; 
13e90 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
13ea0 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79   of distinct key
13eb0 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73  s less than this
13ec0 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f   sample */.};../
13ed0 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20  *.** Each token 
13ee0 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68  coming out of th
13ef0 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e  e lexer is an in
13f00 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69  stance of.** thi
13f10 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f  s structure.  To
13f20 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73  kens are also us
13f30 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e  ed as part of an
13f40 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a   expression..**.
13f50 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e  ** Note if Token
13f60 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e  .z==0 then Token
13f70 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e  .dyn and Token.n
13f80 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61   are undefined a
13f90 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69  nd.** may contai
13fa0 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e  n random values.
13fb0 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e    Do not make an
13fc0 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62  y assumptions ab
13fd0 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a  out Token.dyn.**
13fe0 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65   and Token.n whe
13ff0 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f  n Token.z==0..*/
14000 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a  .struct Token {.
14010 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b    const char *z;
14020 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
14030 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20  the token.  Not 
14040 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21  NULL-terminated!
14050 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
14060 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62  nt n;    /* Numb
14070 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73  er of characters
14080 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a   in this token *
14090 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
140a0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
140b0 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
140c0 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e  ns information n
140d0 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
140e0 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20  e.** code for a 
140f0 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74  SELECT that cont
14100 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66  ains aggregate f
14110 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
14120 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41  If Expr.op==TK_A
14130 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f  GG_COLUMN or TK_
14140 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65  AGG_FUNCTION the
14150 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20  n Expr.pAggInfo 
14160 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  is a.** pointer 
14170 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
14180 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f  e.  The Expr.iCo
14190 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68  lumn field is th
141a0 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67  e index in.** Ag
141b0 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20  gInfo.aCol[] or 
141c0 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20  AggInfo.aFunc[] 
141d0 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e  of information n
141e0 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
141f0 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68  e.** code for th
14200 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41  at node..**.** A
14210 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20  ggInfo.pGroupBy 
14220 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e  and AggInfo.aFun
14230 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f  c.pExpr point to
14240 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74   fields within t
14250 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53  he.** original S
14260 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65 20  elect structure 
14270 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74  that describes t
14280 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
14290 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66  ent.  These.** f
142a0 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65  ields do not nee
142b0 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77 68  d to be freed wh
142c0 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20  en deallocating 
142d0 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75  the AggInfo stru
142e0 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
142f0 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20   AggInfo {.  u8 
14300 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20  directMode;     
14310 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72       /* Direct r
14320 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65  endering mode me
14330 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64 69  ans take data di
14340 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20  rectly.         
14350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14360 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20   ** from source 
14370 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74 68  tables rather th
14380 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61  an from accumula
14390 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65  tors */.  u8 use
143a0 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20  SortingIdx;     
143b0 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d    /* In direct m
143c0 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74  ode, reference t
143d0 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
143e0 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20 20   rather.        
143f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14400 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f    ** than the so
14410 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
14420 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20  int sortingIdx; 
14430 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
14440 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  r number of the 
14450 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
14460 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64  .  int sortingId
14470 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75  xPTab;     /* Cu
14480 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70  rsor number of p
14490 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20  seudo-table */. 
144a0 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c   int nSortingCol
144b0 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62  umn;     /* Numb
144c0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
144d0 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
144e0 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65  ex */.  int mnRe
144f0 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20 20  g, mxReg;       
14500 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67 69  /* Range of regi
14510 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20  sters allocated 
14520 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46 75  for aCol and aFu
14530 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  nc */.  ExprList
14540 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20   *pGroupBy;     
14550 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79 20  /* The group by 
14560 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75  clause */.  stru
14570 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b  ct AggInfo_col {
14580 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20      /* For each 
14590 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73  column used in s
145a0 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a  ource tables */.
145b0 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
145c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
145d0 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  Source table */.
145e0 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20      int iTable; 
145f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14600 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
14610 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
14620 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f  e */.    int iCo
14630 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
14640 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62    /* Column numb
14650 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f  er within the so
14660 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
14670 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c    int iSorterCol
14680 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f  umn;       /* Co
14690 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74  lumn number in t
146a0 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
146b0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d   */.    int iMem
146c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
146d0 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74   /* Memory locat
146e0 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73  ion that acts as
146f0 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
14700 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
14710 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14720 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70  The original exp
14730 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a  ression */.  } *
14740 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c  aCol;.  int nCol
14750 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
14760 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65  /* Number of use
14770 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f  d entries in aCo
14780 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63  l[] */.  int nAc
14790 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20  cumulator;      
147a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
147b0 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20  lumns that show 
147c0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f  through to the o
147d0 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20  utput..         
147e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147f0 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63   ** Additional c
14800 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20  olumns are used 
14810 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65  only as paramete
14820 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20  rs to.          
14830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14840 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ** aggregate fun
14850 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75  ctions */.  stru
14860 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20  ct AggInfo_func 
14870 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20  {   /* For each 
14880 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
14890 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  on */.    Expr *
148a0 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
148b0 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
148c0 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75   encoding the fu
148d0 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75  nction */.    Fu
148e0 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20  ncDef *pFunc;   
148f0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67         /* The ag
14900 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
14910 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
14920 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b  */.    int iMem;
14930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14940 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  /* Memory locati
14950 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20  on that acts as 
14960 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20  accumulator */. 
14970 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74     int iDistinct
14980 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45  ;           /* E
14990 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75  phemeral table u
149a0 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44  sed to enforce D
149b0 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a  ISTINCT */.  } *
149c0 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75  aFunc;.  int nFu
149d0 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
149e0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
149f0 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d  tries in aFunc[]
14a00 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
14a10 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61 72  e datatype ynVar
14a20 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74   is a signed int
14a30 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d  eger, either 16-
14a40 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a  bit or 32-bit..*
14a50 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20  * Usually it is 
14a60 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66  16-bits.  But if
14a70 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49   SQLITE_MAX_VARI
14a80 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67  ABLE_NUMBER is g
14a90 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33  reater.** than 3
14aa0 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f 20  2767 we have to 
14ab0 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20  make it 32-bit. 
14ac0 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66 65   16-bit is prefe
14ad0 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20  rred because.** 
14ae0 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d  it uses less mem
14af0 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72 20  ory in the Expr 
14b00 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73  object, which is
14b10 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73   a big memory us
14b20 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73  er.** in systems
14b30 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72   with lots of pr
14b40 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
14b50 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c  s.  And few appl
14b60 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64  ications.** need
14b70 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74   more than about
14b80 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61 62   10 or 20 variab
14b90 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65  les.  But some e
14ba0 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e  xtreme users wan
14bb0 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65  t.** to have pre
14bc0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73  pared statements
14bd0 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36 37   with over 32767
14be0 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20   variables, and 
14bf0 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20  for them.** the 
14c00 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61  option is availa
14c10 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d  ble (at compile-
14c20 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51  time)..*/.#if SQ
14c30 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
14c40 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a  E_NUMBER<=32767.
14c50 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56 61  typedef i16 ynVa
14c60 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66  r;.#else.typedef
14c70 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64   int ynVar;.#end
14c80 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e  if../*.** Each n
14c90 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73  ode of an expres
14ca0 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73  sion in the pars
14cb0 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73  e tree is an ins
14cc0 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73  tance.** of this
14cd0 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
14ce0 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65  * Expr.op is the
14cf0 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74   opcode. The int
14d00 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65  eger parser toke
14d10 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75 73  n codes are reus
14d20 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73  ed.** as opcodes
14d30 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70   here. For examp
14d40 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 64  le, the parser d
14d50 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20  efines TK_GE to 
14d60 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  be an integer.**
14d70 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69   code representi
14d80 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72  ng the ">=" oper
14d90 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20  ator. This same 
14da0 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73 20  integer code is 
14db0 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70  reused.** to rep
14dc0 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61 74  resent the great
14dd0 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c  er-than-or-equal
14de0 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20  -to operator in 
14df0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a  the expression.*
14e00 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  * tree..**.** If
14e10 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
14e20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61  is an SQL litera
14e30 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54  l (TK_INTEGER, T
14e40 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42  K_FLOAT, TK_BLOB
14e50 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49  , .** or TK_STRI
14e60 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74  NG), then Expr.t
14e70 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
14e80 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53 51  e text of the SQ
14e90 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a  L literal. If.**
14ea0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
14eb0 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28 54  is a variable (T
14ec0 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65  K_VARIABLE), the
14ed0 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
14ee0 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76 61  tains the .** va
14ef0 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e  riable name. Fin
14f00 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70  ally, if the exp
14f10 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
14f20 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46  L function (TK_F
14f30 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65  UNCTION),.** the
14f40 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
14f50 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f  tains the name o
14f60 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a  f the function..
14f70 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68  **.** Expr.pRigh
14f80 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74  t and Expr.pLeft
14f90 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e   are the left an
14fa0 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65  d right subexpre
14fb0 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62  ssions of a.** b
14fc0 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20  inary operator. 
14fd0 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d  Either or both m
14fe0 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  ay be NULL..**.*
14ff0 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  * Expr.x.pList i
15000 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75  s a list of argu
15010 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70  ments if the exp
15020 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
15030 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61  L function,.** a
15040 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
15050 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73   or an IN expres
15060 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
15070 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c   "<lhs> IN (<y>,
15080 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78   <z>...)"..** Ex
15090 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
150a0 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72  used if the expr
150b0 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d  ession is a sub-
150c0 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70  select or an exp
150d0 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ression of.** th
150e0 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e  e form "<lhs> IN
150f0 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20   (SELECT ...)". 
15100 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c  If the EP_xIsSel
15110 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69  ect bit is set i
15120 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c  n the.** Expr.fl
15130 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45  ags mask, then E
15140 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
15150 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73   valid. Otherwis
15160 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  e, Expr.x.pList 
15170 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a  is .** valid..**
15180 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f  .** An expressio
15190 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44  n of the form ID
151a0 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73   or ID.ID refers
151b0 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20   to a column in 
151c0 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20  a table..** For 
151d0 73 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73  such expressions
151e0 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74  , Expr.op is set
151f0 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e   to TK_COLUMN an
15200 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73  d Expr.iTable is
15210 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20  .** the integer 
15220 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  cursor number of
15230 20 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70   a VDBE cursor p
15240 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20  ointing to that 
15250 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70  table and.** Exp
15260 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65  r.iColumn is the
15270 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66   column number f
15280 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20  or the specific 
15290 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a  column.  If the.
152a0 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  ** expression is
152b0 20 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c   used as a resul
152c0 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74  t in an aggregat
152d0 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74  e SELECT, then t
152e0 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61  he.** value is a
152f0 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68  lso stored in th
15300 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75  e Expr.iAgg colu
15310 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67  mn in the aggreg
15320 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69  ate so that.** i
15330 74 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65  t can be accesse
15340 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72  d after all aggr
15350 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75  egates are compu
15360 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ted..**.** If th
15370 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
15380 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61  an unbound varia
15390 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75  ble marker (a qu
153a0 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20  estion mark .** 
153b0 63 68 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e  character '?' in
153c0 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51   the original SQ
153d0 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78 70 72  L) then the Expr
153e0 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68  .iTable holds th
153f0 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d 62  e index .** numb
15400 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72 69  er for that vari
15410 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  able..**.** If t
15420 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
15430 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65 6e   a subquery then
15440 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f   Expr.iColumn ho
15450 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a  lds an integer.*
15460 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  * register numbe
15470 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  r containing the
15480 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73   result of the s
15490 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68 65  ubquery.  If the
154a0 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69 76  .** subquery giv
154b0 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65  es a constant re
154c0 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c  sult, then iTabl
154d0 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65  e is -1.  If the
154e0 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76   subquery.** giv
154f0 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 61  es a different a
15500 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72 65  nswer at differe
15510 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20  nt times during 
15520 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73  statement proces
15530 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61  sing.** then iTa
15540 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72 65  ble is the addre
15550 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69  ss of a subrouti
15560 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73  ne that computes
15570 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a   the subquery..*
15580 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72  *.** If the Expr
15590 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43   is of type OP_C
155a0 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74  olumn, and the t
155b0 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63  able it is selec
155c0 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20  ting from.** is 
155d0 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20  a disk table or 
155e0 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75  the "old.*" pseu
155f0 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70  do-table, then p
15600 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  Tab points to th
15610 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69  e.** correspondi
15620 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  ng table definit
15630 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43  ion..**.** ALLOC
15640 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a  ATION NOTES:.**.
15650 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  ** Expr objects 
15660 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66  can use a lot of
15670 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e   memory space in
15680 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
15690 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65  .  To.** help re
156a0 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75  duce memory requ
156b0 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69  irements, someti
156c0 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  mes an Expr obje
156d0 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72  ct will be.** tr
156e0 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f  uncated.  And to
156f0 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62   reduce the numb
15700 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c  er of memory all
15710 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69  ocations, someti
15720 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f  mes.** two or mo
15730 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  re Expr objects 
15740 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69  will be stored i
15750 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72  n a single memor
15760 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a  y allocation,.**
15770 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 45   together with E
15780 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e  xpr.zToken strin
15790 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  gs..**.** If the
157a0 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20   EP_Reduced and 
157b0 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
157c0 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a  gs are set when.
157d0 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63  ** an Expr objec
157e0 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20  t is truncated. 
157f0 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64   When EP_Reduced
15800 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c   is set, then al
15810 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45  l.** the child E
15820 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74  xpr objects in t
15830 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e  he Expr.pLeft an
15840 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73 75  d Expr.pRight su
15850 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f  btrees.** are co
15860 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74  ntained within t
15870 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61  he same memory a
15880 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65  llocation.  Note
15890 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a  , however, that.
158a0 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73 20  ** the subtrees 
158b0 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  in Expr.x.pList 
158c0 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  or Expr.x.pSelec
158d0 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65 70  t are always sep
158e0 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63  arately.** alloc
158f0 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73  ated, regardless
15900 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e   of whether or n
15910 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  ot EP_Reduced is
15920 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   set..*/.struct 
15930 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20  Expr {.  u8 op; 
15940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15950 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72  /* Operation per
15960 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e  formed by this n
15970 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  ode */.  char af
15980 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20  finity;         
15990 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
159a0 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72  of the column or
159b0 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75   0 if not a colu
159c0 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67  mn */.  u32 flag
159d0 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
159e0 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e  * Various flags.
159f0 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77    EP_* See below
15a00 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
15a10 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20    char *zToken; 
15a20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
15a30 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65  n value. Zero te
15a40 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71  rminated and deq
15a50 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74  uoted */.    int
15a60 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20   iValue;        
15a70 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74      /* Non-negat
15a80 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  ive integer valu
15a90 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65  e if EP_IntValue
15aa0 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a   */.  } u;..  /*
15ab0 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e   If the EP_Token
15ac0 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74  Only flag is set
15ad0 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
15ae0 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f  gs mask, then no
15af0 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61  .  ** space is a
15b00 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65  llocated for the
15b10 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68   fields below th
15b20 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74  is point. An att
15b30 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63  empt to.  ** acc
15b40 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65  ess them will re
15b50 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75  sult in a segfau
15b60 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f  lt or malfunctio
15b70 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n. .  **********
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 2f 0a 0a 20 20  ***********/..  
15bc0 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20  Expr *pLeft;    
15bd0 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73         /* Left s
15be0 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72  ubnode */.  Expr
15bf0 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20 20   *pRight;       
15c00 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e     /* Right subn
15c10 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ode */.  union {
15c20 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70  .    ExprList *p
15c30 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20  List;     /* op 
15c40 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45  = IN, EXISTS, SE
15c50 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43  LECT, CASE, FUNC
15c60 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f  TION, BETWEEN */
15c70 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
15c80 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f  lect;     /* EP_
15c90 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70  xIsSelect and op
15ca0 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53   = IN, EXISTS, S
15cb0 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a  ELECT */.  } x;.
15cc0 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f  .  /* If the EP_
15cd0 52 65 64 75 63 65 64 20 66 6c 61 67 20 69 73 20  Reduced flag is 
15ce0 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e  set in the Expr.
15cf0 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
15d00 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69   no.  ** space i
15d10 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
15d20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77  the fields below
15d30 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20   this point. An 
15d40 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20  attempt to.  ** 
15d50 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c  access them will
15d60 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67   result in a seg
15d70 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63  fault or malfunc
15d80 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  tion..  ********
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 2f 0a 0a  *************/..
15dd0 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45  #if SQLITE_MAX_E
15de0 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e  XPR_DEPTH>0.  in
15df0 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20  t nHeight;      
15e00 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f       /* Height o
15e10 66 20 74 68 65 20 74 72 65 65 20 68 65 61 64 65  f the tree heade
15e20 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a  d by this node *
15e30 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69  /.#endif.  int i
15e40 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
15e50 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    /* TK_COLUMN: 
15e60 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  cursor number of
15e70 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63   table holding c
15e80 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20  olumn.          
15e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
15ea0 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72  * TK_REGISTER: r
15eb0 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20  egister number. 
15ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ed0 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52          ** TK_TR
15ee0 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c  IGGER: 1 -> new,
15ef0 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20   0 -> old.      
15f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f10 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c     ** EP_Unlikel
15f20 79 3a 20 20 31 33 34 32 31 37 37 32 38 20 74 69  y:  134217728 ti
15f30 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 20 2a  mes likelihood *
15f40 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d  /.  ynVar iColum
15f50 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b  n;         /* TK
15f60 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20  _COLUMN: column 
15f70 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72  index.  -1 for r
15f80 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20  owid..          
15f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
15fa0 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76  * TK_VARIABLE: v
15fb0 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28  ariable number (
15fc0 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f  always >= 1). */
15fd0 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20 20  .  i16 iAgg;    
15fe0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
15ff0 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67  ch entry in pAgg
16000 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20  Info->aCol[] or 
16010 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69  ->aFunc[] */.  i
16020 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62  16 iRightJoinTab
16030 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46  le;   /* If EP_F
16040 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67  romJoin, the rig
16050 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20  ht table of the 
16060 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32  join */.  u8 op2
16070 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
16080 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a   /* TK_REGISTER:
16090 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20   original value 
160a0 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20  of Expr.op.     
160b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160c0 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      ** TK_COLUMN
160d0 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70  : the value of p
160e0 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a  5 for OP_Column.
160f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16100 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41           ** TK_A
16110 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73  GG_FUNCTION: nes
16120 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20  ting depth */.  
16130 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
16140 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62  o;     /* Used b
16150 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20  y TK_AGG_COLUMN 
16160 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54  and TK_AGG_FUNCT
16170 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ION */.  Table *
16180 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
16190 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f  /* Table for TK_
161a0 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f  COLUMN expressio
161b0 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ns. */.};../*.**
161c0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   The following a
161d0 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20  re the meanings 
161e0 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20 45  of bits in the E
161f0 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e  xpr.flags field.
16200 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46  .*/.#define EP_F
16210 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30 30  romJoin  0x00000
16220 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73 20  1 /* Originates 
16230 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75  in ON/USING clau
16240 73 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e  se of outer join
16250 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41   */.#define EP_A
16260 67 67 20 20 20 20 20 20 20 30 78 30 30 30 30 30  gg       0x00000
16270 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e  2 /* Contains on
16280 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67  e or more aggreg
16290 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
162a0 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f  .#define EP_Reso
162b0 6c 76 65 64 20 20 30 78 30 30 30 30 30 34 20 2f  lved  0x000004 /
162c0 2a 20 49 44 73 20 68 61 76 65 20 62 65 65 6e 20  * IDs have been 
162d0 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55  resolved to COLU
162e0 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  MNs */.#define E
162f0 50 5f 45 72 72 6f 72 20 20 20 20 20 30 78 30 30  P_Error     0x00
16300 30 30 30 38 20 2f 2a 20 45 78 70 72 65 73 73 69  0008 /* Expressi
16310 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  on contains one 
16320 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a  or more errors *
16330 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73  /.#define EP_Dis
16340 74 69 6e 63 74 20 20 30 78 30 30 30 30 31 30 20  tinct  0x000010 
16350 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
16360 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49  ction with DISTI
16370 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  NCT keyword */.#
16380 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c  define EP_VarSel
16390 65 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20  ect 0x000020 /* 
163a0 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65  pSelect is corre
163b0 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74  lated, not const
163c0 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ant */.#define E
163d0 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30  P_DblQuoted 0x00
163e0 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20  0040 /* token.z 
163f0 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69  was originally i
16400 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69  n "..." */.#defi
16410 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20  ne EP_InfixFunc 
16420 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65  0x000080 /* True
16430 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75   for an infix fu
16440 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c  nction: LIKE, GL
16450 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69  OB, etc */.#defi
16460 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20  ne EP_Collate   
16470 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65  0x000100 /* Tree
16480 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43   contains a TK_C
16490 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20  OLLATE operator 
164a0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65  */.#define EP_Ge
164b0 6e 65 72 69 63 20 20 20 30 78 30 30 30 32 30 30  neric   0x000200
164c0 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41   /* Ignore COLLA
164d0 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f  TE or affinity o
164e0 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23  n this tree */.#
164f0 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c  define EP_IntVal
16500 75 65 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20  ue  0x000400 /* 
16510 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f  Integer value co
16520 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61  ntained in u.iVa
16530 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  lue */.#define E
16540 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78 30 30  P_xIsSelect 0x00
16550 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63  0800 /* x.pSelec
16560 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65  t is valid (othe
16570 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73  rwise x.pList is
16580 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ) */.#define EP_
16590 53 6b 69 70 20 20 20 20 20 20 30 78 30 30 31 30  Skip      0x0010
165a0 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41  00 /* COLLATE, A
165b0 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a  S, or UNLIKELY *
165c0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64  /.#define EP_Red
165d0 75 63 65 64 20 20 20 30 78 30 30 32 30 30 30 20  uced   0x002000 
165e0 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45  /* Expr struct E
165f0 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20  XPR_REDUCEDSIZE 
16600 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  bytes only */.#d
16610 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  efine EP_TokenOn
16620 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45  ly 0x004000 /* E
16630 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f  xpr struct EXPR_
16640 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79  TOKENONLYSIZE by
16650 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  tes only */.#def
16660 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20 20  ine EP_Static   
16670 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c   0x008000 /* Hel
16680 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20  d in memory not 
16690 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61  obtained from ma
166a0 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e  lloc() */.#defin
166b0 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30  e EP_MemToken  0
166c0 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20  x010000 /* Need 
166d0 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  to sqlite3DbFree
166e0 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a  () Expr.zToken *
166f0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52  /.#define EP_NoR
16700 65 64 75 63 65 20 20 30 78 30 32 30 30 30 30 20  educe  0x020000 
16710 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55  /* Cannot EXPRDU
16720 50 5f 52 45 44 55 43 45 20 74 68 69 73 20 45 78  P_REDUCE this Ex
16730 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  pr */.#define EP
16740 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30  _Unlikely  0x040
16750 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28  000 /* unlikely(
16760 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28  ) or likelihood(
16770 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
16780 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75  efine EP_ConstFu
16790 6e 63 20 30 78 30 38 30 30 30 30 20 2f 2a 20 41  nc 0x080000 /* A
167a0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
167b0 53 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48 4e  STANT or _SLOCHN
167c0 47 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  G function */.#d
167d0 65 66 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75  efine EP_CanBeNu
167e0 6c 6c 20 30 78 31 30 30 30 30 30 20 2f 2a 20 43  ll 0x100000 /* C
167f0 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73 70 69  an be null despi
16800 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73  te NOT NULL cons
16810 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
16820 65 20 45 50 5f 53 75 62 71 75 65 72 79 20 20 30  e EP_Subquery  0
16830 78 32 30 30 30 30 30 20 2f 2a 20 54 72 65 65 20  x200000 /* Tree 
16840 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53 45  contains a TK_SE
16850 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f  LECT operator */
16860 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 6c 69 61  .#define EP_Alia
16870 73 20 20 20 20 20 30 78 34 30 30 30 30 30 20 2f  s     0x400000 /
16880 2a 20 49 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  * Is an alias fo
16890 72 20 61 20 72 65 73 75 6c 74 20 73 65 74 20 63  r a result set c
168a0 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  olumn */../*.** 
168b0 43 6f 6d 62 69 6e 61 74 69 6f 6e 73 20 6f 66 20  Combinations of 
168c0 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 50 5f 2a  two or more EP_*
168d0 20 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e   flags.*/.#defin
168e0 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20 28  e EP_Propagate (
168f0 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53 75  EP_Collate|EP_Su
16900 62 71 75 65 72 79 29 20 2f 2a 20 50 72 6f 70 61  bquery) /* Propa
16910 67 61 74 65 20 74 68 65 73 65 20 62 69 74 73 20  gate these bits 
16920 75 70 20 74 72 65 65 20 2a 2f 0a 0a 2f 2a 0a 2a  up tree */../*.*
16930 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63  * These macros c
16940 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65  an be used to te
16950 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61  st, set, or clea
16960 72 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a  r bits in the .*
16970 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65  * Expr.flags fie
16980 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ld..*/.#define E
16990 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28 45  xprHasProperty(E
169a0 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66  ,P)     (((E)->f
169b0 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64  lags&(P))!=0).#d
169c0 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c 6c  efine ExprHasAll
169d0 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28  Property(E,P)  (
169e0 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29  ((E)->flags&(P))
169f0 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45  ==(P)).#define E
16a00 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 45  xprSetProperty(E
16a10 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61  ,P)     (E)->fla
16a20 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20  gs|=(P).#define 
16a30 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74  ExprClearPropert
16a40 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c  y(E,P)   (E)->fl
16a50 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68  ags&=~(P)../* Th
16a60 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70  e ExprSetVVAProp
16a70 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73 20  erty() macro is 
16a80 75 73 65 64 20 66 6f 72 20 56 65 72 69 66 69 63  used for Verific
16a90 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f  ation, Validatio
16aa0 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65 64  n,.** and Accred
16ab0 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49  itation only.  I
16ac0 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70  t works like Exp
16ad0 72 53 65 74 50 72 6f 70 65 72 74 79 28 29 20 64  rSetProperty() d
16ae0 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f  uring VVA.** pro
16af0 63 65 73 73 65 73 20 62 75 74 20 69 73 20 61 20  cesses but is a 
16b00 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76 65  no-op for delive
16b10 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
16b20 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66  LITE_DEBUG.# def
16b30 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72  ine ExprSetVVAPr
16b40 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 45 29  operty(E,P)  (E)
16b50 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c  ->flags|=(P).#el
16b60 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72  se.# define Expr
16b70 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45  SetVVAProperty(E
16b80 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ,P).#endif../*.*
16b90 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
16ba0 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72  rmine the number
16bb0 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69 72   of bytes requir
16bc0 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45  ed by a normal E
16bd0 78 70 72 20 0a 2a 2a 20 73 74 72 75 63 74 2c 20  xpr .** struct, 
16be0 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77  an Expr struct w
16bf0 69 74 68 20 74 68 65 20 45 50 5f 52 65 64 75 63  ith the EP_Reduc
16c00 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45  ed flag set in E
16c10 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a 20 61 6e  xpr.flags .** an
16c20 64 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74  d an Expr struct
16c30 20 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b   with the EP_Tok
16c40 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e  enOnly flag set.
16c50 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52  .*/.#define EXPR
16c60 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20  _FULLSIZE       
16c70 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29      sizeof(Expr)
16c80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75             /* Fu
16c90 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69  ll size */.#defi
16ca0 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45 44 53  ne EXPR_REDUCEDS
16cb0 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73 65  IZE        offse
16cc0 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29  tof(Expr,iTable)
16cd0 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74    /* Common feat
16ce0 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ures */.#define 
16cf0 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49  EXPR_TOKENONLYSI
16d00 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66  ZE      offsetof
16d10 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f  (Expr,pLeft)   /
16d20 2a 20 46 65 77 65 72 20 66 65 61 74 75 72 65 73  * Fewer features
16d30 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73   */../*.** Flags
16d40 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 73   passed to the s
16d50 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20  qlite3ExprDup() 
16d60 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68  function. See th
16d70 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74  e header comment
16d80 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74   .** above sqlit
16d90 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72 20  e3ExprDup() for 
16da0 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66  details..*/.#def
16db0 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44 55  ine EXPRDUP_REDU
16dc0 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30 30  CE         0x000
16dd0 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63  1  /* Used reduc
16de0 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64  ed-size Expr nod
16df0 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c  es */../*.** A l
16e00 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
16e10 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65 73  ns.  Each expres
16e20 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61  sion may optiona
16e30 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61  lly have a.** na
16e40 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d  me.  An expr/nam
16e50 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61  e combination ca
16e60 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65 76  n be used in sev
16e70 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a  eral ways, such.
16e80 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f  ** as the list o
16e90 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20 66  f "expr AS ID" f
16ea0 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20  ields following 
16eb0 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e  a "SELECT" or in
16ec0 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20   the.** list of 
16ed0 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d  "ID = expr" item
16ee0 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20  s in an UPDATE. 
16ef0 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   A list of expre
16f00 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c  ssions can.** al
16f10 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74 68  so be used as th
16f20 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20  e argument to a 
16f30 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69  function, in whi
16f40 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e  ch case the a.zN
16f50 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20  ame.** field is 
16f60 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  not used..**.** 
16f70 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20 45  By default the E
16f80 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20  xpr.zSpan field 
16f90 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65  holds a human-re
16fa0 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74 69  adable descripti
16fb0 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70  on of.** the exp
16fc0 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
16fd0 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65  used in the gene
16fe0 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20  ration of error 
16ff0 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20  messages and.** 
17000 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20  column labels.  
17010 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45 78  In this case, Ex
17020 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69  pr.zSpan is typi
17030 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f  cally the text o
17040 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78  f a.** column ex
17050 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65  pression as it e
17060 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43  xists in a SELEC
17070 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f  T statement.  Ho
17080 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65  wever, if.** the
17090 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67   bSpanIsTab flag
170a0 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53   is set, then zS
170b0 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65  pan is overloade
170c0 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61  d to mean the na
170d0 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73  me.** of the res
170e0 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  ult column in th
170f0 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45  e form: DATABASE
17100 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20  .TABLE.COLUMN.  
17110 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f  This later.** fo
17120 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e  rm is used for n
17130 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77  ame resolution w
17140 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20  ith nested FROM 
17150 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75  clauses..*/.stru
17160 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20  ct ExprList {.  
17170 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20  int nExpr;      
17180 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17190 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
171a0 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20  on the list */. 
171b0 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74   struct ExprList
171c0 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65  _item { /* For e
171d0 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ach expression i
171e0 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20  n the list */.  
171f0 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
17200 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
17210 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
17220 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 63 68 61 72  ions */.    char
17230 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
17240 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73      /* Token ass
17250 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
17260 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  s expression */.
17270 20 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b      char *zSpan;
17280 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
17290 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20  riginal text of 
172a0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  the expression *
172b0 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64  /.    u8 sortOrd
172c0 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  er;           /*
172d0 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30   1 for DESC or 0
172e0 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20   for ASC */.    
172f0 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31  unsigned done :1
17300 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61  ;       /* A fla
17310 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68  g to indicate wh
17320 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73  en processing is
17330 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20   finished */.   
17340 20 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49   unsigned bSpanI
17350 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61  sTab :1; /* zSpa
17360 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45  n holds DB.TABLE
17370 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75  .COLUMN */.    u
17380 6e 73 69 67 6e 65 64 20 72 65 75 73 61 62 6c 65  nsigned reusable
17390 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61   :1;   /* Consta
173a0 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  nt expression is
173b0 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20   reusable */.   
173c0 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 73   union {.      s
173d0 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20 20  truct {.        
173e0 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b  u16 iOrderByCol;
173f0 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44        /* For ORD
17400 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75  ER BY, column nu
17410 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20 73  mber in result s
17420 65 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 75 31  et */.        u1
17430 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20  6 iAlias;       
17440 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74      /* Index int
17450 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d  o Parse.aAlias[]
17460 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20   for zName */.  
17470 20 20 20 20 7d 20 78 3b 0a 20 20 20 20 20 20 69      } x;.      i
17480 6e 74 20 69 43 6f 6e 73 74 45 78 70 72 52 65 67  nt iConstExprReg
17490 3b 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74  ;      /* Regist
174a0 65 72 20 69 6e 20 77 68 69 63 68 20 45 78 70 72  er in which Expr
174b0 20 76 61 6c 75 65 20 69 73 20 63 61 63 68 65 64   value is cached
174c0 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20 7d   */.    } u;.  }
174d0 20 2a 61 3b 20 20 20 20 20 20 20 20 20 20 20 20   *a;            
174e0 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 20 61        /* Alloc a
174f0 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 67 72   power of two gr
17500 65 61 74 65 72 20 6f 72 20 65 71 75 61 6c 20 74  eater or equal t
17510 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f  o nExpr */.};../
17520 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
17530 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
17540 72 65 20 69 73 20 75 73 65 64 20 62 79 20 74 68  re is used by th
17550 65 20 70 61 72 73 65 72 20 74 6f 20 72 65 63 6f  e parser to reco
17560 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70  rd both.** the p
17570 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 61 6e  arse tree for an
17580 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20   expression and 
17590 74 68 65 20 73 70 61 6e 20 6f 66 20 69 6e 70 75  the span of inpu
175a0 74 20 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a  t text for an.**
175b0 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a   expression..*/.
175c0 73 74 72 75 63 74 20 45 78 70 72 53 70 61 6e 20  struct ExprSpan 
175d0 7b 0a 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b  {.  Expr *pExpr;
175e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
175f0 20 65 78 70 72 65 73 73 69 6f 6e 20 70 61 72 73   expression pars
17600 65 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73  e tree */.  cons
17610 74 20 63 68 61 72 20 2a 7a 53 74 61 72 74 3b 20  t char *zStart; 
17620 20 20 2f 2a 20 46 69 72 73 74 20 63 68 61 72 61    /* First chara
17630 63 74 65 72 20 6f 66 20 69 6e 70 75 74 20 74 65  cter of input te
17640 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  xt */.  const ch
17650 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a  ar *zEnd;     /*
17660 20 4f 6e 65 20 63 68 61 72 61 63 74 65 72 20 70   One character p
17670 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 69  ast the end of i
17680 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a  nput text */.};.
17690 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
176a0 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
176b0 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20  ture can hold a 
176c0 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69  simple list of i
176d0 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73  dentifiers,.** s
176e0 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74 20  uch as the list 
176f0 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66  "a,b,c" in the f
17700 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65  ollowing stateme
17710 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  nts:.**.**      
17720 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c  INSERT INTO t(a,
17730 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b  b,c) VALUES ...;
17740 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
17750 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61  INDEX idx ON t(a
17760 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43  ,b,c);.**      C
17770 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72  REATE TRIGGER tr
17780 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54 45  ig BEFORE UPDATE
17790 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e   ON t(a,b,c) ...
177a0 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69  ;.**.** The IdLi
177b0 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69  st.a.idx field i
177c0 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20  s used when the 
177d0 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74  IdList represent
177e0 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a  s the list of.**
177f0 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66   column names af
17800 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65  ter a table name
17810 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74   in an INSERT st
17820 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65  atement.  In the
17830 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a   statement.**.**
17840 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
17850 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a   t(a,b,c) ....**
17860 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74 68  .** If "a" is th
17870 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66  e k-th column of
17880 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e   table "t", then
17890 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78   IdList.a[0].idx
178a0 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ==k..*/.struct I
178b0 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74  dList {.  struct
178c0 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20   IdList_item {. 
178d0 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
178e0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
178f0 74 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a  the identifier *
17900 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20  /.    int idx;  
17910 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
17920 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61   in some Table.a
17930 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d  Col[] of a colum
17940 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f  n named zName */
17950 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e  .  } *a;.  int n
17960 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  Id;         /* N
17970 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66  umber of identif
17980 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  iers on the list
17990 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
179a0 65 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79  e bitmask dataty
179b0 70 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77  pe defined below
179c0 20 69 73 20 75 73 65 64 20 66 6f 72 20 76 61 72   is used for var
179d0 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ious optimizatio
179e0 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69  ns..**.** Changi
179f0 6e 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36  ng this from a 6
17a00 34 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69  4-bit to a 32-bi
17a10 74 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68  t type limits th
17a20 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74  e number of.** t
17a30 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20  ables in a join 
17a40 74 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66  to 32 instead of
17a50 20 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73   64.  But it als
17a60 6f 20 72 65 64 75 63 65 73 20 74 68 65 20 73 69  o reduces the si
17a70 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62  ze.** of the lib
17a80 72 61 72 79 20 62 79 20 37 33 38 20 62 79 74 65  rary by 738 byte
17a90 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74 79  s on ix86..*/.ty
17aa0 70 65 64 65 66 20 75 36 34 20 42 69 74 6d 61 73  pedef u64 Bitmas
17ab0 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75  k;../*.** The nu
17ac0 6d 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20  mber of bits in 
17ad0 61 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53  a Bitmask.  "BMS
17ae0 22 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b  " means "BitMask
17af0 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69   Size"..*/.#defi
17b00 6e 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73  ne BMS  ((int)(s
17b10 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38  izeof(Bitmask)*8
17b20 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20  ))../*.** A bit 
17b30 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a  in a Bitmask.*/.
17b40 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28  #define MASKBIT(
17b50 6e 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29  n)   (((Bitmask)
17b60 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65  1)<<(n)).#define
17b70 20 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28   MASKBIT32(n) ((
17b80 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29  (unsigned int)1)
17b90 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  <<(n))../*.** Th
17ba0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
17bb0 63 74 75 72 65 20 64 65 73 63 72 69 62 65 73 20  cture describes 
17bc0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
17bd0 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  of a SELECT stat
17be0 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74  ement..** Each t
17bf0 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79  able or subquery
17c00 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
17c10 75 73 65 20 69 73 20 61 20 73 65 70 61 72 61 74  use is a separat
17c20 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20  e element of.** 
17c30 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20  the SrcList.a[] 
17c40 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74  array..**.** Wit
17c50 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f  h the addition o
17c60 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62  f multiple datab
17c70 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65  ase support, the
17c80 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
17c90 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f  ture.** can also
17ca0 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 73 63   be used to desc
17cb0 72 69 62 65 20 61 20 70 61 72 74 69 63 75 6c 61  ribe a particula
17cc0 72 20 74 61 62 6c 65 20 73 75 63 68 20 61 73 20  r table such as 
17cd0 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a  the table that.*
17ce0 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79  * is modified by
17cf0 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45   an INSERT, DELE
17d00 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74  TE, or UPDATE st
17d10 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61  atement.  In sta
17d20 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75  ndard SQL,.** su
17d30 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20  ch a table must 
17d40 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65  be a simple name
17d50 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51  : ID.  But in SQ
17d60 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20  Lite, the table 
17d70 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64  can.** now be id
17d80 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 64 61  entified by a da
17d90 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64  tabase name, a d
17da0 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62  ot, then the tab
17db0 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a  le name: ID.ID..
17dc0 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79  **.** The jointy
17dd0 70 65 20 73 74 61 72 74 73 20 6f 75 74 20 73 68  pe starts out sh
17de0 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74  owing the join t
17df0 79 70 65 20 62 65 74 77 65 65 6e 20 74 68 65 20  ype between the 
17e00 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a  current table.**
17e10 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61   and the next ta
17e20 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e  ble on the list.
17e30 20 20 54 68 65 20 70 61 72 73 65 72 20 62 75 69    The parser bui
17e40 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74 68 69  lds the list thi
17e50 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71  s way..** But sq
17e60 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66  lite3SrcListShif
17e70 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65  tJoinType() late
17e80 72 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69  r shifts the joi
17e90 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74 20 65  ntypes so that e
17ea0 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20  ach.** jointype 
17eb0 65 78 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f  expresses the jo
17ec0 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 74  in between the t
17ed0 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65  able and the pre
17ee0 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a  vious table..**.
17ef0 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65  ** In the colUse
17f00 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67  d field, the hig
17f10 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69 74  h-order bit (bit
17f20 20 36 33 29 20 69 73 20 73 65 74 20 69 66 20 74   63) is set if t
17f30 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74  he table.** cont
17f40 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36  ains more than 6
17f50 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68  3 columns and th
17f60 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72  e 64-th or later
17f70 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e   column is used.
17f80 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69  .*/.struct SrcLi
17f90 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b  st {.  int nSrc;
17fa0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
17fb0 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73  r of tables or s
17fc0 75 62 71 75 65 72 69 65 73 20 69 6e 20 74 68 65  ubqueries in the
17fd0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
17fe0 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20    u32 nAlloc;   
17ff0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
18000 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65  entries allocate
18010 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a  d in a[] below *
18020 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c 69  /.  struct SrcLi
18030 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53 63  st_item {.    Sc
18040 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
18050 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68 69  /* Schema to whi
18060 63 68 20 74 68 69 73 20 69 74 65 6d 20 69 73 20  ch this item is 
18070 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68 61  fixed */.    cha
18080 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f  r *zDatabase;  /
18090 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61  * Name of databa
180a0 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20  se holding this 
180b0 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61  table */.    cha
180c0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f  r *zName;      /
180d0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  * Name of the ta
180e0 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ble */.    char 
180f0 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20  *zAlias;     /* 
18100 54 68 65 20 22 42 22 20 70 61 72 74 20 6f 66 20  The "B" part of 
18110 61 20 22 41 20 41 53 20 42 22 20 70 68 72 61 73  a "A AS B" phras
18120 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65  e.  zName is the
18130 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c   "A" */.    Tabl
18140 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a  e *pTab;      /*
18150 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f   An SQL table co
18160 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a  rresponding to z
18170 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65  Name */.    Sele
18180 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a  ct *pSelect;  /*
18190 20 41 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   A SELECT statem
181a0 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63  ent used in plac
181b0 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d  e of a table nam
181c0 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64  e */.    int add
181d0 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64  rFillSub;  /* Ad
181e0 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75 74  dress of subrout
181f0 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74 20  ine to manifest 
18200 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20 20  a subquery */.  
18210 20 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b    int regReturn;
18220 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
18230 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20 61  holding return a
18240 64 64 72 65 73 73 20 6f 66 20 61 64 64 72 46 69  ddress of addrFi
18250 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74  llSub */.    int
18260 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20 2f   regResult;    /
18270 2a 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c 64  * Registers hold
18280 69 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20 61  ing results of a
18290 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20   co-routine */. 
182a0 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20     struct {.    
182b0 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20    u8 jointype;  
182c0 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a      /* Type of j
182d0 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73  oin between this
182e0 20 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72   able and the pr
182f0 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20  evious */.      
18300 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65  unsigned notInde
18310 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72  xed :1;    /* Tr
18320 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ue if there is a
18330 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61   NOT INDEXED cla
18340 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  use */.      uns
18350 69 67 6e 65 64 20 69 73 49 6e 64 65 78 65 64 42  igned isIndexedB
18360 79 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20  y :1;   /* True 
18370 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 49  if there is an I
18380 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65  NDEXED BY clause
18390 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
183a0 65 64 20 69 73 54 61 62 46 75 6e 63 20 3a 31 3b  ed isTabFunc :1;
183b0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
183c0 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e  table-valued-fun
183d0 63 74 69 6f 6e 20 73 79 6e 74 61 78 20 2a 2f 0a  ction syntax */.
183e0 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69        unsigned i
183f0 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20  sCorrelated :1; 
18400 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d   /* True if sub-
18410 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61  query is correla
18420 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  ted */.      uns
18430 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69  igned viaCorouti
18440 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65  ne :1;  /* Imple
18450 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72  mented as a co-r
18460 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 20 20  outine */.      
18470 75 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75 72  unsigned isRecur
18480 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72  sive :1;   /* Tr
18490 75 65 20 66 6f 72 20 72 65 63 75 72 73 69 76 65  ue for recursive
184a0 20 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57 49   reference in WI
184b0 54 48 20 2a 2f 0a 20 20 20 20 7d 20 66 67 3b 0a  TH */.    } fg;.
184c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
184d0 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 20 20  MIT_EXPLAIN.    
184e0 75 38 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20  u8 iSelectId;   
184f0 20 20 2f 2a 20 49 66 20 70 53 65 6c 65 63 74 21    /* If pSelect!
18500 3d 30 2c 20 74 68 65 20 69 64 20 6f 66 20 74 68  =0, the id of th
18510 65 20 73 75 62 2d 73 65 6c 65 63 74 20 69 6e 20  e sub-select in 
18520 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  EQP */.#endif.  
18530 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20    int iCursor;  
18540 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
18550 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73  cursor number us
18560 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 69  ed to access thi
18570 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45  s table */.    E
18580 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20  xpr *pOn;       
18590 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73   /* The ON claus
185a0 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
185b0 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e     IdList *pUsin
185c0 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e  g;   /* The USIN
185d0 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  G clause of a jo
185e0 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73  in */.    Bitmas
185f0 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42  k colUsed;  /* B
18600 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20  it N (1<<N) set 
18610 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70  if column N of p
18620 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20  Tab is used */. 
18630 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20     union {.     
18640 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 65 64 42   char *zIndexedB
18650 79 3b 20 20 20 20 2f 2a 20 49 64 65 6e 74 69 66  y;    /* Identif
18660 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45  ier from "INDEXE
18670 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63  D BY <zIndex>" c
18680 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 45  lause */.      E
18690 78 70 72 4c 69 73 74 20 2a 70 46 75 6e 63 41 72  xprList *pFuncAr
186a0 67 3b 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 73  g;  /* Arguments
186b0 20 74 6f 20 74 61 62 6c 65 2d 76 61 6c 75 65 64   to table-valued
186c0 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20  -function */.   
186d0 20 7d 20 75 31 3b 0a 20 20 20 20 49 6e 64 65 78   } u1;.    Index
186e0 20 2a 70 49 42 49 6e 64 65 78 3b 20 20 2f 2a 20   *pIBIndex;  /* 
186f0 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20  Index structure 
18700 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
18710 20 75 31 2e 7a 49 6e 64 65 78 65 64 42 79 20 2a   u1.zIndexedBy *
18720 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20  /.  } a[1];     
18730 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65          /* One e
18740 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 69 64  ntry for each id
18750 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20  entifier on the 
18760 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
18770 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75  * Permitted valu
18780 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73  es of the SrcLis
18790 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65  t.a.jointype fie
187a0 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  ld.*/.#define JT
187b0 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30  _INNER     0x000
187c0 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64  1    /* Any kind
187d0 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f   of inner or cro
187e0 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  ss join */.#defi
187f0 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20  ne JT_CROSS     
18800 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70  0x0002    /* Exp
18810 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74 68 65  licit use of the
18820 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a   CROSS keyword *
18830 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54  /.#define JT_NAT
18840 55 52 41 4c 20 20 20 30 78 30 30 30 34 20 20 20  URAL   0x0004   
18850 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22   /* True for a "
18860 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f  natural" join */
18870 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54  .#define JT_LEFT
18880 20 20 20 20 20 20 30 78 30 30 30 38 20 20 20 20        0x0008    
18890 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f  /* Left outer jo
188a0 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
188b0 5f 52 49 47 48 54 20 20 20 20 20 30 78 30 30 31  _RIGHT     0x001
188c0 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75  0    /* Right ou
188d0 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
188e0 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20  ine JT_OUTER    
188f0 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68   0x0020    /* Th
18900 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72  e "OUTER" keywor
18910 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a  d is present */.
18920 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52  #define JT_ERROR
18930 20 20 20 20 20 30 78 30 30 34 30 20 20 20 20 2f       0x0040    /
18940 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73  * unknown or uns
18950 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79  upported join ty
18960 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c  pe */.../*.** Fl
18970 61 67 73 20 61 70 70 72 6f 70 72 69 61 74 65 20  ags appropriate 
18980 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61  for the wctrlFla
18990 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20  gs parameter of 
189a0 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69  sqlite3WhereBegi
189b0 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57  n().** and the W
189c0 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c  hereInfo.wctrlFl
189d0 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23  ags member..*/.#
189e0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
189f0 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78  ERBY_NORMAL   0x
18a00 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f  0000 /* No-op */
18a10 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
18a20 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20  RDERBY_MIN      
18a30 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20  0x0001 /* ORDER 
18a40 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f  BY processing fo
18a50 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a  r min() func */.
18a60 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
18a70 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30  DERBY_MAX      0
18a80 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42  x0002 /* ORDER B
18a90 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72  Y processing for
18aa0 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23   max() func */.#
18ab0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45  define WHERE_ONE
18ac0 50 41 53 53 5f 44 45 53 49 52 45 44 20 20 30 78  PASS_DESIRED  0x
18ad0 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20  0004 /* Want to 
18ae0 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41  do one-pass UPDA
18af0 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65  TE/DELETE */.#de
18b00 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49  fine WHERE_DUPLI
18b10 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30  CATES_OK    0x00
18b20 30 38 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75  08 /* Ok to retu
18b30 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68  rn a row more th
18b40 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69  an once */.#defi
18b50 6e 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f 4f 50  ne WHERE_OMIT_OP
18b60 45 4e 5f 43 4c 4f 53 45 20 20 30 78 30 30 31 30  EN_CLOSE  0x0010
18b70 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72   /* Table cursor
18b80 73 20 61 72 65 20 61 6c 72 65 61 64 79 20 6f 70  s are already op
18b90 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  en */.#define WH
18ba0 45 52 45 5f 46 4f 52 43 45 5f 54 41 42 4c 45 20  ERE_FORCE_TABLE 
18bb0 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20 44       0x0020 /* D
18bc0 6f 20 6e 6f 74 20 75 73 65 20 61 6e 20 69 6e 64  o not use an ind
18bd0 65 78 2d 6f 6e 6c 79 20 73 65 61 72 63 68 20 2a  ex-only search *
18be0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
18bf0 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59 20 20 20  ONETABLE_ONLY   
18c00 20 30 78 30 30 34 30 20 2f 2a 20 4f 6e 6c 79 20   0x0040 /* Only 
18c10 63 6f 64 65 20 74 68 65 20 31 73 74 20 74 61 62  code the 1st tab
18c20 6c 65 20 69 6e 20 70 54 61 62 4c 69 73 74 20 2a  le in pTabList *
18c30 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
18c40 4e 4f 5f 41 55 54 4f 49 4e 44 45 58 20 20 20 20  NO_AUTOINDEX    
18c50 20 30 78 30 30 38 30 20 2f 2a 20 44 69 73 61 6c   0x0080 /* Disal
18c60 6c 6f 77 20 61 75 74 6f 6d 61 74 69 63 20 69 6e  low automatic in
18c70 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
18c80 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20   WHERE_GROUPBY  
18c90 20 20 20 20 20 20 20 20 30 78 30 31 30 30 20 2f          0x0100 /
18ca0 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20 72 65  * pOrderBy is re
18cb0 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20  ally a GROUP BY 
18cc0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
18cd0 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20 20 20  _DISTINCTBY     
18ce0 20 20 30 78 30 32 30 30 20 2f 2a 20 70 4f 72 64    0x0200 /* pOrd
18cf0 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61  erby is really a
18d00 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65   DISTINCT clause
18d10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
18d20 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20  E_WANT_DISTINCT 
18d30 20 20 20 30 78 30 34 30 30 20 2f 2a 20 41 6c 6c     0x0400 /* All
18d40 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f   output needs to
18d50 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a   be distinct */.
18d60 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 4f  #define WHERE_SO
18d70 52 54 42 59 47 52 4f 55 50 20 20 20 20 20 20 30  RTBYGROUP      0
18d80 78 30 38 30 30 20 2f 2a 20 53 75 70 70 6f 72 74  x0800 /* Support
18d90 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53   sqlite3WhereIsS
18da0 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64 65 66 69  orted() */.#defi
18db0 6e 65 20 57 48 45 52 45 5f 52 45 4f 50 45 4e 5f  ne WHERE_REOPEN_
18dc0 49 44 58 20 20 20 20 20 20 20 30 78 31 30 30 30  IDX       0x1000
18dd0 20 2f 2a 20 54 72 79 20 74 6f 20 75 73 65 20 4f   /* Try to use O
18de0 50 5f 52 65 6f 70 65 6e 49 64 78 20 2a 2f 0a 23  P_ReopenIdx */.#
18df0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45  define WHERE_ONE
18e00 50 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78  PASS_MULTIROW 0x
18e10 32 30 30 30 20 2f 2a 20 4f 4e 45 50 41 53 53 20  2000 /* ONEPASS 
18e20 69 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69  is ok with multi
18e30 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 0a 2f 2a 20  ple rows */../* 
18e40 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76  Allowed return v
18e50 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74  alues from sqlit
18e60 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63  e3WhereIsDistinc
18e70 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57  t().*/.#define W
18e80 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f  HERE_DISTINCT_NO
18e90 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49  OP      0  /* DI
18ea0 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e  STINCT keyword n
18eb0 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69  ot used */.#defi
18ec0 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
18ed0 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f  T_UNIQUE    1  /
18ee0 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20  * No duplicates 
18ef0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
18f00 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45  _DISTINCT_ORDERE
18f10 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75  D   2  /* All du
18f20 70 6c 69 63 61 74 65 73 20 61 72 65 20 61 64 6a  plicates are adj
18f30 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  acent */.#define
18f40 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
18f50 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20  UNORDERED 3  /* 
18f60 44 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 73  Duplicates are s
18f70 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a  cattered */../*.
18f80 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ** A NameContext
18f90 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65   defines a conte
18fa0 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72  xt in which to r
18fb0 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64  esolve table and
18fc0 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73   column.** names
18fd0 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63  .  The context c
18fe0 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73  onsists of a lis
18ff0 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65  t of tables (the
19000 20 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64   pSrcList) field
19010 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f   and.** a list o
19020 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  f named expressi
19030 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68  on (pEList).  Th
19040 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  e named expressi
19050 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62  on list may.** b
19060 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72  e NULL.  The pSr
19070 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  c corresponds to
19080 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
19090 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a   of a SELECT or.
190a0 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  ** to the table 
190b0 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
190c0 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44  n by INSERT, UPD
190d0 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20  ATE, or DELETE. 
190e0 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63   The.** pEList c
190f0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
19100 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20  e result set of 
19110 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20  a SELECT and is 
19120 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65  NULL for.** othe
19130 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  r statements..**
19140 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73  .** NameContexts
19150 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20   can be nested. 
19160 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20   When resolving 
19170 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72  names, the inner
19180 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e 74 65 78  -most .** contex
19190 74 20 69 73 20 73 65 61 72 63 68 65 64 20 66 69  t is searched fi
191a0 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63  rst.  If no matc
191b0 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20  h is found, the 
191c0 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f  next outer.** co
191d0 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b 65 64  ntext is checked
191e0 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 73  .  If there is s
191f0 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74  till no match, t
19200 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a  he next context.
19210 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20  ** is checked.  
19220 54 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e  This process con
19230 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74  tinues until eit
19240 68 65 72 20 61 20 6d 61 74 63 68 20 69 73 20 66  her a match is f
19250 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63  ound.** or all c
19260 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68 65 63  ontexts are chec
19270 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68  k.  When a match
19280 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e   is found, the n
19290 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a  Ref member of.**
192a0 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e   the context con
192b0 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63  taining the matc
192c0 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  h is incremented
192d0 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75  . .**.** Each su
192e0 62 71 75 65 72 79 20 67 65 74 73 20 61 20 6e 65  bquery gets a ne
192f0 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20  w NameContext.  
19300 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20  The pNext field 
19310 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a  points to the.**
19320 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20   NameContext in 
19330 74 68 65 20 70 61 72 65 6e 74 20 71 75 65 72 79  the parent query
19340 2e 20 20 54 68 75 73 20 74 68 65 20 70 72 6f 63  .  Thus the proc
19350 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20  ess of scanning 
19360 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  the.** NameConte
19370 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f  xt list correspo
19380 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67  nds to searching
19390 20 74 68 72 6f 75 67 68 20 73 75 63 63 65 73 73   through success
193a0 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73  ively outer.** s
193b0 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e  ubqueries lookin
193c0 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a  g for a match..*
193d0 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  /.struct NameCon
193e0 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a  text {.  Parse *
193f0 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a  pParse;       /*
19400 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20   The parser */. 
19410 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69   SrcList *pSrcLi
19420 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  st;   /* One or 
19430 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65 64  more tables used
19440 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65   to resolve name
19450 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
19460 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f  *pEList;    /* O
19470 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20  ptional list of 
19480 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d  result-set colum
19490 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20  ns */.  AggInfo 
194a0 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20  *pAggInfo;   /* 
194b0 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
194c0 74 20 61 67 67 72 65 67 61 74 65 73 20 61 74 20  t aggregates at 
194d0 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20  this level */.  
194e0 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65  NameContext *pNe
194f0 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74  xt;  /* Next out
19500 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e  er name context.
19510 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72    NULL for outer
19520 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  most */.  int nR
19530 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ef;            /
19540 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65  * Number of name
19550 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68  s resolved by th
19560 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  is context */.  
19570 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
19580 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
19590 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74  f errors encount
195a0 65 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c  ered while resol
195b0 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20  ving names */.  
195c0 75 31 36 20 6e 63 46 6c 61 67 73 3b 20 20 20 20  u16 ncFlags;    
195d0 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20       /* Zero or 
195e0 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20  more NC_* flags 
195f0 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f  defined below */
19600 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
19610 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  ed values for th
19620 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e  e NameContext, n
19630 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a  cFlags field..**
19640 0a 2a 2a 20 4e 6f 74 65 3a 20 20 4e 43 5f 4d 69  .** Note:  NC_Mi
19650 6e 4d 61 78 41 67 67 20 6d 75 73 74 20 68 61 76  nMaxAgg must hav
19660 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  e the same value
19670 20 61 73 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67   as SF_MinMaxAgg
19680 20 61 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46   and.** SQLITE_F
19690 55 4e 43 5f 4d 49 4e 4d 41 58 2e 0a 2a 2a 20 0a  UNC_MINMAX..** .
196a0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c  */.#define NC_Al
196b0 6c 6f 77 41 67 67 20 20 30 78 30 30 30 31 20 20  lowAgg  0x0001  
196c0 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
196d0 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77  ctions are allow
196e0 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69  ed here */.#defi
196f0 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20  ne NC_HasAgg    
19700 30 78 30 30 30 32 20 20 2f 2a 20 4f 6e 65 20 6f  0x0002  /* One o
19710 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
19720 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20   functions seen 
19730 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73  */.#define NC_Is
19740 43 68 65 63 6b 20 20 20 30 78 30 30 30 34 20 20  Check   0x0004  
19750 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
19760 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20  ving names in a 
19770 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
19780 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
19790 6e 41 67 67 46 75 6e 63 20 30 78 30 30 30 38 20  nAggFunc 0x0008 
197a0 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c   /* True if anal
197b0 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20  yzing arguments 
197c0 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a  to an agg func *
197d0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72  /.#define NC_Par
197e0 74 49 64 78 20 20 20 30 78 30 30 31 30 20 20 2f  tIdx   0x0010  /
197f0 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
19800 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e  ing a partial in
19810 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 23 64 65  dex WHERE */.#de
19820 66 69 6e 65 20 4e 43 5f 49 64 78 45 78 70 72 20  fine NC_IdxExpr 
19830 20 20 30 78 30 30 32 30 20 20 2f 2a 20 54 72 75    0x0020  /* Tru
19840 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 63  e if resolving c
19850 6f 6c 75 6d 6e 73 20 6f 66 20 43 52 45 41 54 45  olumns of CREATE
19860 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e   INDEX */.#defin
19870 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 30  e NC_MinMaxAgg 0
19880 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61  x1000  /* min/ma
19890 78 20 61 67 67 72 65 67 61 74 65 73 20 73 65 65  x aggregates see
198a0 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20 61 62 6f  n.  See note abo
198b0 76 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  ve */../*.** An 
198c0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
198d0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
198e0 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c  ure contains all
198f0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20   information.** 
19900 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
19910 74 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69  te code for a si
19920 6e 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  ngle SELECT stat
19930 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69  ement..**.** nLi
19940 6d 69 74 20 69 73 20 73 65 74 20 74 6f 20 2d 31  mit is set to -1
19950 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   if there is no 
19960 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e 20 20 6e  LIMIT clause.  n
19970 4f 66 66 73 65 74 20 69 73 20 73 65 74 20 74 6f  Offset is set to
19980 20 30 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65 20   0..** If there 
19990 69 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73  is a LIMIT claus
199a0 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 73 65  e, the parser se
199b0 74 73 20 6e 4c 69 6d 69 74 20 74 6f 20 74 68 65  ts nLimit to the
199c0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a   value of the.**
199d0 20 6c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73   limit and nOffs
199e0 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  et to the value 
199f0 6f 66 20 74 68 65 20 6f 66 66 73 65 74 20 28 6f  of the offset (o
19a00 72 20 30 20 69 66 20 74 68 65 72 65 20 69 73 20  r 0 if there is 
19a10 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65 74 29 2e 20  not.** offset). 
19a20 20 42 75 74 20 6c 61 74 65 72 20 6f 6e 2c 20 6e   But later on, n
19a30 4c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65  Limit and nOffse
19a40 74 20 62 65 63 6f 6d 65 20 74 68 65 20 6d 65 6d  t become the mem
19a50 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a  ory locations.**
19a60 20 69 6e 20 74 68 65 20 56 44 42 45 20 74 68 61   in the VDBE tha
19a70 74 20 72 65 63 6f 72 64 20 74 68 65 20 6c 69 6d  t record the lim
19a80 69 74 20 61 6e 64 20 6f 66 66 73 65 74 20 63 6f  it and offset co
19a90 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64  unters..**.** ad
19aa0 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74  drOpenEphm[] ent
19ab0 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 74 68 65  ries contain the
19ac0 20 61 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f   address of OP_O
19ad0 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63  penEphemeral opc
19ae0 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61  odes..** These a
19af0 64 64 72 65 73 73 65 73 20 6d 75 73 74 20 62 65  ddresses must be
19b00 20 73 74 6f 72 65 64 20 73 6f 20 74 68 61 74 20   stored so that 
19b10 77 65 20 63 61 6e 20 67 6f 20 62 61 63 6b 20 61  we can go back a
19b20 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68  nd fill in.** th
19b30 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64  e P4_KEYINFO and
19b40 20 50 32 20 70 61 72 61 6d 65 74 65 72 73 20 6c   P2 parameters l
19b50 61 74 65 72 2e 20 20 4e 65 69 74 68 65 72 20 74  ater.  Neither t
19b60 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a  he KeyInfo nor.*
19b70 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
19b80 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63 61  columns in P2 ca
19b90 6e 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61 74  n be computed at
19ba0 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a   the same time.*
19bb0 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e  * as the OP_Open
19bc0 45 70 68 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e  Ephm instruction
19bd0 20 69 73 20 63 6f 64 65 64 20 62 65 63 61 75 73   is coded becaus
19be0 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20  e not.** enough 
19bf0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
19c00 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71  t the compound q
19c10 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74  uery is known at
19c20 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20   that point..** 
19c30 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20  The KeyInfo for 
19c40 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20  addrOpenTran[0] 
19c50 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73  and [1] contains
19c60 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
19c70 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20  nces.** for the 
19c80 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68 65  result set.  The
19c90 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64   KeyInfo for add
19ca0 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e  rOpenEphm[2] con
19cb0 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a  tains collating.
19cc0 2a 2a 20 73 65 71 75 65 6e 63 65 73 20 66 6f 72  ** sequences for
19cd0 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
19ce0 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ause..*/.struct 
19cf0 53 65 6c 65 63 74 20 7b 0a 20 20 45 78 70 72 4c  Select {.  ExprL
19d00 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20  ist *pEList;    
19d10 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20    /* The fields 
19d20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f  of the result */
19d30 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
19d40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
19d50 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b   of: TK_UNION TK
19d60 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43  _ALL TK_INTERSEC
19d70 54 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20  T TK_EXCEPT */. 
19d80 20 75 31 36 20 73 65 6c 46 6c 61 67 73 3b 20 20   u16 selFlags;  
19d90 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f          /* Vario
19da0 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a  us SF_* values *
19db0 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20  /.  int iLimit, 
19dc0 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65  iOffset;   /* Me
19dd0 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 68  mory registers h
19de0 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f  olding LIMIT & O
19df0 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a  FFSET counters *
19e00 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43  /.#if SELECTTRAC
19e10 45 5f 45 4e 41 42 4c 45 44 0a 20 20 63 68 61 72  E_ENABLED.  char
19e20 20 7a 53 65 6c 4e 61 6d 65 5b 31 32 5d 3b 20 20   zSelName[12];  
19e30 20 20 20 2f 2a 20 53 79 6d 62 6f 6c 69 63 20 6e     /* Symbolic n
19e40 61 6d 65 20 6f 66 20 74 68 69 73 20 53 45 4c 45  ame of this SELE
19e50 43 54 20 75 73 65 20 66 6f 72 20 64 65 62 75 67  CT use for debug
19e60 67 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  ging */.#endif. 
19e70 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70 68   int addrOpenEph
19e80 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70  m[2];   /* OP_Op
19e90 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73 20  enEphem opcodes 
19ea0 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73 20  related to this 
19eb0 73 65 6c 65 63 74 20 2a 2f 0a 20 20 75 36 34 20  select */.  u64 
19ec0 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20  nSelectRow;     
19ed0 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
19ee0 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74  number of result
19ef0 20 72 6f 77 73 20 2a 2f 0a 20 20 53 72 63 4c 69   rows */.  SrcLi
19f00 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20 20  st *pSrc;       
19f10 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c    /* The FROM cl
19f20 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ause */.  Expr *
19f30 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 20  pWhere;         
19f40 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c   /* The WHERE cl
19f50 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ause */.  ExprLi
19f60 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
19f70 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42 59   /* The GROUP BY
19f80 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
19f90 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20 20  r *pHaving;     
19fa0 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49 4e      /* The HAVIN
19fb0 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  G clause */.  Ex
19fc0 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79  prList *pOrderBy
19fd0 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44 45  ;    /* The ORDE
19fe0 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  R BY clause */. 
19ff0 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b   Select *pPrior;
1a000 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f 72          /* Prior
1a010 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d   select in a com
1a020 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61  pound select sta
1a030 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65  tement */.  Sele
1a040 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ct *pNext;      
1a050 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63     /* Next selec
1a060 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69 6e  t to the left in
1a070 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20   a compound */. 
1a080 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20   Expr *pLimit;  
1a090 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54          /* LIMIT
1a0a0 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c   expression. NUL
1a0b0 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64  L means not used
1a0c0 2e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66  . */.  Expr *pOf
1a0d0 66 73 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  fset;         /*
1a0e0 20 4f 46 46 53 45 54 20 65 78 70 72 65 73 73 69   OFFSET expressi
1a0f0 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e  on. NULL means n
1a100 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69  ot used. */.  Wi
1a110 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20  th *pWith;      
1a120 20 20 20 20 20 2f 2a 20 57 49 54 48 20 63 6c 61       /* WITH cla
1a130 75 73 65 20 61 74 74 61 63 68 65 64 20 74 6f 20  use attached to 
1a140 74 68 69 73 20 73 65 6c 65 63 74 2e 20 4f 72 20  this select. Or 
1a150 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  NULL. */.};../*.
1a160 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
1a170 73 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c  s for Select.sel
1a180 46 6c 61 67 73 2e 20 20 54 68 65 20 22 53 46 22  Flags.  The "SF"
1a190 20 70 72 65 66 69 78 20 73 74 61 6e 64 73 20 66   prefix stands f
1a1a0 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c  or.** "Select Fl
1a1b0 61 67 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ag"..*/.#define 
1a1c0 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20  SF_Distinct     
1a1d0 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 75     0x0001  /* Ou
1a1e0 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44  tput should be D
1a1f0 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69  ISTINCT */.#defi
1a200 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20 20 20 20  ne SF_All       
1a210 20 20 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a        0x0002  /*
1a220 20 49 6e 63 6c 75 64 65 73 20 74 68 65 20 41 4c   Includes the AL
1a230 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  L keyword */.#de
1a240 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64  fine SF_Resolved
1a250 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20          0x0004  
1a260 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20 68  /* Identifiers h
1a270 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65  ave been resolve
1a280 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  d */.#define SF_
1a290 41 67 67 72 65 67 61 74 65 20 20 20 20 20 20 20  Aggregate       
1a2a0 30 78 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61  0x0008  /* Conta
1a2b0 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75  ins aggregate fu
1a2c0 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  nctions */.#defi
1a2d0 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65  ne SF_UsesEpheme
1a2e0 72 61 6c 20 20 20 30 78 30 30 31 30 20 20 2f 2a  ral   0x0010  /*
1a2f0 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70   Uses the OpenEp
1a300 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a  hemeral opcode *
1a310 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70  /.#define SF_Exp
1a320 61 6e 64 65 64 20 20 20 20 20 20 20 20 30 78 30  anded        0x0
1a330 30 32 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53  020  /* sqlite3S
1a340 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63 61  electExpand() ca
1a350 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a  lled on this */.
1a360 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79  #define SF_HasTy
1a370 70 65 49 6e 66 6f 20 20 20 20 20 30 78 30 30 34  peInfo     0x004
1a380 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75  0  /* FROM subqu
1a390 65 72 69 65 73 20 68 61 76 65 20 54 61 62 6c 65  eries have Table
1a3a0 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23 64 65   metadata */.#de
1a3b0 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64  fine SF_Compound
1a3c0 20 20 20 20 20 20 20 20 30 78 30 30 38 30 20 20          0x0080  
1a3d0 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f 6d  /* Part of a com
1a3e0 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23  pound query */.#
1a3f0 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75 65 73  define SF_Values
1a400 20 20 20 20 20 20 20 20 20 20 30 78 30 31 30 30            0x0100
1a410 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65 64    /* Synthesized
1a420 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61   from VALUES cla
1a430 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  use */.#define S
1a440 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20 20 20  F_MultiValue    
1a450 20 20 30 78 30 32 30 30 20 20 2f 2a 20 53 69 6e    0x0200  /* Sin
1a460 67 6c 65 20 56 41 4c 55 45 53 20 74 65 72 6d 20  gle VALUES term 
1a470 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f  with multiple ro
1a480 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ws */.#define SF
1a490 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20  _NestedFrom     
1a4a0 20 30 78 30 34 30 30 20 20 2f 2a 20 50 61 72 74   0x0400  /* Part
1a4b0 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73 69   of a parenthesi
1a4c0 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  zed FROM clause 
1a4d0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 61  */.#define SF_Ma
1a4e0 79 62 65 43 6f 6e 76 65 72 74 20 20 20 20 30 78  ybeConvert    0x
1a4f0 30 38 30 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f  0800  /* Need co
1a500 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c  nvertCompoundSel
1a510 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20  ectToSubquery() 
1a520 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 69  */.#define SF_Mi
1a530 6e 4d 61 78 41 67 67 20 20 20 20 20 20 20 30 78  nMaxAgg       0x
1a540 31 30 30 30 20 20 2f 2a 20 41 67 67 72 65 67 61  1000  /* Aggrega
1a550 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69  te containing mi
1a560 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a  n() or max() */.
1a570 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75 72  #define SF_Recur
1a580 73 69 76 65 20 20 20 20 20 20 20 30 78 32 30 30  sive       0x200
1a590 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72 73  0  /* The recurs
1a5a0 69 76 65 20 70 61 72 74 20 6f 66 20 61 20 72 65  ive part of a re
1a5b0 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a 23  cursive CTE */.#
1a5c0 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72  define SF_Conver
1a5d0 74 65 64 20 20 20 20 20 20 20 30 78 34 30 30 30  ted       0x4000
1a5e0 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74 43    /* By convertC
1a5f0 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
1a600 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65  ubquery() */.#de
1a610 66 69 6e 65 20 53 46 5f 49 6e 63 6c 75 64 65 48  fine SF_IncludeH
1a620 69 64 64 65 6e 20 20 20 30 78 38 30 30 30 20 20  idden   0x8000  
1a630 2f 2a 20 49 6e 63 6c 75 64 65 20 68 69 64 64 65  /* Include hidde
1a640 6e 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75 74  n columns in out
1a650 70 75 74 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54  put */.../*.** T
1a660 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20  he results of a 
1a670 53 45 4c 45 43 54 20 63 61 6e 20 62 65 20 64 69  SELECT can be di
1a680 73 74 72 69 62 75 74 65 64 20 69 6e 20 73 65 76  stributed in sev
1a690 65 72 61 6c 20 77 61 79 73 2c 20 61 73 20 64 65  eral ways, as de
1a6a0 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20  fined.** by one 
1a6b0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1a6c0 20 6d 61 63 72 6f 73 2e 20 20 54 68 65 20 22 53   macros.  The "S
1a6d0 52 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73  RT" prefix means
1a6e0 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74 0a   "SELECT Result.
1a6f0 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20  ** Type"..**.** 
1a700 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20      SRT_Union   
1a710 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
1a720 73 20 61 73 20 61 20 6b 65 79 20 69 6e 20 61 20  s as a key in a 
1a730 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20  temporary index 
1a740 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1a750 20 20 20 20 20 20 20 20 69 64 65 6e 74 69 66 69          identifi
1a760 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53 44  ed by pDest->iSD
1a770 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Parm..**.**     
1a780 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20  SRT_Except      
1a790 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20 66  Remove results f
1a7a0 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61 72  rom the temporar
1a7b0 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e 69  y index pDest->i
1a7c0 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20  SDParm..**.**   
1a7d0 20 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20    SRT_Exists    
1a7e0 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20 6d    Store a 1 in m
1a7f0 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73 74  emory cell pDest
1a800 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68 65  ->iSDParm if the
1a810 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20   result.**      
1a820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1a830 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e  et is not empty.
1a840 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44  .**.**     SRT_D
1a850 69 73 63 61 72 64 20 20 20 20 20 54 68 72 6f 77  iscard     Throw
1a860 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 77 61   the results awa
1a870 79 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64  y.  This is used
1a880 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20   by SELECT.**   
1a890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8a0 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74    statements wit
1a8b0 68 69 6e 20 74 72 69 67 67 65 72 73 20 77 68 6f  hin triggers who
1a8c0 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20  se only purpose 
1a8d0 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  is.**           
1a8e0 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73 69            the si
1a8f0 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66 75  de-effects of fu
1a900 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41  nctions..**.** A
1a910 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20  ll of the above 
1a920 61 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e 6f  are free to igno
1a930 72 65 20 74 68 65 69 72 20 4f 52 44 45 52 20 42  re their ORDER B
1a940 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65 20  Y clause. Those 
1a950 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d  that.** follow m
1a960 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52  ust honor the OR
1a970 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
1a980 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75 74  *.**     SRT_Out
1a990 70 75 74 20 20 20 20 20 20 47 65 6e 65 72 61 74  put      Generat
1a9a0 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70 75  e a row of outpu
1a9b0 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50 5f  t (using the OP_
1a9c0 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20  ResultRow.**    
1a9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9e0 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61 63   opcode) for eac
1a9f0 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65 73  h row in the res
1aa00 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20  ult set..**.**  
1aa10 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20     SRT_Mem      
1aa20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66     Only valid if
1aa30 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   the result is a
1aa40 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a   single column..
1aa50 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1aa60 20 20 20 20 20 20 20 53 74 6f 72 65 20 74 68 65         Store the
1aa70 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66   first column of
1aa80 20 74 68 65 20 66 69 72 73 74 20 72 65 73 75 6c   the first resul
1aa90 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20  t row.**        
1aaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 20               in 
1aab0 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e  register pDest->
1aac0 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62 61  iSDParm then aba
1aad0 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a  ndon the rest.**
1aae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aaf0 20 20 20 20 20 6f 66 20 74 68 65 20 71 75 65 72       of the quer
1ab00 79 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e 61  y.  This destina
1ab10 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49  tion implies "LI
1ab20 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20  MIT 1"..**.**   
1ab30 20 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20    SRT_Set       
1ab40 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75 73    The result mus
1ab50 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63 6f  t be a single co
1ab60 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61 63  lumn.  Store eac
1ab70 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  h.**            
1ab80 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66 20           row of 
1ab90 72 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b 65  result as the ke
1aba0 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73 74  y in table pDest
1abb0 2d 3e 69 53 44 50 61 72 6d 2e 20 0a 2a 2a 20 20  ->iSDParm. .**  
1abc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abd0 20 20 20 41 70 70 6c 79 20 74 68 65 20 61 66 66     Apply the aff
1abe0 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66  inity pDest->aff
1abf0 53 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72  Sdst before stor
1ac00 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ing.**          
1ac10 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
1ac20 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70  ts.  Used to imp
1ac30 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45  lement "IN (SELE
1ac40 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20  CT ...)"..**.** 
1ac50 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62      SRT_EphemTab
1ac60 20 20 20 20 43 72 65 61 74 65 20 61 6e 20 74 65      Create an te
1ac70 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
1ac80 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64  est->iSDParm and
1ac90 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20   store.**       
1aca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1acb0 65 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20  e result there. 
1acc0 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65  The cursor is le
1acd0 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a  ft open after.**
1ace0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acf0 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20       returning. 
1ad00 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52   This is like SR
1ad10 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20 74  T_Table except t
1ad20 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  hat.**          
1ad30 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
1ad40 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73  destination uses
1ad50 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1ad60 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20  l to create.**  
1ad70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad80 20 20 20 74 68 65 20 74 61 62 6c 65 20 66 69 72     the table fir
1ad90 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  st..**.**     SR
1ada0 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65  T_Coroutine   Ge
1adb0 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74  nerate a co-rout
1adc0 69 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e 73  ine that returns
1add0 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a   a new row of.**
1ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adf0 20 20 20 20 20 72 65 73 75 6c 74 73 20 65 61 63       results eac
1ae00 68 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76  h time it is inv
1ae10 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79  oked.  The entry
1ae20 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20   point.**       
1ae30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66                of
1ae40 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20   the co-routine 
1ae50 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
1ae60 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44  ister pDest->iSD
1ae70 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20  Parm.**         
1ae80 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 64 20              and 
1ae90 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69  the result row i
1aea0 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73  s stored in pDes
1aeb0 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65  t->nDest registe
1aec0 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  rs.**           
1aed0 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74 69            starti
1aee0 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69  ng with pDest->i
1aef0 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Sdst..**.**     
1af00 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20  SRT_Table       
1af10 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
1af20 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1af30 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1af40 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f  .**     SRT_Fifo
1af50 20 20 20 20 20 20 20 20 54 68 69 73 20 69 73 20          This is 
1af60 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61  like SRT_EphemTa
1af70 62 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  b except that th
1af80 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20  e table.**      
1af90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1afa0 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72  s assumed to alr
1afb0 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53  eady be open.  S
1afc0 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20  RT_Fifo has.**  
1afd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afe0 20 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61     the additiona
1aff0 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65  l property of be
1b000 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f  ing able to igno
1b010 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  re.**           
1b020 20 20 20 20 20 20 20 20 20 20 74 68 65 20 4f 52            the OR
1b030 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
1b040 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
1b050 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72  tFifo    Store r
1b060 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70  esults in a temp
1b070 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
1b080 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20  t->iSDParm..**  
1b090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0a0 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20     But also use 
1b0b0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
1b0c0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31  pDest->iSDParm+1
1b0d0 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   as.**          
1b0e0 20 20 20 20 20 20 20 20 20 20 20 61 20 72 65 63             a rec
1b0f0 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72  ord of all prior
1b100 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e   results and ign
1b110 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74  ore any duplicat
1b120 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1b130 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20           rows.  
1b140 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69  Name means:  "Di
1b150 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a  stinct Fifo"..**
1b160 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75  .**     SRT_Queu
1b170 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65  e       Store re
1b180 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74  sults in priorit
1b190 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69  y queue pDest->i
1b1a0 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a  SDParm (really.*
1b1b0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1b1c0 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e        an index).
1b1d0 20 20 41 70 70 65 6e 64 20 61 20 73 65 71 75 65    Append a seque
1b1e0 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68  nce number so th
1b1f0 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a  at all entries.*
1b200 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1b210 20 20 20 20 20 20 61 72 65 20 64 69 73 74 69 6e        are distin
1b220 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  ct..**.**     SR
1b230 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 53 74  T_DistQueue   St
1b240 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70  ore results in p
1b250 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44  riority queue pD
1b260 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c  est->iSDParm onl
1b270 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20  y if.**         
1b280 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1b290 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20  same record has 
1b2a0 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65  never been store
1b2b0 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a  d before.  The.*
1b2c0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1b2d0 20 20 20 20 20 20 69 6e 64 65 78 20 61 74 20 70        index at p
1b2e0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20  Dest->iSDParm+1 
1b2f0 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73  hold all prior s
1b300 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tores..*/.#defin
1b310 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20  e SRT_Union     
1b320 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72     1  /* Store r
1b330 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e  esult as keys in
1b340 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65   an index */.#de
1b350 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20  fine SRT_Except 
1b360 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f        2  /* Remo
1b370 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61  ve result from a
1b380 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a   UNION index */.
1b390 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73  #define SRT_Exis
1b3a0 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53  ts       3  /* S
1b3b0 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65  tore 1 if the re
1b3c0 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74  sult is not empt
1b3d0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  y */.#define SRT
1b3e0 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20  _Discard      4 
1b3f0 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20   /* Do not save 
1b400 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77  the results anyw
1b410 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  here */.#define 
1b420 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20  SRT_Fifo        
1b430 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   5  /* Store res
1b440 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68  ult as data with
1b450 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f   an automatic ro
1b460 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  wid */.#define S
1b470 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20  RT_DistFifo     
1b480 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46  6  /* Like SRT_F
1b490 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20  ifo, but unique 
1b4a0 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a  results only */.
1b4b0 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75  #define SRT_Queu
1b4c0 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53  e        7  /* S
1b4d0 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61  tore result in a
1b4e0 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69  n queue */.#defi
1b4f0 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65 75 65  ne SRT_DistQueue
1b500 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53      8  /* Like S
1b510 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e  RT_Queue, but un
1b520 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c  ique results onl
1b530 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44  y */../* The ORD
1b540 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ER BY clause is 
1b550 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20  ignored for all 
1b560 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a  of the above */.
1b570 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c  #define Ignorabl
1b580 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d  eOrderby(X) ((X-
1b590 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73  >eDest)<=SRT_Dis
1b5a0 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65  tQueue)..#define
1b5b0 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20   SRT_Output     
1b5c0 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65    9  /* Output e
1b5d0 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  ach row of resul
1b5e0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
1b5f0 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30 20  _Mem         10 
1b600 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1b610 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c   in a memory cel
1b620 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  l */.#define SRT
1b630 5f 53 65 74 20 20 20 20 20 20 20 20 20 31 31 20  _Set         11 
1b640 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1b650 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20  s as keys in an 
1b660 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
1b670 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20   SRT_EphemTab   
1b680 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74   12  /* Create t
1b690 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64  ransient tab and
1b6a0 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f   store like SRT_
1b6b0 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  Table */.#define
1b6c0 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20   SRT_Coroutine  
1b6d0 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65   13  /* Generate
1b6e0 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66   a single row of
1b6f0 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69   result */.#defi
1b700 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20  ne SRT_Table    
1b710 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20     14  /* Store 
1b720 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77  result as data w
1b730 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63  ith an automatic
1b740 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   rowid */../*.**
1b750 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1b760 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63  this object desc
1b770 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70  ribes where to p
1b780 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ut of the result
1b790 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54  s of.** a SELECT
1b7a0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73   statement..*/.s
1b7b0 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74  truct SelectDest
1b7c0 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20   {.  u8 eDest;  
1b7d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77            /* How
1b7e0 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74   to dispose of t
1b7f0 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20  he results.  On 
1b800 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20  of SRT_* above. 
1b810 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 53 64 73  */.  char affSds
1b820 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 66 66  t;        /* Aff
1b830 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e 20  inity used when 
1b840 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a  eDest==SRT_Set *
1b850 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b  /.  int iSDParm;
1b860 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61           /* A pa
1b870 72 61 6d 65 74 65 72 20 75 73 65 64 20 62 79 20  rameter used by 
1b880 74 68 65 20 65 44 65 73 74 20 64 69 73 70 6f 73  the eDest dispos
1b890 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69  al method */.  i
1b8a0 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20 20 20  nt iSdst;       
1b8b0 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69      /* Base regi
1b8c0 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75 6c  ster where resul
1b8d0 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a  ts are written *
1b8e0 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20  /.  int nSdst;  
1b8f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1b900 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  er of registers 
1b910 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 45  allocated */.  E
1b920 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
1b930 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d  y;  /* Key colum
1b940 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65  ns for SRT_Queue
1b950 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65   and SRT_DistQue
1b960 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ue */.};../*.** 
1b970 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65  During code gene
1b980 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d  ration of statem
1b990 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73  ents that do ins
1b9a0 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e  erts into AUTOIN
1b9b0 43 52 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62 6c  CREMENT .** tabl
1b9c0 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  es, the followin
1b9d0 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  g information is
1b9e0 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
1b9f0 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63   Table.u.autoInc
1ba00 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66  .p.** pointer of
1ba10 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d   each autoincrem
1ba20 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63  ent table to rec
1ba30 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e  ord some side in
1ba40 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a  formation that.*
1ba50 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  * the code gener
1ba60 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20  ator needs.  We 
1ba70 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72  have to keep per
1ba80 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65  -table autoincre
1ba90 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  ment.** informat
1baa0 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65  ion in case inse
1bab0 72 74 73 20 61 72 65 20 64 6f 77 6e 20 77 69 74  rts are down wit
1bac0 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54  hin triggers.  T
1bad0 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a  riggers do not.*
1bae0 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64  * normally coord
1baf0 69 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69  inate their acti
1bb00 76 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64  vities, but we d
1bb10 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69  o need to coordi
1bb20 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64  nate the.** load
1bb30 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f  ing and saving o
1bb40 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  f autoincrement 
1bb50 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
1bb60 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e  struct AutoincIn
1bb70 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e  fo {.  AutoincIn
1bb80 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20  fo *pNext;   /* 
1bb90 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20  Next info block 
1bba0 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65  in a list of the
1bbb0 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65  m all */.  Table
1bbc0 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
1bbd0 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69   /* Table this i
1bbe0 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73  nfo block refers
1bbf0 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62   to */.  int iDb
1bc00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1bc10 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74  * Index in sqlit
1bc20 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61  e3.aDb[] of data
1bc30 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61  base holding pTa
1bc40 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74  b */.  int regCt
1bc50 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
1bc60 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20  Memory register 
1bc70 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69  holding the rowi
1bc80 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a  d counter */.};.
1bc90 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74  ./*.** Size of t
1bca0 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a  he column cache.
1bcb0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
1bcc0 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64  E_N_COLCACHE.# d
1bcd0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43  efine SQLITE_N_C
1bce0 4f 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69  OLCACHE 10.#endi
1bcf0 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73  f../*.** At leas
1bd00 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  t one instance o
1bd10 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1bd20 73 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65  structure is cre
1bd30 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 0a 2a  ated for each .*
1bd40 2a 20 74 72 69 67 67 65 72 20 74 68 61 74 20 6d  * trigger that m
1bd50 61 79 20 62 65 20 66 69 72 65 64 20 77 68 69 6c  ay be fired whil
1bd60 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53  e parsing an INS
1bd70 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44  ERT, UPDATE or D
1bd80 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65  ELETE.** stateme
1bd90 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a  nt. All such obj
1bda0 65 63 74 73 20 61 72 65 20 73 74 6f 72 65 64 20  ects are stored 
1bdb0 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69  in the linked li
1bdc0 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20  st headed at.** 
1bdd0 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
1bde0 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e  g and deleted on
1bdf0 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d  ce statement com
1be00 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65  pilation has bee
1be10 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a  n.** completed..
1be20 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62  **.** A Vdbe sub
1be30 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d  -program that im
1be40 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64  plements the bod
1be50 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73  y and WHEN claus
1be60 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20  e of trigger.** 
1be70 54 72 69 67 67 65 72 50 72 67 2e 70 54 72 69 67  TriggerPrg.pTrig
1be80 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20  ger, assuming a 
1be90 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  default ON CONFL
1bea0 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a  ICT clause of.**
1beb0 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f   TriggerPrg.orco
1bec0 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e  nf, is stored in
1bed0 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   the TriggerPrg.
1bee0 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c  pProgram variabl
1bef0 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e  e..** The Parse.
1bf00 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74  pTriggerPrg list
1bf10 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20   never contains 
1bf20 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68  two entries with
1bf30 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c   the same.** val
1bf40 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72  ues for both pTr
1bf50 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66  igger and orconf
1bf60 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67  ..**.** The Trig
1bf70 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b  gerPrg.aColmask[
1bf80 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  0] variable is s
1bf90 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20  et to a mask of 
1bfa0 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a  old.* columns.**
1bfb0 20 61 63 63 65 73 73 65 64 20 28 6f 72 20 73 65   accessed (or se
1bfc0 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67  t to 0 for trigg
1bfd0 65 72 73 20 66 69 72 65 64 20 61 73 20 61 20 72  ers fired as a r
1bfe0 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 20  esult of INSERT 
1bff0 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e  .** statements).
1c000 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20   Similarly, the 
1c010 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d  TriggerPrg.aColm
1c020 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20  ask[1] variable 
1c030 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d  is set to.** a m
1c040 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c  ask of new.* col
1c050 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68 65  umns used by the
1c060 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72   program..*/.str
1c070 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20 7b  uct TriggerPrg {
1c080 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69  .  Trigger *pTri
1c090 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72  gger;      /* Tr
1c0a0 69 67 67 65 72 20 74 68 69 73 20 70 72 6f 67 72  igger this progr
1c0b0 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f  am was coded fro
1c0c0 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72  m */.  TriggerPr
1c0d0 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f  g *pNext;      /
1c0e0 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20  * Next entry in 
1c0f0 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
1c100 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50  g list */.  SubP
1c110 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d  rogram *pProgram
1c120 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69  ;   /* Program i
1c130 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69  mplementing pTri
1c140 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20  gger/orconf */. 
1c150 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20   int orconf;    
1c160 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
1c170 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ult ON CONFLICT 
1c180 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20  policy */.  u32 
1c190 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20  aColmask[2];    
1c1a0 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20      /* Masks of 
1c1b0 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c  old.*, new.* col
1c1c0 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f  umns accessed */
1c1d0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79  .};../*.** The y
1c1e0 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20  DbMask datatype 
1c1f0 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20  for the bitmask 
1c200 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  of all attached 
1c210 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69  databases..*/.#i
1c220 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  f SQLITE_MAX_ATT
1c230 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64  ACHED>30.  typed
1c240 65 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  ef unsigned char
1c250 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45   yDbMask[(SQLITE
1c260 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29  _MAX_ATTACHED+9)
1c270 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62  /8];.# define Db
1c280 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20  MaskTest(M,I)   
1c290 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31   (((M)[(I)/8]&(1
1c2a0 3c 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a  <<((I)&7)))!=0).
1c2b0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a  # define DbMaskZ
1c2c0 65 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73  ero(M)      mems
1c2d0 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28  et((M),0,sizeof(
1c2e0 4d 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  M)).# define DbM
1c2f0 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20  askSet(M,I)     
1c300 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c  (M)[(I)/8]|=(1<<
1c310 28 28 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e  ((I)&7)).# defin
1c320 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e DbMaskAllZero(
1c330 4d 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61  M)   sqlite3DbMa
1c340 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64  skAllZero(M).# d
1c350 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a  efine DbMaskNonZ
1c360 65 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65  ero(M)   (sqlite
1c370 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d  3DbMaskAllZero(M
1c380 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79  )==0).#else.  ty
1c390 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69  pedef unsigned i
1c3a0 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65  nt yDbMask;.# de
1c3b0 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28  fine DbMaskTest(
1c3c0 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28 28  M,I)    (((M)&((
1c3d0 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29  (yDbMask)1)<<(I)
1c3e0 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  ))!=0).# define 
1c3f0 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20  DbMaskZero(M)   
1c400 20 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e     (M)=0.# defin
1c410 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29  e DbMaskSet(M,I)
1c420 20 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62       (M)|=(((yDb
1c430 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20  Mask)1)<<(I)).# 
1c440 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c  define DbMaskAll
1c450 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30  Zero(M)   (M)==0
1c460 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1c470 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29  NonZero(M)   (M)
1c480 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  !=0.#endif../*.*
1c490 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20  * An SQL parser 
1c4a0 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79  context.  A copy
1c4b0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
1c4c0 72 65 20 69 73 20 70 61 73 73 65 64 20 74 68 72  re is passed thr
1c4d0 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73  ough.** the pars
1c4e0 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f  er and down into
1c4f0 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20   all the parser 
1c500 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69  action routine i
1c510 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61  n order to.** ca
1c520 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72  rry around infor
1c530 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67  mation that is g
1c540 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74  lobal to the ent
1c550 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a  ire parse..**.**
1c560 20 54 68 65 20 73 74 72 75 63 74 75 72 65 20 69   The structure i
1c570 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74  s divided into t
1c580 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20  wo parts.  When 
1c590 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 63  the parser and c
1c5a0 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20  ode.** generate 
1c5b0 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20  call themselves 
1c5c0 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65  recursively, the
1c5d0 20 66 69 72 73 74 20 70 61 72 74 20 6f 66 20 74   first part of t
1c5e0 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  he structure.** 
1c5f0 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20  is constant but 
1c600 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20  the second part 
1c610 69 73 20 72 65 73 65 74 20 61 74 20 74 68 65 20  is reset at the 
1c620 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e  beginning and en
1c630 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63  d of.** each rec
1c640 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  ursion..**.** Th
1c650 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64  e nTableLock and
1c660 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69   aTableLock vari
1c670 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75  ables are only u
1c680 73 65 64 20 69 66 20 74 68 65 20 73 68 61 72 65  sed if the share
1c690 64 2d 63 61 63 68 65 20 0a 2a 2a 20 66 65 61 74  d-cache .** feat
1c6a0 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28  ure is enabled (
1c6b0 69 66 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d  if sqlite3Tsd()-
1c6c0 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 20 69  >useSharedData i
1c6d0 73 20 74 72 75 65 29 2e 20 54 68 65 79 20 61 72  s true). They ar
1c6e0 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f  e.** used to sto
1c6f0 72 65 20 74 68 65 20 73 65 74 20 6f 66 20 74 61  re the set of ta
1c700 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72  ble-locks requir
1c710 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d  ed by the statem
1c720 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d  ent being.** com
1c730 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20  piled. Function 
1c740 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
1c750 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 64  () is used to ad
1c760 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65  d entries to the
1c770 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72  .** list..*/.str
1c780 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71  uct Parse {.  sq
1c790 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
1c7a0 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64     /* The main d
1c7b0 61 74 61 62 61 73 65 20 73 74 72 75 63 74 75 72  atabase structur
1c7c0 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72  e */.  char *zEr
1c7d0 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41  rMsg;       /* A
1c7e0 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
1c7f0 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65  */.  Vdbe *pVdbe
1c800 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  ;         /* An 
1c810 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75  engine for execu
1c820 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 62 79  ting database by
1c830 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20  tecode */.  int 
1c840 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rc;             
1c850 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20   /* Return code 
1c860 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a  from execution *
1c870 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53  /.  u8 colNamesS
1c880 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45  et;      /* TRUE
1c890 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e   after OP_Column
1c8a0 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73  Name has been is
1c8b0 73 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f  sued to pVdbe */
1c8c0 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d  .  u8 checkSchem
1c8d0 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65  a;      /* Cause
1c8e0 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  s schema cookie 
1c8f0 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65  check after an e
1c900 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73  rror */.  u8 nes
1c910 74 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ted;           /
1c920 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
1c930 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20  ed calls to the 
1c940 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65  parser/code gene
1c950 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54  rator */.  u8 nT
1c960 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20  empReg;         
1c970 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d  /* Number of tem
1c980 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73  porary registers
1c990 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a   in aTempReg[] *
1c9a0 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72  /.  u8 isMultiWr
1c9b0 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65  ite;     /* True
1c9c0 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61   if statement ma
1c9d0 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20  y modify/insert 
1c9e0 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
1c9f0 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20  .  u8 mayAbort; 
1ca00 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1ca10 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  if statement may
1ca20 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20   throw an ABORT 
1ca30 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75  exception */.  u
1ca40 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20  8 hasCompound;  
1ca50 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69      /* Need to i
1ca60 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d  nvoke convertCom
1ca70 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
1ca80 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20  query() */.  u8 
1ca90 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20  okConstFactor;  
1caa0 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f    /* OK to facto
1cab0 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20  r out constants 
1cac0 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65  */.  int aTempRe
1cad0 67 5b 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c  g[8];     /* Hol
1cae0 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65  ding area for te
1caf0 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
1cb00 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67  s */.  int nRang
1cb10 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53  eReg;       /* S
1cb20 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f  ize of the tempo
1cb30 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c  rary register bl
1cb40 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61  ock */.  int iRa
1cb50 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a  ngeReg;       /*
1cb60 20 46 69 72 73 74 20 72 65 67 69 73 74 65 72 20   First register 
1cb70 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  in temporary reg
1cb80 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20  ister block */. 
1cb90 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
1cba0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1cbb0 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a  of errors seen *
1cbc0 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20  /.  int nTab;   
1cbd0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1cbe0 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79  er of previously
1cbf0 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20   allocated VDBE 
1cc00 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74  cursors */.  int
1cc10 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   nMem;          
1cc20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d    /* Number of m
1cc30 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64  emory cells used
1cc40 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1cc50 20 6e 53 65 74 3b 20 20 20 20 20 20 20 20 20 20   nSet;          
1cc60 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
1cc70 65 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  ets used so far 
1cc80 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20  */.  int nOnce; 
1cc90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1cca0 62 65 72 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69  ber of OP_Once i
1ccb0 6e 73 74 72 75 63 74 69 6f 6e 73 20 73 6f 20 66  nstructions so f
1ccc0 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41  ar */.  int nOpA
1ccd0 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  lloc;        /* 
1cce0 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20  Number of slots 
1ccf0 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64  allocated for Vd
1cd00 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e  be.aOp[] */.  in
1cd10 74 20 69 46 69 78 65 64 4f 70 3b 20 20 20 20 20  t iFixedOp;     
1cd20 20 20 20 2f 2a 20 4e 65 76 65 72 20 62 61 63 6b     /* Never back
1cd30 20 6f 75 74 20 6f 70 63 6f 64 65 73 20 69 46 69   out opcodes iFi
1cd40 78 65 64 4f 70 2d 31 20 6f 72 20 65 61 72 6c 69  xedOp-1 or earli
1cd50 65 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61  er */.  int ckBa
1cd60 73 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  se;          /* 
1cd70 42 61 73 65 20 72 65 67 69 73 74 65 72 20 6f 66  Base register of
1cd80 20 64 61 74 61 20 64 75 72 69 6e 67 20 63 68 65   data during che
1cd90 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ck constraints *
1cda0 2f 0a 20 20 69 6e 74 20 69 53 65 6c 66 54 61 62  /.  int iSelfTab
1cdb0 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c  ;        /* Tabl
1cdc0 65 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 77 68  e of an index wh
1cdd0 6f 73 65 20 65 78 70 72 73 20 61 72 65 20 62 65  ose exprs are be
1cde0 69 6e 67 20 63 6f 64 65 64 20 2a 2f 0a 20 20 69  ing coded */.  i
1cdf0 6e 74 20 69 43 61 63 68 65 4c 65 76 65 6c 3b 20  nt iCacheLevel; 
1ce00 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20      /* ColCache 
1ce10 76 61 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c 43  valid when aColC
1ce20 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69  ache[].iLevel<=i
1ce30 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20  CacheLevel */.  
1ce40 69 6e 74 20 69 43 61 63 68 65 43 6e 74 3b 20 20  int iCacheCnt;  
1ce50 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20       /* Counter 
1ce60 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  used to generate
1ce70 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75   aColCache[].lru
1ce80 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74   values */.  int
1ce90 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20   nLabel;        
1cea0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c    /* Number of l
1ceb0 61 62 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20  abels used */.  
1cec0 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20  int *aLabel;    
1ced0 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 74 6f       /* Space to
1cee0 20 68 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c 73   hold the labels
1cef0 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 79 43 6f   */.  struct yCo
1cf00 6c 43 61 63 68 65 20 7b 0a 20 20 20 20 69 6e 74  lCache {.    int
1cf10 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
1cf20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73     /* Table curs
1cf30 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  or number */.   
1cf40 20 69 31 36 20 69 43 6f 6c 75 6d 6e 3b 20 20 20   i16 iColumn;   
1cf50 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
1cf60 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f  column number */
1cf70 0a 20 20 20 20 75 38 20 74 65 6d 70 52 65 67 3b  .    u8 tempReg;
1cf80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 52             /* iR
1cf90 65 67 20 69 73 20 61 20 74 65 6d 70 20 72 65 67  eg is a temp reg
1cfa0 69 73 74 65 72 20 74 68 61 74 20 6e 65 65 64 73  ister that needs
1cfb0 20 74 6f 20 62 65 20 66 72 65 65 64 20 2a 2f 0a   to be freed */.
1cfc0 20 20 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20      int iLevel; 
1cfd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 73            /* Nes
1cfe0 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20  ting level */.  
1cff0 20 20 69 6e 74 20 69 52 65 67 3b 20 20 20 20 20    int iReg;     
1d000 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 20 77          /* Reg w
1d010 69 74 68 20 76 61 6c 75 65 20 6f 66 20 74 68 69  ith value of thi
1d020 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e  s column. 0 mean
1d030 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69  s none. */.    i
1d040 6e 74 20 6c 72 75 3b 20 20 20 20 20 20 20 20 20  nt lru;         
1d050 20 20 20 20 20 2f 2a 20 4c 65 61 73 74 20 72 65       /* Least re
1d060 63 65 6e 74 6c 79 20 75 73 65 64 20 65 6e 74 72  cently used entr
1d070 79 20 68 61 73 20 74 68 65 20 73 6d 61 6c 6c 65  y has the smalle
1d080 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20  st value */.  } 
1d090 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54 45  aColCache[SQLITE
1d0a0 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f  _N_COLCACHE];  /
1d0b0 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63 68 20 63  * One for each c
1d0c0 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e 74 72  olumn cache entr
1d0d0 79 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  y */.  ExprList 
1d0e0 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43  *pConstExpr;/* C
1d0f0 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
1d100 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63  ons */.  Token c
1d110 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a  onstraintName;/*
1d120 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e   Name of the con
1d130 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c  straint currentl
1d140 79 20 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a  y being parsed *
1d150 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72 69 74  /.  yDbMask writ
1d160 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72  eMask;   /* Star
1d170 74 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61  t a write transa
1d180 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64  ction on these d
1d190 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 79 44  atabases */.  yD
1d1a0 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b  bMask cookieMask
1d1b0 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66  ;  /* Bitmask of
1d1c0 20 73 63 68 65 6d 61 20 76 65 72 69 66 69 65 64   schema verified
1d1d0 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20   databases */.  
1d1e0 69 6e 74 20 63 6f 6f 6b 69 65 56 61 6c 75 65 5b  int cookieValue[
1d1f0 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
1d200 48 45 44 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c 75  HED+2];  /* Valu
1d210 65 73 20 6f 66 20 63 6f 6f 6b 69 65 73 20 74 6f  es of cookies to
1d220 20 76 65 72 69 66 79 20 2a 2f 0a 20 20 69 6e 74   verify */.  int
1d230 20 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20   regRowid;      
1d240 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
1d250 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43  lding rowid of C
1d260 52 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72  REATE TABLE entr
1d270 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f  y */.  int regRo
1d280 6f 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52  ot;         /* R
1d290 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1d2a0 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
1d2b0 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73   for new objects
1d2c0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72   */.  int nMaxAr
1d2d0 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  g;         /* Ma
1d2e0 78 20 61 72 67 73 20 70 61 73 73 65 64 20 74 6f  x args passed to
1d2f0 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 62   user function b
1d300 79 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f  y sub-program */
1d310 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45  .#if SELECTTRACE
1d320 5f 45 4e 41 42 4c 45 44 0a 20 20 69 6e 74 20 6e  _ENABLED.  int n
1d330 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20  Select;         
1d340 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c  /* Number of SEL
1d350 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 73  ECT statements s
1d360 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65  een */.  int nSe
1d370 6c 65 63 74 49 6e 64 65 6e 74 3b 20 20 20 2f 2a  lectIndent;   /*
1d380 20 48 6f 77 20 66 61 72 20 74 6f 20 69 6e 64 65   How far to inde
1d390 6e 74 20 53 45 4c 45 43 54 54 52 41 43 45 28 29  nt SELECTTRACE()
1d3a0 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69   output */.#endi
1d3b0 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
1d3c0 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
1d3d0 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c  HE.  int nTableL
1d3e0 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ock;        /* N
1d3f0 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69  umber of locks i
1d400 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a  n aTableLock */.
1d410 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61    TableLock *aTa
1d420 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75  bleLock; /* Requ
1d430 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73  ired table locks
1d440 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68   for shared-cach
1d450 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  e mode */.#endif
1d460 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a  .  AutoincInfo *
1d470 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72  pAinc;  /* Infor
1d480 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54  mation about AUT
1d490 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74  OINCREMENT count
1d4a0 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66  ers */..  /* Inf
1d4b0 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 77 68  ormation used wh
1d4c0 69 6c 65 20 63 6f 64 69 6e 67 20 74 72 69 67 67  ile coding trigg
1d4d0 65 72 20 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a  er programs. */.
1d4e0 20 20 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76    Parse *pToplev
1d4f0 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20  el;    /* Parse 
1d500 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61  structure for ma
1d510 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e  in program (or N
1d520 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20  ULL) */.  Table 
1d530 2a 70 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f  *pTriggerTab;  /
1d540 2a 20 54 61 62 6c 65 20 74 72 69 67 67 65 72 73  * Table triggers
1d550 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64   are being coded
1d560 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64   for */.  int ad
1d570 64 72 43 72 54 61 62 3b 20 20 20 20 20 20 20 2f  drCrTab;       /
1d580 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f  * Address of OP_
1d590 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f  CreateTable opco
1d5a0 64 65 20 6f 6e 20 43 52 45 41 54 45 20 54 41 42  de on CREATE TAB
1d5b0 4c 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65  LE */.  u32 nQue
1d5c0 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20  ryLoop;      /* 
1d5d0 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69 74  Est number of it
1d5e0 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71 75  erations of a qu
1d5f0 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29  ery (10*log2(N))
1d600 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73   */.  u32 oldmas
1d610 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  k;         /* Ma
1d620 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75  sk of old.* colu
1d630 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a  mns referenced *
1d640 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b  /.  u32 newmask;
1d650 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b           /* Mask
1d660 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e   of new.* column
1d670 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a  s referenced */.
1d680 20 20 75 38 20 65 54 72 69 67 67 65 72 4f 70 3b    u8 eTriggerOp;
1d690 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44         /* TK_UPD
1d6a0 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f  ATE, TK_INSERT o
1d6b0 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20  r TK_DELETE */. 
1d6c0 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20   u8 eOrconf;    
1d6d0 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
1d6e0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c   ON CONFLICT pol
1d6f0 69 63 79 20 66 6f 72 20 74 72 69 67 67 65 72 20  icy for trigger 
1d700 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64 69  steps */.  u8 di
1d710 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20 20  sableTriggers;  
1d720 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61 62  /* True to disab
1d730 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a  le triggers */..
1d740 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    /*************
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 0a 20 20 2a 2a  ***********.  **
1d790 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61   Above is consta
1d7a0 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75 72  nt between recur
1d7b0 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73  sions.  Below is
1d7c0 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e   reset before an
1d7d0 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63  d after.  ** eac
1d7e0 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54 68  h recursion.  Th
1d7f0 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77 65  e boundary betwe
1d800 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65 67  en these two reg
1d810 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69 6e  ions is determin
1d820 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f 66  ed.  ** using of
1d830 66 73 65 74 6f 66 28 50 61 72 73 65 2c 6e 56 61  fsetof(Parse,nVa
1d840 72 29 20 73 6f 20 74 68 65 20 6e 56 61 72 20 66  r) so the nVar f
1d850 69 65 6c 64 20 6d 75 73 74 20 62 65 20 74 68 65  ield must be the
1d860 20 66 69 72 73 74 20 66 69 65 6c 64 0a 20 20 2a   first field.  *
1d870 2a 20 69 6e 20 74 68 65 20 72 65 63 75 72 73 69  * in the recursi
1d880 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a  ve region..  ***
1d890 2a 2a 2a 2a 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 2f 0a 0a 20 20 69 6e 74 20 6e 56  *****/..  int nV
1d8e0 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ar;             
1d8f0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1d900 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73   '?' variables s
1d910 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73  een in the SQL s
1d920 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
1d930 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20  zVar;           
1d940 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1d950 66 20 61 76 61 69 6c 61 62 6c 65 20 73 6c 6f 74  f available slot
1d960 73 20 69 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f 0a  s in azVar[] */.
1d970 20 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64 65    u8 iPkSortOrde
1d980 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  r;          /* A
1d990 53 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20 49  SC or DESC for I
1d9a0 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
1d9b0 45 59 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61  EY */.  u8 expla
1d9c0 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  in;             
1d9d0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
1d9e0 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73   EXPLAIN flag is
1d9f0 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75   found on the qu
1da00 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ery */.#ifndef S
1da10 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
1da20 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65 63  ALTABLE.  u8 dec
1da30 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20 20  lareVtab;       
1da40 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69      /* True if i
1da50 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65  nside sqlite3_de
1da60 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a  clare_vtab() */.
1da70 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b    int nVtabLock;
1da80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1da90 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
1daa0 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20   tables to lock 
1dab0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
1dac0 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20  nAlias;         
1dad0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1dae0 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73 75 6c  of aliased resul
1daf0 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f  t set columns */
1db00 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20  .  int nHeight; 
1db10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1db20 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20  Expression tree 
1db30 68 65 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e  height of curren
1db40 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a  t sub-select */.
1db50 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1db60 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e  MIT_EXPLAIN.  in
1db70 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20  t iSelectId;    
1db80 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f 66          /* ID of
1db90 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74 20   current select 
1dba0 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70  for EXPLAIN outp
1dbb0 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78  ut */.  int iNex
1dbc0 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20  tSelectId;      
1dbd0 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c 61    /* Next availa
1dbe0 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66 6f  ble select ID fo
1dbf0 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74  r EXPLAIN output
1dc00 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68 61   */.#endif.  cha
1dc10 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20 20  r **azVar;      
1dc20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
1dc30 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70  rs to names of p
1dc40 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56  arameters */.  V
1dc50 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b  dbe *pReprepare;
1dc60 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62           /* VM b
1dc70 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20  eing reprepared 
1dc80 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72  (sqlite3Reprepar
1dc90 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  e()) */.  const 
1dca0 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20  char *zTail;    
1dcb0 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74      /* All SQL t
1dcc0 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61 73  ext past the las
1dcd0 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73  t semicolon pars
1dce0 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ed */.  Table *p
1dcf0 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20  NewTable;       
1dd00 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69    /* A table bei
1dd10 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ng constructed b
1dd20 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a  y CREATE TABLE *
1dd30 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65  /.  Trigger *pNe
1dd40 77 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a  wTrigger;     /*
1dd50 20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20 63   Trigger under c
1dd60 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20 43 52  onstruct by a CR
1dd70 45 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a  EATE TRIGGER */.
1dd80 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
1dd90 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54  uthContext; /* T
1dda0 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65 72  he 6th parameter
1ddb0 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61   to db->xAuth ca
1ddc0 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54 6f 6b  llbacks */.  Tok
1ddd0 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20  en sNameToken;  
1dde0 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
1ddf0 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64  with unqualified
1de00 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e   schema object n
1de10 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73  ame */.  Token s
1de20 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20  LastToken;      
1de30 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74     /* The last t
1de40 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 23  oken parsed */.#
1de50 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1de60 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
1de70 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20    Token sArg;   
1de80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
1de90 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20  omplete text of 
1dea0 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e  a module argumen
1deb0 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61  t */.  Table **a
1dec0 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20  pVtabLock;      
1ded0 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76   /* Pointer to v
1dee0 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65  irtual tables ne
1def0 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f  eding locking */
1df00 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20  .#endif.  Table 
1df10 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20  *pZombieTab;    
1df20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54      /* List of T
1df30 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20  able objects to 
1df40 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64  delete after cod
1df50 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67  e gen */.  Trigg
1df60 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72 50  erPrg *pTriggerP
1df70 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c  rg;  /* Linked l
1df80 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69  ist of coded tri
1df90 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20  ggers */.  With 
1dfa0 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20  *pWith;         
1dfb0 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
1dfc0 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20  WITH clause, or 
1dfd0 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20 2a  NULL */.  With *
1dfe0 70 57 69 74 68 54 6f 46 72 65 65 3b 20 20 20 20  pWithToFree;    
1dff0 20 20 20 20 2f 2a 20 46 72 65 65 20 74 68 69 73      /* Free this
1e000 20 57 49 54 48 20 6f 62 6a 65 63 74 20 61 74 20   WITH object at 
1e010 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70  the end of the p
1e020 61 72 73 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  arse */.};../*.*
1e030 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
1e040 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64   currently insid
1e050 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63  e an sqlite3_dec
1e060 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c  lare_vtab() call
1e070 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
1e080 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
1e090 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49  ABLE.  #define I
1e0a0 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30  N_DECLARE_VTAB 0
1e0b0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
1e0c0 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
1e0d0 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61 72   (pParse->declar
1e0e0 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f  eVtab).#endif../
1e0f0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
1e100 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1e110 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20  g structure can 
1e120 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61  be declared on a
1e130 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a   stack and used.
1e140 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20 50  ** to save the P
1e150 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
1e160 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20  t value so that 
1e170 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72  it can be restor
1e180 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72  ed later..*/.str
1e190 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20  uct AuthContext 
1e1a0 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
1e1b0 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20  zAuthContext;   
1e1c0 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61 72  /* Put saved Par
1e1d0 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20  se.zAuthContext 
1e1e0 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20  here */.  Parse 
1e1f0 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
1e200 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72        /* The Par
1e210 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  se structure */.
1e220 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65  };../*.** Bitfie
1e230 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20  ld flags for P5 
1e240 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73  value in various
1e250 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65   opcodes..*/.#de
1e260 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41  fine OPFLAG_NCHA
1e270 4e 47 45 20 20 20 20 20 20 20 30 78 30 31 20 20  NGE       0x01  
1e280 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61    /* Set to upda
1e290 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a  te db->nChange *
1e2a0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1e2b0 5f 45 50 48 45 4d 20 20 20 20 20 20 20 20 20 30  _EPHEM         0
1e2c0 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x01    /* OP_Col
1e2d0 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c 20 6f  umn: Ephemeral o
1e2e0 75 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f 0a 23  utput is ok */.#
1e2f0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41  define OPFLAG_LA
1e300 53 54 52 4f 57 49 44 20 20 20 20 20 30 78 30 32  STROWID     0x02
1e310 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70      /* Set to up
1e320 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77  date db->lastRow
1e330 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  id */.#define OP
1e340 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20 20  FLAG_ISUPDATE   
1e350 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 68     0x04    /* Th
1e360 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20  is OP_Insert is 
1e370 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a 2f  an sql UPDATE */
1e380 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1e390 41 50 50 45 4e 44 20 20 20 20 20 20 20 20 30 78  APPEND        0x
1e3a0 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73  08    /* This is
1e3b0 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e   likely to be an
1e3c0 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69   append */.#defi
1e3d0 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  ne OPFLAG_USESEE
1e3e0 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20 20 20  KRESULT 0x10    
1e3f0 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64 20  /* Try to avoid 
1e400 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65 49  a seek in BtreeI
1e410 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65 66 69  nsert() */.#defi
1e420 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  ne OPFLAG_LENGTH
1e430 41 52 47 20 20 20 20 20 30 78 34 30 20 20 20 20  ARG     0x40    
1e440 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c  /* OP_Column onl
1e450 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67 74  y used for lengt
1e460 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  h() */.#define O
1e470 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20  PFLAG_TYPEOFARG 
1e480 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f      0x80    /* O
1e490 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73  P_Column only us
1e4a0 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 20  ed for typeof() 
1e4b0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1e4c0 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20 20  G_BULKCSR       
1e4d0 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70  0x01    /* OP_Op
1e4e0 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70 65  en** used to ope
1e4f0 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f  n bulk cursor */
1e500 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1e510 53 45 45 4b 45 51 20 20 20 20 20 20 20 20 30 78  SEEKEQ        0x
1e520 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e  02    /* OP_Open
1e530 2a 2a 20 63 75 72 73 6f 72 20 75 73 65 73 20 45  ** cursor uses E
1e540 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a 23  Q seek only */.#
1e550 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 46 4f  define OPFLAG_FO
1e560 52 44 45 4c 45 54 45 20 20 20 20 20 30 78 30 38  RDELETE     0x08
1e570 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20 69      /* OP_Open i
1e580 73 20 6f 70 65 6e 69 6e 67 20 66 6f 72 2d 64 65  s opening for-de
1e590 6c 65 74 65 20 63 73 72 20 2a 2f 0a 23 64 65 66  lete csr */.#def
1e5a0 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52  ine OPFLAG_P2ISR
1e5b0 45 47 20 20 20 20 20 20 20 30 78 31 30 20 20 20  EG       0x10   
1e5c0 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65   /* P2 to OP_Ope
1e5d0 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74 65  n** is a registe
1e5e0 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66  r number */.#def
1e5f0 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  ine OPFLAG_PERMU
1e600 54 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20  TE       0x01   
1e610 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20   /* OP_Compare: 
1e620 75 73 65 20 74 68 65 20 70 65 72 6d 75 74 61 74  use the permutat
1e630 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61  ion */../*. * Ea
1e640 63 68 20 74 72 69 67 67 65 72 20 70 72 65 73 65  ch trigger prese
1e650 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nt in the databa
1e660 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f  se schema is sto
1e670 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e  red as an instan
1e680 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20  ce of. * struct 
1e690 54 72 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20  Trigger. . *. * 
1e6a0 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74  Pointers to inst
1e6b0 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20  ances of struct 
1e6c0 54 72 69 67 67 65 72 20 61 72 65 20 73 74 6f 72  Trigger are stor
1e6d0 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a  ed in two ways..
1e6e0 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72   * 1. In the "tr
1e6f0 69 67 48 61 73 68 22 20 68 61 73 68 20 74 61 62  igHash" hash tab
1e700 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68 65 20  le (part of the 
1e710 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65  sqlite3* that re
1e720 70 72 65 73 65 6e 74 73 20 74 68 65 20 0a 20 2a  presents the . *
1e730 20 20 20 20 64 61 74 61 62 61 73 65 29 2e 20 54      database). T
1e740 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67  his allows Trigg
1e750 65 72 20 73 74 72 75 63 74 75 72 65 73 20 74 6f  er structures to
1e760 20 62 65 20 72 65 74 72 69 65 76 65 64 20 62 79   be retrieved by
1e770 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c   name.. * 2. All
1e780 20 74 72 69 67 67 65 72 73 20 61 73 73 6f 63 69   triggers associ
1e790 61 74 65 64 20 77 69 74 68 20 61 20 73 69 6e 67  ated with a sing
1e7a0 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20  le table form a 
1e7b0 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69  linked list, usi
1e7c0 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65  ng the. *    pNe
1e7d0 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72  xt member of str
1e7e0 75 63 74 20 54 72 69 67 67 65 72 2e 20 41 20 70  uct Trigger. A p
1e7f0 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69  ointer to the fi
1e800 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  rst element of t
1e810 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20  he. *    linked 
1e820 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64 20 61  list is stored a
1e830 73 20 74 68 65 20 22 70 54 72 69 67 67 65 72 22  s the "pTrigger"
1e840 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61   member of the a
1e850 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20  ssociated. *    
1e860 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a  struct Table.. *
1e870 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69  . * The "step_li
1e880 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74  st" member point
1e890 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65  s to the first e
1e8a0 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b  lement of a link
1e8b0 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61  ed list. * conta
1e8c0 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74  ining the SQL st
1e8d0 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69  atements specifi
1e8e0 65 64 20 61 73 20 74 68 65 20 74 72 69 67 67 65  ed as the trigge
1e8f0 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73  r program.. */.s
1e900 74 72 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a  truct Trigger {.
1e910 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
1e920 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1e930 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69   name of the tri
1e940 67 67 65 72 20 20 20 20 20 20 20 20 20 20 20 20  gger            
1e950 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20              */. 
1e960 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20   char *table;   
1e970 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1e980 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f  table or view to
1e990 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67   which the trigg
1e9a0 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20  er applies */.  
1e9b0 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
1e9c0 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
1e9d0 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f  f TK_DELETE, TK_
1e9e0 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52  UPDATE, TK_INSER
1e9f0 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75  T         */.  u
1ea00 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20  8 tr_tm;        
1ea10 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
1ea20 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c   TRIGGER_BEFORE,
1ea30 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a   TRIGGER_AFTER *
1ea40 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b  /.  Expr *pWhen;
1ea50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1ea60 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f  he WHEN clause o
1ea70 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
1ea80 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a   (may be NULL) *
1ea90 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c  /.  IdList *pCol
1eaa0 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49  umns;       /* I
1eab0 66 20 74 68 69 73 20 69 73 20 61 6e 20 55 50 44  f this is an UPD
1eac0 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c  ATE OF <column-l
1ead0 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20  ist> trigger,.  
1eae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eaf0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 3c             the <
1eb00 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20  column-list> is 
1eb10 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20  stored here */. 
1eb20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
1eb30 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65  ;        /* Sche
1eb40 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
1eb50 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53  e trigger */.  S
1eb60 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d  chema *pTabSchem
1eb70 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  a;     /* Schema
1eb80 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
1eb90 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67  table */.  Trigg
1eba0 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73  erStep *step_lis
1ebb0 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20  t; /* Link list 
1ebc0 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  of trigger progr
1ebd0 61 6d 20 73 74 65 70 73 20 20 20 20 20 20 20 20  am steps        
1ebe0 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65       */.  Trigge
1ebf0 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  r *pNext;       
1ec00 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65    /* Next trigge
1ec10 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
1ec20 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d  h the table */.}
1ec30 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67  ;../*.** A trigg
1ec40 65 72 20 69 73 20 65 69 74 68 65 72 20 61 20 42  er is either a B
1ec50 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45  EFORE or an AFTE
1ec60 52 20 74 72 69 67 67 65 72 2e 20 20 54 68 65 20  R trigger.  The 
1ec70 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61  following consta
1ec80 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65  nts.** determine
1ec90 20 77 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49   which. .**.** I
1eca0 66 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74  f there are mult
1ecb0 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79  iple triggers, y
1ecc0 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65  ou might of some
1ecd0 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65   BEFORE and some
1ece0 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68   AFTER..** In th
1ecf0 61 74 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f  at cases, the co
1ed00 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61  nstants below ca
1ed10 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68  n be ORed togeth
1ed20 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54  er..*/.#define T
1ed30 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31  RIGGER_BEFORE  1
1ed40 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52  .#define TRIGGER
1ed50 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20  _AFTER   2../*. 
1ed60 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1ed70 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
1ed80 74 65 70 20 69 73 20 75 73 65 64 20 74 6f 20 73  tep is used to s
1ed90 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51  tore a single SQ
1eda0 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74  L statement. * t
1edb0 68 61 74 20 69 73 20 61 20 70 61 72 74 20 6f 66  hat is a part of
1edc0 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72   a trigger-progr
1edd0 61 6d 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61  am. . *. * Insta
1ede0 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54  nces of struct T
1edf0 72 69 67 67 65 72 53 74 65 70 20 61 72 65 20 73  riggerStep are s
1ee00 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c  tored in a singl
1ee10 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c  y linked list (l
1ee20 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74  inked. * using t
1ee30 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65  he "pNext" membe
1ee40 72 29 20 72 65 66 65 72 65 6e 63 65 64 20 62 79  r) referenced by
1ee50 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   the "step_list"
1ee60 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 0a   member of the .
1ee70 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73 74   * associated st
1ee80 72 75 63 74 20 54 72 69 67 67 65 72 20 69 6e 73  ruct Trigger ins
1ee90 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74  tance. The first
1eea0 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20   element of the 
1eeb0 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20  linked list is. 
1eec0 2a 20 74 68 65 20 66 69 72 73 74 20 73 74 65 70  * the first step
1eed0 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2d   of the trigger-
1eee0 70 72 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20  program.. * . * 
1eef0 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20  The "op" member 
1ef00 69 6e 64 69 63 61 74 65 73 20 77 68 65 74 68 65  indicates whethe
1ef10 72 20 74 68 69 73 20 69 73 20 61 20 22 44 45 4c  r this is a "DEL
1ef20 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20  ETE", "INSERT", 
1ef30 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22  "UPDATE" or. * "
1ef40 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e  SELECT" statemen
1ef50 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20  t. The meanings 
1ef60 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d  of the other mem
1ef70 62 65 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e  bers is determin
1ef80 65 64 20 62 79 20 74 68 65 20 0a 20 2a 20 76 61  ed by the . * va
1ef90 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66  lue of "op" as f
1efa0 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f  ollows:. *. * (o
1efb0 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a  p == TK_INSERT).
1efc0 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20   * orconf    -> 
1efd0 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f  stores the ON CO
1efe0 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d  NFLICT algorithm
1eff0 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e  . * pSelect   ->
1f000 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
1f010 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53  NSERT INTO ... S
1f020 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d  ELECT ... statem
1f030 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20  ent, then. *    
1f040 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73            this s
1f050 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20  tores a pointer 
1f060 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  to the SELECT st
1f070 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69  atement. Otherwi
1f080 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72  se NULL.. * zTar
1f090 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65  get   -> Dequote
1f0a0 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
1f0b0 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e  ble to insert in
1f0c0 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74  to.. * pExprList
1f0d0 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
1f0e0 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
1f0f0 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61  . VALUES ... sta
1f100 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20  tement, then. * 
1f110 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
1f120 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20  s stores values 
1f130 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20  to be inserted. 
1f140 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
1f150 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20   * pIdList   -> 
1f160 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
1f170 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c  SERT INTO ... (<
1f180 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56  column-names>) V
1f190 41 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20 20  ALUES ... . *   
1f1a0 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65             state
1f1b0 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20  ment, then this 
1f1c0 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d  stores the colum
1f1d0 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a  n-names to be. *
1f1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
1f1f0 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a  serted into.. *.
1f200 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c   * (op == TK_DEL
1f210 45 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20  ETE). * zTarget 
1f220 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61    -> Dequoted na
1f230 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
1f240 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a  to delete from..
1f250 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20   * pWhere    -> 
1f260 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
1f270 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73   of the DELETE s
1f280 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20  tatement if one 
1f290 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a  is specified.. *
1f2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74                Ot
1f2b0 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
1f2c0 20 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55   . * (op == TK_U
1f2d0 50 44 41 54 45 29 0a 20 2a 20 7a 54 61 72 67 65  PDATE). * zTarge
1f2e0 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20  t   -> Dequoted 
1f2f0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
1f300 65 20 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20  e to update.. * 
1f310 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65  pWhere    -> The
1f320 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66   WHERE clause of
1f330 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74   the UPDATE stat
1f340 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20  ement if one is 
1f350 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20  specified.. *   
1f360 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72             Other
1f370 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45  wise NULL.. * pE
1f380 78 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73  xprList -> A lis
1f390 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  t of the columns
1f3a0 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74   to update and t
1f3b0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74  he expressions t
1f3c0 6f 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20  o update. *     
1f3d0 20 20 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f           them to
1f3e0 2e 20 53 65 65 20 73 71 6c 69 74 65 33 55 70 64  . See sqlite3Upd
1f3f0 61 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74  ate() documentat
1f400 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73  ion of "pChanges
1f410 22 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  ". *            
1f420 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a    argument.. * .
1f430 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
1f440 65 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70  erStep {.  u8 op
1f450 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f460 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c  /* One of TK_DEL
1f470 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20  ETE, TK_UPDATE, 
1f480 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45  TK_INSERT, TK_SE
1f490 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63  LECT */.  u8 orc
1f4a0 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f  onf;           /
1f4b0 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74  * OE_Rollback et
1f4c0 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  c. */.  Trigger 
1f4d0 2a 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20  *pTrig;      /* 
1f4e0 54 68 65 20 74 72 69 67 67 65 72 20 74 68 61 74  The trigger that
1f4f0 20 74 68 69 73 20 73 74 65 70 20 69 73 20 61 20   this step is a 
1f500 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c  part of */.  Sel
1f510 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
1f520 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74    /* SELECT stat
1f530 65 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20  ement or RHS of 
1f540 49 4e 53 45 52 54 20 49 4e 54 4f 20 53 45 4c 45  INSERT INTO SELE
1f550 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72  CT ... */.  char
1f560 20 2a 7a 54 61 72 67 65 74 3b 20 20 20 20 20 20   *zTarget;      
1f570 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65   /* Target table
1f580 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44   for DELETE, UPD
1f590 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20  ATE, INSERT */. 
1f5a0 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20   Expr *pWhere;  
1f5b0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
1f5c0 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45  RE clause for DE
1f5d0 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73  LETE or UPDATE s
1f5e0 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  teps */.  ExprLi
1f5f0 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f  st *pExprList; /
1f600 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72  * SET clause for
1f610 20 55 50 44 41 54 45 2e 20 2a 2f 0a 20 20 49 64   UPDATE. */.  Id
1f620 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20  List *pIdList;  
1f630 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d     /* Column nam
1f640 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f  es for INSERT */
1f650 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
1f660 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20  pNext;  /* Next 
1f670 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74  in the link-list
1f680 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65   */.  TriggerSte
1f690 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61  p *pLast;  /* La
1f6a0 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69  st element in li
1f6b0 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66  nk-list. Valid f
1f6c0 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79  or 1st elem only
1f6d0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
1f6e0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
1f6f0 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69  cture contains i
1f700 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
1f710 62 79 20 74 68 65 20 73 71 6c 69 74 65 46 69 78  by the sqliteFix
1f720 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20  ....** routines 
1f730 61 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65  as they walk the
1f740 20 70 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d   parse tree to m
1f750 61 6b 65 20 64 61 74 61 62 61 73 65 20 72 65 66  ake database ref
1f760 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69  erences.** expli
1f770 63 69 74 2e 20 20 0a 2a 2f 0a 74 79 70 65 64 65  cit.  .*/.typede
1f780 66 20 73 74 72 75 63 74 20 44 62 46 69 78 65 72  f struct DbFixer
1f790 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75 63 74   DbFixer;.struct
1f7a0 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50 61 72   DbFixer {.  Par
1f7b0 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
1f7c0 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e 67 20   /* The parsing 
1f7d0 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f 72 20  context.  Error 
1f7e0 6d 65 73 73 61 67 65 73 20 77 72 69 74 74 65 6e  messages written
1f7f0 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d   here */.  Schem
1f800 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 2f  a *pSchema;    /
1f810 2a 20 46 69 78 20 69 74 65 6d 73 20 74 6f 20 74  * Fix items to t
1f820 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20  his schema */.  
1f830 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20  int bVarOnly;   
1f840 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72      /* Check for
1f850 20 76 61 72 69 61 62 6c 65 20 72 65 66 65 72 65   variable refere
1f860 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63  nces only */.  c
1f870 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20  onst char *zDb; 
1f880 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20     /* Make sure 
1f890 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72 65 20  all objects are 
1f8a0 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 69  contained in thi
1f8b0 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  s database */.  
1f8c0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70  const char *zTyp
1f8d0 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74  e;  /* Type of t
1f8e0 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75  he container - u
1f8f0 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65  sed for error me
1f900 73 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73  ssages */.  cons
1f910 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20  t Token *pName; 
1f920 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
1f930 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20  ontainer - used 
1f940 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67  for error messag
1f950 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  es */.};../*.** 
1f960 41 6e 20 6f 62 6a 65 63 74 65 64 20 75 73 65 64  An objected used
1f970 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65 20 74   to accumulate t
1f980 68 65 20 74 65 78 74 20 6f 66 20 61 20 73 74 72  he text of a str
1f990 69 6e 67 20 77 68 65 72 65 20 77 65 0a 2a 2a 20  ing where we.** 
1f9a0 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 69  do not necessari
1f9b0 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20  ly know how big 
1f9c0 74 68 65 20 73 74 72 69 6e 67 20 77 69 6c 6c 20  the string will 
1f9d0 62 65 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a  be in the end..*
1f9e0 2f 0a 73 74 72 75 63 74 20 53 74 72 41 63 63 75  /.struct StrAccu
1f9f0 6d 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  m {.  sqlite3 *d
1fa00 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70  b;         /* Op
1fa10 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20  tional database 
1fa20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20  for lookaside.  
1fa30 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20  Can be NULL */. 
1fa40 20 63 68 61 72 20 2a 7a 42 61 73 65 3b 20 20 20   char *zBase;   
1fa50 20 20 20 20 20 20 2f 2a 20 41 20 62 61 73 65 20        /* A base 
1fa60 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74  allocation.  Not
1fa70 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f   from malloc. */
1fa80 0a 20 20 63 68 61 72 20 2a 7a 54 65 78 74 3b 20  .  char *zText; 
1fa90 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73          /* The s
1faa0 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20  tring collected 
1fab0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1fac0 20 6e 43 68 61 72 3b 20 20 20 20 20 20 20 20 20   nChar;         
1fad0 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68   /* Length of th
1fae0 65 20 73 74 72 69 6e 67 20 73 6f 20 66 61 72 20  e string so far 
1faf0 2a 2f 0a 20 20 69 6e 74 20 20 6e 41 6c 6c 6f 63  */.  int  nAlloc
1fb00 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f  ;         /* Amo
1fb10 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c  unt of space all
1fb20 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20  ocated in zText 
1fb30 2a 2f 0a 20 20 69 6e 74 20 20 6d 78 41 6c 6c 6f  */.  int  mxAllo
1fb40 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78  c;        /* Max
1fb50 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c  imum allowed all
1fb60 6f 63 61 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20  ocation.  0 for 
1fb70 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20  no malloc usage 
1fb80 2a 2f 0a 20 20 75 38 20 20 20 61 63 63 45 72 72  */.  u8   accErr
1fb90 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 53 54 52  or;       /* STR
1fba0 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53  ACCUM_NOMEM or S
1fbb0 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 2a  TRACCUM_TOOBIG *
1fbc0 2f 0a 20 20 75 38 20 20 20 62 4d 61 6c 6c 6f 63  /.  u8   bMalloc
1fbd0 65 64 3b 20 20 20 20 20 20 2f 2a 20 7a 54 65 78  ed;      /* zTex
1fbe0 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 6c 6c 6f  t points to allo
1fbf0 63 61 74 65 64 20 73 70 61 63 65 20 2a 2f 0a 7d  cated space */.}
1fc00 3b 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43 43  ;.#define STRACC
1fc10 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23 64 65  UM_NOMEM   1.#de
1fc20 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 54 4f  fine STRACCUM_TO
1fc30 4f 42 49 47 20 20 32 0a 0a 2f 2a 0a 2a 2a 20 41  OBIG  2../*.** A
1fc40 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
1fc50 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
1fc60 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74  ed to communicat
1fc70 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  e information.**
1fc80 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69   from sqlite3Ini
1fc90 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63  t and OP_ParseSc
1fca0 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71  hema into the sq
1fcb0 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
1fcc0 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  k..*/.typedef st
1fcd0 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33  ruct {.  sqlite3
1fce0 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20   *db;        /* 
1fcf0 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65 69  The database bei
1fd00 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
1fd10 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72  /.  char **pzErr
1fd20 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72  Msg;    /* Error
1fd30 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64 20   message stored 
1fd40 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44  here */.  int iD
1fd50 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
1fd60 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61   0 for main data
1fd70 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d  base.  1 for TEM
1fd80 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43  P, 2.. for ATTAC
1fd90 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  Hed */.  int rc;
1fda0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1fdb0 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72  Result code stor
1fdc0 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69  ed here */.} Ini
1fdd0 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74  tData;../*.** St
1fde0 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69  ructure containi
1fdf0 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67  ng global config
1fe00 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f 72  uration data for
1fe10 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72   the SQLite libr
1fe20 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ary..**.** This 
1fe30 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20 63  structure also c
1fe40 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74 61  ontains some sta
1fe50 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  te information..
1fe60 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74 65  */.struct Sqlite
1fe70 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20  3Config {.  int 
1fe80 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20 20  bMemstat;       
1fe90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1fea0 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
1feb0 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a 2f  memory status */
1fec0 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74 65  .  int bCoreMute
1fed0 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
1fee0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1fef0 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74 65  enable core mute
1ff00 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46  xing */.  int bF
1ff10 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20 20  ullMutex;       
1ff20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1ff30 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66 75  rue to enable fu
1ff40 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20  ll mutexing */. 
1ff50 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20 20   int bOpenUri;  
1ff60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff70 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e     /* True to in
1ff80 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d 65  terpret filename
1ff90 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20 69  s as URIs */.  i
1ffa0 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20 20 20  nt bUseCis;     
1ffb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ffc0 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e 67   /* Use covering
1ffd0 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75 6c   indices for ful
1ffe0 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74  l-scans */.  int
1fff0 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20 20   mxStrlen;      
20000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20010 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e 67  * Maximum string
20020 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74   length */.  int
20030 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b 20 20   neverCorrupt;  
20040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20050 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 61 6c  * Database is al
20060 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64  ways well-formed
20070 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b   */.  int szLook
20080 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
20090 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
200a0 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66  lt lookaside buf
200b0 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e  fer size */.  in
200c0 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20  t nLookaside;   
200d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200e0 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61  /* Default looka
200f0 73 69 64 65 20 62 75 66 66 65 72 20 63 6f 75 6e  side buffer coun
20100 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  t */.  sqlite3_m
20110 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20  em_methods m;   
20120 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d           /* Low-
20130 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c  level memory all
20140 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63  ocation interfac
20150 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  e */.  sqlite3_m
20160 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74  utex_methods mut
20170 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d  ex;      /* Low-
20180 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65  level mutex inte
20190 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74  rface */.  sqlit
201a0 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64  e3_pcache_method
201b0 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a 20  s2 pcache2;  /* 
201c0 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63  Low-level page-c
201d0 61 63 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a  ache interface *
201e0 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b  /.  void *pHeap;
201f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20200 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74        /* Heap st
20210 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20  orage space */. 
20220 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20   int nHeap;     
20230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20240 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48     /* Size of pH
20250 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d  eap[] */.  int m
20260 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20  nReq, mxReq;    
20270 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20280 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70  Min and max heap
20290 20 72 65 71 75 65 73 74 73 20 73 69 7a 65 73 20   requests sizes 
202a0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  */.  sqlite3_int
202b0 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20  64 szMmap;      
202c0 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29         /* mmap()
202d0 20 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e 20   space per open 
202e0 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  file */.  sqlite
202f0 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20  3_int64 mxMmap; 
20300 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
20310 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72  aximum value for
20320 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69   szMmap */.  voi
20330 64 20 2a 70 53 63 72 61 74 63 68 3b 20 20 20 20  d *pScratch;    
20340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20350 2a 20 53 63 72 61 74 63 68 20 6d 65 6d 6f 72 79  * Scratch memory
20360 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72 61   */.  int szScra
20370 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  tch;            
20380 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
20390 6f 66 20 65 61 63 68 20 73 63 72 61 74 63 68 20  of each scratch 
203a0 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20  buffer */.  int 
203b0 6e 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20  nScratch;       
203c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
203d0 20 4e 75 6d 62 65 72 20 6f 66 20 73 63 72 61 74   Number of scrat
203e0 63 68 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20  ch buffers */.  
203f0 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20  void *pPage;    
20400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20410 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20    /* Page cache 
20420 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20  memory */.  int 
20430 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20 20  szPage;         
20440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20450 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61   Size of each pa
20460 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f  ge in pPage[] */
20470 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20  .  int nPage;   
20480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20490 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
204a0 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67 65  f pages in pPage
204b0 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61  [] */.  int mxPa
204c0 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20  rserStack;      
204d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78            /* max
204e0 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68  imum depth of th
204f0 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a  e parser stack *
20500 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43 61  /.  int sharedCa
20510 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20  cheEnabled;     
20520 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66        /* true if
20530 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
20540 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20  de enabled */.  
20550 75 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20 20  u32 szPma;      
20560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20570 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72    /* Maximum Sor
20580 74 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a  ter PMA size */.
20590 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d    /* The above m
205a0 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69  ight be initiali
205b0 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e  zed to non-zero.
205c0 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
205d0 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20  need to always. 
205e0 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65   ** initially be
205f0 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20   zero, however. 
20600 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b  */.  int isInit;
20610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20620 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
20630 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74  fter initializat
20640 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64  ion has finished
20650 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67   */.  int inProg
20660 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20  ress;           
20670 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
20680 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61  while initializa
20690 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
206a0 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65   */.  int isMute
206b0 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  xInit;          
206c0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
206d0 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72  after mutexes ar
206e0 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  e initialized */
206f0 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49  .  int isMallocI
20700 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
20710 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
20720 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69  er malloc is ini
20730 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
20740 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20  t isPCacheInit; 
20750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20760 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
20770 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
20780 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  zed */.  int nRe
20790 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  fInitMutex;     
207a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
207b0 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66  mber of users of
207c0 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20   pInitMutex */. 
207d0 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
207e0 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  pInitMutex;     
207f0 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64     /* Mutex used
20800 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74   by sqlite3_init
20810 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f  ialize() */.  vo
20820 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a  id (*xLog)(void*
20830 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
20840 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66  ); /* Function f
20850 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20  or logging */.  
20860 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20  void *pLogArg;  
20870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20880 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72       /* First ar
20890 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29  gument to xLog()
208a0 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
208b0 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a  E_ENABLE_SQLLOG.
208c0 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29    void(*xSqllog)
208d0 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
208e0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
208f0 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c  );.  void *pSqll
20900 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69  ogArg;.#endif.#i
20910 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45  fdef SQLITE_VDBE
20920 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54  _COVERAGE.  /* T
20930 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
20940 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55  lback (if not NU
20950 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f  LL) is invoked o
20960 6e 20 65 76 65 72 79 20 56 44 42 45 20 62 72 61  n every VDBE bra
20970 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69  nch.  ** operati
20980 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c  on.  Set the cal
20990 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49  lback using SQLI
209a0 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45  TE_TESTCTRL_VDBE
209b0 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a  _COVERAGE..  */.
209c0 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72    void (*xVdbeBr
209d0 61 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74 20  anch)(void*,int 
209e0 69 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68 69  iSrcLine,u8 eThi
209f0 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43  s,u8 eMx);  /* C
20a00 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
20a10 64 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41 72  d *pVdbeBranchAr
20a20 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
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 2f 2a 20 31 73 74 20 61 72         /* 1st ar
20a50 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66  gument */.#endif
20a60 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
20a70 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
20a80 54 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43  T.  int (*xTestC
20a90 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20  allback)(int);  
20aa0 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64        /* Invoked
20ab0 20 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74   by sqlite3Fault
20ac0 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a  Sim() */.#endif.
20ad0 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65    int bLocaltime
20ae0 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20  Fault;          
20af0 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66      /* True to f
20b00 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20  ail localtime() 
20b10 63 61 6c 6c 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  calls */.};../*.
20b20 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73  ** This macro is
20b30 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20   used inside of 
20b40 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
20b50 6e 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65 20  nts to indicate 
20b60 74 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73 65  that.** the asse
20b70 72 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  rt is only valid
20b80 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65   on a well-forme
20b90 64 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e 73  d database.  Ins
20ba0 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20  tead of:.**.**  
20bb0 20 20 20 61 73 73 65 72 74 28 20 58 20 29 3b 0a     assert( X );.
20bc0 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73  **.** One writes
20bd0 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
20be0 72 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50 54  rt( X || CORRUPT
20bf0 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52  _DB );.**.** COR
20c00 52 55 50 54 5f 44 42 20 69 73 20 74 72 75 65 20  RUPT_DB is true 
20c10 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70  during normal op
20c20 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50  eration.  CORRUP
20c30 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e  T_DB does not in
20c40 64 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20 74  dicate.** that t
20c50 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 64  he database is d
20c60 65 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75 70  efinitely corrup
20c70 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74 20  t, only that it 
20c80 6d 69 67 68 74 20 62 65 20 63 6f 72 72 75 70 74  might be corrupt
20c90 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65  ..** For most te
20ca0 73 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55 50  st cases, CORRUP
20cb0 54 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20 66  T_DB is set to f
20cc0 61 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70 65  alse using a spe
20cd0 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  cial.** sqlite3_
20ce0 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20  test_control(). 
20cf0 20 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61 73   This enables as
20d00 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
20d10 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68  s to prove.** th
20d20 69 6e 67 73 20 74 68 61 74 20 61 72 65 20 61 6c  ings that are al
20d30 77 61 79 73 20 74 72 75 65 20 66 6f 72 20 77 65  ways true for we
20d40 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61  ll-formed databa
20d50 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ses..*/.#define 
20d60 43 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71 6c  CORRUPT_DB  (sql
20d70 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72  ite3Config.never
20d80 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a  Corrupt==0)../*.
20d90 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74  ** Context point
20da0 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74  er passed down t
20db0 68 72 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d  hrough the tree-
20dc0 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  walk..*/.struct 
20dd0 57 61 6c 6b 65 72 20 7b 0a 20 20 69 6e 74 20 28  Walker {.  int (
20de0 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28  *xExprCallback)(
20df0 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
20e00 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b       /* Callback
20e10 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73   for expressions
20e20 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c   */.  int (*xSel
20e30 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c  ectCallback)(Wal
20e40 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20  ker*,Select*);  
20e50 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20  /* Callback for 
20e60 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69  SELECTs */.  voi
20e70 64 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62  d (*xSelectCallb
20e80 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65  ack2)(Walker*,Se
20e90 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64  lect*);/* Second
20ea0 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45   callback for SE
20eb0 4c 45 43 54 73 20 2a 2f 0a 20 20 50 61 72 73 65  LECTs */.  Parse
20ec0 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
20ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ee0 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63       /* Parser c
20ef0 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e  ontext.  */.  in
20f00 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20  t walkerDepth;  
20f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
20f30 72 20 6f 66 20 73 75 62 71 75 65 72 69 65 73 20  r of subqueries 
20f40 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b 20 20  */.  u8 eCode;  
20f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20f70 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65 73  * A small proces
20f80 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20 75  sing code */.  u
20f90 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20  nion {          
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 2f 2a 20 45 78 74 72           /* Extr
20fc0 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62  a data for callb
20fd0 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43  ack */.    NameC
20fe0 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20  ontext *pNC;    
20ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21000 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20        /* Naming 
21010 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69  context */.    i
21020 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt 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 2f 2a 20 41 20 63            /* A c
21050 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e  ounter */.    in
21060 74 20 69 43 75 72 3b 20 20 20 20 20 20 20 20 20  t 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 2f 2a 20 41 20 63 75           /* A cu
21090 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  rsor number */. 
210a0 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63     SrcList *pSrc
210b0 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  List;           
210c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
210d0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
210e0 20 20 20 20 73 74 72 75 63 74 20 53 72 63 43 6f      struct SrcCo
210f0 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20  unt *pSrcCount; 
21100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21110 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d  * Counting colum
21120 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a  n references */.
21130 20 20 20 20 73 74 72 75 63 74 20 43 43 75 72 48      struct CCurH
21140 69 6e 74 20 2a 70 43 43 75 72 48 69 6e 74 3b 20  int *pCCurHint; 
21150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21160 2a 20 55 73 65 64 20 62 79 20 63 6f 64 65 43 75  * Used by codeCu
21170 72 73 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20  rsorHint() */.  
21180 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77  } u;.};../* Forw
21190 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73  ard declarations
211a0 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57   */.int sqlite3W
211b0 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c  alkExpr(Walker*,
211c0 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
211d0 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74  ite3WalkExprList
211e0 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69  (Walker*, ExprLi
211f0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
21200 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b  3WalkSelect(Walk
21210 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
21220 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
21230 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a  lectExpr(Walker*
21240 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
21250 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
21260 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53  tFrom(Walker*, S
21270 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
21280 69 74 65 33 45 78 70 72 57 61 6c 6b 4e 6f 6f 70  ite3ExprWalkNoop
21290 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29  (Walker*, Expr*)
212a0 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  ;../*.** Return 
212b0 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70 61  code from the pa
212c0 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67  rse-tree walking
212d0 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e 64 20   primitives and 
212e0 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63  their.** callbac
212f0 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ks..*/.#define W
21300 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20 30  RC_Continue    0
21310 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64     /* Continue d
21320 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72 65  own into childre
21330 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  n */.#define WRC
21340 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31 20 20  _Prune       1  
21350 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72 65   /* Omit childre
21360 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65 20 77  n but continue w
21370 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73 20  alking siblings 
21380 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 41  */.#define WRC_A
21390 62 6f 72 74 20 20 20 20 20 20 20 32 20 20 20 2f  bort       2   /
213a0 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20 74 72  * Abandon the tr
213b0 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a  ee walk */../*.*
213c0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
213d0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
213e0 72 65 70 72 65 73 65 6e 74 73 20 61 20 73 65 74  represents a set
213f0 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20   of one or more 
21400 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20  CTEs.** (common 
21410 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
21420 73 29 20 63 72 65 61 74 65 64 20 62 79 20 61 20  s) created by a 
21430 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75  single WITH clau
21440 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69  se..*/.struct Wi
21450 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65 3b  th {.  int nCte;
21460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21470 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
21480 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68 65 20   of CTEs in the 
21490 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a 20  WITH clause */. 
214a0 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b 20 20   With *pOuter;  
214b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214c0 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20 57   /* Containing W
214d0 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e  ITH clause, or N
214e0 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ULL */.  struct 
214f0 43 74 65 20 7b 20 20 20 20 20 20 20 20 20 20 20  Cte {           
21500 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20           /* For 
21510 65 61 63 68 20 43 54 45 20 69 6e 20 74 68 65 20  each CTE in the 
21520 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e 20  WITH clause.... 
21530 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  */.    char *zNa
21540 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
21550 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
21560 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20  f this CTE */.  
21570 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6c    ExprList *pCol
21580 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
21590 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78 70    /* List of exp
215a0 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d  licit column nam
215b0 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  es, or NULL */. 
215c0 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65     Select *pSele
215d0 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ct;             
215e0 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69 6e 69     /* The defini
215f0 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43 54 45  tion of this CTE
21600 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63 68   */.    const ch
21610 61 72 20 2a 7a 43 74 65 45 72 72 3b 20 20 20 20  ar *zCteErr;    
21620 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72          /* Error
21630 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63 69 72   message for cir
21640 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63 65 73  cular references
21650 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b   */.  } a[1];.};
21660 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
21670 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  DEBUG./*.** An i
21680 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 54  nstance of the T
21690 72 65 65 56 69 65 77 20 6f 62 6a 65 63 74 20 69  reeView object i
216a0 73 20 75 73 65 64 20 66 6f 72 20 70 72 69 6e 74  s used for print
216b0 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ing the content 
216c0 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74 72 75 63  of.** data struc
216d0 74 75 72 65 73 20 6f 6e 20 73 71 6c 69 74 65 33  tures on sqlite3
216e0 44 65 62 75 67 50 72 69 6e 74 66 28 29 20 75 73  DebugPrintf() us
216f0 69 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b 65 20  ing a tree-like 
21700 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  view..*/.struct 
21710 54 72 65 65 56 69 65 77 20 7b 0a 20 20 69 6e 74  TreeView {.  int
21720 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20   iLevel;        
21730 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 6c 65       /* Which le
21740 76 65 6c 20 6f 66 20 74 68 65 20 74 72 65 65 20  vel of the tree 
21750 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 75  we are on */.  u
21760 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b 20 20  8  bLine[100];  
21770 20 20 20 20 20 20 20 2f 2a 20 44 72 61 77 20 76         /* Draw v
21780 65 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c 75 6d  ertical in colum
21790 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b 69 5d 20  n i if bLine[i] 
217a0 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65  is true */.};.#e
217b0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44  ndif /* SQLITE_D
217c0 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  EBUG */../*.** A
217d0 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e  ssuming zIn poin
217e0 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ts to the first 
217f0 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20  byte of a UTF-8 
21800 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64  character,.** ad
21810 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69  vance zIn to poi
21820 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  nt to the first 
21830 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74  byte of the next
21840 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
21850 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
21860 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49  ITE_SKIP_UTF8(zI
21870 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  n) {            
21880 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
21890 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d  if( (*(zIn++))>=
218a0 30 78 63 30 20 29 7b 20 20 20 20 20 20 20 20 20  0xc0 ){         
218b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
218c0 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65       \.    while
218d0 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d  ( (*zIn & 0xc0)=
218e0 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20  =0x80 ){ zIn++; 
218f0 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a  }             \.
21900 20 20 7d 20 20 20 20 20 20 20 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 5c 0a 7d 0a 0a 2f 2a 0a 2a         \.}../*.*
21940 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42  * The SQLITE_*_B
21950 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73  KPT macros are s
21960 75 62 73 74 69 74 75 74 65 73 20 66 6f 72 20 74  ubstitutes for t
21970 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77  he error codes w
21980 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20  ith.** the same 
21990 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74  name but without
219a0 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69   the _BKPT suffi
219b0 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73  x.  These macros
219c0 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69   invoke.** routi
219d0 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72 74 20  nes that report 
219e0 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20  the line-number 
219f0 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65 72 72  on which the err
21a00 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a  or originated.**
21a10 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c   using sqlite3_l
21a20 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69  og().  The routi
21a30 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65  nes also provide
21a40 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c   a convenient pl
21a50 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20  ace.** to set a 
21a60 64 65 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f  debugger breakpo
21a70 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  int..*/.int sqli
21a80 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
21a90 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
21aa0 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74  3MisuseError(int
21ab0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61  );.int sqlite3Ca
21ac0 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29  ntopenError(int)
21ad0 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ;.#define SQLITE
21ae0 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71  _CORRUPT_BKPT sq
21af0 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f  lite3CorruptErro
21b00 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66  r(__LINE__).#def
21b10 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  ine SQLITE_MISUS
21b20 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69  E_BKPT sqlite3Mi
21b30 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  suseError(__LINE
21b40 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  __).#define SQLI
21b50 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54  TE_CANTOPEN_BKPT
21b60 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
21b70 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
21b80 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20  ../*.** FTS4 is 
21b90 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73  really an extens
21ba0 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49  ion for FTS3.  I
21bb0 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69  t is enabled usi
21bc0 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45  ng the.** SQLITE
21bd0 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63  _ENABLE_FTS3 mac
21be0 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69  ro.  But to avoi
21bf0 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61  d confusion we a
21c00 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20  lso call.** the 
21c10 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
21c20 53 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76  S4 macro to serv
21c30 65 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  e as an alias fo
21c40 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  r SQLITE_ENABLE_
21c50 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  FTS3..*/.#if def
21c60 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
21c70 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64 65 66  LE_FTS4) && !def
21c80 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
21c90 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e  LE_FTS3).# defin
21ca0 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
21cb0 46 54 53 33 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  FTS3 1.#endif../
21cc0 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68  *.** The ctype.h
21cd0 20 68 65 61 64 65 72 20 69 73 20 6e 65 65 64 65   header is neede
21ce0 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20  d for non-ASCII 
21cf0 73 79 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20  systems.  It is 
21d00 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62  also.** needed b
21d10 79 20 46 54 53 33 20 77 68 65 6e 20 46 54 53 33  y FTS3 when FTS3
21d20 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20   is included in 
21d30 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e  the amalgamation
21d40 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
21d50 64 28 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20  d(SQLITE_ASCII) 
21d60 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65  || \.    (define
21d70 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
21d80 46 54 53 33 29 20 26 26 20 64 65 66 69 6e 65 64  FTS3) && defined
21d90 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41  (SQLITE_AMALGAMA
21da0 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65  TION)).# include
21db0 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69   <ctype.h>.#endi
21dc0 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
21dd0 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69  lowing macros mi
21de0 6d 69 63 20 74 68 65 20 73 74 61 6e 64 61 72 64  mic the standard
21df0 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f   library functio
21e00 6e 73 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a  ns toupper(),.**
21e10 20 69 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c   isspace(), isal
21e20 6e 75 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29  num(), isdigit()
21e30 20 61 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c   and isxdigit(),
21e40 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54   respectively. T
21e50 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72  he.** sqlite ver
21e60 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20  sions only work 
21e70 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63  for ASCII charac
21e80 74 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73  ters, regardless
21e90 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23   of locale..*/.#
21ea0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43  ifdef SQLITE_ASC
21eb0 49 49 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  II.# define sqli
21ec0 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 28  te3Toupper(x)  (
21ed0 28 78 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79  (x)&~(sqlite3Cty
21ee0 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
21ef0 63 68 61 72 29 28 78 29 5d 26 30 78 32 30 29 29  char)(x)]&0x20))
21f00 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
21f10 33 49 73 73 70 61 63 65 28 78 29 20 20 20 28 73  3Isspace(x)   (s
21f20 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
21f30 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
21f40 29 5d 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e  )]&0x01).# defin
21f50 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d  e sqlite3Isalnum
21f60 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
21f70 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
21f80 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 36 29   char)(x)]&0x06)
21f90 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
21fa0 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 28 73  3Isalpha(x)   (s
21fb0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
21fc0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
21fd0 29 5d 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e  )]&0x02).# defin
21fe0 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  e sqlite3Isdigit
21ff0 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
22000 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
22010 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 34 29   char)(x)]&0x04)
22020 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
22030 33 49 73 78 64 69 67 69 74 28 78 29 20 20 28 73  3Isxdigit(x)  (s
22040 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
22050 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
22060 29 5d 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e  )]&0x08).# defin
22070 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  e sqlite3Tolower
22080 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 55 70  (x)   (sqlite3Up
22090 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69  perToLower[(unsi
220a0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a  gned char)(x)]).
220b0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
220c0 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29  qlite3Toupper(x)
220d0 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69     toupper((unsi
220e0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
220f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
22100 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73 70  sspace(x)   issp
22110 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68  ace((unsigned ch
22120 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
22130 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28   sqlite3Isalnum(
22140 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e  x)   isalnum((un
22150 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
22160 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
22170 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69 73  3Isalpha(x)   is
22180 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20  alpha((unsigned 
22190 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
221a0 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69  ne sqlite3Isdigi
221b0 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28 28  t(x)   isdigit((
221c0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
221d0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
221e0 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20  te3Isxdigit(x)  
221f0 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e  isxdigit((unsign
22200 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
22210 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c  efine sqlite3Tol
22220 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65  ower(x)   tolowe
22230 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
22240 29 28 78 29 29 0a 23 65 6e 64 69 66 0a 23 69 66  )(x)).#endif.#if
22250 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
22260 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44  _COMPILEOPTION_D
22270 49 41 47 53 0a 69 6e 74 20 73 71 6c 69 74 65 33  IAGS.int sqlite3
22280 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a 23 65  IsIdChar(u8);.#e
22290 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  ndif../*.** Inte
222a0 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72  rnal function pr
222b0 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 23 64 65 66  ototypes.*/.#def
222c0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 49 43  ine sqlite3StrIC
222d0 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63  mp sqlite3_stric
222e0 6d 70 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  mp.int sqlite3St
222f0 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61  rlen30(const cha
22300 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c  r*);.#define sql
22310 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73 71 6c  ite3StrNICmp sql
22320 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69  ite3_strnicmp..i
22330 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  nt sqlite3Malloc
22340 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64  Init(void);.void
22350 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e   sqlite3MallocEn
22360 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73  d(void);.void *s
22370 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34  qlite3Malloc(u64
22380 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
22390 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b  MallocZero(u64);
223a0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
223b0 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74  MallocZero(sqlit
223c0 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  e3*, u64);.void 
223d0 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  *sqlite3DbMalloc
223e0 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20 75 36  Raw(sqlite3*, u6
223f0 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  4);.char *sqlite
22400 33 44 62 53 74 72 44 75 70 28 73 71 6c 69 74 65  3DbStrDup(sqlite
22410 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  3*,const char*);
22420 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62  .char *sqlite3Db
22430 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a  StrNDup(sqlite3*
22440 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 36  ,const char*, u6
22450 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
22460 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20  3Realloc(void*, 
22470 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
22480 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72  te3DbReallocOrFr
22490 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  ee(sqlite3 *, vo
224a0 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  id *, u64);.void
224b0 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
224c0 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  oc(sqlite3 *, vo
224d0 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  id *, u64);.void
224e0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 73   sqlite3DbFree(s
224f0 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
22500 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c  .int sqlite3Mall
22510 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69  ocSize(void*);.i
22520 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  nt sqlite3DbMall
22530 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c  ocSize(sqlite3*,
22540 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73   void*);.void *s
22550 71 6c 69 74 65 33 53 63 72 61 74 63 68 4d 61 6c  qlite3ScratchMal
22560 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  loc(int);.void s
22570 71 6c 69 74 65 33 53 63 72 61 74 63 68 46 72 65  qlite3ScratchFre
22580 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a  e(void*);.void *
22590 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f  sqlite3PageMallo
225a0 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  c(int);.void sql
225b0 69 74 65 33 50 61 67 65 46 72 65 65 28 76 6f 69  ite3PageFree(voi
225c0 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  d*);.void sqlite
225d0 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76  3MemSetDefault(v
225e0 6f 69 64 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  oid);.#ifndef SQ
225f0 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
22600 4e 5f 54 45 53 54 0a 76 6f 69 64 20 73 71 6c 69  N_TEST.void sqli
22610 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48  te3BenignMallocH
22620 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f  ooks(void (*)(vo
22630 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f  id), void (*)(vo
22640 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  id));.#endif.int
22650 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72   sqlite3HeapNear
22660 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f  lyFull(void);../
22670 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20  *.** On systems 
22680 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b  with ample stack
22690 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20   space and that 
226a0 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29  support alloca()
226b0 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66  , make.** use of
226c0 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74   alloca() to obt
226d0 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61  ain space for la
226e0 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62  rge automatic ob
226f0 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75  jects.  By defau
22700 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70  lt,.** obtain sp
22710 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ace from malloc(
22720 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c  )..**.** The all
22730 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65  oca() routine ne
22740 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c  ver returns NULL
22750 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75  .  This will cau
22760 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a  se code paths.**
22770 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20   that deal with 
22780 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
22790 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20  c() failures to 
227a0 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a  be unreachable..
227b0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
227c0 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65  _USE_ALLOCA.# de
227d0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
227e0 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
227f0 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66   alloca(N).# def
22800 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
22810 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
22820 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29  memset(alloca(N)
22830 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65  , 0, N).# define
22840 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
22850 65 28 44 2c 50 29 20 20 20 20 20 20 20 0a 23 65  e(D,P)       .#e
22860 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
22870 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61  ite3StackAllocRa
22880 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33  w(D,N)   sqlite3
22890 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  DbMallocRaw(D,N)
228a0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
228b0 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28  3StackAllocZero(
228c0 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d  D,N)  sqlite3DbM
228d0 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23  allocZero(D,N).#
228e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
228f0 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20  tackFree(D,P)   
22900 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
22910 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23  e(D,P).#endif..#
22920 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
22930 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73  BLE_MEMSYS3.cons
22940 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65  t sqlite3_mem_me
22950 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65  thods *sqlite3Me
22960 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64  mGetMemsys3(void
22970 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  );.#endif.#ifdef
22980 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d   SQLITE_ENABLE_M
22990 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c  EMSYS5.const sql
229a0 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
229b0 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d   *sqlite3MemGetM
229c0 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 65  emsys5(void);.#e
229d0 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53  ndif...#ifndef S
229e0 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54  QLITE_MUTEX_OMIT
229f0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
22a00 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a  _methods const *
22a10 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75  sqlite3DefaultMu
22a20 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c  tex(void);.  sql
22a30 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
22a40 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65  ds const *sqlite
22a50 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29  3NoopMutex(void)
22a60 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
22a70 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41  x *sqlite3MutexA
22a80 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74  lloc(int);.  int
22a90 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69   sqlite3MutexIni
22aa0 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73  t(void);.  int s
22ab0 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76  qlite3MutexEnd(v
22ac0 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  oid);.#endif.#if
22ad0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
22ae0 5f 4d 55 54 45 58 5f 4f 4d 49 54 29 20 26 26 20  _MUTEX_OMIT) && 
22af0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
22b00 4d 55 54 45 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f  MUTEX_NOOP).  vo
22b10 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79  id sqlite3Memory
22b20 42 61 72 72 69 65 72 28 76 6f 69 64 29 3b 0a 23  Barrier(void);.#
22b30 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
22b40 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69  lite3MemoryBarri
22b50 65 72 28 29 0a 23 65 6e 64 69 66 0a 0a 73 71 6c  er().#endif..sql
22b60 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74  ite3_int64 sqlit
22b70 65 33 53 74 61 74 75 73 56 61 6c 75 65 28 69 6e  e3StatusValue(in
22b80 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22b90 53 74 61 74 75 73 55 70 28 69 6e 74 2c 20 69 6e  StatusUp(int, in
22ba0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22bb0 53 74 61 74 75 73 44 6f 77 6e 28 69 6e 74 2c 20  StatusDown(int, 
22bc0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22bd0 65 33 53 74 61 74 75 73 48 69 67 68 77 61 74 65  e3StatusHighwate
22be0 72 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 2f 2a  r(int, int);../*
22bf0 20 41 63 63 65 73 73 20 74 6f 20 6d 75 74 65 78   Access to mutex
22c00 65 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  es used by sqlit
22c10 65 33 5f 73 74 61 74 75 73 28 29 20 2a 2f 0a 73  e3_status() */.s
22c20 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71  qlite3_mutex *sq
22c30 6c 69 74 65 33 50 63 61 63 68 65 31 4d 75 74 65  lite3Pcache1Mute
22c40 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69 74 65 33  x(void);.sqlite3
22c50 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d  _mutex *sqlite3M
22c60 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f 69 64 29  allocMutex(void)
22c70 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
22c80 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
22c90 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69  POINT.  int sqli
22ca0 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29  te3IsNaN(double)
22cb0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
22cc0 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29   sqlite3IsNaN(X)
22cd0 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a    0.#endif../*.*
22ce0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
22cf0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
22d00 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69  tructure holds i
22d10 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
22d20 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e   SQL.** function
22d30 73 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74  s arguments that
22d40 20 61 72 65 20 74 68 65 20 70 61 72 61 6d 65 74   are the paramet
22d50 65 72 73 20 74 6f 20 74 68 65 20 70 72 69 6e 74  ers to the print
22d60 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f  f() function..*/
22d70 0a 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72  .struct PrintfAr
22d80 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20  guments {.  int 
22d90 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  nArg;           
22da0 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75       /* Total nu
22db0 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
22dc0 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64  s */.  int nUsed
22dd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22de0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
22df0 75 6d 65 6e 74 73 20 75 73 65 64 20 73 6f 20 66  uments used so f
22e00 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ar */.  sqlite3_
22e10 76 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20 20  value **apArg;  
22e20 20 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74   /* The argument
22e30 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 23   values */.};..#
22e40 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
22e50 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78  INTF_INTERNAL 0x
22e60 30 31 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  01.#define SQLIT
22e70 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43  E_PRINTF_SQLFUNC
22e80 20 20 30 78 30 32 0a 76 6f 69 64 20 73 71 6c 69    0x02.void sqli
22e90 74 65 33 56 58 50 72 69 6e 74 66 28 53 74 72 41  te3VXPrintf(StrA
22ea0 63 63 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73  ccum*, u32, cons
22eb0 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74  t char*, va_list
22ec0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58  );.void sqlite3X
22ed0 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a  Printf(StrAccum*
22ee0 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20 63 68 61  , u32, const cha
22ef0 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a  r*, ...);.char *
22f00 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73  sqlite3MPrintf(s
22f10 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
22f20 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20  ar*, ...);.char 
22f30 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66  *sqlite3VMPrintf
22f40 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
22f50 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b  char*, va_list);
22f60 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
22f70 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
22f80 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56  fined(SQLITE_HAV
22f90 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20 76 6f  E_OS_TRACE).  vo
22fa0 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67 50  id sqlite3DebugP
22fb0 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72  rintf(const char
22fc0 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a  *, ...);.#endif.
22fd0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
22fe0 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20  TE_TEST).  void 
22ff0 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65 78 74  *sqlite3TestText
23000 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72  ToPtr(const char
23010 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  *);.#endif..#if 
23020 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
23030 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c  EBUG).  void sql
23040 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72  ite3TreeViewExpr
23050 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
23060 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20  t Expr*, u8);.  
23070 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
23080 56 69 65 77 45 78 70 72 4c 69 73 74 28 54 72 65  ViewExprList(Tre
23090 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78  eView*, const Ex
230a0 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e  prList*, u8, con
230b0 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
230c0 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
230d0 77 53 65 6c 65 63 74 28 54 72 65 65 56 69 65 77  wSelect(TreeView
230e0 2a 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a  *, const Select*
230f0 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71  , u8);.  void sq
23100 6c 69 74 65 33 54 72 65 65 56 69 65 77 57 69 74  lite3TreeViewWit
23110 68 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  h(TreeView*, con
23120 73 74 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23  st With*, u8);.#
23130 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c  endif...void sql
23140 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 63 68  ite3SetString(ch
23150 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c  ar **, sqlite3*,
23160 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
23170 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
23180 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  Msg(Parse*, cons
23190 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69  t char*, ...);.i
231a0 6e 74 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74  nt sqlite3Dequot
231b0 65 28 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  e(char*);.int sq
231c0 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65  lite3KeywordCode
231d0 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
231e0 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  char*, int);.int
231f0 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65   sqlite3RunParse
23200 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  r(Parse*, const 
23210 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b  char*, char **);
23220 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e  .void sqlite3Fin
23230 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a  ishCoding(Parse*
23240 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
23250 74 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29  tTempReg(Parse*)
23260 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
23270 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50 61 72  leaseTempReg(Par
23280 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  se*,int);.int sq
23290 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67  lite3GetTempRang
232a0 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76  e(Parse*,int);.v
232b0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61  oid sqlite3Relea
232c0 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73  seTempRange(Pars
232d0 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69  e*,int,int);.voi
232e0 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65  d sqlite3ClearTe
232f0 6d 70 52 65 67 43 61 63 68 65 28 50 61 72 73 65  mpRegCache(Parse
23300 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
23310 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74  3ExprAlloc(sqlit
23320 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f  e3*,int,const To
23330 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20  ken*,int);.Expr 
23340 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c  *sqlite3Expr(sql
23350 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
23360 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
23370 69 74 65 33 45 78 70 72 41 74 74 61 63 68 53 75  ite3ExprAttachSu
23380 62 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c  btrees(sqlite3*,
23390 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72  Expr*,Expr*,Expr
233a0 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
233b0 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69  3PExpr(Parse*, i
233c0 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  nt, Expr*, Expr*
233d0 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b  , const Token*);
233e0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
233f0 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45  prAnd(sqlite3*,E
23400 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78  xpr*, Expr*);.Ex
23410 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46  pr *sqlite3ExprF
23420 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45  unction(Parse*,E
23430 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  xprList*, Token*
23440 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
23450 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62  xprAssignVarNumb
23460 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  er(Parse*, Expr*
23470 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
23480 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65  xprDelete(sqlite
23490 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72  3*, Expr*);.Expr
234a0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70  List *sqlite3Exp
234b0 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73  rListAppend(Pars
234c0 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  e*,ExprList*,Exp
234d0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
234e0 33 45 78 70 72 4c 69 73 74 53 65 74 53 6f 72 74  3ExprListSetSort
234f0 4f 72 64 65 72 28 45 78 70 72 4c 69 73 74 2a 2c  Order(ExprList*,
23500 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
23510 65 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d  e3ExprListSetNam
23520 65 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  e(Parse*,ExprLis
23530 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  t*,Token*,int);.
23540 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23550 4c 69 73 74 53 65 74 53 70 61 6e 28 50 61 72 73  ListSetSpan(Pars
23560 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  e*,ExprList*,Exp
23570 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  rSpan*);.void sq
23580 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c  lite3ExprListDel
23590 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78  ete(sqlite3*, Ex
235a0 70 72 4c 69 73 74 2a 29 3b 0a 75 33 32 20 73 71  prList*);.u32 sq
235b0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 46 6c 61  lite3ExprListFla
235c0 67 73 28 63 6f 6e 73 74 20 45 78 70 72 4c 69 73  gs(const ExprLis
235d0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
235e0 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63  Init(sqlite3*, c
235f0 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har**);.int sqli
23600 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  te3InitCallback(
23610 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72  void*, int, char
23620 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69  **, char**);.voi
23630 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28  d sqlite3Pragma(
23640 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
23650 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29  ken*,Token*,int)
23660 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
23670 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43  setAllSchemasOfC
23680 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65  onnection(sqlite
23690 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
236a0 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28  3ResetOneSchema(
236b0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
236c0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61  oid sqlite3Colla
236d0 70 73 65 44 61 74 61 62 61 73 65 41 72 72 61 79  pseDatabaseArray
236e0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
236f0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 50 61 72   sqlite3BeginPar
23700 73 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  se(Parse*,int);.
23710 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d  void sqlite3Comm
23720 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65  itInternalChange
23730 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  s(sqlite3*);.voi
23740 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 43  d sqlite3DeleteC
23750 6f 6c 75 6d 6e 4e 61 6d 65 73 28 73 71 6c 69 74  olumnNames(sqlit
23760 65 33 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e 74  e3*,Table*);.int
23770 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 73 46   sqlite3ColumnsF
23780 72 6f 6d 45 78 70 72 4c 69 73 74 28 50 61 72 73  romExprList(Pars
23790 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 31 36  e*,ExprList*,i16
237a0 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 54 61 62  *,Column**);.Tab
237b0 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c  le *sqlite3Resul
237c0 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72  tSetOfSelect(Par
237d0 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f  se*,Select*);.vo
237e0 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61  id sqlite3OpenMa
237f0 73 74 65 72 54 61 62 6c 65 28 50 61 72 73 65 20  sterTable(Parse 
23800 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a  *, int);.Index *
23810 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65  sqlite3PrimaryKe
23820 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a  yIndex(Table*);.
23830 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  i16 sqlite3Colum
23840 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c  nOfIndex(Index*,
23850 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69   i16);.void sqli
23860 74 65 33 53 74 61 72 74 54 61 62 6c 65 28 50 61  te3StartTable(Pa
23870 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
23880 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  n*,int,int,int,i
23890 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
238a0 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65  3ColumnPropertie
238b0 73 46 72 6f 6d 4e 61 6d 65 28 54 61 62 6c 65 2a  sFromName(Table*
238c0 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 76 6f 69 64  , Column*);.void
238d0 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d   sqlite3AddColum
238e0 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29  n(Parse*,Token*)
238f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
23900 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c  dNotNull(Parse*,
23910 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
23920 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79  te3AddPrimaryKey
23930 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
23940 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  t*, int, int, in
23950 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
23960 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69  AddCheckConstrai
23970 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  nt(Parse*, Expr*
23980 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
23990 64 64 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72  ddColumnType(Par
239a0 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  se*,Token*);.voi
239b0 64 20 73 71 6c 69 74 65 33 41 64 64 44 65 66 61  d sqlite3AddDefa
239c0 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c  ultValue(Parse*,
239d0 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64  ExprSpan*);.void
239e0 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61   sqlite3AddColla
239f0 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54  teType(Parse*, T
23a00 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
23a10 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72  ite3EndTable(Par
23a20 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
23a30 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69  *,u8,Select*);.i
23a40 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 55  nt sqlite3ParseU
23a50 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  ri(const char*,c
23a60 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67  onst char*,unsig
23a70 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20  ned int*,.      
23a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
23a90 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72  lite3_vfs**,char
23aa0 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72  **,char **);.Btr
23ab0 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d  ee *sqlite3DbNam
23ac0 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33  eToBtree(sqlite3
23ad0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
23ae0 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 4f  int sqlite3CodeO
23af0 6e 63 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 23  nce(Parse *);..#
23b00 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
23b10 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23  T_BUILTIN_TEST.#
23b20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46   define sqlite3F
23b30 61 75 6c 74 53 69 6d 28 58 29 20 53 51 4c 49 54  aultSim(X) SQLIT
23b40 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74  E_OK.#else.  int
23b50 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
23b60 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42  (int);.#endif..B
23b70 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33 42 69  itvec *sqlite3Bi
23b80 74 76 65 63 43 72 65 61 74 65 28 75 33 32 29 3b  tvecCreate(u32);
23b90 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
23ba0 65 63 54 65 73 74 28 42 69 74 76 65 63 2a 2c 20  ecTest(Bitvec*, 
23bb0 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
23bc0 33 42 69 74 76 65 63 54 65 73 74 4e 6f 74 4e 75  3BitvecTestNotNu
23bd0 6c 6c 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  ll(Bitvec*, u32)
23be0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
23bf0 76 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20  vecSet(Bitvec*, 
23c00 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u32);.void sqlit
23c10 65 33 42 69 74 76 65 63 43 6c 65 61 72 28 42 69  e3BitvecClear(Bi
23c20 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64  tvec*, u32, void
23c30 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23c40 42 69 74 76 65 63 44 65 73 74 72 6f 79 28 42 69  BitvecDestroy(Bi
23c50 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69  tvec*);.u32 sqli
23c60 74 65 33 42 69 74 76 65 63 53 69 7a 65 28 42 69  te3BitvecSize(Bi
23c70 74 76 65 63 2a 29 3b 0a 23 69 66 6e 64 65 66 20  tvec*);.#ifndef 
23c80 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
23c90 54 49 4e 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c  TIN_TEST.int sql
23ca0 69 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69  ite3BitvecBuilti
23cb0 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b  nTest(int,int*);
23cc0 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20  .#endif..RowSet 
23cd0 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e  *sqlite3RowSetIn
23ce0 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  it(sqlite3*, voi
23cf0 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  d*, unsigned int
23d00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
23d10 6f 77 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65  owSetClear(RowSe
23d20 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
23d30 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f  3RowSetInsert(Ro
23d40 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74  wSet*, i64);.int
23d50 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65   sqlite3RowSetTe
23d60 73 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20  st(RowSet*, int 
23d70 69 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e  iBatch, i64);.in
23d80 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e  t sqlite3RowSetN
23d90 65 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34  ext(RowSet*, i64
23da0 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  *);..void sqlite
23db0 33 43 72 65 61 74 65 56 69 65 77 28 50 61 72 73  3CreateView(Pars
23dc0 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
23dd0 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
23de0 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e  *,Select*,int,in
23df0 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  t);..#if !define
23e00 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
23e10 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28  EW) || !defined(
23e20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
23e30 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20  UALTABLE).  int 
23e40 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f  sqlite3ViewGetCo
23e50 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a  lumnNames(Parse*
23e60 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a  ,Table*);.#else.
23e70 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23e80 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d  ViewGetColumnNam
23e90 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66  es(A,B) 0.#endif
23ea0 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
23eb0 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69  _ATTACHED>30.  i
23ec0 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b  nt sqlite3DbMask
23ed0 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29  AllZero(yDbMask)
23ee0 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
23ef0 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50  lite3DropTable(P
23f00 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
23f10 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
23f20 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70   sqlite3CodeDrop
23f30 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61  Table(Parse*, Ta
23f40 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ble*, int, int);
23f50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
23f60 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33  eteTable(sqlite3
23f70 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e  *, Table*);.#ifn
23f80 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
23f90 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
23fa0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
23fb0 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50  incrementBegin(P
23fc0 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20  arse *pParse);. 
23fd0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
23fe0 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61  oincrementEnd(Pa
23ff0 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65  rse *pParse);.#e
24000 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
24010 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
24020 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69  tBegin(X).# defi
24030 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  ne sqlite3Autoin
24040 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65  crementEnd(X).#e
24050 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
24060 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20  3Insert(Parse*, 
24070 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74  SrcList*, Select
24080 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29  *, IdList*, int)
24090 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41  ;.void *sqlite3A
240a0 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c  rrayAllocate(sql
240b0 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c  ite3*,void*,int,
240c0 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69  int*,int*);.IdLi
240d0 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73  st *sqlite3IdLis
240e0 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a  tAppend(sqlite3*
240f0 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  , IdList*, Token
24100 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
24110 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73  dListIndex(IdLis
24120 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  t*,const char*);
24130 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
24140 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28  3SrcListEnlarge(
24150 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
24160 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53  t*, int, int);.S
24170 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
24180 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c  rcListAppend(sql
24190 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  ite3*, SrcList*,
241a0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
241b0 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
241c0 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46  e3SrcListAppendF
241d0 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20  romTerm(Parse*, 
241e0 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
241f0 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20  , Token*,.      
24200 20 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 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c  Token*, Select*,
24230 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29   Expr*, IdList*)
24240 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
24250 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28 50  cListIndexedBy(P
24260 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20  arse *, SrcList 
24270 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69  *, Token *);.voi
24280 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
24290 46 75 6e 63 41 72 67 73 28 50 61 72 73 65 2a 2c  FuncArgs(Parse*,
242a0 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c   SrcList*, ExprL
242b0 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
242c0 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75  e3IndexedByLooku
242d0 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63  p(Parse *, struc
242e0 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a  t SrcList_item *
242f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
24300 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54  rcListShiftJoinT
24310 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76  ype(SrcList*);.v
24320 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
24330 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28  stAssignCursors(
24340 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
24350 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  );.void sqlite3I
24360 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  dListDelete(sqli
24370 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a  te3*, IdList*);.
24380 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
24390 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
243a0 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49  3*, SrcList*);.I
243b0 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c  ndex *sqlite3All
243c0 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74  ocateIndexObject
243d0 28 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e  (sqlite3*,i16,in
243e0 74 2c 63 68 61 72 2a 2a 29 3b 0a 49 6e 64 65 78  t,char**);.Index
243f0 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 49   *sqlite3CreateI
24400 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65  ndex(Parse*,Toke
24410 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73  n*,Token*,SrcLis
24420 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  t*,ExprList*,int
24430 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20  ,Token*,.       
24440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24450 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69     Expr*, int, i
24460 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
24470 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65  3DropIndex(Parse
24480 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
24490 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65  );.int sqlite3Se
244a0 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c  lect(Parse*, Sel
244b0 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74  ect*, SelectDest
244c0 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69  *);.Select *sqli
244d0 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72  te3SelectNew(Par
244e0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72  se*,ExprList*,Sr
244f0 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
24500 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  rList*,.        
24510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24520 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a   Expr*,ExprList*
24530 2c 75 31 36 2c 45 78 70 72 2a 2c 45 78 70 72 2a  ,u16,Expr*,Expr*
24540 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
24550 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69  electDelete(sqli
24560 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  te3*, Select*);.
24570 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72  Table *sqlite3Sr
24580 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73  cListLookup(Pars
24590 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69  e*, SrcList*);.i
245a0 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64  nt sqlite3IsRead
245b0 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62  Only(Parse*, Tab
245c0 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  le*, int);.void 
245d0 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
245e0 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75  (Parse*, int iCu
245f0 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c  r, int iDb, Tabl
24600 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65  e*, int);.#if de
24610 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
24620 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54  BLE_UPDATE_DELET
24630 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66  E_LIMIT) && !def
24640 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
24650 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20  _SUBQUERY).Expr 
24660 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65  *sqlite3LimitWhe
24670 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73  re(Parse*,SrcLis
24680 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
24690 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63  t*,Expr*,Expr*,c
246a0 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  har*);.#endif.vo
246b0 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
246c0 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63  From(Parse*, Src
246d0 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  List*, Expr*);.v
246e0 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74  oid sqlite3Updat
246f0 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
24700 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45  t*, ExprList*, E
24710 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72  xpr*, int);.Wher
24720 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68  eInfo *sqlite3Wh
24730 65 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c  ereBegin(Parse*,
24740 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
24750 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73  xprList*,ExprLis
24760 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69  t*,u16,int);.voi
24770 64 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e  d sqlite3WhereEn
24780 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 76  d(WhereInfo*);.v
24790 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65 72 65  oid sqlite3Where
247a0 49 6e 66 6f 46 72 65 65 28 73 71 6c 69 74 65 33  InfoFree(sqlite3
247b0 2a 2c 20 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  *, WhereInfo*);.
247c0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 57 68 65  Expr *sqlite3Whe
247d0 72 65 53 70 6c 69 74 45 78 70 72 28 57 68 65 72  reSplitExpr(Wher
247e0 65 49 6e 66 6f 2a 2c 20 69 6e 74 29 3b 0a 75 36  eInfo*, int);.u6
247f0 34 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 75  4 sqlite3WhereOu
24800 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68 65  tputRowCount(Whe
24810 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
24820 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74  lite3WhereIsDist
24830 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  inct(WhereInfo*)
24840 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
24850 72 65 49 73 4f 72 64 65 72 65 64 28 57 68 65 72  reIsOrdered(Wher
24860 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
24870 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65  ite3WhereIsSorte
24880 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  d(WhereInfo*);.i
24890 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 43  nt sqlite3WhereC
248a0 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57 68 65  ontinueLabel(Whe
248b0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
248c0 6c 69 74 65 33 57 68 65 72 65 42 72 65 61 6b 4c  lite3WhereBreakL
248d0 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29  abel(WhereInfo*)
248e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
248f0 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65 72  reOkOnePass(Wher
24900 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 23  eInfo*, int*);.#
24910 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4f  define ONEPASS_O
24920 46 46 20 20 20 20 20 20 20 20 20 20 30 20 20 20  FF          0   
24930 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e 45 50 41   /* Use of ONEPA
24940 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 2a  SS not allowed *
24950 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53  /.#define ONEPAS
24960 53 5f 53 49 4e 47 4c 45 20 20 20 20 20 20 20 31  S_SINGLE       1
24970 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 76      /* ONEPASS v
24980 61 6c 69 64 20 66 6f 72 20 61 20 73 69 6e 67 6c  alid for a singl
24990 65 20 72 6f 77 20 75 70 64 61 74 65 20 2a 2f 0a  e row update */.
249a0 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f  #define ONEPASS_
249b0 4d 55 4c 54 49 20 20 20 20 20 20 20 20 32 20 20  MULTI        2  
249c0 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20    /* ONEPASS is 
249d0 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c 74 69 70  valid for multip
249e0 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69  le rows */.#defi
249f0 6e 65 20 4f 4e 45 50 41 53 53 5f 53 50 4c 49 54  ne ONEPASS_SPLIT
24a00 5f 44 45 4c 45 54 45 20 33 20 20 20 20 2f 2a 20  _DELETE 3    /* 
24a10 44 45 4c 45 54 45 20 73 68 6f 75 6c 64 20 62 65  DELETE should be
24a20 20 73 70 6c 69 74 20 69 6e 74 6f 20 6d 75 6c 74   split into mult
24a30 69 70 6c 65 20 6f 70 73 20 2a 2f 0a 76 6f 69 64  iple ops */.void
24a40 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
24a50 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d 6e 28  LoadIndexColumn(
24a60 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20  Parse*, Index*, 
24a70 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
24a80 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
24a90 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72  odeGetColumn(Par
24aa0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
24ab0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
24ac0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
24ad0 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 54 6f  rCodeGetColumnTo
24ae0 52 65 67 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  Reg(Parse*, Tabl
24af0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
24b00 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
24b10 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
24b20 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20  nOfTable(Vdbe*, 
24b30 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
24b40 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
24b50 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65  ite3ExprCodeMove
24b60 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
24b70 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
24b80 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 53 74  lite3ExprCacheSt
24b90 6f 72 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ore(Parse*, int,
24ba0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
24bb0 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
24bc0 65 50 75 73 68 28 50 61 72 73 65 2a 29 3b 0a 76  ePush(Parse*);.v
24bd0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
24be0 61 63 68 65 50 6f 70 28 50 61 72 73 65 2a 29 3b  achePop(Parse*);
24bf0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
24c00 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72  rCacheRemove(Par
24c10 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
24c20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
24c30 43 61 63 68 65 43 6c 65 61 72 28 50 61 72 73 65  CacheClear(Parse
24c40 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24c50 45 78 70 72 43 61 63 68 65 41 66 66 69 6e 69 74  ExprCacheAffinit
24c60 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20  yChange(Parse*, 
24c70 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
24c80 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28  sqlite3ExprCode(
24c90 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
24ca0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
24cb0 33 45 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61  3ExprCodeFactora
24cc0 62 6c 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ble(Parse*, Expr
24cd0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
24ce0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 74 49  lite3ExprCodeAtI
24cf0 6e 69 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  nit(Parse*, Expr
24d00 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
24d10 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
24d20 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70  Temp(Parse*, Exp
24d30 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  r*, int*);.int s
24d40 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 61  qlite3ExprCodeTa
24d50 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70  rget(Parse*, Exp
24d60 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
24d70 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e  qlite3ExprCodeAn
24d80 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45  dCache(Parse*, E
24d90 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
24da0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45  sqlite3ExprCodeE
24db0 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20  xprList(Parse*, 
24dc0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
24dd0 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e  int, u8);.#defin
24de0 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55  e SQLITE_ECEL_DU
24df0 50 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20  P      0x01  /* 
24e00 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f  Deep, not shallo
24e10 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66  w copies */.#def
24e20 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
24e30 46 41 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f  FACTOR   0x02  /
24e40 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e  * Factor out con
24e50 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 23  stant terms */.#
24e60 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
24e70 45 4c 5f 52 45 46 20 20 20 20 20 20 30 78 30 34  EL_REF      0x04
24e80 20 20 2f 2a 20 55 73 65 20 45 78 70 72 4c 69 73    /* Use ExprLis
24e90 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f  t.u.x.iOrderByCo
24ea0 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  l */.void sqlite
24eb0 33 45 78 70 72 49 66 54 72 75 65 28 50 61 72 73  3ExprIfTrue(Pars
24ec0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
24ed0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
24ee0 65 33 45 78 70 72 49 66 46 61 6c 73 65 28 50 61  e3ExprIfFalse(Pa
24ef0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
24f00 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
24f10 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 44  ite3ExprIfFalseD
24f20 75 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  up(Parse*, Expr*
24f30 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62  , int, int);.Tab
24f40 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54  le *sqlite3FindT
24f50 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  able(sqlite3*,co
24f60 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
24f70 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a   char*);.Table *
24f80 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62  sqlite3LocateTab
24f90 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73  le(Parse*,int is
24fa0 56 69 65 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a  View,const char*
24fb0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
24fc0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f  Table *sqlite3Lo
24fd0 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61  cateTableItem(Pa
24fe0 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c  rse*,int isView,
24ff0 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
25000 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73  tem *);.Index *s
25010 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28  qlite3FindIndex(
25020 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
25030 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
25040 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25050 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
25060 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e  able(sqlite3*,in
25070 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
25080 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
25090 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78  nkAndDeleteIndex
250a0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
250b0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
250c0 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50   sqlite3Vacuum(P
250d0 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  arse*);.int sqli
250e0 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61  te3RunVacuum(cha
250f0 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a  r**, sqlite3*);.
25100 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d  char *sqlite3Nam
25110 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74  eFromToken(sqlit
25120 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  e3*, Token*);.in
25130 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d  t sqlite3ExprCom
25140 70 61 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72  pare(Expr*, Expr
25150 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
25160 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70  ite3ExprListComp
25170 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45  are(ExprList*, E
25180 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  xprList*, int);.
25190 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
251a0 6d 70 6c 69 65 73 45 78 70 72 28 45 78 70 72 2a  mpliesExpr(Expr*
251b0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
251c0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
251d0 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65 73  nalyzeAggregates
251e0 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45  (NameContext*, E
251f0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
25200 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67  te3ExprAnalyzeAg
25210 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78  gList(NameContex
25220 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  t*,ExprList*);.i
25230 6e 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69  nt sqlite3Functi
25240 6f 6e 55 73 65 73 54 68 69 73 53 72 63 28 45 78  onUsesThisSrc(Ex
25250 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  pr*, SrcList*);.
25260 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74  Vdbe *sqlite3Get
25270 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 23 69  Vdbe(Parse*);.#i
25280 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
25290 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 76  T_BUILTIN_TEST.v
252a0 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53  oid sqlite3PrngS
252b0 61 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a  aveState(void);.
252c0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67  void sqlite3Prng
252d0 52 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69  RestoreState(voi
252e0 64 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  d);.#endif.void 
252f0 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
25300 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ll(sqlite3*,int)
25310 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
25320 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50  deVerifySchema(P
25330 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
25340 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72  d sqlite3CodeVer
25350 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50  ifyNamedSchema(P
25360 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
25370 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71  r *zDb);.void sq
25380 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61  lite3BeginTransa
25390 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e  ction(Parse*, in
253a0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
253b0 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f  CommitTransactio
253c0 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  n(Parse*);.void 
253d0 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54  sqlite3RollbackT
253e0 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
253f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25400 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a  Savepoint(Parse*
25410 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  , int, Token*);.
25420 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73  void sqlite3Clos
25430 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69  eSavepoints(sqli
25440 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  te3 *);.void sql
25450 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e  ite3LeaveMutexAn
25460 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c  dCloseZombie(sql
25470 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
25480 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
25490 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  t(Expr*);.int sq
254a0 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
254b0 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a  antNotJoin(Expr*
254c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
254d0 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75  prIsConstantOrFu
254e0 6e 63 74 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38  nction(Expr*, u8
254f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
25500 70 72 49 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e  prIsTableConstan
25510 74 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 69  t(Expr*,int);.#i
25520 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
25530 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a  LE_CURSOR_HINTS.
25540 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
25550 6f 6e 74 61 69 6e 73 53 75 62 71 75 65 72 79 28  ontainsSubquery(
25560 45 78 70 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69  Expr*);.#endif.i
25570 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
25580 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69  Integer(Expr*, i
25590 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
255a0 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63  3ExprCanBeNull(c
255b0 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74  onst Expr*);.int
255c0 20 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64   sqlite3ExprNeed
255d0 73 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67  sNoAffinityChang
255e0 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63  e(const Expr*, c
255f0 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  har);.int sqlite
25600 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63  3IsRowid(const c
25610 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
25620 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65  te3GenerateRowDe
25630 6c 65 74 65 28 0a 20 20 20 20 50 61 72 73 65 2a  lete(.    Parse*
25640 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a  ,Table*,Trigger*
25650 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36  ,int,int,int,i16
25660 2c 75 38 2c 75 38 2c 75 38 2c 69 6e 74 29 3b 0a  ,u8,u8,u8,int);.
25670 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
25680 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65  rateRowIndexDele
25690 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  te(Parse*, Table
256a0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
256b0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
256c0 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65  ite3GenerateInde
256d0 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64  xKey(Parse*, Ind
256e0 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  ex*, int, int, i
256f0 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c  nt, int*,Index*,
25700 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
25710 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78  e3ResolvePartIdx
25720 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74  Label(Parse*,int
25730 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
25740 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e  enerateConstrain
25750 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54  tChecks(Parse*,T
25760 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69  able*,int*,int,i
25770 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20  nt,int,int,.    
25780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257a0 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29   u8,u8,int,int*)
257b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
257c0 6d 70 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28  mpleteInsertion(
257d0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
257e0 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69  t,int,int,int*,i
257f0 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74  nt,int,int);.int
25800 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
25810 65 41 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73  eAndIndices(Pars
25820 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
25830 20 75 38 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69   u8, int, u8*, i
25840 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64  nt*, int*);.void
25850 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69   sqlite3BeginWri
25860 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61 72 73  teOperation(Pars
25870 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
25880 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c 74 69  oid sqlite3Multi
25890 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b 0a 76  Write(Parse*);.v
258a0 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79 41 62  oid sqlite3MayAb
258b0 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ort(Parse*);.voi
258c0 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e  d sqlite3HaltCon
258d0 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
258e0 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c  int, int, char*,
258f0 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73   i8, u8);.void s
25900 71 6c 69 74 65 33 55 6e 69 71 75 65 43 6f 6e 73  qlite3UniqueCons
25910 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  traint(Parse*, i
25920 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  nt, Index*);.voi
25930 64 20 73 71 6c 69 74 65 33 52 6f 77 69 64 43 6f  d sqlite3RowidCo
25940 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
25950 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45   int, Table*);.E
25960 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
25970 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  Dup(sqlite3*,Exp
25980 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73  r*,int);.ExprLis
25990 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
259a0 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45  stDup(sqlite3*,E
259b0 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53  xprList*,int);.S
259c0 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
259d0 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  rcListDup(sqlite
259e0 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29  3*,SrcList*,int)
259f0 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65  ;.IdList *sqlite
25a00 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74  3IdListDup(sqlit
25a10 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65  e3*,IdList*);.Se
25a20 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c  lect *sqlite3Sel
25a30 65 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  ectDup(sqlite3*,
25a40 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 23 69  Select*,int);.#i
25a50 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  f SELECTTRACE_EN
25a60 41 42 4c 45 44 0a 76 6f 69 64 20 73 71 6c 69 74  ABLED.void sqlit
25a70 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28  e3SelectSetName(
25a80 53 65 6c 65 63 74 2a 2c 63 6f 6e 73 74 20 63 68  Select*,const ch
25a90 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ar*);.#else.# de
25aa0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65  fine sqlite3Sele
25ab0 63 74 53 65 74 4e 61 6d 65 28 41 2c 42 29 0a 23  ctSetName(A,B).#
25ac0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
25ad0 65 33 46 75 6e 63 44 65 66 49 6e 73 65 72 74 28  e3FuncDefInsert(
25ae0 46 75 6e 63 44 65 66 48 61 73 68 2a 2c 20 46 75  FuncDefHash*, Fu
25af0 6e 63 44 65 66 2a 29 3b 0a 46 75 6e 63 44 65 66  ncDef*);.FuncDef
25b00 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e   *sqlite3FindFun
25b10 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63  ction(sqlite3*,c
25b20 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69  onst char*,int,i
25b30 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20  nt,u8,u8);.void 
25b40 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 42  sqlite3RegisterB
25b50 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28  uiltinFunctions(
25b60 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
25b70 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 44  sqlite3RegisterD
25b80 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73  ateTimeFunctions
25b90 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
25ba0 69 74 65 33 52 65 67 69 73 74 65 72 47 6c 6f 62  ite3RegisterGlob
25bb0 61 6c 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  alFunctions(void
25bc0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  );.int sqlite3Sa
25bd0 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69  fetyCheckOk(sqli
25be0 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
25bf0 65 33 53 61 66 65 74 79 43 68 65 63 6b 53 69 63  e3SafetyCheckSic
25c00 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b  kOrOk(sqlite3*);
25c10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 68 61  .void sqlite3Cha
25c20 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a  ngeCookie(Parse*
25c30 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65  , int);..#if !de
25c40 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
25c50 54 5f 56 49 45 57 29 20 26 26 20 21 64 65 66 69  T_VIEW) && !defi
25c60 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
25c70 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20 73 71  TRIGGER).void sq
25c80 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69 7a 65  lite3Materialize
25c90 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54 61 62  View(Parse*, Tab
25ca0 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  le*, Expr*, int)
25cb0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ;.#endif..#ifnde
25cc0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
25cd0 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73 71 6c  IGGER.  void sql
25ce0 69 74 65 33 42 65 67 69 6e 54 72 69 67 67 65 72  ite3BeginTrigger
25cf0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
25d00 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49  Token*,int,int,I
25d10 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  dList*,SrcList*,
25d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25d30 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
25d40 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  *,int, int);.  v
25d50 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73  oid sqlite3Finis
25d60 68 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  hTrigger(Parse*,
25d70 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c 20 54   TriggerStep*, T
25d80 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73  oken*);.  void s
25d90 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
25da0 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  r(Parse*, SrcLis
25db0 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  t*, int);.  void
25dc0 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
25dd0 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20 54  gerPtr(Parse*, T
25de0 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72 69 67  rigger*);.  Trig
25df0 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67  ger *sqlite3Trig
25e00 67 65 72 73 45 78 69 73 74 28 50 61 72 73 65 20  gersExist(Parse 
25e10 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
25e20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a  ExprList*, int *
25e30 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67 67 65  pMask);.  Trigge
25e40 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  r *sqlite3Trigge
25e50 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54  rList(Parse *, T
25e60 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20  able *);.  void 
25e70 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
25e80 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
25e90 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78  igger *, int, Ex
25ea0 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61  prList*, int, Ta
25eb0 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20 20 20  ble *,.         
25ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ed0 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74     int, int, int
25ee0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
25ef0 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44  3CodeRowTriggerD
25f00 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c 20 54  irect(Parse *, T
25f10 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c 65 20  rigger *, Table 
25f20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
25f30 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
25f40 56 69 65 77 54 72 69 67 67 65 72 73 28 50 61 72  ViewTriggers(Par
25f50 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
25f60 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73  r*, int, ExprLis
25f70 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  t*);.  void sqli
25f80 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
25f90 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 20 54  Step(sqlite3*, T
25fa0 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20 20  riggerStep*);.  
25fb0 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
25fc0 69 74 65 33 54 72 69 67 67 65 72 53 65 6c 65 63  ite3TriggerSelec
25fd0 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 53  tStep(sqlite3*,S
25fe0 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69 67 67  elect*);.  Trigg
25ff0 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
26000 72 69 67 67 65 72 49 6e 73 65 72 74 53 74 65 70  riggerInsertStep
26010 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a  (sqlite3*,Token*
26020 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20  , IdList*,.     
26030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26050 20 20 20 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a     Select*,u8);.
26060 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
26070 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70 64  qlite3TriggerUpd
26080 61 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ateStep(sqlite3*
26090 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
260a0 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20  *, Expr*, u8);. 
260b0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
260c0 6c 69 74 65 33 54 72 69 67 67 65 72 44 65 6c 65  lite3TriggerDele
260d0 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  teStep(sqlite3*,
260e0 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a  Token*, Expr*);.
260f0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
26100 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
26110 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  te3*, Trigger*);
26120 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55  .  void sqlite3U
26130 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
26140 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69  igger(sqlite3*,i
26150 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
26160 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54 72  .  u32 sqlite3Tr
26170 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72  iggerColmask(Par
26180 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70  se*,Trigger*,Exp
26190 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54  rList*,int,int,T
261a0 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65  able*,int);.# de
261b0 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
261c0 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70  eToplevel(p) ((p
261d0 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28  )->pToplevel ? (
261e0 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20  p)->pToplevel : 
261f0 28 70 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (p)).# define sq
26200 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28  lite3IsToplevel(
26210 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76  p) ((p)->pToplev
26220 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64  el==0).#else.# d
26230 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
26240 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44  ggersExist(B,C,D
26250 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65  ,E,F) 0.# define
26260 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
26270 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66  igger(A,B).# def
26280 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54  ine sqlite3DropT
26290 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23  riggerPtr(A,B).#
262a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55   define sqlite3U
262b0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
262c0 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64  igger(A,B,C).# d
262d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
262e0 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c  eRowTrigger(A,B,
262f0 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23  C,D,E,F,G,H,I).#
26300 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
26310 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72  odeRowTriggerDir
26320 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29  ect(A,B,C,D,E,F)
26330 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26340 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20  3TriggerList(X, 
26350 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  Y) 0.# define sq
26360 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
26370 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65  el(p) p.# define
26380 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76   sqlite3IsToplev
26390 65 6c 28 70 29 20 31 0a 23 20 64 65 66 69 6e 65  el(p) 1.# define
263a0 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
263b0 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45  olmask(A,B,C,D,E
263c0 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a  ,F,G) 0.#endif..
263d0 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54  int sqlite3JoinT
263e0 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
263f0 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
26400 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
26410 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65  3CreateForeignKe
26420 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
26430 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70  st*, Token*, Exp
26440 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f  rList*, int);.vo
26450 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46  id sqlite3DeferF
26460 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
26470 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  , int);.#ifndef 
26480 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
26490 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64  ORIZATION.  void
264a0 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
264b0 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63  (Parse*,Expr*,Sc
264c0 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b  hema*,SrcList*);
264d0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
264e0 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69  thCheck(Parse*,i
264f0 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
26500 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
26510 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
26520 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
26530 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a  ntextPush(Parse*
26540 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20  , AuthContext*, 
26550 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
26560 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
26570 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43  ContextPop(AuthC
26580 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20  ontext*);.  int 
26590 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43  sqlite3AuthReadC
265a0 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  ol(Parse*, const
265b0 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63   char *, const c
265c0 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  har *, int);.#el
265d0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
265e0 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c  te3AuthRead(a,b,
265f0 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71  c,d).# define sq
26600 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61  lite3AuthCheck(a
26610 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c  ,b,c,d,e)    SQL
26620 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20  ITE_OK.# define 
26630 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
26640 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20  xtPush(a,b,c).# 
26650 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
26660 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20  thContextPop(a) 
26670 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e   ((void)(a)).#en
26680 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
26690 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Attach(Parse*, E
266a0 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  xpr*, Expr*, Exp
266b0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
266c0 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Detach(Parse*, 
266d0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
266e0 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69  ite3FixInit(DbFi
266f0 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e  xer*, Parse*, in
26700 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
26710 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69  const Token*);.i
26720 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63  nt sqlite3FixSrc
26730 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53  List(DbFixer*, S
26740 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
26750 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44  lite3FixSelect(D
26760 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a  bFixer*, Select*
26770 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
26780 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20  xExpr(DbFixer*, 
26790 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
267a0 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44  te3FixExprList(D
267b0 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73  bFixer*, ExprLis
267c0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
267d0 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44  FixTriggerStep(D
267e0 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72  bFixer*, Trigger
267f0 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Step*);.int sqli
26800 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68  te3AtoF(const ch
26810 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20  ar *z, double*, 
26820 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
26830 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f  lite3GetInt32(co
26840 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a  nst char *, int*
26850 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
26860 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  oi(const char*);
26870 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31  .int sqlite3Utf1
26880 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76  6ByteLen(const v
26890 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  oid *pData, int 
268a0 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69  nChar);.int sqli
268b0 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63  te3Utf8CharLen(c
268c0 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61  onst char *pData
268d0 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33  , int nByte);.u3
268e0 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61  2 sqlite3Utf8Rea
268f0 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c  d(const u8**);.L
26900 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
26910 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74  Est(u64);.LogEst
26920 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64   sqlite3LogEstAd
26930 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29  d(LogEst,LogEst)
26940 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
26950 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
26960 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  LE.LogEst sqlite
26970 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c  3LogEstFromDoubl
26980 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69  e(double);.#endi
26990 66 0a 75 36 34 20 73 71 6c 69 74 65 33 4c 6f 67  f.u64 sqlite3Log
269a0 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29  EstToInt(LogEst)
269b0 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65  ;../*.** Routine
269c0 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72  s to read and wr
269d0 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e  ite variable-len
269e0 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54  gth integers.  T
269f0 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  hese used to.** 
26a00 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c  be defined local
26a10 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75  ly, but now we u
26a20 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f  se the varint ro
26a30 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74  utines in the ut
26a40 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f  il.c.** file..*/
26a50 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56  .int sqlite3PutV
26a60 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63  arint(unsigned c
26a70 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73  har*, u64);.u8 s
26a80 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 28  qlite3GetVarint(
26a90 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
26aa0 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75  har *, u64 *);.u
26ab0 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  8 sqlite3GetVari
26ac0 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67  nt32(const unsig
26ad0 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20  ned char *, u32 
26ae0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
26af0 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b  arintLen(u64 v);
26b00 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d  ../*.** The comm
26b10 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20 61  on case is for a
26b20 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20   varint to be a 
26b30 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68  single byte.  Th
26b40 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  ey following.** 
26b50 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68  macros handle th
26b60 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69  e common case wi
26b70 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72  thout a procedur
26b80 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e  e call, but then
26b90 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f   call.** the pro
26ba0 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65  cedure for large
26bb0 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64  r varints..*/.#d
26bc0 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33  efine getVarint3
26bd0 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29  2(A,B)  \.  (u8)
26be0 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29  ((*(A)<(u8)0x80)
26bf0 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29  ?((B)=(u32)*(A))
26c00 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72  ,1:sqlite3GetVar
26c10 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a  int32((A),(u32 *
26c20 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  )&(B))).#define 
26c30 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29  putVarint32(A,B)
26c40 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32    \.  (u8)(((u32
26c50 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f  )(B)<(u32)0x80)?
26c60 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20  (*(A)=(unsigned 
26c70 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20  char)(B)),1:\.  
26c80 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
26c90 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69  ((A),(B))).#defi
26ca0 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20 20  ne getVarint    
26cb0 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
26cc0 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69  .#define putVari
26cd0 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75 74  nt    sqlite3Put
26ce0 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63  Varint...const c
26cf0 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65  har *sqlite3Inde
26d00 78 41 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c  xAffinityStr(sql
26d10 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a  ite3*, Index*);.
26d20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
26d30 65 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c  eAffinity(Vdbe*,
26d40 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63   Table*, int);.c
26d50 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61  har sqlite3Compa
26d60 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20  reAffinity(Expr 
26d70 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66  *pExpr, char aff
26d80 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  2);.int sqlite3I
26d90 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45  ndexAffinityOk(E
26da0 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72  xpr *pExpr, char
26db0 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a   idx_affinity);.
26dc0 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70 72  char sqlite3Expr
26dd0 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
26de0 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Expr);.int sqlit
26df0 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63  e3Atoi64(const c
26e00 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c  har*, i64*, int,
26e10 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
26e20 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63  3DecOrHexToI64(c
26e30 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a  onst char*, i64*
26e40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
26e50 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69  rrorWithMsg(sqli
26e60 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
26e70 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69   char*,...);.voi
26e80 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73  d sqlite3Error(s
26e90 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
26ea0 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f  id *sqlite3HexTo
26eb0 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63  Blob(sqlite3*, c
26ec0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e  onst char *z, in
26ed0 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  t n);.u8 sqlite3
26ee0 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b  HexToInt(int h);
26ef0 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50  .int sqlite3TwoP
26f00 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c  artName(Parse *,
26f10 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20   Token *, Token 
26f20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23  *, Token **);..#
26f30 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
26f40 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 29  E_NEED_ERR_NAME)
26f50 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
26f60 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74 29  ite3ErrName(int)
26f70 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20  ;.#endif..const 
26f80 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72  char *sqlite3Err
26f90 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  Str(int);.int sq
26fa0 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
26fb0 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
26fc0 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
26fd0 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69  FindCollSeq(sqli
26fe0 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e  te3*,u8 enc, con
26ff0 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43  st char*,int);.C
27000 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c  ollSeq *sqlite3L
27010 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72  ocateCollSeq(Par
27020 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73  se *pParse, cons
27030 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43  t char*zName);.C
27040 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45  ollSeq *sqlite3E
27050 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  xprCollSeq(Parse
27060 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a   *pParse, Expr *
27070 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71  pExpr);.Expr *sq
27080 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c  lite3ExprAddColl
27090 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a  ateToken(Parse *
270a0 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 63  pParse, Expr*, c
270b0 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74  onst Token*, int
270c0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
270d0 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 53 74  ExprAddCollateSt
270e0 72 69 6e 67 28 50 61 72 73 65 2a 2c 45 78 70 72  ring(Parse*,Expr
270f0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
27100 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
27110 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78 70  rSkipCollate(Exp
27120 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
27130 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72  CheckCollSeq(Par
27140 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29  se *, CollSeq *)
27150 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65  ;.int sqlite3Che
27160 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72  ckObjectName(Par
27170 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  se *, const char
27180 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
27190 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28  3VdbeSetChanges(
271a0 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b  sqlite3 *, int);
271b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49  .int sqlite3AddI
271c0 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
271d0 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e  int sqlite3SubIn
271e0 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
271f0 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74  nt sqlite3MulInt
27200 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
27210 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33  t sqlite3AbsInt3
27220 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53  2(int);.#ifdef S
27230 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33  QLITE_ENABLE_8_3
27240 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69  _NAMES.void sqli
27250 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 63  te3FileSuffix3(c
27260 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72  onst char*, char
27270 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
27280 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75  ne sqlite3FileSu
27290 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69  ffix3(X,Y).#endi
272a0 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 42  f.u8 sqlite3GetB
272b0 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61  oolean(const cha
272c0 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74  r *z,u8);..const
272d0 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61   void *sqlite3Va
272e0 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f  lueText(sqlite3_
272f0 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74  value*, u8);.int
27300 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74   sqlite3ValueByt
27310 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  es(sqlite3_value
27320 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  *, u8);.void sql
27330 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28  ite3ValueSetStr(
27340 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
27350 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  int, const void 
27360 2a 2c 75 38 2c 20 0a 20 20 20 20 20 20 20 20 20  *,u8, .         
27370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
27380 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a  oid(*)(void*));.
27390 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
273a0 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33  eSetNull(sqlite3
273b0 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73  _value*);.void s
273c0 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28  qlite3ValueFree(
273d0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b  sqlite3_value*);
273e0 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  .sqlite3_value *
273f0 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28  sqlite3ValueNew(
27400 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63 68 61 72  sqlite3 *);.char
27410 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f   *sqlite3Utf16to
27420 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  8(sqlite3 *, con
27430 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75  st void*, int, u
27440 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  8);.int sqlite3V
27450 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c  alueFromExpr(sql
27460 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20  ite3 *, Expr *, 
27470 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f  u8, u8, sqlite3_
27480 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20  value **);.void 
27490 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c  sqlite3ValueAppl
274a0 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65  yAffinity(sqlite
274b0 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75  3_value *, u8, u
274c0 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  8);.#ifndef SQLI
274d0 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a  TE_AMALGAMATION.
274e0 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
274f0 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
27500 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79  e3OpcodeProperty
27510 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
27520 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
27530 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
27540 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  er[];.extern con
27550 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
27560 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70   sqlite3CtypeMap
27570 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
27580 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e   Token sqlite3In
27590 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72  tTokens[];.exter
275a0 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72  n SQLITE_WSD str
275b0 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
275c0 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b  g sqlite3Config;
275d0 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57  .extern SQLITE_W
275e0 53 44 20 46 75 6e 63 44 65 66 48 61 73 68 20 73  SD FuncDefHash s
275f0 71 6c 69 74 65 33 47 6c 6f 62 61 6c 46 75 6e 63  qlite3GlobalFunc
27600 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53  tions;.#ifndef S
27610 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65  QLITE_OMIT_WSD.e
27620 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
27630 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65  3PendingByte;.#e
27640 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64  ndif.#endif.void
27650 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65   sqlite3RootPage
27660 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20  Moved(sqlite3*, 
27670 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
27680 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e  void sqlite3Rein
27690 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  dex(Parse*, Toke
276a0 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  n*, Token*);.voi
276b0 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75  d sqlite3AlterFu
276c0 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
276d0 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
276e0 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73  RenameTable(Pars
276f0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
27700 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
27710 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74  e3GetToken(const
27720 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
27730 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73  , int *);.void s
27740 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73  qlite3NestedPars
27750 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  e(Parse*, const 
27760 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  char*, ...);.voi
27770 64 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50  d sqlite3ExpireP
27780 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
27790 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  s(sqlite3*);.int
277a0 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73   sqlite3CodeSubs
277b0 65 6c 65 63 74 28 50 61 72 73 65 20 2a 2c 20 45  elect(Parse *, E
277c0 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  xpr *, int, int)
277d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
277e0 6c 65 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c  lectPrep(Parse*,
277f0 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f   Select*, NameCo
27800 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71  ntext*);.void sq
27810 6c 69 74 65 33 53 65 6c 65 63 74 57 72 6f 6e 67  lite3SelectWrong
27820 4e 75 6d 54 65 72 6d 73 45 72 72 6f 72 28 50 61  NumTermsError(Pa
27830 72 73 65 20 2a 70 50 61 72 73 65 2c 20 53 65 6c  rse *pParse, Sel
27840 65 63 74 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c  ect *p);.int sql
27850 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d  ite3MatchSpanNam
27860 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  e(const char*, c
27870 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
27880 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
27890 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
278a0 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d  e3ResolveExprNam
278b0 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
278c0 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
278d0 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4c  ite3ResolveExprL
278e0 69 73 74 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e  istNames(NameCon
278f0 74 65 78 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  text*, ExprList*
27900 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
27910 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65  esolveSelectName
27920 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  s(Parse*, Select
27930 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29  *, NameContext*)
27940 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
27950 73 6f 6c 76 65 53 65 6c 66 52 65 66 65 72 65 6e  solveSelfReferen
27960 63 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ce(Parse*,Table*
27970 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ,int,Expr*,ExprL
27980 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
27990 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72  e3ResolveOrderGr
279a0 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65  oupBy(Parse*, Se
279b0 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  lect*, ExprList*
279c0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
279d0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75  void sqlite3Colu
279e0 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a  mnDefault(Vdbe *
279f0 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20  , Table *, int, 
27a00 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
27a10 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64  e3AlterFinishAdd
27a20 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
27a30 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73  Token *);.void s
27a40 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e  qlite3AlterBegin
27a50 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20  AddColumn(Parse 
27a60 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43  *, SrcList *);.C
27a70 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47  ollSeq *sqlite3G
27a80 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a  etCollSeq(Parse*
27a90 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c  , u8, CollSeq *,
27aa0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63   const char*);.c
27ab0 68 61 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e  har sqlite3Affin
27ac0 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68  ityType(const ch
27ad0 61 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20  ar*, u8*);.void 
27ae0 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50  sqlite3Analyze(P
27af0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
27b00 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
27b10 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e  te3InvokeBusyHan
27b20 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72  dler(BusyHandler
27b30 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
27b40 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20  indDb(sqlite3*, 
27b50 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
27b60 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73  ite3FindDbName(s
27b70 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
27b80 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  char *);.int sql
27b90 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64  ite3AnalysisLoad
27ba0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44  (sqlite3*,int iD
27bb0 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  B);.void sqlite3
27bc0 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c  DeleteIndexSampl
27bd0 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65  es(sqlite3*,Inde
27be0 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
27bf0 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49  3DefaultRowEst(I
27c00 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
27c10 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65  ite3RegisterLike
27c20 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65  Functions(sqlite
27c30 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  3*, int);.int sq
27c40 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74  lite3IsLikeFunct
27c50 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  ion(sqlite3*,Exp
27c60 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a  r*,int*,char*);.
27c70 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 69 6e 69  void sqlite3Mini
27c80 6d 75 6d 46 69 6c 65 46 6f 72 6d 61 74 28 50 61  mumFileFormat(Pa
27c90 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
27ca0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68  .void sqlite3Sch
27cb0 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29  emaClear(void *)
27cc0 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65  ;.Schema *sqlite
27cd0 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74  3SchemaGet(sqlit
27ce0 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a  e3 *, Btree *);.
27cf0 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d  int sqlite3Schem
27d00 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33  aToIndex(sqlite3
27d10 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b   *db, Schema *);
27d20 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
27d30 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71  3KeyInfoAlloc(sq
27d40 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b  lite3*,int,int);
27d50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79  .void sqlite3Key
27d60 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66  InfoUnref(KeyInf
27d70 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71  o*);.KeyInfo *sq
27d80 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28  lite3KeyInfoRef(
27d90 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e  KeyInfo*);.KeyIn
27da0 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
27db0 66 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a  foOfIndex(Parse*
27dc0 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65  , Index*);.#ifde
27dd0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69  f SQLITE_DEBUG.i
27de0 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  nt sqlite3KeyInf
27df0 6f 49 73 57 72 69 74 65 61 62 6c 65 28 4b 65 79  oIsWriteable(Key
27e00 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69  Info*);.#endif.i
27e10 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  nt sqlite3Create
27e20 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20  Func(sqlite3 *, 
27e30 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
27e40 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20  t, int, void *, 
27e50 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
27e60 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
27e70 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
27e80 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73  *),.  void (*)(s
27e90 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
27ea0 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
27eb0 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28  e **), void (*)(
27ec0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
27ed0 29 2c 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63  ),.  FuncDestruc
27ee0 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72  tor *pDestructor
27ef0 0a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  .);.int sqlite3A
27f00 70 69 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a  piExit(sqlite3 *
27f10 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  db, int);.int sq
27f20 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74  lite3OpenTempDat
27f30 61 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a  abase(Parse *);.
27f40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
27f50 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63  AccumInit(StrAcc
27f60 75 6d 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63  um*, sqlite3*, c
27f70 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  har*, int, int);
27f80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
27f90 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41  AccumAppend(StrA
27fa0 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ccum*,const char
27fb0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
27fc0 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65  ite3StrAccumAppe
27fd0 6e 64 41 6c 6c 28 53 74 72 41 63 63 75 6d 2a 2c  ndAll(StrAccum*,
27fe0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
27ff0 69 64 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64  id sqlite3Append
28000 43 68 61 72 28 53 74 72 41 63 63 75 6d 2a 2c 69  Char(StrAccum*,i
28010 6e 74 2c 63 68 61 72 29 3b 0a 63 68 61 72 20 2a  nt,char);.char *
28020 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46  sqlite3StrAccumF
28030 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29  inish(StrAccum*)
28040 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
28050 72 41 63 63 75 6d 52 65 73 65 74 28 53 74 72 41  rAccumReset(StrA
28060 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ccum*);.void sql
28070 69 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e  ite3SelectDestIn
28080 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69  it(SelectDest*,i
28090 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  nt,int);.Expr *s
280a0 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75  qlite3CreateColu
280b0 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a  mnExpr(sqlite3 *
280c0 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74  , SrcList *, int
280d0 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71  , int);..void sq
280e0 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61  lite3BackupResta
280f0 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  rt(sqlite3_backu
28100 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  p *);.void sqlit
28110 65 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73  e3BackupUpdate(s
28120 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c  qlite3_backup *,
28130 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20   Pgno, const u8 
28140 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  *);..#ifdef SQLI
28150 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
28160 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73 71  OR_STAT4.void sq
28170 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63  lite3AnalyzeFunc
28180 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74  tions(void);.int
28190 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f   sqlite3Stat4Pro
281a0 62 65 53 65 74 56 61 6c 75 65 28 50 61 72 73 65  beSetValue(Parse
281b0 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65  *,Index*,Unpacke
281c0 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c  dRecord**,Expr*,
281d0 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e  u8,int,int*);.in
281e0 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 56 61  t sqlite3Stat4Va
281f0 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73  lueFromExpr(Pars
28200 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73  e*, Expr*, u8, s
28210 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
28220 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
28230 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61  t4ProbeFree(Unpa
28240 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e  ckedRecord*);.in
28250 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f  t sqlite3Stat4Co
28260 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63  lumn(sqlite3*, c
28270 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
28280 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61   int, sqlite3_va
28290 6c 75 65 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  lue**);.#endif..
282a0 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
282b0 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e  ace to the LEMON
282c0 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65  -generated parse
282d0 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74  r.*/.void *sqlit
282e0 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f  e3ParserAlloc(vo
282f0 69 64 2a 28 2a 29 28 75 36 34 29 29 3b 0a 76 6f  id*(*)(u64));.vo
28300 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
28310 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64  Free(void*, void
28320 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69  (*)(void*));.voi
28330 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 28  d sqlite3Parser(
28340 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  void*, int, Toke
28350 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64  n, Parse*);.#ifd
28360 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41  ef YYTRACKMAXSTA
28370 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71  CKDEPTH.  int sq
28380 6c 69 74 65 33 50 61 72 73 65 72 53 74 61 63 6b  lite3ParserStack
28390 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e  Peak(void*);.#en
283a0 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  dif..void sqlite
283b0 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69  3AutoLoadExtensi
283c0 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ons(sqlite3*);.#
283d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
283e0 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f  IT_LOAD_EXTENSIO
283f0 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  N.  void sqlite3
28400 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28  CloseExtensions(
28410 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65  sqlite3*);.#else
28420 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
28430 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
28440 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  (X).#endif..#ifn
28450 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
28460 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76  SHARED_CACHE.  v
28470 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
28480 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e  Lock(Parse *, in
28490 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73  t, int, u8, cons
284a0 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65  t char *);.#else
284b0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
284c0 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c  e3TableLock(v,w,
284d0 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23  x,y,z).#endif..#
284e0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
284f0 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55  T.  int sqlite3U
28500 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20  tf8To8(unsigned 
28510 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
28520 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
28530 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
28540 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
28550 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20  3VtabClear(Y).# 
28560 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
28570 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c  tabSync(X,Y) SQL
28580 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65  ITE_OK.#  define
28590 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c   sqlite3VtabRoll
285a0 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e  back(X).#  defin
285b0 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d  e sqlite3VtabCom
285c0 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65  mit(X).#  define
285d0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79   sqlite3VtabInSy
285e0 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65 66 69  nc(db) 0.#  defi
285f0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  ne sqlite3VtabLo
28600 63 6b 28 58 29 20 0a 23 20 20 64 65 66 69 6e 65  ck(X) .#  define
28610 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
28620 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
28630 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
28640 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66 69  kList(X).#  defi
28650 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 61  ne sqlite3VtabSa
28660 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29  vepoint(X, Y, Z)
28670 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65   SQLITE_OK.#  de
28680 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56  fine sqlite3GetV
28690 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54  Table(X,Y)  ((VT
286a0 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20  able*)0).#else. 
286b0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
286c0 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20  abClear(sqlite3 
286d0 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  *db, Table*);.  
286e0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
286f0 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69  bDisconnect(sqli
28700 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a  te3 *db, Table *
28710 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  p);.   int sqlit
28720 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74  e3VtabSync(sqlit
28730 65 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a  e3 *db, Vdbe*);.
28740 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
28750 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74  abRollback(sqlit
28760 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20  e3 *db);.   int 
28770 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
28780 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  t(sqlite3 *db);.
28790 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
287a0 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a  tabLock(VTable *
287b0 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
287c0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61  e3VtabUnlock(VTa
287d0 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
287e0 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
287f0 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b  kList(sqlite3*);
28800 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
28810 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c  tabSavepoint(sql
28820 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  ite3 *, int, int
28830 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
28840 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
28850 73 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65  sg(Vdbe*, sqlite
28860 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61  3_vtab*);.   VTa
28870 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56  ble *sqlite3GetV
28880 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20  Table(sqlite3*, 
28890 54 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69  Table*);.#  defi
288a0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e  ne sqlite3VtabIn
288b0 53 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e  Sync(db) ((db)->
288c0 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62  nVTrans>0 && (db
288d0 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23  )->aVTrans==0).#
288e0 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
288f0 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61  3VtabEponymousTa
28900 62 6c 65 49 6e 69 74 28 50 61 72 73 65 2a 2c 4d  bleInit(Parse*,M
28910 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71  odule*);.void sq
28920 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f  lite3VtabEponymo
28930 75 73 54 61 62 6c 65 43 6c 65 61 72 28 73 71 6c  usTableClear(sql
28940 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a  ite3*,Module*);.
28950 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
28960 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72  MakeWritable(Par
28970 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69  se*,Table*);.voi
28980 64 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  d sqlite3VtabBeg
28990 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  inParse(Parse*, 
289a0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
289b0 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Token*, int);.vo
289c0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 46 69  id sqlite3VtabFi
289d0 6e 69 73 68 50 61 72 73 65 28 50 61 72 73 65 2a  nishParse(Parse*
289e0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
289f0 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e  sqlite3VtabArgIn
28a00 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  it(Parse*);.void
28a10 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 45   sqlite3VtabArgE
28a20 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f  xtend(Parse*, To
28a30 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
28a40 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65  e3VtabCallCreate
28a50 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
28a60 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68  const char *, ch
28a70 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ar **);.int sqli
28a80 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65  te3VtabCallConne
28a90 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ct(Parse*, Table
28aa0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
28ab0 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73  tabCallDestroy(s
28ac0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f  qlite3*, int, co
28ad0 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74  nst char *);.int
28ae0 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
28af0 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61  n(sqlite3 *, VTa
28b00 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20  ble *);.FuncDef 
28b10 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72  *sqlite3VtabOver
28b20 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  loadFunction(sql
28b30 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c  ite3 *,FuncDef*,
28b40 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a   int nArg, Expr*
28b50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  );.void sqlite3I
28b60 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73  nvalidFunction(s
28b70 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
28b80 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
28b90 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e  e**);.sqlite3_in
28ba0 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43  t64 sqlite3StmtC
28bb0 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74  urrentTime(sqlit
28bc0 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e  e3_context*);.in
28bd0 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72  t sqlite3VdbePar
28be0 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62 65  ameterIndex(Vdbe
28bf0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
28c00 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
28c10 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67  3TransferBinding
28c20 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  s(sqlite3_stmt *
28c30 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  , sqlite3_stmt *
28c40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
28c50 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73 65  arserReset(Parse
28c60 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
28c70 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b  eprepare(Vdbe*);
28c80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
28c90 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68  rListCheckLength
28ca0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
28cb0 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
28cc0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
28cd0 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43  e3BinaryCompareC
28ce0 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20  ollSeq(Parse *, 
28cf0 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b  Expr *, Expr *);
28d00 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70  .int sqlite3Temp
28d10 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73  InMemory(const s
28d20 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20  qlite3*);.const 
28d30 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75  char *sqlite3Jou
28d40 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74  rnalModename(int
28d50 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
28d60 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74  E_OMIT_WAL.  int
28d70 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
28d80 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  nt(sqlite3*, int
28d90 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
28da0 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
28db0 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28  3WalDefaultHook(
28dc0 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
28dd0 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
28de0 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
28df0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a  SQLITE_OMIT_CTE.
28e00 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33 57    With *sqlite3W
28e10 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57 69  ithAdd(Parse*,Wi
28e20 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  th*,Token*,ExprL
28e30 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20  ist*,Select*);. 
28e40 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74   void sqlite3Wit
28e50 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  hDelete(sqlite3*
28e60 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20  ,With*);.  void 
28e70 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28  sqlite3WithPush(
28e80 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75  Parse*, With*, u
28e90 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  8);.#else.#defin
28ea0 65 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73  e sqlite3WithPus
28eb0 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65  h(x,y,z).#define
28ec0 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
28ed0 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a  te(x,y).#endif..
28ee0 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20  /* Declarations 
28ef0 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e  for functions in
28f00 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20   fkey.c. All of 
28f10 74 68 65 73 65 20 61 72 65 20 72 65 70 6c 61 63  these are replac
28f20 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d  ed by.** no-op m
28f30 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f  acros if OMIT_FO
28f40 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66  REIGN_KEY is def
28f50 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ined. In this ca
28f60 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a  se no foreign.**
28f70 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69   key functionali
28f80 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e  ty is available.
28f90 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52   If OMIT_TRIGGER
28fa0 20 69 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a   is defined but.
28fb0 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  ** OMIT_FOREIGN_
28fc0 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79  KEY is not, only
28fd0 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   some of the fun
28fe0 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70  ctions are no-op
28ff0 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63  ed. In.** this c
29000 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  ase foreign keys
29010 20 61 72 65 20 70 61 72 73 65 64 2c 20 62 75 74   are parsed, but
29020 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69   no other functi
29030 6f 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a 20 70  onality is .** p
29040 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65  rovided (enforce
29050 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74  ment of FK const
29060 72 61 69 6e 74 73 20 72 65 71 75 69 72 65 73 20  raints requires 
29070 74 68 65 20 74 72 69 67 67 65 72 73 20 73 75 62  the triggers sub
29080 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66  -system)..*/.#if
29090 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
290a0 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
290b0 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  Y) && !defined(S
290c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
290d0 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ER).  void sqlit
290e0 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a  e3FkCheck(Parse*
290f0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
29100 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  nt, int*, int);.
29110 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
29120 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
29130 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62  , SrcList *, Tab
29140 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  le*);.  void sql
29150 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61  ite3FkActions(Pa
29160 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
29170 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
29180 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20  t*, int);.  int 
29190 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65  sqlite3FkRequire
291a0 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  d(Parse*, Table*
291b0 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  , int*, int);.  
291c0 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64  u32 sqlite3FkOld
291d0 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  mask(Parse*, Tab
291e0 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71  le*);.  FKey *sq
291f0 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65  lite3FkReference
29200 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73  s(Table *);.#els
29210 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
29220 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62  te3FkActions(a,b
29230 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66  ,c,d,e,f).  #def
29240 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65  ine sqlite3FkChe
29250 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a  ck(a,b,c,d,e,f).
29260 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
29270 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62  3FkDropTable(a,b
29280 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,c).  #define sq
29290 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61  lite3FkOldmask(a
292a0 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a 20 20  ,b)         0.  
292b0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
292c0 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c  kRequired(a,b,c,
292d0 64 29 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23  d)    0.#endif.#
292e0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
292f0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20  IT_FOREIGN_KEY. 
29300 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44   void sqlite3FkD
29310 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c  elete(sqlite3 *,
29320 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20   Table*);.  int 
29330 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
29340 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c  ndex(Parse*,Tabl
29350 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a  e*,FKey*,Index**
29360 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20  ,int**);.#else. 
29370 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
29380 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20  FkDelete(a,b).  
29390 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
293a0 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62  kLocateIndex(a,b
293b0 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a  ,c,d,e).#endif..
293c0 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65  ./*.** Available
293d0 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73   fault injectors
293e0 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d  .  Should be num
293f0 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20  bered beginning 
29400 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69  with 0..*/.#defi
29410 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49  ne SQLITE_FAULTI
29420 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20  NJECTOR_MALLOC  
29430 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c     0.#define SQL
29440 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f  ITE_FAULTINJECTO
29450 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a  R_COUNT      1..
29460 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
29470 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20  ace to the code 
29480 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20  in fault.c used 
29490 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20  for identifying 
294a0 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c  "benign".** mall
294b0 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69  oc failures. Thi
294c0 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e  s is only presen
294d0 74 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  t if SQLITE_OMIT
294e0 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a  _BUILTIN_TEST.**
294f0 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e   is not defined.
29500 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
29510 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
29520 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  TEST.  void sqli
29530 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
29540 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f  lloc(void);.  vo
29550 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  id sqlite3EndBen
29560 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ignMalloc(void);
29570 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
29580 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
29590 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64  ignMalloc().  #d
295a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64  efine sqlite3End
295b0 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23  BenignMalloc().#
295c0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  endif../*.** All
295d0 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75  owed return valu
295e0 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46  es from sqlite3F
295f0 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a  indInIndex().*/.
29600 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
29610 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20 31 20  _ROWID        1 
29620 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20    /* Search the 
29630 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62  rowid of the tab
29640 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  le */.#define IN
29650 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20  _INDEX_EPH      
29660 20 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63      2   /* Searc
29670 68 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62  h an ephemeral b
29680 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65  -tree */.#define
29690 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
296a0 41 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78  ASC    3   /* Ex
296b0 69 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43  isting index ASC
296c0 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e  ENDING */.#defin
296d0 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
296e0 5f 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45  _DESC   4   /* E
296f0 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45  xisting index DE
29700 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66  SCENDING */.#def
29710 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  ine IN_INDEX_NOO
29720 50 20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a  P         5   /*
29730 20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61   No table availa
29740 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69  ble. Use compari
29750 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c  sons */./*.** Al
29760 6c 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20  lowed flags for 
29770 74 68 65 20 33 72 64 20 70 61 72 61 6d 65 74 65  the 3rd paramete
29780 72 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64  r to sqlite3Find
29790 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64  InIndex()..*/.#d
297a0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e  efine IN_INDEX_N
297b0 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30  OOP_OK     0x000
297c0 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75  1  /* OK to retu
297d0 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  rn IN_INDEX_NOOP
297e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
297f0 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20  NDEX_MEMBERSHIP 
29800 20 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f   0x0002  /* IN o
29810 70 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72  perator used for
29820 20 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73 74   membership test
29830 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
29840 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20  NDEX_LOOP       
29850 20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f   0x0004  /* IN o
29860 70 65 72 61 74 6f 72 20 75 73 65 64 20 61 73 20  perator used as 
29870 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71  a loop */.int sq
29880 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
29890 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a  (Parse *, Expr *
298a0 2c 20 75 33 32 2c 20 69 6e 74 2a 29 3b 0a 0a 23  , u32, int*);..#
298b0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
298c0 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  BLE_ATOMIC_WRITE
298d0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
298e0 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65  urnalOpen(sqlite
298f0 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63  3_vfs *, const c
29900 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66  har *, sqlite3_f
29910 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ile *, int, int)
29920 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  ;.  int sqlite3J
29930 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74  ournalSize(sqlit
29940 65 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74  e3_vfs *);.  int
29950 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43   sqlite3JournalC
29960 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69  reate(sqlite3_fi
29970 6c 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  le *);.  int sql
29980 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74  ite3JournalExist
29990 73 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  s(sqlite3_file *
299a0 70 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  p);.#else.  #def
299b0 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  ine sqlite3Journ
299c0 61 6c 53 69 7a 65 28 70 56 66 73 29 20 28 28 70  alSize(pVfs) ((p
299d0 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a  Vfs)->szOsFile).
299e0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
299f0 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 70  3JournalExists(p
29a00 29 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  ) 1.#endif..void
29a10 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e   sqlite3MemJourn
29a20 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66  alOpen(sqlite3_f
29a30 69 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ile *);.int sqli
29a40 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a  te3MemJournalSiz
29a50 65 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c  e(void);.int sql
29a60 69 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c  ite3IsMemJournal
29a70 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
29a80 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  ;..void sqlite3E
29a90 78 70 72 53 65 74 48 65 69 67 68 74 41 6e 64 46  xprSetHeightAndF
29aa0 6c 61 67 73 28 50 61 72 73 65 20 2a 70 50 61 72  lags(Parse *pPar
29ab0 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23 69  se, Expr *p);.#i
29ac0 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50  f SQLITE_MAX_EXP
29ad0 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20  R_DEPTH>0.  int 
29ae0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
29af0 72 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a  rHeight(Select *
29b00 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
29b10 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28  ExprCheckHeight(
29b20 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65  Parse*, int);.#e
29b30 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
29b40 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48  lite3SelectExprH
29b50 65 69 67 68 74 28 78 29 20 30 0a 20 20 23 64 65  eight(x) 0.  #de
29b60 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72  fine sqlite3Expr
29b70 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29  CheckHeight(x,y)
29b80 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c  .#endif..u32 sql
29b90 69 74 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e  ite3Get4byte(con
29ba0 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71  st u8*);.void sq
29bb0 6c 69 74 65 33 50 75 74 34 62 79 74 65 28 75 38  lite3Put4byte(u8
29bc0 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66  *, u32);..#ifdef
29bd0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
29be0 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76  NLOCK_NOTIFY.  v
29bf0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
29c00 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c  ctionBlocked(sql
29c10 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20  ite3 *, sqlite3 
29c20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
29c30 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f  e3ConnectionUnlo
29c40 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62  cked(sqlite3 *db
29c50 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
29c60 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
29c70 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  d(sqlite3 *db);.
29c80 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
29c90 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
29ca0 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20  nBlocked(x,y).  
29cb0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
29cc0 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65  onnectionUnlocke
29cd0 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73  d(x).  #define s
29ce0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
29cf0 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66  Closed(x).#endif
29d00 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
29d10 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c  DEBUG.  void sql
29d20 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28  ite3ParserTrace(
29d30 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a  FILE*, char *);.
29d40 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
29d50 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
29d60 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73 74  LE IOTRACE exist
29d70 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61  s then the globa
29d80 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71  l variable.** sq
29d90 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73 20  lite3IoTrace is 
29da0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70  a pointer to a p
29db0 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69  rintf-like routi
29dc0 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72  ne used to.** pr
29dd0 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20  int I/O tracing 
29de0 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69  messages. .*/.#i
29df0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
29e00 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66  LE_IOTRACE.# def
29e10 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20  ine IOTRACE(A)  
29e20 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61  if( sqlite3IoTra
29e30 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54  ce ){ sqlite3IoT
29e40 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64  race A; }.  void
29e50 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
29e60 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53  aceSql(Vdbe*);.S
29e70 51 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54 45  QLITE_API SQLITE
29e80 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53 51  _EXTERN void (SQ
29e90 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69  LITE_CDECL *sqli
29ea0 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73  te3IoTrace)(cons
29eb0 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65  t char*,...);.#e
29ec0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54  lse.# define IOT
29ed0 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65  RACE(A).# define
29ee0 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
29ef0 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66  aceSql(X).#endif
29f00 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f  ../*.** These ro
29f10 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c  utines are avail
29f20 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d  able for the mem
29f30 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65  2.c debugging me
29f40 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a  mory allocator.*
29f50 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72  * only.  They ar
29f60 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79  e used to verify
29f70 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74 20   that different 
29f80 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72  "types" of memor
29f90 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  y.** allocations
29fa0 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72   are properly tr
29fb0 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79 73  acked by the sys
29fc0 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  tem..**.** sqlit
29fd0 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
29fe0 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74 79  e() sets the "ty
29ff0 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61  pe" of an alloca
2a000 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a  tion to one of.*
2a010 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20  * the MEMTYPE_* 
2a020 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62  macros defined b
2a030 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20  elow.  The type 
2a040 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61 73  must be a bitmas
2a050 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67  k with.** a sing
2a060 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a  le bit set..**.*
2a070 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
2a080 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75 72  gHasType() retur
2a090 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f  ns true if any o
2a0a0 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74  f the bits in it
2a0b0 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75  s second.** argu
2a0c0 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74  ment match the t
2a0d0 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70  ype set by the p
2a0e0 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d  revious sqlite3M
2a0f0 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
2a100 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  ..** sqlite3Memd
2a110 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69 73  ebugHasType() is
2a120 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73   intended for us
2a130 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74 28  e inside assert(
2a140 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  ) statements..**
2a150 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
2a160 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75  bugNoType() retu
2a170 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65  rns true if none
2a180 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20   of the bits in 
2a190 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72  its second.** ar
2a1a0 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65  gument match the
2a1b0 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65   type set by the
2a1c0 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65   previous sqlite
2a1d0 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
2a1e0 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70  ()..**.** Perhap
2a1f0 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72  s the most impor
2a200 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68  tant point is th
2a210 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
2a220 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41  ween MEMTYPE_HEA
2a230 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45  P.** and MEMTYPE
2a240 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20  _LOOKASIDE.  If 
2a250 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73  an allocation is
2a260 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
2a270 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a  DE, that means.*
2a280 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65 20  * it might have 
2a290 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62  been allocated b
2a2a0 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63  y lookaside, exc
2a2b0 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69  ept the allocati
2a2c0 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61  on was.** too la
2a2d0 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65  rge or lookaside
2a2e0 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c   was already ful
2a2f0 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74  l.  It is import
2a300 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  ant to verify.**
2a310 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e   that allocation
2a320 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76  s that might hav
2a330 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65 64  e been satisfied
2a340 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72   by lookaside ar
2a350 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20  e not.** passed 
2a360 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b  back to non-look
2a370 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75  aside free() rou
2a380 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20  tines.  Asserts 
2a390 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65  such as the.** e
2a3a0 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65  xample above are
2a3b0 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e   placed on the n
2a3c0 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
2a3d0 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20  e() routines to 
2a3e0 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63  verify.** this c
2a3f0 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a  onstraint. .**.*
2a400 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73  * All of this is
2a410 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f   no-op for a pro
2a420 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20  duction build.  
2a430 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e  It only comes in
2a440 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20  to.** play when 
2a450 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  the SQLITE_MEMDE
2a460 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  BUG compile-time
2a470 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e   option is used.
2a480 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
2a490 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69  E_MEMDEBUG.  voi
2a4a0 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  d sqlite3Memdebu
2a4b0 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75  gSetType(void*,u
2a4c0 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  8);.  int sqlite
2a4d0 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
2a4e0 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e  (void*,u8);.  in
2a4f0 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  t sqlite3Memdebu
2a500 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  gNoType(void*,u8
2a510 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2a520 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
2a530 67 53 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f  gSetType(X,Y)  /
2a540 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66  * no-op */.# def
2a550 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
2a560 62 75 67 48 61 73 54 79 70 65 28 58 2c 59 29 20  bugHasType(X,Y) 
2a570 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   1.# define sqli
2a580 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
2a590 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69  e(X,Y)   1.#endi
2a5a0 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  f.#define MEMTYP
2a5b0 45 5f 48 45 41 50 20 20 20 20 20 20 20 30 78 30  E_HEAP       0x0
2a5c0 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65  1  /* General he
2a5d0 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  ap allocations *
2a5e0 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
2a5f0 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30  E_LOOKASIDE  0x0
2a600 32 20 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20  2  /* Heap that 
2a610 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
2a620 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65  lookaside */.#de
2a630 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52  fine MEMTYPE_SCR
2a640 41 54 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a  ATCH    0x04  /*
2a650 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74   Scratch allocat
2a660 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
2a670 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20  MEMTYPE_PCACHE  
2a680 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65     0x08  /* Page
2a690 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f   cache allocatio
2a6a0 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72  ns */../*.** Thr
2a6b0 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65  eading interface
2a6c0 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
2a6d0 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
2a6e0 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  S>0.int sqlite3T
2a6f0 68 72 65 61 64 43 72 65 61 74 65 28 53 51 4c 69  hreadCreate(SQLi
2a700 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a  teThread**,void*
2a710 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a  (*)(void*),void*
2a720 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68  );.int sqlite3Th
2a730 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54  readJoin(SQLiteT
2a740 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b  hread*, void**);
2a750 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66  .#endif..#if def
2a760 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
2a770 4c 45 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20  LE_DBSTAT_VTAB) 
2a780 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
2a790 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69  E_TEST).int sqli
2a7a0 74 65 33 44 62 73 74 61 74 52 65 67 69 73 74 65  te3DbstatRegiste
2a7b0 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e  r(sqlite3*);.#en
2a7c0 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 5f  dif..#endif /* _
2a7d0 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a  SQLITEINT_H_ */.