/ Hex Artifact Content
Login

Artifact bc6d24460fe544323517630b1e20539146379077:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 49 6e  INT_H_../*.** In
01e0: 63 6c 75 64 65 20 74 68 65 20 68 65 61 64 65 72  clude the header
01f0: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 63 75   file used to cu
0200: 73 74 6f 6d 69 7a 65 20 74 68 65 20 63 6f 6d 70  stomize the comp
0210: 69 6c 65 72 20 6f 70 74 69 6f 6e 73 20 66 6f 72  iler options for
0220: 20 4d 53 56 43 2e 0a 2a 2a 20 54 68 69 73 20 73   MSVC..** This s
0230: 68 6f 75 6c 64 20 62 65 20 64 6f 6e 65 20 66 69  hould be done fi
0240: 72 73 74 20 73 6f 20 74 68 61 74 20 69 74 20 63  rst so that it c
0250: 61 6e 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20  an successfully 
0260: 70 72 65 76 65 6e 74 20 73 70 75 72 69 6f 75 73  prevent spurious
0270: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  .** compiler war
0280: 6e 69 6e 67 73 20 64 75 65 20 74 6f 20 73 75 62  nings due to sub
0290: 73 65 71 75 65 6e 74 20 63 6f 6e 74 65 6e 74 20  sequent content 
02a0: 69 6e 20 74 68 69 73 20 66 69 6c 65 20 61 6e 64  in this file and
02b0: 20 6f 74 68 65 72 20 66 69 6c 65 73 0a 2a 2a 20   other files.** 
02c0: 74 68 61 74 20 61 72 65 20 69 6e 63 6c 75 64 65  that are include
02d0: 64 20 62 79 20 74 68 69 73 20 66 69 6c 65 2e 0a  d by this file..
02e0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 6d 73 76  */.#include "msv
02f0: 63 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 53 70 65 63  c.h"../*.** Spec
0300: 69 61 6c 20 73 65 74 75 70 20 66 6f 72 20 56 78  ial setup for Vx
0310: 57 6f 72 6b 73 0a 2a 2f 0a 23 69 6e 63 6c 75 64  Works.*/.#includ
0320: 65 20 22 76 78 77 6f 72 6b 73 2e 68 22 0a 0a 2f  e "vxworks.h"../
0330: 2a 0a 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69  *.** These #defi
0340: 6e 65 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c  nes should enabl
0350: 65 20 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70  e >2GB file supp
0360: 6f 72 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20  ort on POSIX if 
0370: 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e  the.** underlyin
0380: 67 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74  g operating syst
0390: 65 6d 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20  em supports it. 
03a0: 20 49 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73   If the OS lacks
03b0: 0a 2a 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73  .** large file s
03c0: 75 70 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68  upport, or if th
03d0: 65 20 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c  e OS is windows,
03e0: 20 74 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65   these should be
03f0: 20 6e 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54   no-ops..**.** T
0400: 69 63 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68  icket #2739:  Th
0410: 65 20 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55  e _LARGEFILE_SOU
0420: 52 43 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61  RCE macro must a
0430: 70 70 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79  ppear before any
0440: 0a 2a 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c  .** system #incl
0450: 75 64 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68  udes.  Hence, th
0460: 69 73 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65  is block of code
0470: 20 6d 75 73 74 20 62 65 20 74 68 65 20 76 65 72   must be the ver
0480: 79 20 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20  y first.** code 
0490: 69 6e 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69  in all source fi
04a0: 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65  les..**.** Large
04b0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61   file support ca
04c0: 6e 20 62 65 20 64 69 73 61 62 6c 65 64 20 75 73  n be disabled us
04d0: 69 6e 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45  ing the -DSQLITE
04e0: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69  _DISABLE_LFS swi
04f0: 74 63 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f  tch.** on the co
0500: 6d 70 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c  mpiler command l
0510: 69 6e 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65  ine.  This is ne
0520: 63 65 73 73 61 72 79 20 69 66 20 79 6f 75 20 61  cessary if you a
0530: 72 65 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20  re compiling.** 
0540: 6f 6e 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68  on a recent mach
0550: 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61 74  ine (ex: Red Hat
0560: 20 37 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61   7.2) but you wa
0570: 6e 74 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20  nt your code to 
0580: 77 6f 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c  work.** on an ol
0590: 64 65 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a  der machine (ex:
05a0: 20 52 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20   Red Hat 6.0).  
05b0: 49 66 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f  If you compile o
05c0: 6e 20 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a  n Red Hat 7.2.**
05d0: 20 77 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70   without this op
05e0: 74 69 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61  tion, LFS is ena
05f0: 62 6c 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f  ble.  But LFS do
0600: 65 73 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20  es not exist in 
0610: 74 68 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e  the kernel.** in
0620: 20 52 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f   Red Hat 6.0, so
0630: 20 74 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20   the code won't 
0640: 77 6f 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f  work.  Hence, fo
0650: 72 20 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79  r maximum binary
0660: 0a 2a 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20  .** portability 
0670: 79 6f 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20  you should omit 
0680: 4c 46 53 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70  LFS..**.** The p
0690: 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61 70  revious paragrap
06a0: 68 20 77 61 73 20 77 72 69 74 74 65 6e 20 69 6e  h was written in
06b0: 20 32 30 30 35 2e 20 20 28 54 68 69 73 20 70 61   2005.  (This pa
06c0: 72 61 67 72 61 70 68 20 69 73 20 77 72 69 74 74  ragraph is writt
06d0: 65 6e 0a 2a 2a 20 6f 6e 20 32 30 30 38 2d 31 31  en.** on 2008-11
06e0: 2d 32 38 2e 29 20 54 68 65 73 65 20 64 61 79 73  -28.) These days
06f0: 2c 20 61 6c 6c 20 4c 69 6e 75 78 20 6b 65 72 6e  , all Linux kern
0700: 65 6c 73 20 73 75 70 70 6f 72 74 20 6c 61 72 67  els support larg
0710: 65 20 66 69 6c 65 73 2c 20 73 6f 0a 2a 2a 20 79  e files, so.** y
0720: 6f 75 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62  ou should probab
0730: 6c 79 20 6c 65 61 76 65 20 4c 46 53 20 65 6e 61  ly leave LFS ena
0740: 62 6c 65 64 2e 20 20 42 75 74 20 73 6f 6d 65 20  bled.  But some 
0750: 65 6d 62 65 64 64 65 64 20 70 6c 61 74 66 6f 72  embedded platfor
0760: 6d 73 20 6d 69 67 68 74 0a 2a 2a 20 6c 61 63 6b  ms might.** lack
0770: 20 4c 46 53 20 69 6e 20 77 68 69 63 68 20 63 61   LFS in which ca
0780: 73 65 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49  se the SQLITE_DI
0790: 53 41 42 4c 45 5f 4c 46 53 20 6d 61 63 72 6f 20  SABLE_LFS macro 
07a0: 6d 69 67 68 74 20 73 74 69 6c 6c 20 62 65 20 75  might still be u
07b0: 73 65 66 75 6c 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d  seful..**.** Sim
07c0: 69 6c 61 72 20 69 73 20 74 72 75 65 20 66 6f 72  ilar is true for
07d0: 20 4d 61 63 20 4f 53 20 58 2e 20 20 4c 46 53 20   Mac OS X.  LFS 
07e0: 69 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65  is only supporte
07f0: 64 20 6f 6e 20 4d 61 63 20 4f 53 20 58 20 39 20  d on Mac OS X 9 
0800: 61 6e 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69  and later..*/.#i
0810: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53  fndef SQLITE_DIS
0820: 41 42 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69 6e  ABLE_LFS.# defin
0830: 65 20 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20 20  e _LARGE_FILE   
0840: 20 20 20 20 31 0a 23 20 69 66 6e 64 65 66 20 5f      1.# ifndef _
0850: 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53  FILE_OFFSET_BITS
0860: 0a 23 20 20 20 64 65 66 69 6e 65 20 5f 46 49 4c  .#   define _FIL
0870: 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34  E_OFFSET_BITS 64
0880: 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e  .# endif.# defin
0890: 65 20 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55  e _LARGEFILE_SOU
08a0: 52 43 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  RCE 1.#endif../*
08b0: 20 57 68 61 74 20 76 65 72 73 69 6f 6e 20 6f 66   What version of
08c0: 20 47 43 43 20 69 73 20 62 65 69 6e 67 20 75 73   GCC is being us
08d0: 65 64 2e 20 20 30 20 6d 65 61 6e 73 20 47 43 43  ed.  0 means GCC
08e0: 20 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 75 73   is not being us
08f0: 65 64 20 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 47  ed */.#ifdef __G
0900: 4e 55 43 5f 5f 0a 23 20 64 65 66 69 6e 65 20 47  NUC__.# define G
0910: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
0920: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
0930: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
0940: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
0950: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
0960: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
0970: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
0980: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
0990: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
09a0: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
09b0: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
09c0: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
09d0: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
09e0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
09f0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
0a00: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
0a10: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
0a20: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
0a30: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
0a40: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
0a50: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
0a60: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
0a70: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
0a80: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
0a90: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
0aa0: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
0ab0: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
0ac0: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
0ad0: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
0ae0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
0af0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
0b00: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
0b10: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
0b20: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
0b30: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
0b40: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
0b50: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
0b60: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
0b70: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
0b80: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
0b90: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
0ba0: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
0bb0: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
0bc0: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
0bd0: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
0be0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
0bf0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
0c00: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
0c10: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
0c20: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
0c30: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
0c40: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
0c50: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
0c60: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
0c70: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
0c80: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
0c90: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
0ca0: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
0cb0: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
0cc0: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
0cd0: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
0ce0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
0cf0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
0d00: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
0d10: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
0d20: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
0d30: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
0d40: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
0d50: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
0d60: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
0d70: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
0d80: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
0d90: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
0da0: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
0db0: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
0dc0: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
0dd0: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
0de0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
0df0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
0e00: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
0e10: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
0e20: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
0e30: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
0e40: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
0e50: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
0e60: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
0e70: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
0e80: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
0e90: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
0ea0: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
0eb0: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
0ec0: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
0ed0: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
0ee0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
0ef0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
0f00: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
0f10: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
0f20: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
0f30: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
0f40: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
0f50: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
0f60: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
0f70: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
0f80: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
0f90: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
0fa0: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
0fb0: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
0fc0: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
0fd0: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
0fe0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
0ff0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
1000: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
1010: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
1020: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
1030: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1040: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1050: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1060: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1070: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1080: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1090: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
10a0: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
10b0: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
10c0: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
10d0: 0a 23 69 66 64 65 66 20 5f 48 41 56 45 5f 53 51  .#ifdef _HAVE_SQ
10e0: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48 0a 23 69  LITE_CONFIG_H.#i
10f0: 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e 68  nclude "config.h
1100: 22 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75  ".#endif..#inclu
1110: 64 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e  de "sqliteLimit.
1120: 68 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e  h"../* Disable n
1130: 75 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73  uisance warnings
1140: 20 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70   on Borland comp
1150: 69 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66  ilers */.#if def
1160: 69 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f  ined(__BORLANDC_
1170: 5f 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20  _).#pragma warn 
1180: 2d 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61  -rch /* unreacha
1190: 62 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61  ble code */.#pra
11a0: 67 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a  gma warn -ccc /*
11b0: 20 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c   Condition is al
11c0: 77 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c  ways true or fal
11d0: 73 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  se */.#pragma wa
11e0: 72 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67  rn -aus /* Assig
11f0: 6e 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76  ned value is nev
1200: 65 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67  er used */.#prag
1210: 6d 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20  ma warn -csu /* 
1220: 43 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64  Comparing signed
1230: 20 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f   and unsigned */
1240: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73  .#pragma warn -s
1250: 70 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73  pa /* Suspicious
1260: 20 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65   pointer arithme
1270: 74 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  tic */.#endif../
1280: 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 73 74 61  *.** Include sta
1290: 6e 64 61 72 64 20 68 65 61 64 65 72 20 66 69 6c  ndard header fil
12a0: 65 73 20 61 73 20 6e 65 63 65 73 73 61 72 79 0a  es as necessary.
12b0: 2a 2f 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53  */.#ifdef HAVE_S
12c0: 54 44 49 4e 54 5f 48 0a 23 69 6e 63 6c 75 64 65  TDINT_H.#include
12d0: 20 3c 73 74 64 69 6e 74 2e 68 3e 0a 23 65 6e 64   <stdint.h>.#end
12e0: 69 66 0a 23 69 66 64 65 66 20 48 41 56 45 5f 49  if.#ifdef HAVE_I
12f0: 4e 54 54 59 50 45 53 5f 48 0a 23 69 6e 63 6c 75  NTTYPES_H.#inclu
1300: 64 65 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e 0a  de <inttypes.h>.
1310: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1320: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
1330: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 63  os are used to c
1340: 61 73 74 20 70 6f 69 6e 74 65 72 73 20 74 6f 20  ast pointers to 
1350: 69 6e 74 65 67 65 72 73 20 61 6e 64 0a 2a 2a 20  integers and.** 
1360: 69 6e 74 65 67 65 72 73 20 74 6f 20 70 6f 69 6e  integers to poin
1370: 74 65 72 73 2e 20 20 54 68 65 20 77 61 79 20 79  ters.  The way y
1380: 6f 75 20 64 6f 20 74 68 69 73 20 76 61 72 69 65  ou do this varie
1390: 73 20 66 72 6f 6d 20 6f 6e 65 20 63 6f 6d 70 69  s from one compi
13a0: 6c 65 72 0a 2a 2a 20 74 6f 20 74 68 65 20 6e 65  ler.** to the ne
13b0: 78 74 2c 20 73 6f 20 77 65 20 68 61 76 65 20 64  xt, so we have d
13c0: 65 76 65 6c 6f 70 65 64 20 74 68 65 20 66 6f 6c  eveloped the fol
13d0: 6c 6f 77 69 6e 67 20 73 65 74 20 6f 66 20 23 69  lowing set of #i
13e0: 66 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20  f statements.** 
13f0: 74 6f 20 67 65 6e 65 72 61 74 65 20 61 70 70 72  to generate appr
1400: 6f 70 72 69 61 74 65 20 6d 61 63 72 6f 73 20 66  opriate macros f
1410: 6f 72 20 61 20 77 69 64 65 20 72 61 6e 67 65 20  or a wide range 
1420: 6f 66 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2a  of compilers..**
1430: 0a 2a 2a 20 54 68 65 20 63 6f 72 72 65 63 74 20  .** The correct 
1440: 22 41 4e 53 49 22 20 77 61 79 20 74 6f 20 64 6f  "ANSI" way to do
1450: 20 74 68 69 73 20 69 73 20 74 6f 20 75 73 65 20   this is to use 
1460: 74 68 65 20 69 6e 74 70 74 72 5f 74 20 74 79 70  the intptr_t typ
1470: 65 2e 20 0a 2a 2a 20 55 6e 66 6f 72 74 75 6e 61  e. .** Unfortuna
1480: 74 65 6c 79 2c 20 74 68 61 74 20 74 79 70 65 64  tely, that typed
1490: 65 66 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61  ef is not availa
14a0: 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f 6d 70 69  ble on all compi
14b0: 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69 66 20 69  lers, or.** if i
14c0: 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20  t is available, 
14d0: 69 74 20 72 65 71 75 69 72 65 73 20 61 6e 20 23  it requires an #
14e0: 69 6e 63 6c 75 64 65 20 6f 66 20 73 70 65 63 69  include of speci
14f0: 66 69 63 20 68 65 61 64 65 72 73 0a 2a 2a 20 74  fic headers.** t
1500: 68 61 74 20 76 61 72 79 20 66 72 6f 6d 20 6f 6e  hat vary from on
1510: 65 20 6d 61 63 68 69 6e 65 20 74 6f 20 74 68 65  e machine to the
1520: 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 54 69 63   next..**.** Tic
1530: 6b 65 74 20 23 33 38 36 30 3a 20 20 54 68 65 20  ket #3860:  The 
1540: 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20 63 6f 6d  llvm-gcc-4.2 com
1550: 70 69 6c 65 72 20 66 72 6f 6d 20 41 70 70 6c 65  piler from Apple
1560: 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a 20 74 68   chokes on.** th
1570: 65 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61  e ((void*)&((cha
1580: 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e 73 74 72  r*)0)[X]) constr
1590: 75 63 74 2e 20 20 42 75 74 20 4d 53 56 43 20 63  uct.  But MSVC c
15a0: 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f 69 64 2a  hokes on ((void*
15b0: 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20 77 65 20  )(X))..** So we 
15c0: 68 61 76 65 20 74 6f 20 64 65 66 69 6e 65 20 74  have to define t
15d0: 68 65 20 6d 61 63 72 6f 73 20 69 6e 20 64 69 66  he macros in dif
15e0: 66 65 72 65 6e 74 20 77 61 79 73 20 64 65 70 65  ferent ways depe
15f0: 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a 2a 2a 20  nding on the.** 
1600: 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a 23 69 66  compiler..*/.#if
1610: 20 64 65 66 69 6e 65 64 28 5f 5f 50 54 52 44 49   defined(__PTRDI
1620: 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20 54  FF_TYPE__)  /* T
1630: 68 69 73 20 63 61 73 65 20 73 68 6f 75 6c 64 20  his case should 
1640: 77 6f 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f 0a  work for GCC */.
1650: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1660: 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28  INT_TO_PTR(X)  (
1670: 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49 46  (void*)(__PTRDIF
1680: 46 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 20  F_TYPE__)(X)).# 
1690: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
16a0: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
16b0: 6e 74 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59  nt)(__PTRDIFF_TY
16c0: 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66 20  PE__)(X)).#elif 
16d0: 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f  !defined(__GNUC_
16e0: 5f 29 20 20 20 20 20 20 20 2f 2a 20 57 6f 72 6b  _)       /* Work
16f0: 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73 20  s for compilers 
1700: 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d 20  other than LLVM 
1710: 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  */.# define SQLI
1720: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29  TE_INT_TO_PTR(X)
1730: 20 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61    ((void*)&((cha
1740: 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64 65 66 69  r*)0)[X]).# defi
1750: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
1760: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
1770: 28 28 63 68 61 72 2a 29 58 29 2d 28 63 68 61 72  ((char*)X)-(char
1780: 2a 29 30 29 29 0a 23 65 6c 69 66 20 64 65 66 69  *)0)).#elif defi
1790: 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f  ned(HAVE_STDINT_
17a0: 48 29 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73  H)   /* Use this
17b0: 20 63 61 73 65 20 69 66 20 77 65 20 68 61 76 65   case if we have
17c0: 20 41 4e 53 49 20 68 65 61 64 65 72 73 20 2a 2f   ANSI headers */
17d0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
17e0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
17f0: 28 28 76 6f 69 64 2a 29 28 69 6e 74 70 74 72 5f  ((void*)(intptr_
1800: 74 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20  t)(X)).# define 
1810: 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e  SQLITE_PTR_TO_IN
1820: 54 28 58 29 20 20 28 28 69 6e 74 29 28 69 6e 74  T(X)  ((int)(int
1830: 70 74 72 5f 74 29 28 58 29 29 0a 23 65 6c 73 65  ptr_t)(X)).#else
1840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1850: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 47 65 6e            /* Gen
1860: 65 72 61 74 65 73 20 61 20 77 61 72 6e 69 6e 67  erates a warning
1870: 20 2d 20 62 75 74 20 69 74 20 61 6c 77 61 79 73   - but it always
1880: 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64 65 66 69   works */.# defi
1890: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
18a0: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
18b0: 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53  )(X)).# define S
18c0: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
18d0: 28 58 29 20 20 28 28 69 6e 74 29 28 58 29 29 0a  (X)  ((int)(X)).
18e0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20  #endif../*.** A 
18f0: 6d 61 63 72 6f 20 74 6f 20 68 69 6e 74 20 74 6f  macro to hint to
1900: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 68   the compiler th
1910: 61 74 20 61 20 66 75 6e 63 74 69 6f 6e 20 73 68  at a function sh
1920: 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 69  ould not be.** i
1930: 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  nlined..*/.#if d
1940: 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29  efined(__GNUC__)
1950: 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  .#  define SQLIT
1960: 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 61 74  E_NOINLINE  __at
1970: 74 72 69 62 75 74 65 5f 5f 28 28 6e 6f 69 6e 6c  tribute__((noinl
1980: 69 6e 65 29 29 0a 23 65 6c 69 66 20 64 65 66 69  ine)).#elif defi
1990: 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26  ned(_MSC_VER) &&
19a0: 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33 31 30 0a   _MSC_VER>=1310.
19b0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
19c0: 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 64 65 63  _NOINLINE  __dec
19d0: 6c 73 70 65 63 28 6e 6f 69 6e 6c 69 6e 65 29 0a  lspec(noinline).
19e0: 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
19f0: 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 0a  SQLITE_NOINLINE.
1a00: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
1a10: 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65  ke sure that the
1a20: 20 63 6f 6d 70 69 6c 65 72 20 69 6e 74 72 69 6e   compiler intrin
1a30: 73 69 63 73 20 77 65 20 64 65 73 69 72 65 20 61  sics we desire a
1a40: 72 65 20 65 6e 61 62 6c 65 64 20 77 68 65 6e 0a  re enabled when.
1a50: 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74  ** compiling wit
1a60: 68 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65  h an appropriate
1a70: 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53 56 43   version of MSVC
1a80: 20 75 6e 6c 65 73 73 20 70 72 65 76 65 6e 74 65   unless prevente
1a90: 64 20 62 79 0a 2a 2a 20 74 68 65 20 53 51 4c 49  d by.** the SQLI
1aa0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1ab0: 4e 53 49 43 20 64 65 66 69 6e 65 2e 0a 2a 2f 0a  NSIC define..*/.
1ac0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1ad0: 49 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52  ITE_DISABLE_INTR
1ae0: 49 4e 53 49 43 29 0a 23 20 20 69 66 20 64 65 66  INSIC).#  if def
1af0: 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20 26  ined(_MSC_VER) &
1b00: 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33 30 30  & _MSC_VER>=1300
1b10: 0a 23 20 20 20 20 69 66 20 21 64 65 66 69 6e 65  .#    if !define
1b20: 64 28 5f 57 49 4e 33 32 5f 57 43 45 29 0a 23 20  d(_WIN32_WCE).# 
1b30: 20 20 20 20 20 69 6e 63 6c 75 64 65 20 3c 69 6e       include <in
1b40: 74 72 69 6e 2e 68 3e 0a 23 20 20 20 20 20 20 70  trin.h>.#      p
1b50: 72 61 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28  ragma intrinsic(
1b60: 5f 62 79 74 65 73 77 61 70 5f 75 73 68 6f 72 74  _byteswap_ushort
1b70: 29 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  ).#      pragma 
1b80: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
1b90: 77 61 70 5f 75 6c 6f 6e 67 29 0a 23 20 20 20 20  wap_ulong).#    
1ba0: 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e 73    pragma intrins
1bb0: 69 63 28 5f 52 65 61 64 57 72 69 74 65 42 61 72  ic(_ReadWriteBar
1bc0: 72 69 65 72 29 0a 23 20 20 20 20 65 6c 73 65 0a  rier).#    else.
1bd0: 23 20 20 20 20 20 20 69 6e 63 6c 75 64 65 20 3c  #      include <
1be0: 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e 0a 23 20 20  cmnintrin.h>.#  
1bf0: 20 20 65 6e 64 69 66 0a 23 20 20 65 6e 64 69 66    endif.#  endif
1c00: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
1c10: 68 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  he SQLITE_THREAD
1c20: 53 41 46 45 20 6d 61 63 72 6f 20 6d 75 73 74 20  SAFE macro must 
1c30: 62 65 20 64 65 66 69 6e 65 64 20 61 73 20 30 2c  be defined as 0,
1c40: 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a 20 30 20 6d   1, or 2..** 0 m
1c50: 65 61 6e 73 20 6d 75 74 65 78 65 73 20 61 72 65  eans mutexes are
1c60: 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73   permanently dis
1c70: 61 62 6c 65 20 61 6e 64 20 74 68 65 20 6c 69 62  able and the lib
1c80: 72 61 72 79 20 69 73 20 6e 65 76 65 72 0a 2a 2a  rary is never.**
1c90: 20 74 68 72 65 61 64 73 61 66 65 2e 20 20 31 20   threadsafe.  1 
1ca0: 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72  means the librar
1cb0: 79 20 69 73 20 73 65 72 69 61 6c 69 7a 65 64 20  y is serialized 
1cc0: 77 68 69 63 68 20 69 73 20 74 68 65 20 68 69 67  which is the hig
1cd0: 68 65 73 74 0a 2a 2a 20 6c 65 76 65 6c 20 6f 66  hest.** level of
1ce0: 20 74 68 72 65 61 64 73 61 66 65 74 79 2e 20 20   threadsafety.  
1cf0: 32 20 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72  2 means the libr
1d00: 61 72 79 20 69 73 20 6d 75 6c 74 69 74 68 72 65  ary is multithre
1d10: 61 64 65 64 20 2d 20 6d 75 6c 74 69 70 6c 65 0a  aded - multiple.
1d20: 2a 2a 20 74 68 72 65 61 64 73 20 63 61 6e 20 75  ** threads can u
1d30: 73 65 20 53 51 4c 69 74 65 20 61 73 20 6c 6f 6e  se SQLite as lon
1d40: 67 20 61 73 20 6e 6f 20 74 77 6f 20 74 68 72 65  g as no two thre
1d50: 61 64 73 20 74 72 79 20 74 6f 20 75 73 65 20 74  ads try to use t
1d60: 68 65 20 73 61 6d 65 0a 2a 2a 20 64 61 74 61 62  he same.** datab
1d70: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  ase connection a
1d80: 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 2e  t the same time.
1d90: 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72 20 76 65 72  .**.** Older ver
1da0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
1db0: 75 73 65 64 20 61 6e 20 6f 70 74 69 6f 6e 61 6c  used an optional
1dc0: 20 54 48 52 45 41 44 53 41 46 45 20 6d 61 63 72   THREADSAFE macr
1dd0: 6f 2e 0a 2a 2a 20 57 65 20 73 75 70 70 6f 72 74  o..** We support
1de0: 20 74 68 61 74 20 66 6f 72 20 6c 65 67 61 63 79   that for legacy
1df0: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
1e00: 64 28 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  d(SQLITE_THREADS
1e10: 41 46 45 29 0a 23 20 69 66 20 64 65 66 69 6e 65  AFE).# if define
1e20: 64 28 54 48 52 45 41 44 53 41 46 45 29 0a 23 20  d(THREADSAFE).# 
1e30: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
1e40: 54 48 52 45 41 44 53 41 46 45 20 54 48 52 45 41  THREADSAFE THREA
1e50: 44 53 41 46 45 0a 23 20 65 6c 73 65 0a 23 20 20  DSAFE.# else.#  
1e60: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54   define SQLITE_T
1e70: 48 52 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49  HREADSAFE 1 /* I
1e80: 4d 50 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30  MP: R-07272-2230
1e90: 39 20 2a 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e  9 */.# endif.#en
1ea0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72  dif../*.** Power
1eb0: 73 61 66 65 20 6f 76 65 72 77 72 69 74 65 20 69  safe overwrite i
1ec0: 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e  s on by default.
1ed0: 20 20 42 75 74 20 63 61 6e 20 62 65 20 74 75 72    But can be tur
1ee0: 6e 65 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a  ned off using.**
1ef0: 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f   the -DSQLITE_PO
1f00: 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54  WERSAFE_OVERWRIT
1f10: 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  E=0 command-line
1f20: 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e   option..*/.#ifn
1f30: 64 65 66 20 53 51 4c 49 54 45 5f 50 4f 57 45 52  def SQLITE_POWER
1f40: 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 0a 23  SAFE_OVERWRITE.#
1f50: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
1f60: 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49  OWERSAFE_OVERWRI
1f70: 54 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  TE 1.#endif../*.
1f80: 2a 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  ** EVIDENCE-OF: 
1f90: 52 2d 32 35 37 31 35 2d 33 37 30 37 32 20 4d 65  R-25715-37072 Me
1fa0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1fb0: 73 74 61 74 69 73 74 69 63 73 20 61 72 65 20 65  statistics are e
1fc0: 6e 61 62 6c 65 64 20 62 79 0a 2a 2a 20 64 65 66  nabled by.** def
1fd0: 61 75 6c 74 20 75 6e 6c 65 73 73 20 53 51 4c 69  ault unless SQLi
1fe0: 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77  te is compiled w
1ff0: 69 74 68 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ith SQLITE_DEFAU
2000: 4c 54 5f 4d 45 4d 53 54 41 54 55 53 3d 30 20 69  LT_MEMSTATUS=0 i
2010: 6e 0a 2a 2a 20 77 68 69 63 68 20 63 61 73 65 20  n.** which case 
2020: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
2030: 6e 20 73 74 61 74 69 73 74 69 63 73 20 61 72 65  n statistics are
2040: 20 64 69 73 61 62 6c 65 64 20 62 79 20 64 65 66   disabled by def
2050: 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  ault..*/.#if !de
2060: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 46  fined(SQLITE_DEF
2070: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a  AULT_MEMSTATUS).
2080: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
2090: 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55  DEFAULT_MEMSTATU
20a0: 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  S 1.#endif../*.*
20b0: 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66  * Exactly one of
20c0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   the following m
20d0: 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20 64 65  acros must be de
20e0: 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72 20 74  fined in order t
20f0: 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77 68 69  o.** specify whi
2100: 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ch memory alloca
2110: 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d 20 74  tion subsystem t
2120: 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  o use..**.**    
2130: 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d   SQLITE_SYSTEM_M
2140: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 2f  ALLOC          /
2150: 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73  / Use normal sys
2160: 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20  tem malloc().** 
2170: 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e 33 32      SQLITE_WIN32
2180: 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20  _MALLOC         
2190: 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32 20 6e    // Use Win32 n
21a0: 61 74 69 76 65 20 68 65 61 70 20 41 50 49 0a 2a  ative heap API.*
21b0: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a 45 52  *     SQLITE_ZER
21c0: 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20  O_MALLOC        
21d0: 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73 74 75      // Use a stu
21e0: 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74  b allocator that
21f0: 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a   always fails.**
2200: 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44       SQLITE_MEMD
2210: 45 42 55 47 20 20 20 20 20 20 20 20 20 20 20 20  EBUG            
2220: 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e 67 20     // Debugging 
2230: 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73 74 65  version of syste
2240: 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a  m malloc().**.**
2250: 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69 66 20   On Windows, if 
2260: 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e 33 32  the SQLITE_WIN32
2270: 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45  _MALLOC_VALIDATE
2280: 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65   macro is define
2290: 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73  d and the.** ass
22a0: 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73 20 65  ert() macro is e
22b0: 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63 61 6c  nabled, each cal
22c0: 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e 33 32  l into the Win32
22d0: 20 6e 61 74 69 76 65 20 68 65 61 70 20 73 75 62   native heap sub
22e0: 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63  system.** will c
22f0: 61 75 73 65 20 48 65 61 70 56 61 6c 69 64 61 74  ause HeapValidat
2300: 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20  e to be called. 
2310: 20 49 66 20 68 65 61 70 20 76 61 6c 69 64 61 74   If heap validat
2320: 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c  ion should fail,
2330: 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e   an.** assertion
2340: 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67 65 72   will be trigger
2350: 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e  ed..**.** If non
2360: 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61  e of the above a
2370: 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e  re defined, then
2380: 20 73 65 74 20 53 51 4c 49 54 45 5f 53 59 53 54   set SQLITE_SYST
2390: 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20  EM_MALLOC as.** 
23a0: 74 68 65 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a  the default..*/.
23b0: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
23c0: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
23d0: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
23e0: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
23f0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2400: 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  ed(SQLITE_ZERO_M
2410: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2420: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44  ined(SQLITE_MEMD
2430: 45 42 55 47 29 3e 31 0a 23 20 65 72 72 6f 72 20  EBUG)>1.# error 
2440: 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20  "Two or more of 
2450: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  the following co
2460: 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69  mpile-time confi
2470: 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73  guration options
2480: 5c 0a 20 61 72 65 20 64 65 66 69 6e 65 64 20 62  \. are defined b
2490: 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69  ut at most one i
24a0: 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c  s allowed:\. SQL
24b0: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
24c0: 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  C, SQLITE_WIN32_
24d0: 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d  MALLOC, SQLITE_M
24e0: 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54  EMDEBUG,\. SQLIT
24f0: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23  E_ZERO_MALLOC".#
2500: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
2510: 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  d(SQLITE_SYSTEM_
2520: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2530: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e  fined(SQLITE_WIN
2540: 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  32_MALLOC) \.  +
2550: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2560: 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  ZERO_MALLOC) \. 
2570: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
2580: 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23  E_MEMDEBUG)==0.#
2590: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53   define SQLITE_S
25a0: 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23  YSTEM_MALLOC 1.#
25b0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  endif../*.** If 
25c0: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
25d0: 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20  FT_LIMIT is not 
25e0: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79 20 74  zero, then try t
25f0: 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20 73 69  o keep the.** si
2600: 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c  zes of memory al
2610: 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20  locations below 
2620: 74 68 69 73 20 76 61 6c 75 65 20 77 68 65 72 65  this value where
2630: 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69   possible..*/.#i
2640: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2650: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
2660: 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20 53 51  MIT).# define SQ
2670: 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54  LITE_MALLOC_SOFT
2680: 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65 6e 64  _LIMIT 1024.#end
2690: 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65  if../*.** We nee
26a0: 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50  d to define _XOP
26b0: 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66 6f 6c  EN_SOURCE as fol
26c0: 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f  lows in order to
26d0: 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72   enable.** recur
26e0: 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f 6e 20  sive mutexes on 
26f0: 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74 65 6d  most Unix system
2700: 73 20 61 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f  s and fchmod() o
2710: 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75  n OpenBSD..** Bu
2720: 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20  t _XOPEN_SOURCE 
2730: 64 65 66 69 6e 65 20 63 61 75 73 65 73 20 70 72  define causes pr
2740: 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f  oblems for Mac O
2750: 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20  S X, so omit.** 
2760: 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  it..*/.#if !defi
2770: 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  ned(_XOPEN_SOURC
2780: 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  E) && !defined(_
2790: 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20 21 64  _DARWIN__) && !d
27a0: 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f  efined(__APPLE__
27b0: 29 0a 23 20 20 64 65 66 69 6e 65 20 5f 58 4f 50  ).#  define _XOP
27c0: 45 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a 23 65  EN_SOURCE 600.#e
27d0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42  ndif../*.** NDEB
27e0: 55 47 20 61 6e 64 20 53 51 4c 49 54 45 5f 44 45  UG and SQLITE_DE
27f0: 42 55 47 20 61 72 65 20 6f 70 70 6f 73 69 74 65  BUG are opposite
2800: 73 2e 20 20 49 74 20 73 68 6f 75 6c 64 20 61 6c  s.  It should al
2810: 77 61 79 73 20 62 65 20 74 72 75 65 20 74 68 61  ways be true tha
2820: 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e 44 45  t.** defined(NDE
2830: 42 55 47 29 3d 3d 21 64 65 66 69 6e 65 64 28 53  BUG)==!defined(S
2840: 51 4c 49 54 45 5f 44 45 42 55 47 29 2e 20 20 49  QLITE_DEBUG).  I
2850: 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20 63 75  f this is not cu
2860: 72 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a  rrently true,.**
2870: 20 6d 61 6b 65 20 69 74 20 74 72 75 65 20 62 79   make it true by
2880: 20 64 65 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64   defining or und
2890: 65 66 69 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a  efining NDEBUG..
28a0: 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44  **.** Setting ND
28b0: 45 42 55 47 20 6d 61 6b 65 73 20 74 68 65 20 63  EBUG makes the c
28c0: 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20  ode smaller and 
28d0: 66 61 73 74 65 72 20 62 79 20 64 69 73 61 62 6c  faster by disabl
28e0: 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73 65 72  ing the.** asser
28f0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69  t() statements i
2900: 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53 6f 20  n the code.  So 
2910: 77 65 20 77 61 6e 74 20 74 68 65 20 64 65 66 61  we want the defa
2920: 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ult action.** to
2930: 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47 20 74   be for NDEBUG t
2940: 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e 44 45  o be set and NDE
2950: 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65 66 69  BUG to be undefi
2960: 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49  ned only if SQLI
2970: 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73 20 73  TE_DEBUG.** is s
2980: 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42 55 47  et.  Thus NDEBUG
2990: 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d   becomes an opt-
29a0: 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e 20 61  in rather than a
29b0: 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61  n opt-out.** fea
29c0: 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  ture..*/.#if !de
29d0: 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26  fined(NDEBUG) &&
29e0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
29f0: 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66 69 6e  _DEBUG) .# defin
2a00: 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e 64 69  e NDEBUG 1.#endi
2a10: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 4e 44  f.#if defined(ND
2a20: 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65 64  EBUG) && defined
2a30: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 23  (SQLITE_DEBUG).#
2a40: 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 65   undef NDEBUG.#e
2a50: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62  ndif../*.** Enab
2a60: 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  le SQLITE_ENABLE
2a70: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
2a80: 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  S if SQLITE_DEBU
2a90: 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a  G is turned on..
2aa0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2ab0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
2ac0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20  PLAIN_COMMENTS) 
2ad0: 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
2ae0: 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e  E_DEBUG).# defin
2af0: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
2b00: 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53  EXPLAIN_COMMENTS
2b10: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
2b20: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
2b30: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f  macro is used to
2b40: 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61 67 65   aid in coverage
2b50: 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65 6e 20   testing.  When 
2b60: 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65 72 61  .** doing covera
2b70: 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68 65 20  ge testing, the 
2b80: 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69 64 65  condition inside
2b90: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
2ba0: 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29 20 6d  .** testcase() m
2bb0: 75 73 74 20 62 65 20 65 76 61 6c 75 61 74 65 64  ust be evaluated
2bc0: 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64 20 66   both true and f
2bd0: 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  alse in order to
2be0: 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62 72 61  .** get full bra
2bf0: 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20 20 54  nch coverage.  T
2c00: 68 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61  he testcase() ma
2c10: 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65 64 0a  cro is inserted.
2c20: 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73 75 72  ** to help ensur
2c30: 65 20 61 64 65 71 75 61 74 65 20 74 65 73 74 20  e adequate test 
2c40: 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c 61 63  coverage in plac
2c50: 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c 65 0a  es where simple.
2c60: 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63  ** condition/dec
2c70: 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65 20 69  ision coverage i
2c80: 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20 20 46  s inadequate.  F
2c90: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65 73 74  or example, test
2ca0: 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65  case().** can be
2cb0: 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75   used to make su
2cc0: 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61 6c 75  re boundary valu
2cd0: 65 73 20 61 72 65 20 74 65 73 74 65 64 2e 20 20  es are tested.  
2ce0: 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74  For.** bitmask t
2cf0: 65 73 74 73 2c 20 74 65 73 74 63 61 73 65 28 29  ests, testcase()
2d00: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
2d10: 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68 20 62  make sure each b
2d20: 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69 66 69  it.** is signifi
2d30: 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20 61 74  cant and used at
2d40: 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e   least once.  On
2d50: 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
2d60: 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74  ts.** where mult
2d70: 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20 74 6f  iple cases go to
2d80: 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20   the same block 
2d90: 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63 61 73  of code, testcas
2da0: 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72  e().** can insur
2db0: 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73 65 73  e that all cases
2dc0: 20 61 72 65 20 65 76 61 6c 75 61 74 65 64 2e 0a   are evaluated..
2dd0: 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  **.*/.#ifdef SQL
2de0: 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53  ITE_COVERAGE_TES
2df0: 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
2e00: 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b 0a 23  Coverage(int);.#
2e10: 20 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65   define testcase
2e20: 28 58 29 20 20 69 66 28 20 58 20 29 7b 20 73 71  (X)  if( X ){ sq
2e30: 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28 5f 5f  lite3Coverage(__
2e40: 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65  LINE__); }.#else
2e50: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
2e60: 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  se(X).#endif../*
2e70: 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e 4c 59  .** The TESTONLY
2e80: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74   macro is used t
2e90: 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69 61 62  o enclose variab
2ea0: 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  le declarations 
2eb0: 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69 74 73  or.** other bits
2ec0: 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20 61 72   of code that ar
2ed0: 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75 70 70  e needed to supp
2ee0: 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74  ort the argument
2ef0: 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65 73 74  s.** within test
2f00: 63 61 73 65 28 29 20 61 6e 64 20 61 73 73 65 72  case() and asser
2f10: 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23  t() macros..*/.#
2f20: 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42  if !defined(NDEB
2f30: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UG) || defined(S
2f40: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
2f50: 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20 54 45  EST).# define TE
2f60: 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  STONLY(X)  X.#el
2f70: 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54  se.# define TEST
2f80: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
2f90: 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20  /*.** Sometimes 
2fa0: 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20  we need a small 
2fb0: 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65 20 73  amount of code s
2fc0: 75 63 68 20 61 73 20 61 20 76 61 72 69 61 62 6c  uch as a variabl
2fd0: 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
2fe0: 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66 6f 72  .** to setup for
2ff0: 20 61 20 6c 61 74 65 72 20 61 73 73 65 72 74 28   a later assert(
3000: 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 57 65  ) statement.  We
3010: 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 68 69   do not want thi
3020: 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70  s code to.** app
3030: 65 61 72 20 77 68 65 6e 20 61 73 73 65 72 74 28  ear when assert(
3040: 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e 20 20  ) is disabled.  
3050: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
3060: 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f 72 65  cro is therefore
3070: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f 6e 74  .** used to cont
3080: 61 69 6e 20 74 68 61 74 20 73 65 74 75 70 20 63  ain that setup c
3090: 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41 22 20  ode.  The "VVA" 
30a0: 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66  acronym stands f
30b0: 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63 61 74  or.** "Verificat
30c0: 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c  ion, Validation,
30d0: 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69   and Accreditati
30e0: 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  on".  In other w
30f0: 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64  ords, the.** cod
3100: 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c  e within VVA_ONL
3110: 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75  Y() will only ru
3120: 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66 69 63  n during verific
3130: 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e  ation processes.
3140: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42  .*/.#ifndef NDEB
3150: 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  UG.# define VVA_
3160: 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65  ONLY(X)  X.#else
3170: 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e  .# define VVA_ON
3180: 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LY(X).#endif../*
3190: 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53 20 61  .** The ALWAYS a
31a0: 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f 73 20  nd NEVER macros 
31b0: 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e  surround boolean
31c0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77 68 69   expressions whi
31d0: 63 68 20 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e  ch .** are inten
31e0: 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20 62 65  ded to always be
31f0: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2c 20   true or false, 
3200: 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53  respectively.  S
3210: 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  uch.** expressio
3220: 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74  ns could be omit
3230: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63 6f 64  ted from the cod
3240: 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42  e completely.  B
3250: 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65 20 69  ut they.** are i
3260: 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66 65 77  ncluded in a few
3270: 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65 72 20   cases in order 
3280: 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65 20 72  to enhance the r
3290: 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20  esilience.** of 
32a0: 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78 70 65  SQLite to unexpe
32b0: 63 74 65 64 20 62 65 68 61 76 69 6f 72 20 2d 20  cted behavior - 
32c0: 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 64 65  to make the code
32d0: 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a   "self-healing".
32e0: 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65 22 20  ** or "ductile" 
32f0: 72 61 74 68 65 72 20 74 68 61 6e 20 62 65 69 6e  rather than bein
3300: 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e 64 20  g "brittle" and 
3310: 63 72 61 73 68 69 6e 67 20 61 74 20 74 68 65 20  crashing at the 
3320: 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66  first.** hint of
3330: 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61 76   unplanned behav
3340: 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74  ior..**.** In ot
3350: 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57 41 59  her words, ALWAY
3360: 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20  S and NEVER are 
3370: 61 64 64 65 64 20 66 6f 72 20 64 65 66 65 6e 73  added for defens
3380: 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  ive code..**.** 
3390: 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72  When doing cover
33a0: 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c 57 41  age testing ALWA
33b0: 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65  YS and NEVER are
33c0: 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a   hard-coded to.*
33d0: 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20 66 61  * be true and fa
33e0: 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68 65 20  lse so that the 
33f0: 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64 65  unreachable code
3400: 20 74 68 65 79 20 73 70 65 63 69 66 79 20 77 69   they specify wi
3410: 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75  ll.** not be cou
3420: 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74 65 64  nted as untested
3430: 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65   code..*/.#if de
3440: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56  fined(SQLITE_COV
3450: 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64 65  ERAGE_TEST).# de
3460: 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20  fine ALWAYS(X)  
3470: 20 20 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65      (1).# define
3480: 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20   NEVER(X)       
3490: 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  (0).#elif !defin
34a0: 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65 66  ed(NDEBUG).# def
34b0: 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20  ine ALWAYS(X)   
34c0: 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73 65 72     ((X)?1:(asser
34d0: 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66 69 6e  t(0),0)).# defin
34e0: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
34f0: 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29   ((X)?(assert(0)
3500: 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64  ,1):0).#else.# d
3510: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
3520: 20 20 20 20 20 28 58 29 0a 23 20 64 65 66 69 6e       (X).# defin
3530: 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20  e NEVER(X)      
3540: 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a   (X).#endif../*.
3550: 2a 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20  ** Declarations 
3560: 75 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67  used for tracing
3570: 20 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73   the operating s
3580: 79 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73  ystem interfaces
3590: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
35a0: 28 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53  (SQLITE_FORCE_OS
35b0: 5f 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e  _TRACE) || defin
35c0: 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20  ed(SQLITE_TEST) 
35d0: 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65  || \.    (define
35e0: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
35f0: 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  && SQLITE_OS_WIN
3600: 29 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ).  extern int s
3610: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23  qlite3OSTrace;.#
3620: 20 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28   define OSTRACE(
3630: 58 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20  X)          if( 
3640: 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29  sqlite3OSTrace )
3650: 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
3660: 6e 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53  ntf X.# define S
3670: 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52  QLITE_HAVE_OS_TR
3680: 41 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  ACE.#else.# defi
3690: 6e 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20  ne OSTRACE(X).# 
36a0: 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41  undef  SQLITE_HA
36b0: 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64  VE_OS_TRACE.#end
36c0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65  if../*.** Is the
36d0: 20 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28   sqlite3ErrName(
36e0: 29 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65  ) function neede
36f0: 64 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20  d in the build? 
3700: 20 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69   Currently,.** i
3710: 74 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22  t is needed by "
3720: 6d 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68  mutex_w32.c" (wh
3730: 65 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22  en debugging), "
3740: 6f 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a  os_win.c" (when.
3750: 2a 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e  ** OSTRACE is en
3760: 61 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73  abled), and by s
3770: 65 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22  everal "test*.c"
3780: 20 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72   files (which ar
3790: 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73  e.** compiled us
37a0: 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29  ing SQLITE_TEST)
37b0: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
37c0: 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f  (SQLITE_HAVE_OS_
37d0: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
37e0: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
37f0: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
3800: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
3810: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
3820: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
3830: 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23  _NEED_ERR_NAME.#
3840: 65 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51  else.# undef  SQ
3850: 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41  LITE_NEED_ERR_NA
3860: 4d 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ME.#endif../*.**
3870: 20 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f   Return true (no
3880: 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 69  n-zero) if the i
3890: 6e 70 75 74 20 69 73 20 61 6e 20 69 6e 74 65 67  nput is an integ
38a0: 65 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c  er that is too l
38b0: 61 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69  arge.** to fit i
38c0: 6e 20 33 32 2d 62 69 74 73 2e 20 20 54 68 69 73  n 32-bits.  This
38d0: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69   macro is used i
38e0: 6e 73 69 64 65 20 6f 66 20 76 61 72 69 6f 75 73  nside of various
38f0: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d   testcase().** m
3900: 61 63 72 6f 73 20 74 6f 20 76 65 72 69 66 79 20  acros to verify 
3910: 74 68 61 74 20 77 65 20 68 61 76 65 20 74 65 73  that we have tes
3920: 74 65 64 20 53 51 4c 69 74 65 20 66 6f 72 20 6c  ted SQLite for l
3930: 61 72 67 65 2d 66 69 6c 65 20 73 75 70 70 6f 72  arge-file suppor
3940: 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53  t..*/.#define IS
3950: 5f 42 49 47 5f 49 4e 54 28 58 29 20 20 28 28 28  _BIG_INT(X)  (((
3960: 58 29 26 7e 28 69 36 34 29 30 78 66 66 66 66 66  X)&~(i64)0xfffff
3970: 66 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  fff)!=0)../*.** 
3980: 54 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65  The macro unlike
3990: 6c 79 28 29 20 69 73 20 61 20 68 69 6e 74 20 74  ly() is a hint t
39a0: 68 61 74 20 73 75 72 72 6f 75 6e 64 73 20 61 20  hat surrounds a 
39b0: 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65  boolean.** expre
39c0: 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73  ssion that is us
39d0: 75 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61  ually false.  Ma
39e0: 63 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75 72  cro likely() sur
39f0: 72 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c  rounds.** a bool
3a00: 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74  ean expression t
3a10: 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74  hat is usually t
3a20: 72 75 65 2e 20 20 54 68 65 73 65 20 68 69 6e 74  rue.  These hint
3a30: 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74  s could,.** in t
3a40: 68 65 6f 72 79 2c 20 62 65 20 75 73 65 64 20 62  heory, be used b
3a50: 79 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74  y the compiler t
3a60: 6f 20 67 65 6e 65 72 61 74 65 20 62 65 74 74 65  o generate bette
3a70: 72 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a 20 63  r code, but.** c
3a80: 75 72 72 65 6e 74 6c 79 20 74 68 65 79 20 61 72  urrently they ar
3a90: 65 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74 73 20  e just comments 
3aa0: 66 6f 72 20 68 75 6d 61 6e 20 72 65 61 64 65 72  for human reader
3ab0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 6c 69  s..*/.#define li
3ac0: 6b 65 6c 79 28 58 29 20 20 20 20 28 58 29 0a 23  kely(X)    (X).#
3ad0: 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28  define unlikely(
3ae0: 58 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c 75 64  X)  (X)..#includ
3af0: 65 20 22 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c  e "hash.h".#incl
3b00: 75 64 65 20 22 70 61 72 73 65 2e 68 22 0a 23 69  ude "parse.h".#i
3b10: 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e  nclude <stdio.h>
3b20: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69  .#include <stdli
3b30: 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73  b.h>.#include <s
3b40: 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64  tring.h>.#includ
3b50: 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e  e <assert.h>.#in
3b60: 63 6c 75 64 65 20 3c 73 74 64 64 65 66 2e 68 3e  clude <stddef.h>
3b70: 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69  ../*.** If compi
3b80: 6c 69 6e 67 20 66 6f 72 20 61 20 70 72 6f 63 65  ling for a proce
3b90: 73 73 6f 72 20 74 68 61 74 20 6c 61 63 6b 73 20  ssor that lacks 
3ba0: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 73  floating point s
3bb0: 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74  upport,.** subst
3bc0: 69 74 75 74 65 20 69 6e 74 65 67 65 72 20 66 6f  itute integer fo
3bd0: 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74  r floating-point
3be0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
3bf0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
3c00: 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 64  POINT.# define d
3c10: 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74  ouble sqlite_int
3c20: 36 34 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f 61  64.# define floa
3c30: 74 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23  t sqlite_int64.#
3c40: 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42   define LONGDOUB
3c50: 4c 45 5f 54 59 50 45 20 73 71 6c 69 74 65 5f 69  LE_TYPE sqlite_i
3c60: 6e 74 36 34 0a 23 20 69 66 6e 64 65 66 20 53 51  nt64.# ifndef SQ
3c70: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20  LITE_BIG_DBL.#  
3c80: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
3c90: 49 47 5f 44 42 4c 20 28 28 28 73 71 6c 69 74 65  IG_DBL (((sqlite
3ca0: 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a  3_int64)1)<<50).
3cb0: 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65  # endif.# define
3cc0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54   SQLITE_OMIT_DAT
3cd0: 45 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20  ETIME_FUNCS 1.# 
3ce0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d  define SQLITE_OM
3cf0: 49 54 5f 54 52 41 43 45 20 31 0a 23 20 75 6e 64  IT_TRACE 1.# und
3d00: 65 66 20 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f  ef SQLITE_MIXED_
3d10: 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f  ENDIAN_64BIT_FLO
3d20: 41 54 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  AT.# undef SQLIT
3d30: 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e  E_HAVE_ISNAN.#en
3d40: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
3d50: 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65 66  TE_BIG_DBL.# def
3d60: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  ine SQLITE_BIG_D
3d70: 42 4c 20 28 31 65 39 39 29 0a 23 65 6e 64 69 66  BL (1e99).#endif
3d80: 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d  ../*.** OMIT_TEM
3d90: 50 44 42 20 69 73 20 73 65 74 20 74 6f 20 31 20  PDB is set to 1 
3da0: 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  if SQLITE_OMIT_T
3db0: 45 4d 50 44 42 20 69 73 20 64 65 66 69 6e 65 64  EMPDB is defined
3dc0: 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72 77  , or 0.** afterw
3dd0: 61 72 64 2e 20 48 61 76 69 6e 67 20 74 68 69 73  ard. Having this
3de0: 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73   macro allows us
3df0: 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 43 20   to cause the C 
3e00: 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20 74 6f 20  compiler .** to 
3e10: 6f 6d 69 74 20 63 6f 64 65 20 75 73 65 64 20 62  omit code used b
3e20: 79 20 54 45 4d 50 20 74 61 62 6c 65 73 20 77 69  y TEMP tables wi
3e30: 74 68 6f 75 74 20 6d 65 73 73 79 20 23 69 66 6e  thout messy #ifn
3e40: 64 65 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  def statements..
3e50: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
3e60: 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64 65  _OMIT_TEMPDB.#de
3e70: 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42  fine OMIT_TEMPDB
3e80: 20 31 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65   1.#else.#define
3e90: 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a 23   OMIT_TEMPDB 0.#
3ea0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
3eb0: 20 22 66 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e   "file format" n
3ec0: 75 6d 62 65 72 20 69 73 20 61 6e 20 69 6e 74 65  umber is an inte
3ed0: 67 65 72 20 74 68 61 74 20 69 73 20 69 6e 63 72  ger that is incr
3ee0: 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72  emented whenever
3ef0: 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c 65 76  .** the VDBE-lev
3f00: 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 63  el file format c
3f10: 68 61 6e 67 65 73 2e 20 20 54 68 65 20 66 6f 6c  hanges.  The fol
3f20: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 64 65  lowing macros de
3f30: 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65 20  fine the.** the 
3f40: 64 65 66 61 75 6c 74 20 66 69 6c 65 20 66 6f 72  default file for
3f50: 6d 61 74 20 66 6f 72 20 6e 65 77 20 64 61 74 61  mat for new data
3f60: 62 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61  bases and the ma
3f70: 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61  ximum file forma
3f80: 74 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 69  t.** that the li
3f90: 62 72 61 72 79 20 63 61 6e 20 72 65 61 64 2e 0a  brary can read..
3fa0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
3fb0: 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41  E_MAX_FILE_FORMA
3fc0: 54 20 34 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  T 4.#ifndef SQLI
3fd0: 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f  TE_DEFAULT_FILE_
3fe0: 46 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e 65 20  FORMAT.# define 
3ff0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46  SQLITE_DEFAULT_F
4000: 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e  ILE_FORMAT 4.#en
4010: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72  dif../*.** Deter
4020: 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 72 69  mine whether tri
4030: 67 67 65 72 73 20 61 72 65 20 72 65 63 75 72 73  ggers are recurs
4040: 69 76 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20  ive by default. 
4050: 20 54 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20   This can be.** 
4060: 63 68 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74  changed at run-t
4070: 69 6d 65 20 75 73 69 6e 67 20 61 20 70 72 61 67  ime using a prag
4080: 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ma..*/.#ifndef S
4090: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45  QLITE_DEFAULT_RE
40a0: 43 55 52 53 49 56 45 5f 54 52 49 47 47 45 52 53  CURSIVE_TRIGGERS
40b0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
40c0: 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49  _DEFAULT_RECURSI
40d0: 56 45 5f 54 52 49 47 47 45 52 53 20 30 0a 23 65  VE_TRIGGERS 0.#e
40e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76  ndif../*.** Prov
40f0: 69 64 65 20 61 20 64 65 66 61 75 6c 74 20 76 61  ide a default va
4100: 6c 75 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 54  lue for SQLITE_T
4110: 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63 61 73  EMP_STORE in cas
4120: 65 20 69 74 20 69 73 20 6e 6f 74 20 73 70 65 63  e it is not spec
4130: 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20  ified.** on the 
4140: 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a  command-line.*/.
4150: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 54  #ifndef SQLITE_T
4160: 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65 66 69  EMP_STORE.# defi
4170: 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53  ne SQLITE_TEMP_S
4180: 54 4f 52 45 20 31 0a 23 20 64 65 66 69 6e 65 20  TORE 1.# define 
4190: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
41a0: 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c 75  E_xc 1  /* Exclu
41b0: 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20  de from ctime.c 
41c0: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  */.#endif../*.**
41d0: 20 49 66 20 6e 6f 20 76 61 6c 75 65 20 68 61 73   If no value has
41e0: 20 62 65 65 6e 20 70 72 6f 76 69 64 65 64 20 66   been provided f
41f0: 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  or SQLITE_MAX_WO
4200: 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 6f 72  RKER_THREADS, or
4210: 20 69 66 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45   if.** SQLITE_TE
4220: 4d 50 5f 53 54 4f 52 45 20 69 73 20 73 65 74 20  MP_STORE is set 
4230: 74 6f 20 33 20 28 6e 65 76 65 72 20 75 73 65 20  to 3 (never use 
4240: 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 29  temporary files)
4250: 2c 20 73 65 74 20 69 74 20 0a 2a 2a 20 74 6f 20  , set it .** to 
4260: 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  zero..*/.#if SQL
4270: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  ITE_TEMP_STORE==
4280: 33 20 7c 7c 20 53 51 4c 49 54 45 5f 54 48 52 45  3 || SQLITE_THRE
4290: 41 44 53 41 46 45 3d 3d 30 0a 23 20 75 6e 64 65  ADSAFE==0.# unde
42a0: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
42b0: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
42c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
42d0: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30  WORKER_THREADS 0
42e0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
42f0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
4300: 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69  R_THREADS.# defi
4310: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  ne SQLITE_MAX_WO
4320: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 38 0a 23  RKER_THREADS 8.#
4330: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
4340: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52  LITE_DEFAULT_WOR
4350: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
4360: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
4370: 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  ULT_WORKER_THREA
4380: 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20  DS 0.#endif.#if 
4390: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
43a0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 53 51  ORKER_THREADS>SQ
43b0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
43c0: 54 48 52 45 41 44 53 0a 23 20 75 6e 64 65 66 20  THREADS.# undef 
43d0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
43e0: 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69  R_THREADS.# defi
43f0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  ne SQLITE_MAX_WO
4400: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 53 51 4c  RKER_THREADS SQL
4410: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
4420: 45 52 5f 54 48 52 45 41 44 53 0a 23 65 6e 64 69  ER_THREADS.#endi
4430: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66  f../*.** The def
4440: 61 75 6c 74 20 69 6e 69 74 69 61 6c 20 61 6c 6c  ault initial all
4450: 6f 63 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20  ocation for the 
4460: 70 61 67 65 63 61 63 68 65 20 77 68 65 6e 20 75  pagecache when u
4470: 73 69 6e 67 20 73 65 70 61 72 61 74 65 0a 2a 2a  sing separate.**
4480: 20 70 61 67 65 63 61 63 68 65 73 20 66 6f 72 20   pagecaches for 
4490: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
44a0: 6e 6e 65 63 74 69 6f 6e 2e 20 20 41 20 70 6f 73  nnection.  A pos
44b0: 69 74 69 76 65 20 6e 75 6d 62 65 72 20 69 73 20  itive number is 
44c0: 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  the.** number of
44d0: 20 70 61 67 65 73 2e 20 20 41 20 6e 65 67 61 74   pages.  A negat
44e0: 69 76 65 20 6e 75 6d 62 65 72 20 4e 20 74 72 61  ive number N tra
44f0: 6e 73 6c 61 74 69 6f 6e 73 20 6d 65 61 6e 73 20  nslations means 
4500: 74 68 61 74 20 61 20 62 75 66 66 65 72 0a 2a 2a  that a buffer.**
4510: 20 6f 66 20 2d 31 30 32 34 2a 4e 20 62 79 74 65   of -1024*N byte
4520: 73 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 61  s is allocated a
4530: 6e 64 20 75 73 65 64 20 66 6f 72 20 61 73 20 6d  nd used for as m
4540: 61 6e 79 20 70 61 67 65 73 20 61 73 20 69 74 20  any pages as it 
4550: 77 69 6c 6c 20 68 6f 6c 64 2e 0a 2a 2f 0a 23 69  will hold..*/.#i
4560: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
4570: 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49 54  AULT_PCACHE_INIT
4580: 53 5a 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  SZ.# define SQLI
4590: 54 45 5f 44 45 46 41 55 4c 54 5f 50 43 41 43 48  TE_DEFAULT_PCACH
45a0: 45 5f 49 4e 49 54 53 5a 20 31 30 30 0a 23 65 6e  E_INITSZ 100.#en
45b0: 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20  dif.../*.** GCC 
45c0: 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20  does not define 
45d0: 74 68 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d  the offsetof() m
45e0: 61 63 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61  acro so we'll ha
45f0: 76 65 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f  ve to do it.** o
4600: 75 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66  urselves..*/.#if
4610: 6e 64 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64  ndef offsetof.#d
4620: 65 66 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53  efine offsetof(S
4630: 54 52 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20  TRUCTURE,FIELD) 
4640: 28 28 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28  ((int)((char*)&(
4650: 28 53 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e  (STRUCTURE*)0)->
4660: 46 49 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a  FIELD)).#endif..
4670: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
4680: 63 6f 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20  compute minimum 
4690: 61 6e 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74  and maximum of t
46a0: 77 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23  wo numbers..*/.#
46b0: 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29 20  define MIN(A,B) 
46c0: 28 28 41 29 3c 28 42 29 3f 28 41 29 3a 28 42 29  ((A)<(B)?(A):(B)
46d0: 29 0a 23 64 65 66 69 6e 65 20 4d 41 58 28 41 2c  ).#define MAX(A,
46e0: 42 29 20 28 28 41 29 3e 28 42 29 3f 28 41 29 3a  B) ((A)>(B)?(A):
46f0: 28 42 29 29 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70  (B))../*.** Swap
4700: 20 74 77 6f 20 6f 62 6a 65 63 74 73 20 6f 66 20   two objects of 
4710: 74 79 70 65 20 54 59 50 45 2e 0a 2a 2f 0a 23 64  type TYPE..*/.#d
4720: 65 66 69 6e 65 20 53 57 41 50 28 54 59 50 45 2c  efine SWAP(TYPE,
4730: 41 2c 42 29 20 7b 54 59 50 45 20 74 3d 41 3b 20  A,B) {TYPE t=A; 
4740: 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a  A=B; B=t;}../*.*
4750: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
4760: 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75  f this machine u
4770: 73 65 73 20 45 42 43 44 49 43 2e 20 20 28 59 65  ses EBCDIC.  (Ye
4780: 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72  s, believe it or
4790: 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61  .** not, there a
47a0: 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65  re still machine
47b0: 73 20 6f 75 74 20 74 68 65 72 65 20 74 68 61 74  s out there that
47c0: 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f   use EBCDIC.).*/
47d0: 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30  .#if 'A' == '\30
47e0: 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1'.# define SQLI
47f0: 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73  TE_EBCDIC 1.#els
4800: 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  e.# define SQLIT
4810: 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66  E_ASCII 1.#endif
4820: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73  ../*.** Integers
4830: 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e   of known sizes.
4840: 20 20 54 68 65 73 65 20 74 79 70 65 64 65 66 73    These typedefs
4850: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f   might change fo
4860: 72 20 61 72 63 68 69 74 65 63 74 75 72 65 73 0a  r architectures.
4870: 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73 69 7a  ** where the siz
4880: 65 73 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f  es very.  Prepro
4890: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72  cessor macros ar
48a0: 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74  e available so t
48b0: 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73  hat the.** types
48c0: 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65   can be convenie
48d0: 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61  ntly redefined a
48e0: 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20  t compile-type. 
48f0: 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a   Like this:.**.*
4900: 2a 20 20 20 20 20 20 20 20 20 63 63 20 27 2d 44  *         cc '-D
4910: 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e  UINTPTR_TYPE=lon
4920: 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a  g long int' ....
4930: 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33  */.#ifndef UINT3
4940: 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  2_TYPE.# ifdef H
4950: 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20  AVE_UINT32_T.#  
4960: 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59  define UINT32_TY
4970: 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c  PE uint32_t.# el
4980: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
4990: 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  T32_TYPE unsigne
49a0: 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  d int.# endif.#e
49b0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e  ndif.#ifndef UIN
49c0: 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T16_TYPE.# ifdef
49d0: 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23   HAVE_UINT16_T.#
49e0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f    define UINT16_
49f0: 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20  TYPE uint16_t.# 
4a00: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
4a10: 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67  INT16_TYPE unsig
4a20: 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  ned short int.# 
4a30: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
4a40: 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a  ndef INT16_TYPE.
4a50: 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54  # ifdef HAVE_INT
4a60: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49  16_T.#  define I
4a70: 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f  NT16_TYPE int16_
4a80: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
4a90: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68  ne INT16_TYPE sh
4aa0: 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ort int.# endif.
4ab0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
4ac0: 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65  INT8_TYPE.# ifde
4ad0: 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23  f HAVE_UINT8_T.#
4ae0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
4af0: 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c  YPE uint8_t.# el
4b00: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
4b10: 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  T8_TYPE unsigned
4b20: 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65   char.# endif.#e
4b30: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54  ndif.#ifndef INT
4b40: 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  8_TYPE.# ifdef H
4b50: 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65  AVE_INT8_T.#  de
4b60: 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69  fine INT8_TYPE i
4b70: 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  nt8_t.# else.#  
4b80: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
4b90: 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65   signed char.# e
4ba0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
4bb0: 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  def LONGDOUBLE_T
4bc0: 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e  YPE.# define LON
4bd0: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e  GDOUBLE_TYPE lon
4be0: 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a  g double.#endif.
4bf0: 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69  typedef sqlite_i
4c00: 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20 20 20  nt64 i64;       
4c10: 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67     /* 8-byte sig
4c20: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
4c30: 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69  ypedef sqlite_ui
4c40: 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20 20 20  nt64 u64;       
4c50: 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69    /* 8-byte unsi
4c60: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
4c70: 74 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54  typedef UINT32_T
4c80: 59 50 45 20 75 33 32 3b 20 20 20 20 20 20 20 20  YPE u32;        
4c90: 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73     /* 4-byte uns
4ca0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
4cb0: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f  .typedef UINT16_
4cc0: 54 59 50 45 20 75 31 36 3b 20 20 20 20 20 20 20  TYPE u16;       
4cd0: 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e      /* 2-byte un
4ce0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
4cf0: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f  /.typedef INT16_
4d00: 54 59 50 45 20 69 31 36 3b 20 20 20 20 20 20 20  TYPE i16;       
4d10: 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73       /* 2-byte s
4d20: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
4d30: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54  .typedef UINT8_T
4d40: 59 50 45 20 75 38 3b 20 20 20 20 20 20 20 20 20  YPE u8;         
4d50: 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e      /* 1-byte un
4d60: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
4d70: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54  /.typedef INT8_T
4d80: 59 50 45 20 69 38 3b 20 20 20 20 20 20 20 20 20  YPE i8;         
4d90: 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73       /* 1-byte s
4da0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
4db0: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d  ../*.** SQLITE_M
4dc0: 41 58 5f 55 33 32 20 69 73 20 61 20 75 36 34 20  AX_U32 is a u64 
4dd0: 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73  constant that is
4de0: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34   the maximum u64
4df0: 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63   value.** that c
4e00: 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  an be stored in 
4e10: 61 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f  a u32 without lo
4e20: 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65  ss of data.  The
4e30: 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30   value.** is 0x0
4e40: 30 30 30 30 30 30 30 66 66 66 66 66 66 66 66 2e  0000000ffffffff.
4e50: 20 20 42 75 74 20 62 65 63 61 75 73 65 20 6f 66    But because of
4e60: 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20   quirks of some 
4e70: 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a  compilers, we.**
4e80: 20 68 61 76 65 20 74 6f 20 73 70 65 63 69 66 79   have to specify
4e90: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68   the value in th
4ea0: 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65  e less intuitive
4eb0: 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a   manner shown:.*
4ec0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
4ed0: 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75 36  _MAX_U32  ((((u6
4ee0: 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a  4)1)<<32)-1)../*
4ef0: 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65  .** The datatype
4f00: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 65   used to store e
4f10: 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68 65 20  stimates of the 
4f20: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
4f30: 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  n a.** table or 
4f40: 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73 20  index.  This is 
4f50: 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  an unsigned inte
4f60: 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72 20 39  ger type.  For 9
4f70: 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77  9.9% of.** the w
4f80: 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74 20 69  orld, a 32-bit i
4f90: 6e 74 65 67 65 72 20 69 73 20 73 75 66 66 69 63  nteger is suffic
4fa0: 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36 34 2d  ient.  But a 64-
4fb0: 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63  bit integer.** c
4fc0: 61 6e 20 62 65 20 75 73 65 64 20 61 74 20 63 6f  an be used at co
4fd0: 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20 64 65  mpile-time if de
4fe0: 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66  sired..*/.#ifdef
4ff0: 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f 53 54   SQLITE_64BIT_ST
5000: 41 54 53 0a 20 74 79 70 65 64 65 66 20 75 36 34  ATS. typedef u64
5010: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
5020: 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20 72  64-bit only if r
5030: 65 71 75 65 73 74 65 64 20 61 74 20 63 6f 6d 70  equested at comp
5040: 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73  ile-time */.#els
5050: 65 0a 20 74 79 70 65 64 65 66 20 75 33 32 20 74  e. typedef u32 t
5060: 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32  Rowcnt;    /* 32
5070: 2d 62 69 74 20 69 73 20 74 68 65 20 64 65 66 61  -bit is the defa
5080: 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  ult */.#endif../
5090: 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64 20 71  *.** Estimated q
50a0: 75 61 6e 74 69 74 69 65 73 20 75 73 65 64 20 66  uantities used f
50b0: 6f 72 20 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e  or query plannin
50c0: 67 20 61 72 65 20 73 74 6f 72 65 64 20 61 73 20  g are stored as 
50d0: 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69  16-bit.** logari
50e0: 74 68 6d 73 2e 20 20 46 6f 72 20 71 75 61 6e 74  thms.  For quant
50f0: 69 74 79 20 58 2c 20 74 68 65 20 76 61 6c 75 65  ity X, the value
5100: 20 73 74 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f   stored is 10*lo
5110: 67 32 28 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20  g2(X).  This.** 
5120: 67 69 76 65 73 20 61 20 70 6f 73 73 69 62 6c 65  gives a possible
5130: 20 72 61 6e 67 65 20 6f 66 20 76 61 6c 75 65 73   range of values
5140: 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74 65 6c   of approximatel
5150: 79 20 31 2e 30 65 39 38 36 20 74 6f 20 31 65 2d  y 1.0e986 to 1e-
5160: 39 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20  986..** But the 
5170: 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 61  allowed values a
5180: 72 65 20 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f  re "grainy".  No
5190: 74 20 65 76 65 72 79 20 76 61 6c 75 65 20 69 73  t every value is
51a0: 20 72 65 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a   representable..
51b0: 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  ** For example, 
51c0: 71 75 61 6e 74 69 74 69 65 73 20 31 36 20 61 6e  quantities 16 an
51d0: 64 20 31 37 20 61 72 65 20 62 6f 74 68 20 72 65  d 17 are both re
51e0: 70 72 65 73 65 6e 74 65 64 20 62 79 20 61 20 4c  presented by a L
51f0: 6f 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20  ogEst.** of 40. 
5200: 20 48 6f 77 65 76 65 72 2c 20 73 69 6e 63 65 20   However, since 
5210: 4c 6f 67 45 73 74 20 71 75 61 6e 74 69 74 69 65  LogEst quantitie
5220: 73 20 61 72 65 20 73 75 70 70 6f 73 65 20 74 6f  s are suppose to
5230: 20 62 65 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a   be estimates,.*
5240: 2a 20 6e 6f 74 20 65 78 61 63 74 20 76 61 6c 75  * not exact valu
5250: 65 73 2c 20 74 68 69 73 20 69 6d 70 72 65 63 69  es, this impreci
5260: 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20 70 72  sion is not a pr
5270: 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f  oblem..**.** "Lo
5280: 67 45 73 74 22 20 69 73 20 73 68 6f 72 74 20 66  gEst" is short f
5290: 6f 72 20 22 4c 6f 67 61 72 69 74 68 6d 69 63 20  or "Logarithmic 
52a0: 45 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a  Estimate"..**.**
52b0: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20   Examples:.**   
52c0: 20 20 20 31 20 2d 3e 20 30 20 20 20 20 20 20 20     1 -> 0       
52d0: 20 20 20 20 20 20 20 32 30 20 2d 3e 20 34 33 20         20 -> 43 
52e0: 20 20 20 20 20 20 20 20 20 31 30 30 30 30 20 2d           10000 -
52f0: 3e 20 31 33 32 0a 2a 2a 20 20 20 20 20 20 32 20  > 132.**      2 
5300: 2d 3e 20 31 30 20 20 20 20 20 20 20 20 20 20 20  -> 10           
5310: 20 20 32 35 20 2d 3e 20 34 36 20 20 20 20 20 20    25 -> 46      
5320: 20 20 20 20 32 35 30 30 30 20 2d 3e 20 31 34 36      25000 -> 146
5330: 0a 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20 31 36  .**      3 -> 16
5340: 20 20 20 20 20 20 20 20 20 20 20 20 31 30 30 20              100 
5350: 2d 3e 20 36 36 20 20 20 20 20 20 20 20 31 30 30  -> 66        100
5360: 30 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20  0000 -> 199.**  
5370: 20 20 20 20 34 20 2d 3e 20 32 30 20 20 20 20 20      4 -> 20     
5380: 20 20 20 20 20 20 31 30 30 30 20 2d 3e 20 39 39        1000 -> 99
5390: 20 20 20 20 20 20 20 20 31 30 34 38 35 37 36 20          1048576 
53a0: 2d 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20 31 30  -> 200.**     10
53b0: 20 2d 3e 20 33 33 20 20 20 20 20 20 20 20 20 20   -> 33          
53c0: 20 31 30 32 34 20 2d 3e 20 31 30 30 20 20 20 20   1024 -> 100    
53d0: 34 32 39 34 39 36 37 32 39 36 20 2d 3e 20 33 32  4294967296 -> 32
53e0: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45  0.**.** The LogE
53f0: 73 74 20 63 61 6e 20 62 65 20 6e 65 67 61 74 69  st can be negati
5400: 76 65 20 74 6f 20 69 6e 64 69 63 61 74 65 20 66  ve to indicate f
5410: 72 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73  ractional values
5420: 2e 20 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a  . .** Examples:.
5430: 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20  **.**    0.5 -> 
5440: 2d 31 30 20 20 20 20 20 20 20 20 20 20 20 30 2e  -10           0.
5450: 31 20 2d 3e 20 2d 33 33 20 20 20 20 20 20 20 20  1 -> -33        
5460: 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f  0.0625 -> -40.*/
5470: 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54  .typedef INT16_T
5480: 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a  YPE LogEst;../*.
5490: 2a 2a 20 53 65 74 20 74 68 65 20 53 51 4c 49 54  ** Set the SQLIT
54a0: 45 5f 50 54 52 53 49 5a 45 20 6d 61 63 72 6f 20  E_PTRSIZE macro 
54b0: 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
54c0: 20 62 79 74 65 73 20 69 6e 20 61 20 70 6f 69 6e   bytes in a poin
54d0: 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ter.*/.#ifndef S
54e0: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 0a 23 20  QLITE_PTRSIZE.# 
54f0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 53 49 5a  if defined(__SIZ
5500: 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 29 0a 23  EOF_POINTER__).#
5510: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
5520: 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49 5a 45 4f  _PTRSIZE __SIZEO
5530: 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23 20 65 6c  F_POINTER__.# el
5540: 69 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29  if defined(i386)
5550: 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28       || defined(
5560: 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64  __i386__)   || d
5570: 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20  efined(_M_IX86) 
5580: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 20 64  ||    \.       d
5590: 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20  efined(_M_ARM)  
55a0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61 72   || defined(__ar
55b0: 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65 66 69 6e  m__)    || defin
55c0: 65 64 28 5f 5f 78 38 36 29 0a 23 20 20 20 64 65  ed(__x86).#   de
55d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53  fine SQLITE_PTRS
55e0: 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20 20  IZE 4.# else.#  
55f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
5600: 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69 66  TRSIZE 8.# endif
5610: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
5620: 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
5630: 6e 65 20 77 68 65 74 68 65 72 20 74 68 65 20 6d  ne whether the m
5640: 61 63 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72  achine is big or
5650: 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a   little endian,.
5660: 2a 2a 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f  ** and whether o
5670: 72 20 6e 6f 74 20 74 68 61 74 20 64 65 74 65 72  r not that deter
5680: 6d 69 6e 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d  mination is run-
5690: 74 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d  time or compile-
56a0: 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20  time..**.** For 
56b0: 62 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  best performance
56c0: 2c 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  , an attempt is 
56d0: 6d 61 64 65 20 74 6f 20 67 75 65 73 73 20 61 74  made to guess at
56e0: 20 74 68 65 20 62 79 74 65 2d 6f 72 64 65 72 0a   the byte-order.
56f0: 2a 2a 20 75 73 69 6e 67 20 43 2d 70 72 65 70 72  ** using C-prepr
5700: 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20  ocessor macros. 
5710: 20 49 66 20 74 68 61 74 20 69 73 20 75 6e 73 75   If that is unsu
5720: 63 63 65 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a  ccessful, or if.
5730: 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 52 55 4e 54  ** -DSQLITE_RUNT
5740: 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 3d 31 20  IME_BYTEORDER=1 
5750: 69 73 20 73 65 74 2c 20 74 68 65 6e 20 62 79 74  is set, then byt
5760: 65 2d 6f 72 64 65 72 20 69 73 20 64 65 74 65 72  e-order is deter
5770: 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72 75 6e 2d  mined.** at run-
5780: 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  time..*/.#ifdef 
5790: 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
57a0: 49 4f 4e 0a 63 6f 6e 73 74 20 69 6e 74 20 73 71  ION.const int sq
57b0: 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 65  lite3one = 1;.#e
57c0: 6c 73 65 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  lse.extern const
57d0: 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b   int sqlite3one;
57e0: 0a 23 65 6e 64 69 66 0a 23 69 66 20 28 64 65 66  .#endif.#if (def
57f0: 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20 7c  ined(i386)     |
5800: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36  | defined(__i386
5810: 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  __)   || defined
5820: 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20 20  (_M_IX86) ||    
5830: 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f  \.     defined(_
5840: 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64 65 66 69  _x86_64) || defi
5850: 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20  ned(__x86_64__) 
5860: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36  || defined(_M_X6
5870: 34 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20  4)  ||    \.    
5880: 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36   defined(_M_AMD6
5890: 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d  4) || defined(_M
58a0: 5f 41 52 4d 29 20 20 20 20 20 7c 7c 20 64 65 66  _ARM)     || def
58b0: 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c  ined(__x86)   ||
58c0: 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e      \.     defin
58d0: 65 64 28 5f 5f 61 72 6d 5f 5f 29 29 20 26 26 20  ed(__arm__)) && 
58e0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
58f0: 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45  RUNTIME_BYTEORDE
5900: 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  R).# define SQLI
5910: 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20  TE_BYTEORDER    
5920: 31 32 33 34 0a 23 20 64 65 66 69 6e 65 20 53 51  1234.# define SQ
5930: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20  LITE_BIGENDIAN  
5940: 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c    0.# define SQL
5950: 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e  ITE_LITTLEENDIAN
5960: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
5970: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20  TE_UTF16NATIVE  
5980: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a 23  SQLITE_UTF16LE.#
5990: 65 6e 64 69 66 0a 23 69 66 20 28 64 65 66 69 6e  endif.#if (defin
59a0: 65 64 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20  ed(sparc)    || 
59b0: 64 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29  defined(__ppc__)
59c0: 29 20 20 5c 0a 20 20 20 20 26 26 20 21 64 65 66  )  \.    && !def
59d0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 52 55 4e 54  ined(SQLITE_RUNT
59e0: 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23  IME_BYTEORDER).#
59f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
5a00: 59 54 45 4f 52 44 45 52 20 20 20 20 34 33 32 31  YTEORDER    4321
5a10: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5a20: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 31 0a  _BIGENDIAN    1.
5a30: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5a40: 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a 23  LITTLEENDIAN 0.#
5a50: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55   define SQLITE_U
5a60: 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49  TF16NATIVE  SQLI
5a70: 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6e 64 69  TE_UTF16BE.#endi
5a80: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
5a90: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 29  QLITE_BYTEORDER)
5aa0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5ab0: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 30 20  _BYTEORDER    0 
5ac0: 20 20 20 20 2f 2a 20 30 20 6d 65 61 6e 73 20 22      /* 0 means "
5ad0: 75 6e 6b 6e 6f 77 6e 20 61 74 20 63 6f 6d 70 69  unknown at compi
5ae0: 6c 65 2d 74 69 6d 65 22 20 2a 2f 0a 23 20 64 65  le-time" */.# de
5af0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45  fine SQLITE_BIGE
5b00: 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72  NDIAN    (*(char
5b10: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
5b20: 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==0).# define SQ
5b30: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
5b40: 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71  N (*(char *)(&sq
5b50: 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20  lite3one)==1).# 
5b60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54  define SQLITE_UT
5b70: 46 31 36 4e 41 54 49 56 45 20 20 28 53 51 4c 49  F16NATIVE  (SQLI
5b80: 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c  TE_BIGENDIAN?SQL
5b90: 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49  ITE_UTF16BE:SQLI
5ba0: 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64  TE_UTF16LE).#end
5bb0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61  if../*.** Consta
5bc0: 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67  nts for the larg
5bd0: 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74  est and smallest
5be0: 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74   possible 64-bit
5bf0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73   signed integers
5c00: 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  ..** These macro
5c10: 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20 74  s are designed t
5c20: 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79  o work correctly
5c30: 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20   on both 32-bit 
5c40: 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f  and 64-bit.** co
5c50: 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66  mpilers..*/.#def
5c60: 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36  ine LARGEST_INT6
5c70: 34 20 20 28 30 78 66 66 66 66 66 66 66 66 7c 28  4  (0xffffffff|(
5c80: 28 28 69 36 34 29 30 78 37 66 66 66 66 66 66 66  ((i64)0x7fffffff
5c90: 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20  )<<32)).#define 
5ca0: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28  SMALLEST_INT64 (
5cb0: 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47  ((i64)-1) - LARG
5cc0: 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20 0a  EST_INT64)../* .
5cd0: 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e 75  ** Round up a nu
5ce0: 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78 74  mber to the next
5cf0: 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c 65   larger multiple
5d00: 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73 20   of 8.  This is 
5d10: 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65  used.** to force
5d20: 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e   8-byte alignmen
5d30: 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63 68  t on 64-bit arch
5d40: 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64  itectures..*/.#d
5d50: 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29 20  efine ROUND8(x) 
5d60: 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37 29      (((x)+7)&~7)
5d70: 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f  ../*.** Round do
5d80: 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65 73  wn to the neares
5d90: 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a  t multiple of 8.
5da0: 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44  */.#define ROUND
5db0: 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e 37  DOWN8(x) ((x)&~7
5dc0: 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20  )../*.** Assert 
5dd0: 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65 72  that the pointer
5de0: 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74 6f   X is aligned to
5df0: 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e 64   an 8-byte bound
5e00: 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61  ary.  This.** ma
5e10: 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c 79  cro is used only
5e20: 20 77 69 74 68 69 6e 20 61 73 73 65 72 74 28 29   within assert()
5e30: 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
5e40: 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a  the code gets.**
5e50: 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72   all alignment r
5e60: 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72 72  estrictions corr
5e70: 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70  ect..**.** Excep
5e80: 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f 42  t, if SQLITE_4_B
5e90: 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c  YTE_ALIGNED_MALL
5ea0: 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74  OC is defined, t
5eb0: 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72  hen the.** under
5ec0: 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69  lying malloc() i
5ed0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69  mplementation mi
5ee0: 67 68 74 20 72 65 74 75 72 6e 20 75 73 20 34 2d  ght return us 4-
5ef0: 62 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20  byte aligned.** 
5f00: 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74 68  pointers.  In th
5f10: 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65  at case, only ve
5f20: 72 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69 67  rify 4-byte alig
5f30: 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66  nment..*/.#ifdef
5f40: 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41   SQLITE_4_BYTE_A
5f50: 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20  LIGNED_MALLOC.# 
5f60: 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54  define EIGHT_BYT
5f70: 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20  E_ALIGNMENT(X)  
5f80: 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d   ((((char*)(X) -
5f90: 20 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d 30   (char*)0)&3)==0
5fa0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
5fb0: 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47   EIGHT_BYTE_ALIG
5fc0: 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63  NMENT(X)   ((((c
5fd0: 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72  har*)(X) - (char
5fe0: 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64  *)0)&7)==0).#end
5ff0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c  if../*.** Disabl
6000: 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f  e MMAP on platfo
6010: 72 6d 73 20 77 68 65 72 65 20 69 74 20 69 73 20  rms where it is 
6020: 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72  known to not wor
6030: 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  k.*/.#if defined
6040: 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c  (__OpenBSD__) ||
6050: 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54   defined(__QNXNT
6060: 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51 4c  O__).# undef SQL
6070: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
6080: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
6090: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
60a0: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
60b0: 44 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20  Default maximum 
60c0: 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75  size of memory u
60d0: 73 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61  sed by memory-ma
60e0: 70 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65 20  pped I/O in the 
60f0: 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f  VFS.*/.#ifdef __
6100: 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64  APPLE__.# includ
6110: 65 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74 69  e <TargetConditi
6120: 6f 6e 61 6c 73 2e 68 3e 0a 23 20 69 66 20 54 41  onals.h>.# if TA
6130: 52 47 45 54 5f 4f 53 5f 49 50 48 4f 4e 45 0a 23  RGET_OS_IPHONE.#
6140: 20 20 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f     undef SQLITE_
6150: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
6160: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
6170: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a  MAX_MMAP_SIZE 0.
6180: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
6190: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41  ifndef SQLITE_MA
61a0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66  X_MMAP_SIZE.# if
61b0: 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78   defined(__linux
61c0: 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e  __) \.  || defin
61d0: 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c  ed(_WIN32) \.  |
61e0: 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50  | (defined(__APP
61f0: 4c 45 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64  LE__) && defined
6200: 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20  (__MACH__)) \.  
6210: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e  || defined(__sun
6220: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
6230: 28 5f 5f 46 72 65 65 42 53 44 5f 5f 29 20 5c 0a  (__FreeBSD__) \.
6240: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 44    || defined(__D
6250: 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a 23 20 20 20  ragonFly__).#   
6260: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
6270: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 78 37 66  X_MMAP_SIZE 0x7f
6280: 66 66 30 30 30 30 20 20 2f 2a 20 32 31 34 37 34  ff0000  /* 21474
6290: 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c 73 65 0a  18112 */.# else.
62a0: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
62b0: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
62c0: 30 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69  0.# endif.# defi
62d0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
62e0: 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 2f 2a 20  AP_SIZE_xc 1 /* 
62f0: 65 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69  exclude from cti
6300: 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  me.c */.#endif..
6310: 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c  /*.** The defaul
6320: 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a  t MMAP_SIZE is z
6330: 65 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66  ero on all platf
6340: 6f 72 6d 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20  orms.  Or, even 
6350: 69 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64  if a larger.** d
6360: 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45  efault MMAP_SIZE
6370: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 74   is specified at
6380: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d   compile-time, m
6390: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 69 74  ake sure that it
63a0: 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63   does.** not exc
63b0: 65 65 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  eed the maximum 
63c0: 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69  mmap size..*/.#i
63d0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
63e0: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  AULT_MMAP_SIZE.#
63f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
6400: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
6410: 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   0.# define SQLI
6420: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
6430: 53 49 5a 45 5f 78 63 20 31 20 20 2f 2a 20 45 78  SIZE_xc 1  /* Ex
6440: 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65  clude from ctime
6450: 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  .c */.#endif.#if
6460: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
6470: 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49 54 45  MMAP_SIZE>SQLITE
6480: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
6490: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45   undef SQLITE_DE
64a0: 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a  FAULT_MMAP_SIZE.
64b0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
64c0: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
64d0: 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  E SQLITE_MAX_MMA
64e0: 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f  P_SIZE.#endif../
64f0: 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f 66  *.** Only one of
6500: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
6510: 54 41 54 33 20 6f 72 20 53 51 4c 49 54 45 5f 45  TAT3 or SQLITE_E
6520: 4e 41 42 4c 45 5f 53 54 41 54 34 20 63 61 6e 20  NABLE_STAT4 can 
6530: 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a 20 50  be defined..** P
6540: 72 69 6f 72 69 74 79 20 69 73 20 67 69 76 65 6e  riority is given
6550: 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   to SQLITE_ENABL
6560: 45 5f 53 54 41 54 34 2e 20 20 49 66 20 65 69 74  E_STAT4.  If eit
6570: 68 65 72 20 61 72 65 20 64 65 66 69 6e 65 64 2c  her are defined,
6580: 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e 65 20   also.** define 
6590: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
65a0: 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f 0a  AT3_OR_STAT4.*/.
65b0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
65c0: 41 42 4c 45 5f 53 54 41 54 34 0a 23 20 75 6e 64  ABLE_STAT4.# und
65d0: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
65e0: 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20  _STAT3.# define 
65f0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
6600: 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23  AT3_OR_STAT4 1.#
6610: 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  elif SQLITE_ENAB
6620: 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e  LE_STAT3.# defin
6630: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
6640: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31  STAT3_OR_STAT4 1
6650: 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e  .#elif SQLITE_EN
6660: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
6670: 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  AT4.# undef SQLI
6680: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
6690: 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64 69 66 0a  OR_STAT4.#endif.
66a0: 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54 52 41  ./*.** SELECTTRA
66b0: 43 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c 6c 20  CE_ENABLED will 
66c0: 62 65 20 65 69 74 68 65 72 20 31 20 6f 72 20 30  be either 1 or 0
66d0: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
66e0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a 2a 20  ether or not.** 
66f0: 74 68 65 20 53 65 6c 65 63 74 20 71 75 65 72 79  the Select query
6700: 20 67 65 6e 65 72 61 74 6f 72 20 74 72 61 63 69   generator traci
6710: 6e 67 20 6c 6f 67 69 63 20 69 73 20 74 75 72 6e  ng logic is turn
6720: 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 64 65  ed on..*/.#if de
6730: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
6740: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UG) || defined(S
6750: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c  QLITE_ENABLE_SEL
6760: 45 43 54 54 52 41 43 45 29 0a 23 20 64 65 66 69  ECTTRACE).# defi
6770: 6e 65 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45  ne SELECTTRACE_E
6780: 4e 41 42 4c 45 44 20 31 0a 23 65 6c 73 65 0a 23  NABLED 1.#else.#
6790: 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52   define SELECTTR
67a0: 41 43 45 5f 45 4e 41 42 4c 45 44 20 30 0a 23 65  ACE_ENABLED 0.#e
67b0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
67c0: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
67d0: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
67e0: 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  re is used to st
67f0: 6f 72 65 20 74 68 65 20 62 75 73 79 2d 68 61 6e  ore the busy-han
6800: 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  dler.** callback
6810: 20 66 6f 72 20 61 20 67 69 76 65 6e 20 73 71 6c   for a given sql
6820: 69 74 65 20 68 61 6e 64 6c 65 2e 20 0a 2a 2a 0a  ite handle. .**.
6830: 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62 75  ** The sqlite.bu
6840: 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65 72  syHandler member
6850: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20 73   of the sqlite s
6860: 74 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20 74  truct contains t
6870: 68 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c 62  he busy.** callb
6880: 61 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74 61  ack for the data
6890: 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61 63  base handle. Eac
68a0: 68 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20 76  h pager opened v
68b0: 69 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a  ia the sqlite.**
68c0: 20 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73 65   handle is passe
68d0: 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 73  d a pointer to s
68e0: 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65  qlite.busyHandle
68f0: 72 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e 64  r. The busy-hand
6900: 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20  ler.** callback 
6910: 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 76  is currently inv
6920: 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20 77  oked only from w
6930: 69 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a 2a  ithin pager.c..*
6940: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
6950: 20 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75 73   BusyHandler Bus
6960: 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63 74  yHandler;.struct
6970: 20 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a 20   BusyHandler {. 
6980: 20 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76 6f   int (*xFunc)(vo
6990: 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54  id *,int);  /* T
69a0: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
69b0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67   */.  void *pArg
69c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
69d0: 20 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74 6f   /* First arg to
69e0: 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a   busy callback *
69f0: 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20 20  /.  int nBusy;  
6a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
6a10: 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69  * Incremented wi
6a20: 74 68 20 65 61 63 68 20 62 75 73 79 20 63 61 6c  th each busy cal
6a30: 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e  l */.};../*.** N
6a40: 61 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65  ame of the maste
6a50: 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  r database table
6a60: 2e 20 20 54 68 65 20 6d 61 73 74 65 72 20 64 61  .  The master da
6a70: 74 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20  tabase table.** 
6a80: 69 73 20 61 20 73 70 65 63 69 61 6c 20 74 61 62  is a special tab
6a90: 6c 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  le that holds th
6aa0: 65 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74 72  e names and attr
6ab0: 69 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a  ibutes of all.**
6ac0: 20 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e 64   user tables and
6ad0: 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65   indices..*/.#de
6ae0: 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45  fine MASTER_NAME
6af0: 20 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f 6d         "sqlite_m
6b00: 61 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20 54  aster".#define T
6b10: 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20  EMP_MASTER_NAME 
6b20: 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61   "sqlite_temp_ma
6b30: 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ster"../*.** The
6b40: 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68   root-page of th
6b50: 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73  e master databas
6b60: 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66  e table..*/.#def
6b70: 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20  ine MASTER_ROOT 
6b80: 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54        1../*.** T
6b90: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73  he name of the s
6ba0: 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a  chema table..*/.
6bb0: 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 54  #define SCHEMA_T
6bc0: 41 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49 54  ABLE(x)  ((!OMIT
6bd0: 5f 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31 29  _TEMPDB)&&(x==1)
6be0: 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d  ?TEMP_MASTER_NAM
6bf0: 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a  E:MASTER_NAME)..
6c00: 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65  /*.** A convenie
6c10: 6e 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20 72  nce macro that r
6c20: 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
6c30: 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e  r of elements in
6c40: 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f  .** an array..*/
6c50: 0a 23 64 65 66 69 6e 65 20 41 72 72 61 79 53 69  .#define ArraySi
6c60: 7a 65 28 58 29 20 20 20 20 28 28 69 6e 74 29 28  ze(X)    ((int)(
6c70: 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66  sizeof(X)/sizeof
6c80: 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20  (X[0])))../*.** 
6c90: 44 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65  Determine if the
6ca0: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 70   argument is a p
6cb0: 6f 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23  ower of two.*/.#
6cc0: 64 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f 66  define IsPowerOf
6cd0: 54 77 6f 28 58 29 20 28 28 28 58 29 26 28 28 58  Two(X) (((X)&((X
6ce0: 29 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a  )-1))==0)../*.**
6cf0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76   The following v
6d00: 61 6c 75 65 20 61 73 20 61 20 64 65 73 74 72 75  alue as a destru
6d10: 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75 73  ctor means to us
6d20: 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  e sqlite3DbFree(
6d30: 29 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65  )..** The sqlite
6d40: 33 44 62 46 72 65 65 28 29 20 72 6f 75 74 69 6e  3DbFree() routin
6d50: 65 20 72 65 71 75 69 72 65 73 20 74 77 6f 20 70  e requires two p
6d60: 61 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65 61  arameters instea
6d70: 64 20 6f 66 20 74 68 65 20 0a 2a 2a 20 6f 6e 65  d of the .** one
6d80: 20 70 61 72 61 6d 65 74 65 72 20 74 68 61 74 20   parameter that 
6d90: 64 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d  destructors norm
6da0: 61 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77  ally want.  So w
6db0: 65 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64  e have to introd
6dc0: 75 63 65 20 0a 2a 2a 20 74 68 69 73 20 6d 61 67  uce .** this mag
6dd0: 69 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68  ic value that th
6de0: 65 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20  e code knows to 
6df0: 68 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74  handle different
6e00: 6c 79 2e 20 20 41 6e 79 20 0a 2a 2a 20 70 6f 69  ly.  Any .** poi
6e10: 6e 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68  nter will work h
6e20: 65 72 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69  ere as long as i
6e30: 74 20 69 73 20 64 69 73 74 69 6e 63 74 20 66 72  t is distinct fr
6e40: 6f 6d 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  om SQLITE_STATIC
6e50: 0a 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54  .** and SQLITE_T
6e60: 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65  RANSIENT..*/.#de
6e70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41  fine SQLITE_DYNA
6e80: 4d 49 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f  MIC   ((sqlite3_
6e90: 64 65 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29  destructor_type)
6ea0: 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a  sqlite3MallocSiz
6eb0: 65 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53  e)../*.** When S
6ec0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69  QLITE_OMIT_WSD i
6ed0: 73 20 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65  s defined, it me
6ee0: 61 6e 73 20 74 68 61 74 20 74 68 65 20 74 61 72  ans that the tar
6ef0: 67 65 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65  get platform doe
6f00: 73 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74  s.** not support
6f10: 20 57 72 69 74 61 62 6c 65 20 53 74 61 74 69 63   Writable Static
6f20: 20 44 61 74 61 20 28 57 53 44 29 20 73 75 63 68   Data (WSD) such
6f30: 20 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73   as global and s
6f40: 74 61 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e  tatic variables.
6f50: 0a 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65  .** All variable
6f60: 73 20 6d 75 73 74 20 65 69 74 68 65 72 20 62 65  s must either be
6f70: 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72   on the stack or
6f80: 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
6f90: 6f 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74  ocated from.** t
6fa0: 68 65 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57  he heap.  When W
6fb0: 53 44 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65  SD is unsupporte
6fc0: 64 2c 20 74 68 65 20 76 61 72 69 61 62 6c 65 20  d, the variable 
6fd0: 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61  declarations sca
6fe0: 74 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67  ttered.** throug
6ff0: 68 6f 75 74 20 74 68 65 20 53 51 4c 69 74 65 20  hout the SQLite 
7000: 63 6f 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65  code must become
7010: 20 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65   constants inste
7020: 61 64 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f  ad.  The SQLITE_
7030: 57 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20  WSD.** macro is 
7040: 75 73 65 64 20 66 6f 72 20 74 68 69 73 20 70 75  used for this pu
7050: 72 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74  rpose.  And inst
7060: 65 61 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69  ead of referenci
7070: 6e 67 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a  ng the variable.
7080: 2a 2a 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20  ** directly, we 
7090: 75 73 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74  use its constant
70a0: 20 61 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f   as a key to loo
70b0: 6b 75 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65  kup the run-time
70c0: 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75   allocated.** bu
70d0: 66 66 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20  ffer that holds 
70e0: 72 65 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20  real variable.  
70f0: 54 68 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20  The constant is 
7100: 61 6c 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c  also the initial
7110: 69 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20  izer.** for the 
7120: 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74  run-time allocat
7130: 65 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a  ed buffer..**.**
7140: 20 49 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61   In the usual ca
7150: 73 65 20 77 68 65 72 65 20 57 53 44 20 69 73 20  se where WSD is 
7160: 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53  supported, the S
7170: 51 4c 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c  QLITE_WSD and GL
7180: 4f 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62  OBAL.** macros b
7190: 65 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64  ecome no-ops and
71a0: 20 68 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f   have zero perfo
71b0: 72 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a  rmance impact..*
71c0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
71d0: 4f 4d 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69  OMIT_WSD.  #defi
71e0: 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f  ne SQLITE_WSD co
71f0: 6e 73 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c  nst.  #define GL
7200: 4f 42 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29  OBAL(t,v) (*(t*)
7210: 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64  sqlite3_wsd_find
7220: 28 28 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69  ((void*)&(v), si
7230: 7a 65 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66  zeof(v))).  #def
7240: 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  ine sqlite3Globa
7250: 6c 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73  lConfig GLOBAL(s
7260: 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
7270: 66 69 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66  fig, sqlite3Conf
7280: 69 67 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  ig).  int sqlite
7290: 33 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e  3_wsd_init(int N
72a0: 2c 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64  , int J);.  void
72b0: 20 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69   *sqlite3_wsd_fi
72c0: 6e 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20  nd(void *K, int 
72d0: 4c 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  L);.#else.  #def
72e0: 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20 0a  ine SQLITE_WSD .
72f0: 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c    #define GLOBAL
7300: 28 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69 6e  (t,v) v.  #defin
7310: 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  e sqlite3GlobalC
7320: 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e  onfig sqlite3Con
7330: 66 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  fig.#endif../*.*
7340: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
7350: 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20  macros are used 
7360: 74 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d 70  to suppress comp
7370: 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61 6e  iler warnings an
7380: 64 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20  d to.** make it 
7390: 63 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20 72  clear to human r
73a0: 65 61 64 65 72 73 20 77 68 65 6e 20 61 20 66 75  eaders when a fu
73b0: 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72  nction parameter
73c0: 20 69 73 20 64 65 6c 69 62 65 72 61 74 65 6c 79   is deliberately
73d0: 20 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64   .** left unused
73e0: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
73f0: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20   of a function. 
7400: 54 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70  This usually hap
7410: 70 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66  pens when.** a f
7420: 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65  unction is calle
7430: 64 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e  d via a function
7440: 20 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78   pointer. For ex
7450: 61 6d 70 6c 65 20 74 68 65 20 0a 2a 2a 20 69 6d  ample the .** im
7460: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
7470: 61 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65  an SQL aggregate
7480: 20 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d   step callback m
7490: 61 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a  ay not use the.*
74a0: 2a 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69  * parameter indi
74b0: 63 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65  cating the numbe
74c0: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70  r of arguments p
74d0: 61 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67  assed to the agg
74e0: 72 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74  regate,.** if it
74f0: 20 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73   knows that this
7500: 20 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73   is enforced els
7510: 65 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68  ewhere..**.** Wh
7520: 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61  en a function pa
7530: 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75  rameter is not u
7540: 73 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69  sed at all withi
7550: 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20  n the body of a 
7560: 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20  function,.** it 
7570: 69 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d  is generally nam
7580: 65 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20  ed "NotUsed" or 
7590: 22 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61  "NotUsed2" to ma
75a0: 6b 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63  ke things even c
75b0: 6c 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76  learer..** Howev
75c0: 65 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73  er, these macros
75d0: 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65   may also be use
75e0: 64 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61  d to suppress wa
75f0: 72 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74  rnings related t
7600: 6f 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20  o.** parameters 
7610: 74 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20  that may or may 
7620: 6e 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65  not be used depe
7630: 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61  nding on compila
7640: 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a  tion options..**
7650: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f   For example tho
7660: 73 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e  se parameters on
7670: 6c 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72  ly used in asser
7680: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  t() statements. 
7690: 49 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65  In these.** case
76a0: 73 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73  s the parameters
76b0: 20 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65   are named as pe
76c0: 72 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76  r the usual conv
76d0: 65 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66  entions..*/.#def
76e0: 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ine UNUSED_PARAM
76f0: 45 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78  ETER(x) (void)(x
7700: 29 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  ).#define UNUSED
7710: 5f 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29  _PARAMETER2(x,y)
7720: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
7730: 52 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41  R(x),UNUSED_PARA
7740: 4d 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20  METER(y)../*.** 
7750: 46 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63  Forward referenc
7760: 65 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73  es to structures
7770: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
7780: 63 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e  ct AggInfo AggIn
7790: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
77a0: 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41  ct AuthContext A
77b0: 75 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65  uthContext;.type
77c0: 64 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69  def struct Autoi
77d0: 6e 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e  ncInfo AutoincIn
77e0: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
77f0: 63 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63  ct Bitvec Bitvec
7800: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7810: 20 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71   CollSeq CollSeq
7820: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7830: 20 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a   Column Column;.
7840: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44  typedef struct D
7850: 62 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74  b Db;.typedef st
7860: 72 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65  ruct Schema Sche
7870: 6d 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ma;.typedef stru
7880: 63 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79  ct Expr Expr;.ty
7890: 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70  pedef struct Exp
78a0: 72 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a  rList ExprList;.
78b0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45  typedef struct E
78c0: 78 70 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e  xprSpan ExprSpan
78d0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
78e0: 20 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65   FKey FKey;.type
78f0: 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44  def struct FuncD
7900: 65 73 74 72 75 63 74 6f 72 20 46 75 6e 63 44 65  estructor FuncDe
7910: 73 74 72 75 63 74 6f 72 3b 0a 74 79 70 65 64 65  structor;.typede
7920: 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  f struct FuncDef
7930: 20 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64 65   FuncDef;.typede
7940: 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  f struct FuncDef
7950: 48 61 73 68 20 46 75 6e 63 44 65 66 48 61 73 68  Hash FuncDefHash
7960: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7970: 20 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a   IdList IdList;.
7980: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49  typedef struct I
7990: 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65  ndex Index;.type
79a0: 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78  def struct Index
79b0: 53 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d 70  Sample IndexSamp
79c0: 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  le;.typedef stru
79d0: 63 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79 43  ct KeyClass KeyC
79e0: 6c 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73 74  lass;.typedef st
79f0: 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79  ruct KeyInfo Key
7a00: 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74  Info;.typedef st
7a10: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c  ruct Lookaside L
7a20: 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64 65  ookaside;.typede
7a30: 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  f struct Lookasi
7a40: 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65  deSlot Lookaside
7a50: 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73 74  Slot;.typedef st
7a60: 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75  ruct Module Modu
7a70: 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  le;.typedef stru
7a80: 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e  ct NameContext N
7a90: 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65  ameContext;.type
7aa0: 64 65 66 20 73 74 72 75 63 74 20 50 61 72 73 65  def struct Parse
7ab0: 20 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66 20   Parse;.typedef 
7ac0: 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67  struct PrintfArg
7ad0: 75 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72 67  uments PrintfArg
7ae0: 75 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66 20  uments;.typedef 
7af0: 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f  struct RowSet Ro
7b00: 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74  wSet;.typedef st
7b10: 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53  ruct Savepoint S
7b20: 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65  avepoint;.typede
7b30: 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  f struct Select 
7b40: 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20  Select;.typedef 
7b50: 73 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72  struct SQLiteThr
7b60: 65 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64  ead SQLiteThread
7b70: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7b80: 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65   SelectDest Sele
7b90: 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20  ctDest;.typedef 
7ba0: 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53  struct SrcList S
7bb0: 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20  rcList;.typedef 
7bc0: 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20  struct StrAccum 
7bd0: 53 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65  StrAccum;.typede
7be0: 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54  f struct Table T
7bf0: 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74  able;.typedef st
7c00: 72 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54  ruct TableLock T
7c10: 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65  ableLock;.typede
7c20: 66 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54  f struct Token T
7c30: 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  oken;.typedef st
7c40: 72 75 63 74 20 54 72 65 65 56 69 65 77 20 54 72  ruct TreeView Tr
7c50: 65 65 56 69 65 77 3b 0a 74 79 70 65 64 65 66 20  eeView;.typedef 
7c60: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 54  struct Trigger T
7c70: 72 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20  rigger;.typedef 
7c80: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72  struct TriggerPr
7c90: 67 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79  g TriggerPrg;.ty
7ca0: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
7cb0: 67 67 65 72 53 74 65 70 20 54 72 69 67 67 65 72  ggerStep Trigger
7cc0: 53 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74  Step;.typedef st
7cd0: 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63  ruct UnpackedRec
7ce0: 6f 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ord UnpackedReco
7cf0: 72 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  rd;.typedef stru
7d00: 63 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65  ct VTable VTable
7d10: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7d20: 20 56 74 61 62 43 74 78 20 56 74 61 62 43 74 78   VtabCtx VtabCtx
7d30: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7d40: 20 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a   Walker Walker;.
7d50: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57  typedef struct W
7d60: 68 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e  hereInfo WhereIn
7d70: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
7d80: 63 74 20 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f  ct With With;../
7d90: 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75 72 63  *.** Defer sourc
7da0: 69 6e 67 20 76 64 62 65 2e 68 20 61 6e 64 20 62  ing vdbe.h and b
7db0: 74 72 65 65 2e 68 20 75 6e 74 69 6c 20 61 66 74  tree.h until aft
7dc0: 65 72 20 74 68 65 20 22 75 38 22 20 61 6e 64 20  er the "u8" and 
7dd0: 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65 72  .** "BusyHandler
7de0: 22 20 74 79 70 65 64 65 66 73 2e 20 76 64 62 65  " typedefs. vdbe
7df0: 2e 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65 73  .h also requires
7e00: 20 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f 70   a few of the op
7e10: 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  aque.** pointer 
7e20: 74 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e 63  types (i.e. Func
7e30: 44 65 66 29 20 64 65 66 69 6e 65 64 20 61 62 6f  Def) defined abo
7e40: 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  ve..*/.#include 
7e50: 22 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75  "btree.h".#inclu
7e60: 64 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e 63  de "vdbe.h".#inc
7e70: 6c 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a 23  lude "pager.h".#
7e80: 69 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65 2e  include "pcache.
7e90: 68 22 0a 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73  h"..#include "os
7ea0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75  .h".#include "mu
7eb0: 74 65 78 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45  tex.h".../*.** E
7ec0: 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c  ach database fil
7ed0: 65 20 74 6f 20 62 65 20 61 63 63 65 73 73 65 64  e to be accessed
7ee0: 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 20 69   by the system i
7ef0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  s an instance.**
7f00: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
7f10: 67 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68  g structure.  Th
7f20: 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79  ere are normally
7f30: 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73 74   two of these st
7f40: 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74  ructures.** in t
7f50: 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20  he sqlite.aDb[] 
7f60: 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20 69  array.  aDb[0] i
7f70: 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
7f80: 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20  ase file and.** 
7f90: 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64 61  aDb[1] is the da
7fa0: 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
7fb0: 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61   to hold tempora
7fc0: 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64 69  ry tables.  Addi
7fd0: 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61  tional.** databa
7fe0: 73 65 73 20 6d 61 79 20 62 65 20 61 74 74 61 63  ses may be attac
7ff0: 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44  hed..*/.struct D
8000: 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  b {.  char *zNam
8010: 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  e;         /* Na
8020: 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74 61 62  me of this datab
8030: 61 73 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a  ase */.  Btree *
8040: 70 42 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  pBt;          /*
8050: 20 54 68 65 20 42 2a 54 72 65 65 20 73 74 72 75   The B*Tree stru
8060: 63 74 75 72 65 20 66 6f 72 20 74 68 69 73 20 64  cture for this d
8070: 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a  atabase file */.
8080: 20 20 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65    u8 safety_leve
8090: 6c 3b 20 20 20 20 20 2f 2a 20 48 6f 77 20 61 67  l;     /* How ag
80a0: 67 72 65 73 73 69 76 65 20 61 74 20 73 79 6e 63  gressive at sync
80b0: 69 6e 67 20 64 61 74 61 20 74 6f 20 64 69 73 6b  ing data to disk
80c0: 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
80d0: 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f  chema;     /* Po
80e0: 69 6e 74 65 72 20 74 6f 20 64 61 74 61 62 61 73  inter to databas
80f0: 65 20 73 63 68 65 6d 61 20 28 70 6f 73 73 69 62  e schema (possib
8100: 6c 79 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b  ly shared) */.};
8110: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
8120: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
8130: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 73  wing structure s
8140: 74 6f 72 65 73 20 61 20 64 61 74 61 62 61 73 65  tores a database
8150: 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d   schema..**.** M
8160: 6f 73 74 20 53 63 68 65 6d 61 20 6f 62 6a 65 63  ost Schema objec
8170: 74 73 20 61 72 65 20 61 73 73 6f 63 69 61 74 65  ts are associate
8180: 64 20 77 69 74 68 20 61 20 42 74 72 65 65 2e 20  d with a Btree. 
8190: 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20 69   The exception i
81a0: 73 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d 61 20  s.** the Schema 
81b0: 66 6f 72 20 74 68 65 20 54 45 4d 50 20 64 61 74  for the TEMP dat
81c0: 61 62 61 65 73 20 28 73 71 6c 69 74 65 33 2e 61  abaes (sqlite3.a
81d0: 44 62 5b 31 5d 29 20 77 68 69 63 68 20 69 73 20  Db[1]) which is 
81e0: 66 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a  free-standing..*
81f0: 2a 20 49 6e 20 73 68 61 72 65 64 20 63 61 63 68  * In shared cach
8200: 65 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65  e mode, a single
8210: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 63   Schema object c
8220: 61 6e 20 62 65 20 73 68 61 72 65 64 20 62 79 20  an be shared by 
8230: 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65  multiple.** Btre
8240: 65 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f  es that refer to
8250: 20 74 68 65 20 73 61 6d 65 20 75 6e 64 65 72 6c   the same underl
8260: 79 69 6e 67 20 42 74 53 68 61 72 65 64 20 6f 62  ying BtShared ob
8270: 6a 65 63 74 2e 0a 2a 2a 20 0a 2a 2a 20 53 63 68  ject..** .** Sch
8280: 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ema objects are 
8290: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
82a0: 61 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74  allocated when t
82b0: 68 65 20 6c 61 73 74 20 42 74 72 65 65 20 74 68  he last Btree th
82c0: 61 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73  at.** references
82d0: 20 74 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79   them is destroy
82e0: 65 64 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53  ed.   The TEMP S
82f0: 63 68 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c  chema is manuall
8300: 79 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71  y freed by.** sq
8310: 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a  lite3_close()..*
8320: 0a 2a 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73  .** A thread mus
8330: 74 20 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d  t be holding a m
8340: 75 74 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72  utex on the corr
8350: 65 73 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20  esponding Btree 
8360: 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61  in order.** to a
8370: 63 63 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e  ccess Schema con
8380: 74 65 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c  tent.  This impl
8390: 69 65 73 20 74 68 61 74 20 74 68 65 20 74 68 72  ies that the thr
83a0: 65 61 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65  ead must also be
83b0: 0a 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75  .** holding a mu
83c0: 74 65 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74  tex on the sqlit
83d0: 65 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f  e3 connection po
83e0: 69 6e 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20  inter that owns 
83f0: 74 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f  the Btree..** Fo
8400: 72 20 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c  r a TEMP Schema,
8410: 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63   only the connec
8420: 74 69 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65  tion mutex is re
8430: 71 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63  quired..*/.struc
8440: 74 20 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74  t Schema {.  int
8450: 20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20   schema_cookie; 
8460: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63    /* Database sc
8470: 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d  hema version num
8480: 62 65 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ber for this fil
8490: 65 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65  e */.  int iGene
84a0: 72 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47  ration;     /* G
84b0: 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65  eneration counte
84c0: 72 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20  r.  Incremented 
84d0: 77 69 74 68 20 65 61 63 68 20 63 68 61 6e 67 65  with each change
84e0: 20 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61   */.  Hash tblHa
84f0: 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  sh;        /* Al
8500: 6c 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64  l tables indexed
8510: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
8520: 73 68 20 69 64 78 48 61 73 68 3b 20 20 20 20 20  sh idxHash;     
8530: 20 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64     /* All (named
8540: 29 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65  ) indices indexe
8550: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
8560: 61 73 68 20 74 72 69 67 48 61 73 68 3b 20 20 20  ash trigHash;   
8570: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67      /* All trigg
8580: 65 72 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  ers indexed by n
8590: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b  ame */.  Hash fk
85a0: 65 79 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a  eyHash;       /*
85b0: 20 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79   All foreign key
85c0: 73 20 62 79 20 72 65 66 65 72 65 6e 63 65 64 20  s by referenced 
85d0: 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  table name */.  
85e0: 54 61 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20  Table *pSeqTab; 
85f0: 20 20 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69       /* The sqli
8600: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
8610: 65 20 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e  e used by AUTOIN
8620: 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20  CREMENT */.  u8 
8630: 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20  file_format;    
8640: 20 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d    /* Schema form
8650: 61 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74  at version for t
8660: 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38  his file */.  u8
8670: 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
8680: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
8690: 69 6e 67 20 75 73 65 64 20 62 79 20 74 68 69 73  ing used by this
86a0: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75   database */.  u
86b0: 31 36 20 73 63 68 65 6d 61 46 6c 61 67 73 3b 20  16 schemaFlags; 
86c0: 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73      /* Flags ass
86d0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
86e0: 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e  s schema */.  in
86f0: 74 20 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20  t cache_size;   
8700: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
8710: 70 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20  pages to use in 
8720: 74 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a  the cache */.};.
8730: 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  ./*.** These mac
8740: 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
8750: 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72  to test, set, or
8760: 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74   clear bits in t
8770: 68 65 20 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d  he .** Db.pSchem
8780: 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  a->flags field..
8790: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73  */.#define DbHas
87a0: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
87b0: 20 20 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49      (((D)->aDb[I
87c0: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
87d0: 61 46 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29  aFlags&(P))==(P)
87e0: 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 41  ).#define DbHasA
87f0: 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  nyProperty(D,I,P
8800: 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d  )  (((D)->aDb[I]
8810: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
8820: 46 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23  Flags&(P))!=0).#
8830: 64 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70  define DbSetProp
8840: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20  erty(D,I,P)     
8850: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
8860: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
8870: 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 44 62  |=(P).#define Db
8880: 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 44 2c  ClearProperty(D,
8890: 49 2c 50 29 20 20 20 28 44 29 2d 3e 61 44 62 5b  I,P)   (D)->aDb[
88a0: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  I].pSchema->sche
88b0: 6d 61 46 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f  maFlags&=~(P)../
88c0: 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
88d0: 75 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70  ues for the DB.p
88e0: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69  Schema->flags fi
88f0: 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44  eld..**.** The D
8900: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66  B_SchemaLoaded f
8910: 6c 61 67 20 69 73 20 73 65 74 20 61 66 74 65 72  lag is set after
8920: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
8930: 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a  hema has been.**
8940: 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72   read into inter
8950: 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e  nal hash tables.
8960: 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65  .**.** DB_Unrese
8970: 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61  tViews means tha
8980: 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69  t one or more vi
8990: 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20  ews have column 
89a0: 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61  names that.** ha
89b0: 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f  ve been filled o
89c0: 75 74 2e 20 20 49 66 20 74 68 65 20 73 63 68 65  ut.  If the sche
89d0: 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73  ma changes, thes
89e0: 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d  e column names m
89f0: 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20  ight.** changes 
8a00: 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77 20  and so the view 
8a10: 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20  will need to be 
8a20: 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  reset..*/.#defin
8a30: 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65  e DB_SchemaLoade
8a40: 64 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20  d    0x0001  /* 
8a50: 54 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 62  The schema has b
8a60: 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64  een loaded */.#d
8a70: 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74  efine DB_Unreset
8a80: 56 69 65 77 73 20 20 20 20 30 78 30 30 30 32 20  Views    0x0002 
8a90: 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68   /* Some views h
8aa0: 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75  ave defined colu
8ab0: 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66  mn names */.#def
8ac0: 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20  ine DB_Empty    
8ad0: 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
8ae0: 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d  * The file is em
8af0: 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79  pty (length 0 by
8b00: 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  tes) */../*.** T
8b10: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66  he number of dif
8b20: 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20  ferent kinds of 
8b30: 74 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20  things that can 
8b40: 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73  be limited.** us
8b50: 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ing the sqlite3_
8b60: 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63  limit() interfac
8b70: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  e..*/.#define SQ
8b80: 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51  LITE_N_LIMIT (SQ
8b90: 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45  LITE_LIMIT_WORKE
8ba0: 52 5f 54 48 52 45 41 44 53 2b 31 29 0a 0a 2f 2a  R_THREADS+1)../*
8bb0: 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** Lookaside ma
8bc0: 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66  lloc is a set of
8bd0: 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66   fixed-size buff
8be0: 65 72 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ers that can be 
8bf0: 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73  used.** to satis
8c00: 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65  fy small transie
8c10: 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  nt memory alloca
8c20: 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f  tion requests fo
8c30: 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73  r objects.** ass
8c40: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70  ociated with a p
8c50: 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61  articular databa
8c60: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
8c70: 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f  The use of.** lo
8c80: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70  okaside malloc p
8c90: 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69 66  rovides a signif
8ca0: 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63  icant performanc
8cb0: 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a  e enhancement.**
8cc0: 20 28 61 70 70 72 6f 78 20 31 30 25 29 20 62 79   (approx 10%) by
8cd0: 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f   avoiding numero
8ce0: 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72  us malloc/free r
8cf0: 65 71 75 65 73 74 73 20 77 68 69 6c 65 20 70 61  equests while pa
8d00: 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61  rsing.** SQL sta
8d10: 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54  tements..**.** T
8d20: 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72  he Lookaside str
8d30: 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e  ucture holds con
8d40: 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72  figuration infor
8d50: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
8d60: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** lookaside ma
8d70: 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20  lloc subsystem. 
8d80: 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20   Each available 
8d90: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
8da0: 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b  n in.** the look
8db0: 61 73 69 64 65 20 73 75 62 73 79 73 74 65 6d 20  aside subsystem 
8dc0: 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c  is stored on a l
8dd0: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f  inked list of Lo
8de0: 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f  okasideSlot.** o
8df0: 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f  bjects..**.** Lo
8e00: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
8e10: 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c  ons are only all
8e20: 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73  owed for objects
8e30: 20 74 68 61 74 20 61 72 65 20 61 73 73 6f 63 69   that are associ
8e40: 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70  ated.** 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: 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e  Hence, schema in
8e80: 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74  formation cannot
8e90: 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e  .** be stored in
8ea0: 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75   lookaside becau
8eb0: 73 65 20 69 6e 20 73 68 61 72 65 64 20 63 61 63  se in shared cac
8ec0: 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65  he mode the sche
8ed0: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  ma information.*
8ee0: 2a 20 69 73 20 73 68 61 72 65 64 20 62 79 20 6d  * is shared by m
8ef0: 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65  ultiple database
8f00: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54   connections.  T
8f10: 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20  herefore, while 
8f20: 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d  parsing.** schem
8f30: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74  a information, t
8f40: 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e  he Lookaside.bEn
8f50: 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c  abled flag is cl
8f60: 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a  eared so that.**
8f70: 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   lookaside alloc
8f80: 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75  ations are not u
8f90: 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74  sed to construct
8fa0: 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65   the schema obje
8fb0: 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c  cts..*/.struct L
8fc0: 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 31 36  ookaside {.  u16
8fd0: 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20   sz;            
8fe0: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
8ff0: 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62  each buffer in b
9000: 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e  ytes */.  u8 bEn
9010: 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  abled;          
9020: 20 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64 69    /* False to di
9030: 73 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73  sable new lookas
9040: 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ide allocations 
9050: 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65  */.  u8 bMalloce
9060: 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
9070: 54 72 75 65 20 69 66 20 70 53 74 61 72 74 20 6f  True if pStart o
9080: 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c  btained from sql
9090: 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f  ite3_malloc() */
90a0: 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20  .  int nOut;    
90b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
90c0: 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72 73 20  mber of buffers 
90d0: 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65  currently checke
90e0: 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d  d out */.  int m
90f0: 78 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  xOut;           
9100: 20 20 20 2f 2a 20 48 69 67 68 77 61 74 65 72 20     /* Highwater 
9110: 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f  mark for nOut */
9120: 0a 20 20 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d  .  int anStat[3]
9130: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a  ;          /* 0:
9140: 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65 20   hits.  1: size 
9150: 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c  misses.  2: full
9160: 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f   misses */.  Loo
9170: 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65  kasideSlot *pFre
9180: 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  e;   /* List of 
9190: 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72  available buffer
91a0: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74  s */.  void *pSt
91b0: 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  art;           /
91c0: 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f 66 20  * First byte of 
91d0: 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79  available memory
91e0: 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64   space */.  void
91f0: 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
9200: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
9210: 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76  e past end of av
9220: 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f  ailable space */
9230: 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61  .};.struct Looka
9240: 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f  sideSlot {.  Loo
9250: 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78  kasideSlot *pNex
9260: 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75  t;    /* Next bu
9270: 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74  ffer in the list
9280: 20 6f 66 20 66 72 65 65 20 62 75 66 66 65 72 73   of free buffers
9290: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
92a0: 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66  hash table for f
92b0: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
92c0: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20  ons..**.** Hash 
92d0: 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74 72  each FuncDef str
92e0: 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20  ucture into one 
92f0: 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48 61  of the FuncDefHa
9300: 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a  sh.a[] slots..**
9310: 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20   Collisions are 
9320: 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e 70  on the FuncDef.p
9330: 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73  Hash chain..*/.s
9340: 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73  truct FuncDefHas
9350: 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61  h {.  FuncDef *a
9360: 5b 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48  [23];       /* H
9370: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
9380: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23  nctions */.};..#
9390: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
93a0: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
93b0: 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69  ./*.** Informati
93c0: 6f 6e 20 68 65 6c 64 20 69 6e 20 74 68 65 20 22  on held in the "
93d0: 73 71 6c 69 74 65 33 22 20 64 61 74 61 62 61 73  sqlite3" databas
93e0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a  e connection obj
93f0: 65 63 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20  ect and used.** 
9400: 74 6f 20 6d 61 6e 61 67 65 20 75 73 65 72 20 61  to manage user a
9410: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a  uthentication..*
9420: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
9430: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
9440: 68 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  h sqlite3_userau
9450: 74 68 3b 0a 73 74 72 75 63 74 20 73 71 6c 69 74  th;.struct sqlit
9460: 65 33 5f 75 73 65 72 61 75 74 68 20 7b 0a 20 20  e3_userauth {.  
9470: 75 38 20 61 75 74 68 4c 65 76 65 6c 3b 20 20 20  u8 authLevel;   
9480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9490: 20 43 75 72 72 65 6e 74 20 61 75 74 68 65 6e 74   Current authent
94a0: 69 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f  ication level */
94b0: 0a 20 20 69 6e 74 20 6e 41 75 74 68 50 57 3b 20  .  int nAuthPW; 
94c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94d0: 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
94e0: 7a 41 75 74 68 50 57 20 69 6e 20 62 79 74 65 73  zAuthPW in bytes
94f0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74   */.  char *zAut
9500: 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20  hPW;            
9510: 20 20 20 20 2f 2a 20 50 61 73 73 77 6f 72 64 20      /* Password 
9520: 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69  used to authenti
9530: 63 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  cate */.  char *
9540: 7a 41 75 74 68 55 73 65 72 3b 20 20 20 20 20 20  zAuthUser;      
9550: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20          /* User 
9560: 6e 61 6d 65 20 75 73 65 64 20 74 6f 20 61 75 74  name used to aut
9570: 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a  henticate */.};.
9580: 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  ./* Allowed valu
9590: 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 75  es for sqlite3_u
95a0: 73 65 72 61 75 74 68 2e 61 75 74 68 4c 65 76 65  serauth.authLeve
95b0: 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  l */.#define UAU
95c0: 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30  TH_Unknown     0
95d0: 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69       /* Authenti
95e0: 63 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63  cation not yet c
95f0: 68 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e  hecked */.#defin
9600: 65 20 55 41 55 54 48 5f 46 61 69 6c 20 20 20 20  e UAUTH_Fail    
9610: 20 20 20 20 31 20 20 20 20 20 2f 2a 20 55 73 65      1     /* Use
9620: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
9630: 20 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69   failed */.#defi
9640: 6e 65 20 55 41 55 54 48 5f 55 73 65 72 20 20 20  ne UAUTH_User   
9650: 20 20 20 20 20 32 20 20 20 20 20 2f 2a 20 41 75       2     /* Au
9660: 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61  thenticated as a
9670: 20 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a   normal user */.
9680: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 41 64  #define UAUTH_Ad
9690: 6d 69 6e 20 20 20 20 20 20 20 33 20 20 20 20 20  min       3     
96a0: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64  /* Authenticated
96b0: 20 61 73 20 61 6e 20 61 64 6d 69 6e 69 73 74 72   as an administr
96c0: 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63  ator */../* Func
96d0: 74 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20  tions used only 
96e0: 62 79 20 75 73 65 72 20 61 75 74 68 6f 72 69 7a  by user authoriz
96f0: 61 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69  ation logic */.i
9700: 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75  nt sqlite3UserAu
9710: 74 68 54 61 62 6c 65 28 63 6f 6e 73 74 20 63 68  thTable(const ch
9720: 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
9730: 33 55 73 65 72 41 75 74 68 43 68 65 63 6b 4c 6f  3UserAuthCheckLo
9740: 67 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  gin(sqlite3*,con
9750: 73 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76  st char*,u8*);.v
9760: 6f 69 64 20 73 71 6c 69 74 65 33 55 73 65 72 41  oid sqlite3UserA
9770: 75 74 68 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  uthInit(sqlite3*
9780: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
9790: 72 79 70 74 46 75 6e 63 28 73 71 6c 69 74 65 33  ryptFunc(sqlite3
97a0: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
97b0: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
97c0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
97d0: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
97e0: 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ATION */../*.** 
97f0: 74 79 70 65 64 65 66 20 66 6f 72 20 74 68 65 20  typedef for the 
9800: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61  authorization ca
9810: 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e  llback function.
9820: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
9830: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
9840: 41 54 49 4f 4e 0a 20 20 74 79 70 65 64 65 66 20  ATION.  typedef 
9850: 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61  int (*sqlite3_xa
9860: 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  uth)(void*,int,c
9870: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
9880: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
9890: 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  r*,.            
98a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98b0: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20     const char*, 
98c0: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
98d0: 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 69 6e  lse.  typedef in
98e0: 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74  t (*sqlite3_xaut
98f0: 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  h)(void*,int,con
9900: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
9910: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
9920: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
9930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9940: 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23   const char*);.#
9950: 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  endif.../*.** Ea
9960: 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
9970: 65 63 74 69 6f 6e 20 69 73 20 61 6e 20 69 6e 73  ection is an ins
9980: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
9990: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
99a0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69  ..*/.struct sqli
99b0: 74 65 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  te3 {.  sqlite3_
99c0: 76 66 73 20 2a 70 56 66 73 3b 20 20 20 20 20 20  vfs *pVfs;      
99d0: 20 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e 74 65        /* OS Inte
99e0: 72 66 61 63 65 20 2a 2f 0a 20 20 73 74 72 75 63  rface */.  struc
99f0: 74 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20  t Vdbe *pVdbe;  
9a00: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74           /* List
9a10: 20 6f 66 20 61 63 74 69 76 65 20 76 69 72 74 75   of active virtu
9a20: 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 20  al machines */. 
9a30: 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43   CollSeq *pDfltC
9a40: 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  oll;           /
9a50: 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f  * The default co
9a60: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
9a70: 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20 20 73   (BINARY) */.  s
9a80: 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75  qlite3_mutex *mu
9a90: 74 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  tex;         /* 
9aa0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78  Connection mutex
9ab0: 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b 20 20   */.  Db *aDb;  
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ad0: 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65      /* All backe
9ae0: 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62  nds */.  int nDb
9af0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9b00: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
9b10: 20 6f 66 20 62 61 63 6b 65 6e 64 73 20 63 75 72   of backends cur
9b20: 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f  rently in use */
9b30: 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 20 20 20  .  int flags;   
9b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b50: 20 2f 2a 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75   /* Miscellaneou
9b60: 73 20 66 6c 61 67 73 2e 20 53 65 65 20 62 65 6c  s flags. See bel
9b70: 6f 77 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74  ow */.  i64 last
9b80: 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20 20  Rowid;          
9b90: 20 20 20 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f        /* ROWID o
9ba0: 66 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69 6e  f most recent in
9bb0: 73 65 72 74 20 28 73 65 65 20 61 62 6f 76 65 29  sert (see above)
9bc0: 20 2a 2f 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70   */.  i64 szMmap
9bd0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9be0: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d      /* Default m
9bf0: 6d 61 70 5f 73 69 7a 65 20 73 65 74 74 69 6e 67  map_size setting
9c00: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
9c10: 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20  nt openFlags;   
9c20: 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61 73      /* Flags pas
9c30: 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f 76  sed to sqlite3_v
9c40: 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20  fs.xOpen() */.  
9c50: 69 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20 20  int errCode;    
9c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9c70: 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72   Most recent err
9c80: 6f 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45 5f  or code (SQLITE_
9c90: 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d  *) */.  int errM
9ca0: 61 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ask;            
9cb0: 20 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75 6c        /* & resul
9cc0: 74 20 63 6f 64 65 73 20 77 69 74 68 20 74 68 69  t codes with thi
9cd0: 73 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  s before returni
9ce0: 6e 67 20 2a 2f 0a 20 20 75 31 36 20 64 62 4f 70  ng */.  u16 dbOp
9cf0: 74 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  tFlags;         
9d00: 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 74        /* Flags t
9d10: 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61 62 6c 65  o enable/disable
9d20: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a   optimizations *
9d30: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
9d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d50: 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
9d60: 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43  ng */.  u8 autoC
9d70: 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20  ommit;          
9d80: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75 74        /* The aut
9d90: 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a  o-commit flag. *
9da0: 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f 72  /.  u8 temp_stor
9db0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
9dc0: 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20    /* 1: file 2: 
9dd0: 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75 6c  memory 0: defaul
9de0: 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63  t */.  u8 malloc
9df0: 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20 20  Failed;         
9e00: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
9e10: 77 65 20 68 61 76 65 20 73 65 65 6e 20 61 20 6d  we have seen a m
9e20: 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f  alloc failure */
9e30: 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f  .  u8 dfltLockMo
9e40: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
9e50: 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b   /* Default lock
9e60: 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74  ing-mode for att
9e70: 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20 20 73  ached dbs */.  s
9e80: 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78 74 41  igned char nextA
9e90: 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a 20  utovac;      /* 
9ea0: 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e 67 20  Autovac setting 
9eb0: 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20  after VACUUM if 
9ec0: 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75 70 70  >=0 */.  u8 supp
9ed0: 72 65 73 73 45 72 72 3b 20 20 20 20 20 20 20 20  ressErr;        
9ee0: 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74         /* Do not
9ef0: 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d 65 73   issue error mes
9f00: 73 61 67 65 73 20 69 66 20 74 72 75 65 20 2a 2f  sages if true */
9f10: 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66  .  u8 vtabOnConf
9f20: 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  lict;           
9f30: 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
9f40: 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61 62 5f  urn for s3_vtab_
9f50: 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f  on_conflict() */
9f60: 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61 63 74  .  u8 isTransact
9f70: 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  ionSavepoint;   
9f80: 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20   /* True if the 
9f90: 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f  outermost savepo
9fa0: 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f 0a 20  int is a TS */. 
9fb0: 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69 7a   int nextPagesiz
9fc0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
9fd0: 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74 65 72  * Pagesize after
9fe0: 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f   VACUUM if >0 */
9ff0: 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20 20  .  u32 magic;   
a000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a010: 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65 72   /* Magic number
a020: 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62 72   for detect libr
a030: 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20  ary misuse */.  
a040: 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20 20  int nChange;    
a050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a060: 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   Value returned 
a070: 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  by sqlite3_chang
a080: 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54  es() */.  int nT
a090: 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20 20  otalChange;     
a0a0: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
a0b0: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
a0c0: 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67  ite3_total_chang
a0d0: 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c  es() */.  int aL
a0e0: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49  imit[SQLITE_N_LI
a0f0: 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74  MIT];   /* Limit
a100: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 53  s */.  int nMaxS
a110: 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20 20 20 20  orterMmap;      
a120: 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
a130: 73 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e 73 20  size of regions 
a140: 6d 61 70 70 65 64 20 62 79 20 73 6f 72 74 65 72  mapped by sorter
a150: 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 71 6c   */.  struct sql
a160: 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20 20  ite3InitInfo {  
a170: 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69      /* Informati
a180: 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67 20 69  on used during i
a190: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f  nitialization */
a1a0: 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75 6d  .    int newTnum
a1b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a1c0: 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66 20   /* Rootpage of 
a1d0: 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69 74  table being init
a1e0: 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75  ialized */.    u
a1f0: 38 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  8 iDb;          
a200: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
a210: 69 63 68 20 64 62 20 66 69 6c 65 20 69 73 20 62  ich db file is b
a220: 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
a230: 20 2a 2f 0a 20 20 20 20 75 38 20 62 75 73 79 3b   */.    u8 busy;
a240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a250: 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66 20 63      /* TRUE if c
a260: 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c  urrently initial
a270: 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75 38 20  izing */.    u8 
a280: 6f 72 70 68 61 6e 54 72 69 67 67 65 72 3b 20 20  orphanTrigger;  
a290: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74           /* Last
a2a0: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6f 72   statement is or
a2b0: 70 68 61 6e 65 64 20 54 45 4d 50 20 74 72 69 67  phaned TEMP trig
a2c0: 67 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 69 6d  ger */.    u8 im
a2d0: 70 6f 73 74 65 72 54 61 62 6c 65 3b 20 20 20 20  posterTable;    
a2e0: 20 20 20 20 20 20 20 2f 2a 20 42 75 69 6c 64 69         /* Buildi
a2f0: 6e 67 20 61 6e 20 69 6d 70 6f 73 74 65 72 20 74  ng an imposter t
a300: 61 62 6c 65 20 2a 2f 0a 20 20 7d 20 69 6e 69 74  able */.  } init
a310: 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63 74  ;.  int nVdbeAct
a320: 69 76 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ive;            
a330: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56    /* Number of V
a340: 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20 72  DBEs currently r
a350: 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  unning */.  int 
a360: 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20 20 20  nVdbeRead;      
a370: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
a380: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44  ber of active VD
a390: 42 45 73 20 74 68 61 74 20 72 65 61 64 20 6f 72  BEs that read or
a3a0: 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20   write */.  int 
a3b0: 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20 20 20  nVdbeWrite;     
a3c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
a3d0: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44  ber of active VD
a3e0: 42 45 73 20 74 68 61 74 20 72 65 61 64 20 61 6e  BEs that read an
a3f0: 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74  d write */.  int
a400: 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20 20   nVdbeExec;     
a410: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
a420: 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63  mber of nested c
a430: 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63  alls to VdbeExec
a440: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44 65  () */.  int nVDe
a450: 73 74 72 6f 79 3b 20 20 20 20 20 20 20 20 20 20  stroy;          
a460: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
a470: 6f 66 20 61 63 74 69 76 65 20 4f 50 5f 56 44 65  of active OP_VDe
a480: 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73  stroy operations
a490: 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e   */.  int nExten
a4a0: 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  sion;           
a4b0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
a4c0: 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69 6f   loaded extensio
a4d0: 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61  ns */.  void **a
a4e0: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
a4f0: 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f        /* Array o
a500: 66 20 73 68 61 72 65 64 20 6c 69 62 72 61 72 79  f shared library
a510: 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 76 6f   handles */.  vo
a520: 69 64 20 28 2a 78 54 72 61 63 65 29 28 76 6f 69  id (*xTrace)(voi
a530: 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  d*,const char*);
a540: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 61 63 65          /* Trace
a550: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
a560: 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20  oid *pTraceArg; 
a570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a580: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
a590: 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63  ment to the trac
a5a0: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
a5b0: 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29  void (*xProfile)
a5c0: 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61  (void*,const cha
a5d0: 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f  r*,u64);  /* Pro
a5e0: 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  filing function 
a5f0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66  */.  void *pProf
a600: 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20  ileArg;         
a610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a620: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72  * Argument to pr
a630: 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a  ofile function *
a640: 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69  /.  void *pCommi
a650: 74 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  tArg;           
a660: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
a670: 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c  t to xCommitCall
a680: 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20 69  back() */   .  i
a690: 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c  nt (*xCommitCall
a6a0: 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20  back)(void*);   
a6b0: 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65   /* Invoked at e
a6c0: 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a  very commit. */.
a6d0: 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63    void *pRollbac
a6e0: 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  kArg;           
a6f0: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
a700: 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c  to xRollbackCall
a710: 62 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20 76  back() */   .  v
a720: 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43  oid (*xRollbackC
a730: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b  allback)(void*);
a740: 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65   /* Invoked at e
a750: 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a  very commit. */.
a760: 20 20 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41    void *pUpdateA
a770: 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70  rg;.  void (*xUp
a780: 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f  dateCallback)(vo
a790: 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63  id*,int, const c
a7a0: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
a7b0: 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a  ,sqlite_int64);.
a7c0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
a7d0: 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a  MIT_WAL.  int (*
a7e0: 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f  xWalCallback)(vo
a7f0: 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c  id *, sqlite3 *,
a800: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
a810: 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61  nt);.  void *pWa
a820: 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76  lArg;.#endif.  v
a830: 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64  oid(*xCollNeeded
a840: 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
a850: 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f  ,int eTextRep,co
a860: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
a870: 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31  id(*xCollNeeded1
a880: 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  6)(void*,sqlite3
a890: 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63  *,int eTextRep,c
a8a0: 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76  onst void*);.  v
a8b0: 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64  oid *pCollNeeded
a8c0: 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  Arg;.  sqlite3_v
a8d0: 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20  alue *pErr;     
a8e0: 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63       /* Most rec
a8f0: 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67  ent error messag
a900: 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  e */.  union {. 
a910: 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20     volatile int 
a920: 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f  isInterrupted; /
a930: 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69 74 65  * True if sqlite
a940: 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73 20  3_interrupt has 
a950: 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20  been called */. 
a960: 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65     double notUse
a970: 64 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  d1;            /
a980: 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20  * Spacer */.  } 
a990: 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20  u1;.  Lookaside 
a9a0: 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20  lookaside;      
a9b0: 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65      /* Lookaside
a9c0: 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72   malloc configur
a9d0: 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66  ation */.#ifndef
a9e0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
a9f0: 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c  HORIZATION.  sql
aa00: 69 74 65 33 5f 78 61 75 74 68 20 78 41 75 74 68  ite3_xauth xAuth
aa10: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63  ;          /* Ac
aa20: 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69  cess authorizati
aa30: 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  on function */. 
aa40: 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b   void *pAuthArg;
aa50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
aa60: 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74  * 1st argument t
aa70: 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74  o the access aut
aa80: 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65  h function */.#e
aa90: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
aaa0: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
aab0: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74  S_CALLBACK.  int
aac0: 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f   (*xProgress)(vo
aad0: 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68  id *);     /* Th
aae0: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
aaf0: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
ab00: 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20  ProgressArg;    
ab10: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
ab20: 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65  nt to the progre
ab30: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ss callback */. 
ab40: 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72   unsigned nProgr
ab50: 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f  essOps;        /
ab60: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f  * Number of opco
ab70: 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73  des for progress
ab80: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e   callback */.#en
ab90: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
aba0: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
abb0: 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61  ABLE.  int nVTra
abc0: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
abd0: 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65       /* Allocate
abe0: 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e  d size of aVTran
abf0: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64  s */.  Hash aMod
ac00: 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ule;            
ac10: 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65       /* populate
ac20: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65  d by sqlite3_cre
ac30: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
ac40: 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62    VtabCtx *pVtab
ac50: 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ctx;            
ac60: 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61  /* Context for a
ac70: 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65  ctive vtab conne
ac80: 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56  ct/create */.  V
ac90: 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b  Table **aVTrans;
aca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
acb0: 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77  Virtual tables w
acc0: 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63  ith open transac
acd0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c  tions */.  VTabl
ace0: 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20  e *pDisconnect; 
acf0: 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74     /* Disconnect
ad00: 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73   these in next s
ad10: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
ad20: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e   */.#endif.  Fun
ad30: 63 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b 20  cDefHash aFunc; 
ad40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61             /* Ha
ad50: 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e  sh table of conn
ad60: 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  ection functions
ad70: 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c   */.  Hash aColl
ad80: 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Seq;            
ad90: 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61      /* All colla
ada0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a  ting sequences *
adb0: 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20  /.  BusyHandler 
adc0: 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20  busyHandler;    
add0: 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61    /* Busy callba
ade0: 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74  ck */.  Db aDbSt
adf0: 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20  atic[2];        
ae00: 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20        /* Static 
ae10: 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20  space for the 2 
ae20: 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73  default backends
ae30: 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
ae40: 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20  *pSavepoint;    
ae50: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
ae60: 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73  ctive savepoints
ae70: 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69   */.  int busyTi
ae80: 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20  meout;          
ae90: 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64      /* Busy hand
aea0: 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20  ler timeout, in 
aeb0: 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  msec */.  int nS
aec0: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
aed0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
aee0: 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63  r of non-transac
aef0: 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  tion savepoints 
af00: 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d  */.  int nStatem
af10: 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ent;            
af20: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
af30: 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74  nested statement
af40: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a  -transactions  *
af50: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
af60: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
af70: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
af80: 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68  d constraints th
af90: 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  is transaction. 
afa0: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
afb0: 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
afc0: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
afd0: 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e  ed immediate con
afe0: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  straints */.  in
aff0: 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b  t *pnBytesFreed;
b000: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
b010: 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72  f not NULL, incr
b020: 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62  ement this in Db
b030: 46 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65 66  Free() */.#ifdef
b040: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
b050: 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f  NLOCK_NOTIFY.  /
b060: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
b070: 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c  variables are al
b080: 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 74  l protected by t
b090: 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52  he STATIC_MASTER
b0a0: 20 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f   .  ** mutex, no
b0b0: 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74  t by sqlite3.mut
b0c0: 65 78 2e 20 54 68 65 79 20 61 72 65 20 75 73 65  ex. They are use
b0d0: 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74  d by code in not
b0e0: 69 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20 20 2a  ify.c. .  **.  *
b0f0: 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b  * When X.pUnlock
b100: 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74  Connection==Y, t
b110: 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58  hat means that X
b120: 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20   is waiting for 
b130: 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b  Y to.  ** unlock
b140: 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20   so that it can 
b150: 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20  proceed..  **.  
b160: 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b  ** When X.pBlock
b170: 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59  ingConnection==Y
b180: 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
b190: 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74  t something that
b1a0: 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72   X tried.  ** tr
b1b0: 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74  ied to do recent
b1c0: 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68 20 61  ly failed with a
b1d0: 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  n SQLITE_LOCKED 
b1e0: 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63  error due to loc
b1f0: 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20  ks.  ** held by 
b200: 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  Y..  */.  sqlite
b210: 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e  3 *pBlockingConn
b220: 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65  ection; /* Conne
b230: 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65  ction that cause
b240: 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  d SQLITE_LOCKED 
b250: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55  */.  sqlite3 *pU
b260: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b  nlockConnection;
b270: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
b280: 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63  nnection to watc
b290: 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a  h for unlock */.
b2a0: 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41    void *pUnlockA
b2b0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
b2c0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
b2d0: 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f  ent to xUnlockNo
b2e0: 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tify */.  void (
b2f0: 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28  *xUnlockNotify)(
b300: 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20  void **, int);  
b310: 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79  /* Unlock notify
b320: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73   callback */.  s
b330: 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f  qlite3 *pNextBlo
b340: 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  cked;        /* 
b350: 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20  Next in list of 
b360: 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e  all blocked conn
b370: 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69  ections */.#endi
b380: 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
b390: 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54  USER_AUTHENTICAT
b3a0: 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 75 73  ION.  sqlite3_us
b3b0: 65 72 61 75 74 68 20 61 75 74 68 3b 20 20 20 20  erauth auth;    
b3c0: 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68      /* User auth
b3d0: 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72  entication infor
b3e0: 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66  mation */.#endif
b3f0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63  .};../*.** A mac
b400: 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74  ro to discover t
b410: 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61  he encoding of a
b420: 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64   database..*/.#d
b430: 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43  efine SCHEMA_ENC
b440: 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b  (db) ((db)->aDb[
b450: 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29  0].pSchema->enc)
b460: 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29  .#define ENC(db)
b470: 20 20 20 20 20 20 20 20 28 28 64 62 29 2d 3e 65          ((db)->e
b480: 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  nc)../*.** Possi
b490: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74  ble values for t
b4a0: 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73  he sqlite3.flags
b4b0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
b4c0: 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 20 20  ITE_VdbeTrace   
b4d0: 20 20 20 30 78 30 30 30 30 30 30 30 31 20 20 2f     0x00000001  /
b4e0: 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63 65 20  * True to trace 
b4f0: 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a  VDBE execution *
b500: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b510: 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20  _InternChanges  
b520: 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20 55  0x00000002  /* U
b530: 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20  ncommitted Hash 
b540: 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f  table changes */
b550: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b560: 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30  FullFSync      0
b570: 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20 55 73  x00000004  /* Us
b580: 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20  e full fsync on 
b590: 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23  the backend */.#
b5a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b  define SQLITE_Ck
b5b0: 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30  ptFullFSync  0x0
b5c0: 30 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20  0000008  /* Use 
b5d0: 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63  full fsync for c
b5e0: 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65  heckpoint */.#de
b5f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68  fine SQLITE_Cach
b600: 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30  eSpill     0x000
b610: 30 30 30 31 30 20 20 2f 2a 20 4f 4b 20 74 6f 20  00010  /* OK to 
b620: 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68  spill pager cach
b630: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
b640: 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73  ITE_FullColNames
b650: 20 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f     0x00000020  /
b660: 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75  * Show full colu
b670: 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45  mn names on SELE
b680: 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  CT */.#define SQ
b690: 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d  LITE_ShortColNam
b6a0: 65 73 20 20 30 78 30 30 30 30 30 30 34 30 20 20  es  0x00000040  
b6b0: 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f  /* Show short co
b6c0: 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23  lumns names */.#
b6d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
b6e0: 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78 30  untRows      0x0
b6f0: 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e  0000080  /* Coun
b700: 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62  t rows changed b
b710: 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20  y INSERT, */.   
b720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b740: 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45         /*   DELE
b750: 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e  TE, or UPDATE an
b760: 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20  d return */.    
b770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b790: 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63        /*   the c
b7a0: 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c  ount using a cal
b7b0: 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e  lback. */.#defin
b7c0: 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c  e SQLITE_NullCal
b7d0: 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30 30 31  lback   0x000001
b7e0: 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  00  /* Invoke th
b7f0: 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20  e callback once 
b800: 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20  if the */.      
b810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b830: 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20      /*   result 
b840: 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a  set is empty */.
b850: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
b860: 71 6c 54 72 61 63 65 20 20 20 20 20 20 20 30 78  qlTrace       0x
b870: 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44 65 62  00000200  /* Deb
b880: 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20  ug print SQL as 
b890: 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23  it executes */.#
b8a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
b8b0: 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30 78 30  beListing    0x0
b8c0: 30 30 30 30 34 30 30 20 20 2f 2a 20 44 65 62 75  0000400  /* Debu
b8d0: 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44  g listings of VD
b8e0: 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23  BE programs */.#
b8f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72  define SQLITE_Wr
b900: 69 74 65 53 63 68 65 6d 61 20 20 20 20 30 78 30  iteSchema    0x0
b910: 30 30 30 30 38 30 30 20 20 2f 2a 20 4f 4b 20 74  0000800  /* OK t
b920: 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f  o update SQLITE_
b930: 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e  MASTER */.#defin
b940: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64  e SQLITE_VdbeAdd
b950: 6f 70 54 72 61 63 65 20 30 78 30 30 30 30 31 30  opTrace 0x000010
b960: 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c  00  /* Trace sql
b970: 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 29 20  ite3VdbeAddOp() 
b980: 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65  calls */.#define
b990: 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68   SQLITE_IgnoreCh
b9a0: 65 63 6b 73 20 20 20 30 78 30 30 30 30 32 30 30  ecks   0x0000200
b9b0: 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66  0  /* Do not enf
b9c0: 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74  orce check const
b9d0: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
b9e0: 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63  e SQLITE_ReadUnc
b9f0: 6f 6d 6d 69 74 74 65 64 20 30 78 30 30 30 34 30  ommitted 0x00040
ba00: 30 30 20 20 2f 2a 20 46 6f 72 20 73 68 61 72 65  00  /* For share
ba10: 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a  d-cache mode */.
ba20: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
ba30: 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78  egacyFileFmt  0x
ba40: 30 30 30 30 38 30 30 30 20 20 2f 2a 20 43 72 65  00008000  /* Cre
ba50: 61 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65  ate new database
ba60: 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f  s in format 1 */
ba70: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ba80: 52 65 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30  RecoveryMode   0
ba90: 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20 49 67  x00010000  /* Ig
baa0: 6e 6f 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f  nore schema erro
bab0: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
bac0: 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65  LITE_ReverseOrde
bad0: 72 20 20 20 30 78 30 30 30 32 30 30 30 30 20 20  r   0x00020000  
bae0: 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64  /* Reverse unord
baf0: 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a  ered SELECTs */.
bb00: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
bb10: 65 63 54 72 69 67 67 65 72 73 20 20 20 20 30 78  ecTriggers    0x
bb20: 30 30 30 34 30 30 30 30 20 20 2f 2a 20 45 6e 61  00040000  /* Ena
bb30: 62 6c 65 20 72 65 63 75 72 73 69 76 65 20 74 72  ble recursive tr
bb40: 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e  iggers */.#defin
bb50: 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e  e SQLITE_Foreign
bb60: 4b 65 79 73 20 20 20 20 30 78 30 30 30 38 30 30  Keys    0x000800
bb70: 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66  00  /* Enforce f
bb80: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
bb90: 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69  raints  */.#defi
bba0: 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e  ne SQLITE_AutoIn
bbb0: 64 65 78 20 20 20 20 20 20 30 78 30 30 31 30 30  dex      0x00100
bbc0: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61  000  /* Enable a
bbd0: 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73  utomatic indexes
bbe0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
bbf0: 54 45 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e  TE_PreferBuiltin
bc00: 20 20 30 78 30 30 32 30 30 30 30 30 20 20 2f 2a    0x00200000  /*
bc10: 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62   Preference to b
bc20: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f  uilt-in funcs */
bc30: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bc40: 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30  LoadExtension  0
bc50: 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e  x00400000  /* En
bc60: 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  able load_extens
bc70: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
bc80: 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67  QLITE_EnableTrig
bc90: 67 65 72 20 20 30 78 30 30 38 30 30 30 30 30 20  ger  0x00800000 
bca0: 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
bcb0: 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  le triggers */.#
bcc0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65  define SQLITE_De
bcd0: 66 65 72 46 4b 73 20 20 20 20 20 20 20 30 78 30  ferFKs       0x0
bce0: 31 30 30 30 30 30 30 20 20 2f 2a 20 44 65 66 65  1000000  /* Defe
bcf0: 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61  r all FK constra
bd00: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
bd10: 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79  SQLITE_QueryOnly
bd20: 20 20 20 20 20 20 30 78 30 32 30 30 30 30 30 30        0x02000000
bd30: 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74    /* Disable dat
bd40: 61 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f  abase changes */
bd50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bd60: 56 64 62 65 45 51 50 20 20 20 20 20 20 20 20 30  VdbeEQP        0
bd70: 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20 44 65  x04000000  /* De
bd80: 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55 45 52  bug EXPLAIN QUER
bd90: 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e  Y PLAN */.#defin
bda0: 65 20 53 51 4c 49 54 45 5f 56 61 63 75 75 6d 20  e SQLITE_Vacuum 
bdb0: 20 20 20 20 20 20 20 20 30 78 30 38 30 30 30 30          0x080000
bdc0: 30 30 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79  00  /* Currently
bdd0: 20 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a   in a VACUUM */.
bde0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
bdf0: 65 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20 30 78  ellSizeCk     0x
be00: 31 30 30 30 30 30 30 30 20 20 2f 2a 20 43 68 65  10000000  /* Che
be10: 63 6b 20 62 74 72 65 65 20 63 65 6c 6c 20 73 69  ck btree cell si
be20: 7a 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 0a  zes on load */..
be30: 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74  ./*.** Bits of t
be40: 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70 74  he sqlite3.dbOpt
be50: 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61 74  Flags field that
be60: 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68 65   are used by the
be70: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74  .** sqlite3_test
be80: 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f  _control(SQLITE_
be90: 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a  TESTCTRL_OPTIMIZ
bea0: 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65  ATIONS,...) inte
beb0: 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65  rface to.** sele
bec0: 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65 20  ctively disable 
bed0: 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61  various optimiza
bee0: 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tions..*/.#defin
bef0: 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46 6c  e SQLITE_QueryFl
bf00: 61 74 74 65 6e 65 72 20 30 78 30 30 30 31 20 20  attener 0x0001  
bf10: 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74 65   /* Query flatte
bf20: 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ning */.#define 
bf30: 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63  SQLITE_ColumnCac
bf40: 68 65 20 20 20 20 30 78 30 30 30 32 20 20 20 2f  he    0x0002   /
bf50: 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a  * Column cache *
bf60: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
bf70: 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20 20  _GroupByOrder   
bf80: 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f 55  0x0004   /* GROU
bf90: 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52 44  PBY cover of ORD
bfa0: 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ERBY */.#define 
bfb0: 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75 74  SQLITE_FactorOut
bfc0: 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20 2f  Const 0x0008   /
bfd0: 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f  * Constant facto
bfe0: 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20 20 20  ring */./*      
bff0: 20 20 20 20 20 20 20 20 20 20 6e 6f 74 20 75 73            not us
c000: 65 64 20 20 20 20 30 78 30 30 31 30 20 20 20 2f  ed    0x0010   /
c010: 2f 20 57 61 73 3a 20 53 51 4c 49 54 45 5f 49 64  / Was: SQLITE_Id
c020: 78 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a 23 64  xRealAsInt */.#d
c030: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73  efine SQLITE_Dis
c040: 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30  tinctOpt    0x00
c050: 32 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54  20   /* DISTINCT
c060: 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a   using indexes *
c070: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c080: 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20  _CoverIdxScan   
c090: 30 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76 65  0x0040   /* Cove
c0a0: 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73  ring index scans
c0b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c0c0: 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69  TE_OrderByIdxJoi
c0d0: 6e 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f 52  n 0x0080   /* OR
c0e0: 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20  DER BY of joins 
c0f0: 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  via index */.#de
c100: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62 71  fine SQLITE_Subq
c110: 43 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31 30  Coroutine  0x010
c120: 30 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65 20  0   /* Evaluate 
c130: 73 75 62 71 75 65 72 69 65 73 20 61 73 20 63 6f  subqueries as co
c140: 72 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66  routines */.#def
c150: 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73  ine SQLITE_Trans
c160: 69 74 69 76 65 20 20 20 20 20 30 78 30 32 30 30  itive     0x0200
c170: 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65     /* Transitive
c180: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
c190: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f  #define SQLITE_O
c1a0: 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78  mitNoopJoin   0x
c1b0: 30 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75  0400   /* Omit u
c1c0: 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e 20  nused tables in 
c1d0: 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  joins */.#define
c1e0: 20 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20 20   SQLITE_Stat34  
c1f0: 20 20 20 20 20 20 20 30 78 30 38 30 30 20 20 20         0x0800   
c200: 2f 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72 20  /* Use STAT3 or 
c210: 53 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 23 64  STAT4 data */.#d
c220: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 75 72  efine SQLITE_Cur
c230: 73 6f 72 48 69 6e 74 73 20 20 20 20 30 78 32 30  sorHints    0x20
c240: 30 30 20 20 20 2f 2a 20 41 64 64 20 4f 50 5f 43  00   /* Add OP_C
c250: 75 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f 64 65  ursorHint opcode
c260: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
c270: 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20  ITE_AllOpts     
c280: 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41     0xffff   /* A
c290: 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ll optimizations
c2a0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f   */../*.** Macro
c2b0: 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68  s for testing wh
c2c0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74  ether or not opt
c2d0: 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65  imizations are e
c2e0: 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c  nabled or disabl
c2f0: 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ed..*/.#ifndef S
c300: 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
c310: 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e 65 20  IN_TEST.#define 
c320: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61  OptimizationDisa
c330: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
c340: 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61  (((db)->dbOptFla
c350: 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23  gs&(mask))!=0).#
c360: 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74  define Optimizat
c370: 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d  ionEnabled(db, m
c380: 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64  ask)   (((db)->d
c390: 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29  bOptFlags&(mask)
c3a0: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64 65 66  )==0).#else.#def
c3b0: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
c3c0: 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  Disabled(db, mas
c3d0: 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20 4f 70  k)  0.#define Op
c3e0: 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65  timizationEnable
c3f0: 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 31 0a  d(db, mask)   1.
c400: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
c410: 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74 20  turn true if it 
c420: 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e  OK to factor con
c430: 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
c440: 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69  s into the initi
c450: 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64  alization.** cod
c460: 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  e. The argument 
c470: 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63  is a Parse objec
c480: 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67  t for the code g
c490: 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65  enerator..*/.#de
c4a0: 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72  fine ConstFactor
c4b0: 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f  Ok(P) ((P)->okCo
c4c0: 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a  nstFactor)../*.*
c4d0: 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
c4e0: 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  s for the sqlite
c4f0: 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a  .magic field..**
c500: 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65   The numbers are
c510: 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e   obtained at ran
c520: 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20  dom and have no 
c530: 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c  special meaning,
c540: 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62   other.** than b
c550: 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72  eing distinct fr
c560: 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a  om one another..
c570: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c580: 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20  E_MAGIC_OPEN    
c590: 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20   0xa029a697  /* 
c5a0: 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e  Database is open
c5b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c5c0: 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20  TE_MAGIC_CLOSED 
c5d0: 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a    0x9f3c2d33  /*
c5e0: 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f   Database is clo
c5f0: 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  sed */.#define S
c600: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b  QLITE_MAGIC_SICK
c610: 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30 20       0x4b771290 
c620: 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77   /* Error and aw
c630: 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a  aiting close */.
c640: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
c650: 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30 78  AGIC_BUSY     0x
c660: 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74  f03b7906  /* Dat
c670: 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20  abase currently 
c680: 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  in use */.#defin
c690: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45  e SQLITE_MAGIC_E
c6a0: 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37 39  RROR    0xb53579
c6b0: 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45  30  /* An SQLITE
c6c0: 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63  _MISUSE error oc
c6d0: 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e  curred */.#defin
c6e0: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a  e SQLITE_MAGIC_Z
c6f0: 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66 63  OMBIE   0x64cffc
c700: 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74  7f  /* Close wit
c710: 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  h last statement
c720: 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   close */../*.**
c730: 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69   Each SQL functi
c740: 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  on is defined by
c750: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
c760: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  the following.**
c770: 20 73 74 72 75 63 74 75 72 65 2e 20 20 41 20 70   structure.  A p
c780: 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
c790: 74 72 75 63 74 75 72 65 20 69 73 20 73 74 6f 72  tructure is stor
c7a0: 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ed in the sqlite
c7b0: 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20 74  .aFunc.** hash t
c7c0: 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c 74  able.  When mult
c7d0: 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 68  iple functions h
c7e0: 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  ave the same nam
c7f0: 65 2c 20 74 68 65 20 68 61 73 68 20 74 61 62 6c  e, the hash tabl
c800: 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20 61  e.** points to a
c810: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   linked list of 
c820: 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73  these structures
c830: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63  ..*/.struct Func
c840: 44 65 66 20 7b 0a 20 20 69 31 36 20 6e 41 72 67  Def {.  i16 nArg
c850: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
c860: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
c870: 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75  nts.  -1 means u
c880: 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31  nlimited */.  u1
c890: 36 20 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20  6 funcFlags;    
c8a0: 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69     /* Some combi
c8b0: 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45  nation of SQLITE
c8c0: 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69  _FUNC_* */.  voi
c8d0: 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20  d *pUserData;   
c8e0: 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70    /* User data p
c8f0: 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75  arameter */.  Fu
c900: 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20  ncDef *pNext;   
c910: 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74     /* Next funct
c920: 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61  ion with same na
c930: 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  me */.  void (*x
c940: 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f  Func)(sqlite3_co
c950: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
c960: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20  e3_value**); /* 
c970: 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e  Regular function
c980: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 74   */.  void (*xSt
c990: 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ep)(sqlite3_cont
c9a0: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
c9b0: 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67  _value**); /* Ag
c9c0: 67 72 65 67 61 74 65 20 73 74 65 70 20 2a 2f 0a  gregate step */.
c9d0: 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69    void (*xFinali
c9e0: 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ze)(sqlite3_cont
c9f0: 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20  ext*);          
ca00: 20 20 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61        /* Aggrega
ca10: 74 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a  te finalizer */.
ca20: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
ca30: 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61         /* SQL na
ca40: 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
ca50: 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66  on. */.  FuncDef
ca60: 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a   *pHash;      /*
ca70: 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66   Next with a dif
ca80: 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20  ferent name but 
ca90: 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f  the same hash */
caa0: 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  .  FuncDestructo
cab0: 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20  r *pDestructor; 
cac0: 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63    /* Reference c
cad0: 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f  ounted destructo
cae0: 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b  r function */.};
caf0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ../*.** This str
cb00: 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61  ucture encapsula
cb10: 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74  tes a user-funct
cb20: 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63  ion destructor c
cb30: 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63  allback (as.** c
cb40: 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67 20  onfigured using 
cb50: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
cb60: 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66 65  v2()) and a refe
cb70: 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57  rence counter. W
cb80: 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75  hen.** create_fu
cb90: 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63  nction_v2() is c
cba0: 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20  alled to create 
cbb0: 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  a function with 
cbc0: 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a  a destructor,.**
cbd0: 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74   a single object
cbe0: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
cbf0: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63   allocated. Func
cc00: 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20  Destructor.nRef 
cc10: 69 73 20 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68  is set to .** th
cc20: 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63  e number of Func
cc30: 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61  Def objects crea
cc40: 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f 72  ted (either 1 or
cc50: 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   3, depending on
cc60: 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e   whether.** or n
cc70: 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ot the specified
cc80: 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c   encoding is SQL
cc90: 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75  ITE_ANY). The Fu
cca0: 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f  ncDef.pDestructo
ccb0: 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65  r.** member of e
ccc0: 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46  ach of the new F
ccd0: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69  uncDef objects i
cce0: 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74  s set to point t
ccf0: 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a  o the allocated.
cd00: 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  ** FuncDestructo
cd10: 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66  r..**.** Thereaf
cd20: 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66  ter, when one of
cd30: 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a   the FuncDef obj
cd40: 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c  ects is deleted,
cd50: 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a   the reference.*
cd60: 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20  * count on this 
cd70: 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d  object is decrem
cd80: 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72  ented. When it r
cd90: 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64 65  eaches 0, the de
cda0: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69  structor.** is i
cdb0: 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46  nvoked and the F
cdc0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73 74  uncDestructor st
cdd0: 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a  ructure freed..*
cde0: 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 73  /.struct FuncDes
cdf0: 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20  tructor {.  int 
ce00: 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78  nRef;.  void (*x
ce10: 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
ce20: 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  ;.  void *pUserD
ce30: 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  ata;.};../*.** P
ce40: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
ce50: 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73  or FuncDef.flags
ce60: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
ce70: 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59   _LENGTH and _TY
ce80: 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d  PEOF.** values m
ce90: 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74  ust correspond t
cea0: 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41  o OPFLAG_LENGTHA
ceb0: 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59  RG and OPFLAG_TY
cec0: 50 45 4f 46 41 52 47 2e 20 20 54 68 65 72 65 0a  PEOFARG.  There.
ced0: 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20  ** are assert() 
cee0: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68  statements in th
cef0: 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79  e code to verify
cf00: 20 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e   this..*/.#defin
cf10: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e  e SQLITE_FUNC_EN
cf20: 43 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f 2a  CMASK  0x0003 /*
cf30: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
cf40: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20  LITE_UTF16BE or 
cf50: 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69  UTF16LE */.#defi
cf60: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
cf70: 49 4b 45 20 20 20 20 20 30 78 30 30 30 34 20 2f  IKE     0x0004 /
cf80: 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20  * Candidate for 
cf90: 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a  the LIKE optimiz
cfa0: 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
cfb0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53   SQLITE_FUNC_CAS
cfc0: 45 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20  E     0x0008 /* 
cfd0: 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c  Case-sensitive L
cfe0: 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f  IKE-type functio
cff0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
d000: 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20  ITE_FUNC_EPHEM  
d010: 20 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68 65    0x0010 /* Ephe
d020: 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77  meral.  Delete w
d030: 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66  ith VDBE */.#def
d040: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
d050: 4e 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30 20  NEEDCOLL 0x0020 
d060: 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e  /* sqlite3GetFun
d070: 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74  cCollSeq() might
d080: 20 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65   be called*/.#de
d090: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
d0a0: 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34 30  _LENGTH   0x0040
d0b0: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e   /* Built-in len
d0c0: 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  gth() function *
d0d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d0e0: 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30  _FUNC_TYPEOF   0
d0f0: 78 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x0080 /* Built-i
d100: 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  n typeof() funct
d110: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
d120: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54  QLITE_FUNC_COUNT
d130: 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42 75      0x0100 /* Bu
d140: 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20  ilt-in count(*) 
d150: 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65  aggregate */.#de
d160: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
d170: 5f 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30 30  _COALESCE 0x0200
d180: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61   /* Built-in coa
d190: 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c  lesce() or ifnul
d1a0: 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  l() */.#define S
d1b0: 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b  QLITE_FUNC_UNLIK
d1c0: 45 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42 75  ELY 0x0400 /* Bu
d1d0: 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28  ilt-in unlikely(
d1e0: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
d1f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
d200: 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38 30  C_CONSTANT 0x080
d210: 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e  0 /* Constant in
d220: 70 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73  puts give a cons
d230: 74 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23  tant output */.#
d240: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
d250: 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31 30  NC_MINMAX   0x10
d260: 30 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d  00 /* True for m
d270: 69 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61  in() and max() a
d280: 67 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64 65  ggregates */.#de
d290: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
d2a0: 5f 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30 30  _SLOCHNG  0x2000
d2b0: 20 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67 65   /* "Slow Change
d2c0: 22 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e  ". Value constan
d2d0: 74 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20 20  t during a.     
d2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
d300: 2a 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20 2d  * single query -
d310: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f 76   might change ov
d320: 65 72 20 74 69 6d 65 20 2a 2f 0a 0a 2f 2a 0a 2a  er time */../*.*
d330: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
d340: 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55  three macros, FU
d350: 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55  NCTION(), LIKEFU
d360: 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41  NC() and AGGREGA
d370: 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64  TE() are.** used
d380: 20 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69   to create the i
d390: 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20  nitializers for 
d3a0: 74 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75  the FuncDef stru
d3b0: 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20  ctures..**.**   
d3c0: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
d3d0: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
d3e0: 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55   xFunc).**     U
d3f0: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
d400: 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  scalar function 
d410: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
d420: 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a  function zName .
d430: 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74  **     implement
d440: 65 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e  ed by C function
d450: 20 78 46 75 6e 63 20 74 68 61 74 20 61 63 63 65   xFunc that acce
d460: 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e  pts nArg argumen
d470: 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76  ts. The.**     v
d480: 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 69  alue passed as i
d490: 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
d4a0: 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64   (void*) and mad
d4b0: 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20  e available.**  
d4c0: 20 20 20 61 73 20 74 68 65 20 75 73 65 72 2d 64     as the user-d
d4d0: 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65  ata (sqlite3_use
d4e0: 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74 68  r_data()) for th
d4f0: 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a  e function. If .
d500: 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20  **     argument 
d510: 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65  bNC is true, the
d520: 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  n the SQLITE_FUN
d530: 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20  C_NEEDCOLL flag 
d540: 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  is set..**.**   
d550: 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  VFUNCTION(zName,
d560: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
d570: 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
d580: 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78  Like FUNCTION ex
d590: 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68  cept it omits th
d5a0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
d5b0: 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a  NSTANT flag..**.
d5c0: 2a 2a 20 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a  **   DFUNCTION(z
d5d0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
d5e0: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a  , bNC, xFunc).**
d5f0: 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49       Like FUNCTI
d600: 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69  ON except it omi
d610: 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  ts the SQLITE_FU
d620: 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67  NC_CONSTANT flag
d630: 20 61 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64 73   and.**     adds
d640: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
d650: 5f 53 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20  _SLOCHNG flag.  
d660: 55 73 65 64 20 66 6f 72 20 64 61 74 65 20 26 20  Used for date & 
d670: 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a  time functions.*
d680: 2a 20 20 20 20 20 61 6e 64 20 66 75 6e 63 74 69  *     and functi
d690: 6f 6e 73 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f  ons like sqlite_
d6a0: 76 65 72 73 69 6f 6e 28 29 20 74 68 61 74 20 63  version() that c
d6b0: 61 6e 20 63 68 61 6e 67 65 2c 20 62 75 74 20 6e  an change, but n
d6c0: 6f 74 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20  ot during.**    
d6d0: 20 61 20 73 69 6e 67 6c 65 20 71 75 65 72 79 2e   a single query.
d6e0: 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41  .**.**   AGGREGA
d6f0: 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  TE(zName, nArg, 
d700: 69 41 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70  iArg, bNC, xStep
d710: 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20  , xFinal).**    
d720: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
d730: 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  an aggregate fun
d740: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
d750: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a   implemented by.
d760: 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66 75 6e  **     the C fun
d770: 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64  ctions xStep and
d780: 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72   xFinal. The fir
d790: 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65  st four paramete
d7a0: 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e  rs.**     are in
d7b0: 74 65 72 70 72 65 74 65 64 20 69 6e 20 74 68 65  terpreted in the
d7c0: 20 73 61 6d 65 20 77 61 79 20 61 73 20 74 68 65   same way as the
d7d0: 20 66 69 72 73 74 20 34 20 70 61 72 61 6d 65 74   first 4 paramet
d7e0: 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55  ers to.**     FU
d7f0: 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20  NCTION()..**.** 
d800: 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65    LIKEFUNC(zName
d810: 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c  , nArg, pArg, fl
d820: 61 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  ags).**     Used
d830: 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61   to create a sca
d840: 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  lar function def
d850: 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e  inition of a fun
d860: 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20  ction zName .** 
d870: 20 20 20 20 74 68 61 74 20 61 63 63 65 70 74 73      that accepts
d880: 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20   nArg arguments 
d890: 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74  and is implement
d8a0: 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20  ed by a call to 
d8b0: 43 20 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69  C .**     functi
d8c0: 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67  on likeFunc. Arg
d8d0: 75 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63 61  ument pArg is ca
d8e0: 73 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29  st to a (void *)
d8f0: 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20   and made.**    
d900: 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68   available as th
d910: 65 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d  e function user-
d920: 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73  data (sqlite3_us
d930: 65 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a  er_data()). The.
d940: 2a 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66  **     FuncDef.f
d950: 6c 61 67 73 20 76 61 72 69 61 62 6c 65 20 69 73  lags variable is
d960: 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75   set to the valu
d970: 65 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20  e passed as the 
d980: 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72  flags.**     par
d990: 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  ameter..*/.#defi
d9a0: 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  ne FUNCTION(zNam
d9b0: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
d9c0: 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
d9d0: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
d9e0: 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54  C_CONSTANT|SQLIT
d9f0: 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
da00: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
da10: 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  ), \.   SQLITE_I
da20: 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c  NT_TO_PTR(iArg),
da30: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
da40: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
da50: 64 65 66 69 6e 65 20 56 46 55 4e 43 54 49 4f 4e  define VFUNCTION
da60: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
da70: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
da80: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
da90: 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
daa0: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
dab0: 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  ), \.   SQLITE_I
dac0: 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c  NT_TO_PTR(iArg),
dad0: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
dae0: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
daf0: 64 65 66 69 6e 65 20 44 46 55 4e 43 54 49 4f 4e  define DFUNCTION
db00: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
db10: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
db20: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
db30: 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53  E_FUNC_SLOCHNG|S
db40: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
db50: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
db60: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
db70: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
db80: 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
db90: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20  , 0, #zName, 0, 
dba0: 30 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54  0}.#define FUNCT
dbb0: 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ION2(zName, nArg
dbc0: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
dbd0: 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20  nc, extraFlags) 
dbe0: 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45  \.  {nArg,SQLITE
dbf0: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
dc00: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
dc10: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
dc20: 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73  COLL)|extraFlags
dc30: 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54  ,\.   SQLITE_INT
dc40: 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
dc50: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23  , xFunc, 0, 0, #
dc60: 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65  zName, 0, 0}.#de
dc70: 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f  fine STR_FUNCTIO
dc80: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70  N(zName, nArg, p
dc90: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
dca0: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
dcb0: 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c  TE_FUNC_SLOCHNG|
dcc0: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
dcd0: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
dce0: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72  DCOLL), \.   pAr
dcf0: 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  g, 0, xFunc, 0, 
dd00: 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d  0, #zName, 0, 0}
dd10: 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e  .#define LIKEFUN
dd20: 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  C(zName, nArg, a
dd30: 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b  rg, flags) \.  {
dd40: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
dd50: 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54  C_CONSTANT|SQLIT
dd60: 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a  E_UTF8|flags, \.
dd70: 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20     (void *)arg, 
dd80: 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20  0, likeFunc, 0, 
dd90: 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d  0, #zName, 0, 0}
dda0: 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41  .#define AGGREGA
ddb0: 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  TE(zName, nArg, 
ddc0: 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20  arg, nc, xStep, 
ddd0: 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72  xFinal) \.  {nAr
dde0: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
ddf0: 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  nc*SQLITE_FUNC_N
de00: 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53  EEDCOLL), \.   S
de10: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
de20: 28 61 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74  (arg), 0, 0, xSt
de30: 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65  ep,xFinal,#zName
de40: 2c 30 2c 30 7d 0a 23 64 65 66 69 6e 65 20 41 47  ,0,0}.#define AG
de50: 47 52 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20  GREGATE2(zName, 
de60: 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
de70: 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78  Step, xFinal, ex
de80: 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e  traFlags) \.  {n
de90: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
dea0: 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43  |(nc*SQLITE_FUNC
deb0: 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61  _NEEDCOLL)|extra
dec0: 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49  Flags, \.   SQLI
ded0: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
dee0: 67 29 2c 20 30 2c 20 30 2c 20 78 53 74 65 70 2c  g), 0, 0, xStep,
def0: 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c  xFinal,#zName,0,
df00: 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75  0}../*.** All cu
df10: 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73  rrent savepoints
df20: 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
df30: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61   linked list sta
df40: 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69  rting at.** sqli
df50: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20  te3.pSavepoint. 
df60: 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
df70: 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73  t in the list is
df80: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
df90: 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76  ly.** opened sav
dfa0: 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e  epoint. Savepoin
dfb0: 74 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20  ts are added to 
dfc0: 74 68 65 20 6c 69 73 74 20 62 79 20 74 68 65 20  the list by the 
dfd0: 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70  vdbe.** OP_Savep
dfe0: 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  oint instruction
dff0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65  ..*/.struct Save
e000: 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a  point {.  char *
e010: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
e020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e030: 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20   Savepoint name 
e040: 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29  (nul-terminated)
e050: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
e060: 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  redCons;        
e070: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
e080: 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
e090: 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f  fk violations */
e0a0: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
e0b0: 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  ImmCons;        
e0c0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
e0d0: 20 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d   of deferred imm
e0e0: 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f   fk. */.  Savepo
e0f0: 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  int *pNext;     
e100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e110: 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e   Parent savepoin
e120: 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b  t (if any) */.};
e130: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
e140: 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61  owing are used a
e150: 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72  s the second par
e160: 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
e170: 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a  3Savepoint(),.**
e180: 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61   and as the P1 a
e190: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f  rgument to the O
e1a0: 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
e1b0: 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66  ruction..*/.#def
e1c0: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  ine SAVEPOINT_BE
e1d0: 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69  GIN      0.#defi
e1e0: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  ne SAVEPOINT_REL
e1f0: 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e  EASE    1.#defin
e200: 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  e SAVEPOINT_ROLL
e210: 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a  BACK   2.../*.**
e220: 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64   Each SQLite mod
e230: 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62  ule (virtual tab
e240: 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69  le definition) i
e250: 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a  s defined by an.
e260: 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
e270: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
e280: 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69  ucture, stored i
e290: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d  n the sqlite3.aM
e2a0: 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61  odule.** hash ta
e2b0: 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d  ble..*/.struct M
e2c0: 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20  odule {.  const 
e2d0: 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
e2e0: 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f  pModule;       /
e2f0: 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74  * Callback point
e300: 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ers */.  const c
e310: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
e320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e330: 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20   Name passed to 
e340: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20  create_module() 
e350: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b  */.  void *pAux;
e360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e370: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75            /* pAu
e380: 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  x passed to crea
e390: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
e3a0: 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
e3b0: 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20  )(void *);      
e3c0: 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20        /* Module 
e3d0: 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
e3e0: 69 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ion */.  Table *
e3f0: 70 45 70 6f 54 61 62 3b 20 20 20 20 20 20 20 20  pEpoTab;        
e400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e410: 20 45 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c 65   Eponymous table
e420: 20 66 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c 65   for this module
e430: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e   */.};../*.** in
e440: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
e450: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61  each column of a
e460: 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68  n SQL table is h
e470: 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e  eld in an instan
e480: 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74  ce.** of this st
e490: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
e4a0: 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68  ct Column {.  ch
e4b0: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f  ar *zName;     /
e4c0: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63  * Name of this c
e4d0: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 20  olumn */.  Expr 
e4e0: 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44  *pDflt;     /* D
e4f0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
e500: 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  this column */. 
e510: 20 63 68 61 72 20 2a 7a 44 66 6c 74 3b 20 20 20   char *zDflt;   
e520: 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65    /* Original te
e530: 78 74 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c  xt of the defaul
e540: 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61  t value */.  cha
e550: 72 20 2a 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a  r *zType;     /*
e560: 20 44 61 74 61 20 74 79 70 65 20 66 6f 72 20 74   Data type for t
e570: 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  his column */.  
e580: 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20  char *zColl;    
e590: 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
e5a0: 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c  quence.  If NULL
e5b0: 2c 20 75 73 65 20 74 68 65 20 64 65 66 61 75 6c  , use the defaul
e5c0: 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c  t */.  u8 notNul
e5d0: 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45  l;      /* An OE
e5e0: 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c  _ code for handl
e5f0: 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63  ing a NOT NULL c
e600: 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63  onstraint */.  c
e610: 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
e620: 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51  /* One of the SQ
e630: 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c  LITE_AFF_... val
e640: 75 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73  ues */.  u8 szEs
e650: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74  t;        /* Est
e660: 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 74  imated size of t
e670: 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 20 49 4e 54  his column.  INT
e680: 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46  ==1 */.  u8 colF
e690: 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f  lags;     /* Boo
e6a0: 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e  lean properties.
e6b0: 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64    See COLFLAG_ d
e6c0: 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a  efines below */.
e6d0: 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76  };../* Allowed v
e6e0: 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e  alues for Column
e6f0: 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64  .colFlags:.*/.#d
e700: 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52  efine COLFLAG_PR
e710: 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20 20  IMKEY  0x0001   
e720: 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61   /* Column is pa
e730: 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72  rt of the primar
e740: 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65  y key */.#define
e750: 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20   COLFLAG_HIDDEN 
e760: 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41    0x0002    /* A
e770: 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69   hidden column i
e780: 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  n a virtual tabl
e790: 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43  e */../*.** A "C
e7a0: 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63  ollating Sequenc
e7b0: 65 22 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  e" is defined by
e7c0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
e7d0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  the following.**
e7e0: 20 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63   structure. Conc
e7f0: 65 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c  eptually, a coll
e800: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63  ating sequence c
e810: 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d  onsists of a nam
e820: 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61  e and.** a compa
e830: 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68  rison routine th
e840: 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f  at defines the o
e850: 72 64 65 72 20 6f 66 20 74 68 61 74 20 73 65 71  rder of that seq
e860: 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  uence..**.** If 
e870: 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20  CollSeq.xCmp is 
e880: 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74  NULL, it means t
e890: 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61  hat the.** colla
e8a0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73  ting sequence is
e8b0: 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64   undefined.  Ind
e8c0: 69 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e  ices built on an
e8d0: 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f   undefined.** co
e8e0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
e8f0: 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64   may not be read
e900: 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a   or written..*/.
e910: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b  struct CollSeq {
e920: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
e930: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
e940: 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e   of the collatin
e950: 67 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d  g sequence, UTF-
e960: 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75  8 encoded */.  u
e970: 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
e980: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
e990: 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79  oding handled by
e9a0: 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69   xCmp() */.  voi
e9b0: 64 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20  d *pUser;       
e9c0: 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75     /* First argu
e9d0: 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a  ment to xCmp() *
e9e0: 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28  /.  int (*xCmp)(
e9f0: 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  void*,int, const
ea00: 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e   void*, int, con
ea10: 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69  st void*);.  voi
ea20: 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29  d (*xDel)(void*)
ea30: 3b 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72  ;  /* Destructor
ea40: 20 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b   for pUser */.};
ea50: 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f  ../*.** A sort o
ea60: 72 64 65 72 20 63 61 6e 20 62 65 20 65 69 74 68  rder can be eith
ea70: 65 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a  er ASC or DESC..
ea80: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ea90: 45 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30  E_SO_ASC       0
eaa0: 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63    /* Sort in asc
eab0: 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a  ending order */.
eac0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
ead0: 4f 5f 44 45 53 43 20 20 20 20 20 20 31 20 20 2f  O_DESC      1  /
eae0: 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64  * Sort in ascend
eaf0: 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65  ing order */.#de
eb00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55  fine SQLITE_SO_U
eb10: 4e 44 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e  NDEFINED -1 /* N
eb20: 6f 20 73 6f 72 74 20 6f 72 64 65 72 20 73 70 65  o sort order spe
eb30: 63 69 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  cified */../*.**
eb40: 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   Column affinity
eb50: 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68   types..**.** Th
eb60: 65 73 65 20 75 73 65 64 20 74 6f 20 68 61 76 65  ese used to have
eb70: 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c   mnemonic name l
eb80: 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49  ike 'i' for SQLI
eb90: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61  TE_AFF_INTEGER a
eba0: 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51  nd.** 't' for SQ
ebb0: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20  LITE_AFF_TEXT.  
ebc0: 42 75 74 20 77 65 20 63 61 6e 20 73 61 76 65 20  But we can save 
ebd0: 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61  a little space a
ebe0: 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68  nd improve.** th
ebf0: 65 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65  e speed a little
ec00: 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68   by numbering th
ec10: 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75  e values consecu
ec20: 74 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20  tively.  .**.** 
ec30: 42 75 74 20 72 61 74 68 65 72 20 74 68 61 6e 20  But rather than 
ec40: 73 74 61 72 74 20 77 69 74 68 20 30 20 6f 72 20  start with 0 or 
ec50: 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69 74 68  1, we begin with
ec60: 20 27 41 27 2e 20 20 54 68 61 74 20 77 61 79 2c   'A'.  That way,
ec70: 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c  .** when multipl
ec80: 65 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73  e affinity types
ec90: 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65   are concatenate
eca0: 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20  d into a string 
ecb0: 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74  and.** used as t
ecc0: 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74  he P4 operand, t
ecd0: 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65  hey will be more
ece0: 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a   readable..**.**
ecf0: 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20   Note also that 
ed00: 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65  the numeric type
ed10: 73 20 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f  s are grouped to
ed20: 67 65 74 68 65 72 20 73 6f 20 74 68 61 74 20 74  gether so that t
ed30: 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20  esting.** for a 
ed40: 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69 73 20  numeric type is 
ed50: 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69  a single compari
ed60: 73 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20 42 4c  son.  And the BL
ed70: 4f 42 20 74 79 70 65 20 69 73 20 66 69 72 73 74  OB type is first
ed80: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
ed90: 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 20 20 20  ITE_AFF_BLOB    
eda0: 20 27 41 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'A'.#define SQL
edb0: 49 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20  ITE_AFF_TEXT    
edc0: 20 27 42 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'B'.#define SQL
edd0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
ede0: 20 27 43 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'C'.#define SQL
edf0: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
ee00: 20 27 44 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'D'.#define SQL
ee10: 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20  ITE_AFF_REAL    
ee20: 20 27 45 27 0a 0a 23 64 65 66 69 6e 65 20 73 71   'E'..#define sq
ee30: 6c 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66  lite3IsNumericAf
ee40: 66 69 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e  finity(X)  ((X)>
ee50: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45  =SQLITE_AFF_NUME
ee60: 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  RIC)../*.** The 
ee70: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
ee80: 76 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66  values masks off
ee90: 20 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74   the significant
eea0: 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61   bits of an.** a
eeb0: 66 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 20 0a  ffinity value. .
eec0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
eed0: 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30  E_AFF_MASK     0
eee0: 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74  x47../*.** Addit
eef0: 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73  ional bit values
ef00: 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65   that can be ORe
ef10: 64 20 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69  d with an affini
ef20: 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68  ty without.** ch
ef30: 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e  anging the affin
ef40: 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53  ity..**.** The S
ef50: 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c  QLITE_NOTNULL fl
ef60: 61 67 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74  ag is a combinat
ef70: 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e  ion of NULLEQ an
ef80: 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a  d JUMPIFNULL..**
ef90: 20 49 74 20 63 61 75 73 65 73 20 61 6e 20 61 73   It causes an as
efa0: 73 65 72 74 28 29 20 74 6f 20 66 69 72 65 20 69  sert() to fire i
efb0: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
efc0: 20 74 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e   to a comparison
efd0: 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20  .** operator is 
efe0: 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64  NULL.  It is add
eff0: 65 64 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f  ed to certain co
f000: 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f  mparison operato
f010: 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74  rs to.** prove t
f020: 68 61 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73  hat the operands
f030: 20 61 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20   are always NOT 
f040: 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  NULL..*/.#define
f050: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
f060: 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a 20 6a 75  LL   0x10  /* ju
f070: 6d 70 73 20 69 66 20 65 69 74 68 65 72 20 6f 70  mps if either op
f080: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f  erand is NULL */
f090: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f0a0: 53 54 4f 52 45 50 32 20 20 20 20 20 20 30 78 32  STOREP2      0x2
f0b0: 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  0  /* Store resu
f0c0: 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61  lt in reg[P2] ra
f0d0: 74 68 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a  ther than jump *
f0e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f0f0: 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78  _NULLEQ       0x
f100: 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c  80  /* NULL=NULL
f110: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f120: 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20  TE_NOTNULL      
f130: 30 78 39 30 20 20 2f 2a 20 41 73 73 65 72 74 20  0x90  /* Assert 
f140: 74 68 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72  that operands ar
f150: 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a  e never NULL */.
f160: 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74  ./*.** An object
f170: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
f180: 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63   created for eac
f190: 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  h virtual table 
f1a0: 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68  present in.** th
f1b0: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
f1c0: 61 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  a. .**.** If the
f1d0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
f1e0: 20 69 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e   is shared, then
f1f0: 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e   there is one in
f200: 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a  stance of this.*
f210: 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  * structure for 
f220: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
f230: 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65  nnection (sqlite
f240: 33 2a 29 20 74 68 61 74 20 75 73 65 73 20 74 68  3*) that uses th
f250: 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65  e shared.** sche
f260: 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65 63 61  ma. This is beca
f270: 75 73 65 20 65 61 63 68 20 64 61 74 61 62 61 73  use each databas
f280: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71  e connection req
f290: 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e  uires its own un
f2a0: 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  ique.** instance
f2b0: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   of the sqlite3_
f2c0: 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65  vtab* handle use
f2d0: 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  d to access the 
f2e0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a  virtual table .*
f2f0: 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  * implementation
f300: 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  . sqlite3_vtab* 
f310: 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20  handles can not 
f320: 62 65 20 73 68 61 72 65 64 20 62 65 74 77 65 65  be shared betwee
f330: 6e 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  n .** database c
f340: 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e  onnections, even
f350: 20 77 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f   when the rest o
f360: 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20  f the in-memory 
f370: 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 73 63 68  database .** sch
f380: 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 61  ema is shared, a
f390: 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  s the implementa
f3a0: 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65  tion often store
f3b0: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  s the database.*
f3c0: 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  * connection han
f3d0: 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69 74  dle passed to it
f3e0: 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63   via the xConnec
f3f0: 74 28 29 20 6f 72 20 78 43 72 65 61 74 65 28 29  t() or xCreate()
f400: 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e   method.** durin
f410: 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  g initialization
f420: 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69   internally. Thi
f430: 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  s database conne
f440: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79  ction handle may
f450: 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64  .** then be used
f460: 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c 20   by the virtual 
f470: 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  table implementa
f480: 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72  tion to access r
f490: 65 61 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77  eal tables .** w
f4a0: 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61  ithin the databa
f4b0: 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79  se. So that they
f4c0: 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20   appear as part 
f4d0: 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 20 0a  of the callers .
f4e0: 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ** transaction, 
f4f0: 74 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e  these accesses n
f500: 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76  eed to be made v
f510: 69 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  ia the same data
f520: 62 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74  base .** connect
f530: 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65 64  ion as that used
f540: 20 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20   to execute SQL 
f550: 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68  operations on th
f560: 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
f570: 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c  .**.** All VTabl
f580: 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63  e objects that c
f590: 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73  orrespond to a s
f5a0: 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61  ingle table in a
f5b0: 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62   shared.** datab
f5c0: 61 73 65 20 73 63 68 65 6d 61 20 61 72 65 20 69  ase schema are i
f5d0: 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20  nitially stored 
f5e0: 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74  in a linked-list
f5f0: 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a   pointed to by.*
f600: 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61  * the Table.pVTa
f610: 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61  ble member varia
f620: 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65  ble of the corre
f630: 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f  sponding Table o
f640: 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61  bject..** When a
f650: 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  n sqlite3_prepar
f660: 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  e() operation is
f670: 20 72 65 71 75 69 72 65 64 20 74 6f 20 61 63 63   required to acc
f680: 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a  ess the virtual.
f690: 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61  ** table, it sea
f6a0: 72 63 68 65 73 20 74 68 65 20 6c 69 73 74 20 66  rches the list f
f6b0: 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20 74 68  or the VTable th
f6c0: 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  at corresponds t
f6d0: 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73  o the.** databas
f6e0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69  e connection doi
f6f0: 6e 67 20 74 68 65 20 70 72 65 70 61 72 69 6e 67  ng the preparing
f700: 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68   so as to use th
f710: 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c  e correct.** sql
f720: 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
f730: 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65  e in the compile
f740: 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57  d query..**.** W
f750: 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79  hen an in-memory
f760: 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73   Table object is
f770: 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78   deleted (for ex
f780: 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a  ample when the.*
f790: 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e  * schema is bein
f7a0: 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73  g reloaded for s
f7b0: 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65  ome reason), the
f7c0: 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20   VTable objects 
f7d0: 61 72 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65  are not .** dele
f7e0: 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69  ted and the sqli
f7f0: 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
f800: 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f  s are not xDisco
f810: 6e 6e 65 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d  nnect()ed .** im
f820: 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65  mediately. Inste
f830: 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76  ad, they are mov
f840: 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c  ed from the Tabl
f850: 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74  e.pVTable list t
f860: 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e  o.** another lin
f870: 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20  ked list headed 
f880: 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70  by the sqlite3.p
f890: 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65  Disconnect membe
f8a0: 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72  r of the.** corr
f8b0: 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65  esponding sqlite
f8c0: 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65  3 structure. The
f8d0: 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74  y are then delet
f8e0: 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64  ed/xDisconnected
f8f0: 20 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61   .** next time a
f900: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72   statement is pr
f910: 65 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69  epared using sai
f920: 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73  d sqlite3*. This
f930: 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61   is done.** to a
f940: 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73  void deadlock is
f950: 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d  sues involving m
f960: 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e  ultiple sqlite3.
f970: 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a  mutex mutexes..*
f980: 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65  * Refer to comme
f990: 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69  nts above functi
f9a0: 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  on sqlite3VtabUn
f9b0: 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61  lockList() for a
f9c0: 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e  n.** explanation
f9d0: 20 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73   as to why it is
f9e0: 20 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20   safe to add an 
f9f0: 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69  entry to an sqli
fa00: 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a  te3.pDisconnect.
fa10: 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20  ** list without 
fa20: 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72  holding the corr
fa30: 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65  esponding sqlite
fa40: 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a  3.mutex mutex..*
fa50: 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20  *.** The memory 
fa60: 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74  for objects of t
fa70: 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61  his type is alwa
fa80: 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20  ys allocated by 
fa90: 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  .** sqlite3DbMal
faa0: 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65  loc(), using the
fab0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
fac0: 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61  le stored in VTa
fad0: 62 6c 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68  ble.db as .** th
fae0: 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
faf0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62  ..*/.struct VTab
fb00: 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  le {.  sqlite3 *
fb10: 64 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  db;             
fb20: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e   /* Database con
fb30: 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74  nection associat
fb40: 65 64 20 77 69 74 68 20 74 68 69 73 20 74 61 62  ed with this tab
fb50: 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a  le */.  Module *
fb60: 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20  pMod;           
fb70: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
fb80: 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  module implement
fb90: 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  ation */.  sqlit
fba0: 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20  e3_vtab *pVtab; 
fbb0: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
fbc0: 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65  to vtab instance
fbd0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20   */.  int nRef; 
fbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fbf0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69  /* Number of poi
fc00: 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 73 74  nters to this st
fc10: 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20  ructure */.  u8 
fc20: 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20  bConstraint;    
fc30: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
fc40: 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72  f constraints ar
fc50: 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20  e supported */. 
fc60: 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b   int iSavepoint;
fc70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
fc80: 70 74 68 20 6f 66 20 74 68 65 20 53 41 56 45 50  pth of the SAVEP
fc90: 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20  OINT stack */.  
fca0: 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20  VTable *pNext;  
fcb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78            /* Nex
fcc0: 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74  t in linked list
fcd0: 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a   (see above) */.
fce0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63  };../*.** The sc
fcf0: 68 65 6d 61 20 66 6f 72 20 65 61 63 68 20 53 51  hema for each SQ
fd00: 4c 20 74 61 62 6c 65 20 61 6e 64 20 76 69 65 77  L table and view
fd10: 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
fd20: 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20  in memory.** by 
fd30: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
fd40: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
fd50: 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
fd60: 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72  t Table {.  char
fd70: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
fd80: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
fd90: 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f  table or view */
fda0: 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b  .  Column *aCol;
fdb0: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72          /* Infor
fdc0: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
fdd0: 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e  h column */.  In
fde0: 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20  dex *pIndex;    
fdf0: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51     /* List of SQ
fe00: 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69  L indexes on thi
fe10: 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65  s table. */.  Se
fe20: 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
fe30: 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74     /* NULL for t
fe40: 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74  ables.  Points t
fe50: 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20  o definition if 
fe60: 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65  a view. */.  FKe
fe70: 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20  y *pFKey;       
fe80: 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74    /* Linked list
fe90: 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20   of all foreign 
fea0: 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74 61 62  keys in this tab
feb0: 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43  le */.  char *zC
fec0: 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20  olAff;       /* 
fed0: 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20  String defining 
fee0: 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  the affinity of 
fef0: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
ff00: 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63   ExprList *pChec
ff10: 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45  k;    /* All CHE
ff20: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  CK constraints *
ff30: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
ff40: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e           /*   ..
ff50: 2e 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 63  . also used as c
ff60: 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20  olumn name list 
ff70: 69 6e 20 61 20 56 49 45 57 20 2a 2f 0a 20 20 69  in a VIEW */.  i
ff80: 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20  nt tnum;        
ff90: 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65      /* Root BTre
ffa0: 65 20 70 61 67 65 20 66 6f 72 20 74 68 69 73 20  e page for this 
ffb0: 74 61 62 6c 65 20 2a 2f 0a 20 20 69 31 36 20 69  table */.  i16 i
ffc0: 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20  PKey;           
ffd0: 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69  /* If not negati
ffe0: 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b  ve, use aCol[iPK
fff0: 65 79 5d 20 61 73 20 74 68 65 20 72 6f 77 69 64  ey] as the rowid
10000 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20   */.  i16 nCol; 
10010 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
10020 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
10030 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  in this table */
10040 0a 20 20 75 31 36 20 6e 52 65 66 3b 20 20 20 20  .  u16 nRef;    
10050 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
10060 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
10070 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20   this Table */. 
10080 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45   LogEst nRowLogE
10090 73 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74  st;   /* Estimat
100a0 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65  ed rows in table
100b0 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73   - from sqlite_s
100c0 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20  tat1 table */.  
100d0 4c 6f 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b  LogEst szTabRow;
100e0 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
100f0 64 20 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74  d size of each t
10100 61 62 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65  able row in byte
10110 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  s */.#ifdef SQLI
10120 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55  TE_ENABLE_COSTMU
10130 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74  LT.  LogEst cost
10140 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73  Mult;     /* Cos
10150 74 20 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72  t multiplier for
10160 20 75 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c   using this tabl
10170 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38  e */.#endif.  u8
10180 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20   tabFlags;      
10190 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46     /* Mask of TF
101a0 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  _* values */.  u
101b0 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20  8 keyConf;      
101c0 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64      /* What to d
101d0 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69  o in case of uni
101e0 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74  queness conflict
101f0 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66   on iPKey */.#if
10200 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
10210 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e  _ALTERTABLE.  in
10220 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20  t addColOffset; 
10230 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20     /* Offset in 
10240 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d  CREATE TABLE stm
10250 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63  t to add a new c
10260 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  olumn */.#endif.
10270 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
10280 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
10290 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72  .  int nModuleAr
102a0 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  g;      /* Numbe
102b0 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74  r of arguments t
102c0 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a  o the module */.
102d0 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c    char **azModul
102e0 65 41 72 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64  eArg;  /* 0: mod
102f0 75 6c 65 20 31 3a 20 73 63 68 65 6d 61 20 32 3a  ule 1: schema 2:
10300 20 76 74 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a   vtab name 3...:
10310 20 61 72 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c   args */.  VTabl
10320 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20  e *pVTable;     
10330 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c  /* List of VTabl
10340 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65  e objects. */.#e
10350 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a  ndif.  Trigger *
10360 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c  pTrigger;   /* L
10370 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 73 20  ist of triggers 
10380 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d  stored in pSchem
10390 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  a */.  Schema *p
103a0 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
103b0 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61  chema that conta
103c0 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ins this table *
103d0 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74  /.  Table *pNext
103e0 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74  Zombie;  /* Next
103f0 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a   on the Parse.pZ
10400 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f  ombieTab list */
10410 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
10420 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61  ed values for Ta
10430 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a  ble.tabFlags..**
10440 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e  .** TF_OOOHidden
10450 20 61 70 70 6c 69 65 73 20 74 6f 20 76 69 72 74   applies to virt
10460 75 61 6c 20 74 61 62 6c 65 73 20 74 68 61 74 20  ual tables that 
10470 68 61 76 65 20 68 69 64 64 65 6e 20 63 6f 6c 75  have hidden colu
10480 6d 6e 73 20 74 68 61 74 20 61 72 65 0a 2a 2a 20  mns that are.** 
10490 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d  followed by non-
104a0 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20  hidden columns. 
104b0 20 45 78 61 6d 70 6c 65 3a 20 20 22 43 52 45 41   Example:  "CREA
104c0 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
104d0 20 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62   x USING.** vtab
104e0 31 28 61 20 48 49 44 44 45 4e 2c 20 62 29 3b 22  1(a HIDDEN, b);"
104f0 2e 20 20 53 69 6e 63 65 20 22 62 22 20 69 73 20  .  Since "b" is 
10500 61 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c  a non-hidden col
10510 75 6d 6e 20 62 75 74 20 22 61 22 20 69 73 20 68  umn but "a" is h
10520 69 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46  idden,.** the TF
10530 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74 72 69  _OOOHidden attri
10540 62 75 74 65 20 77 6f 75 6c 64 20 61 70 70 6c 79  bute would apply
10550 20 69 6e 20 74 68 69 73 20 63 61 73 65 2e 20 20   in this case.  
10560 53 75 63 68 20 74 61 62 6c 65 73 20 72 65 71 75  Such tables requ
10570 69 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68  ire.** special h
10580 61 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67 20 49  andling during I
10590 4e 53 45 52 54 20 70 72 6f 63 65 73 73 69 6e 67  NSERT processing
105a0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  ..*/.#define TF_
105b0 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20  Readonly        
105c0 30 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d  0x01    /* Read-
105d0 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c  only system tabl
105e0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
105f0 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20  Ephemeral       
10600 30 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70  0x02    /* An ep
10610 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f  hemeral table */
10620 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50  .#define TF_HasP
10630 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34  rimaryKey   0x04
10640 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73      /* Table has
10650 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a   a primary key *
10660 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74  /.#define TF_Aut
10670 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30  oincrement   0x0
10680 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20  8    /* Integer 
10690 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61  primary key is a
106a0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a  utoincrement */.
106b0 23 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75  #define TF_Virtu
106c0 61 6c 20 20 20 20 20 20 20 20 20 30 78 31 30 20  al         0x10 
106d0 20 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75     /* Is a virtu
106e0 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  al table */.#def
106f0 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f  ine TF_WithoutRo
10700 77 69 64 20 20 20 20 30 78 32 30 20 20 20 20 2f  wid    0x20    /
10710 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50 52 49  * No rowid.  PRI
10720 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68 65 20  MARY KEY is the 
10730 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  key */.#define T
10740 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64  F_NoVisibleRowid
10750 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4e 6f 20    0x40    /* No 
10760 75 73 65 72 2d 76 69 73 69 62 6c 65 20 22 72 6f  user-visible "ro
10770 77 69 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23  wid" column */.#
10780 64 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48 69 64  define TF_OOOHid
10790 64 65 6e 20 20 20 20 20 20 20 30 78 38 30 20 20  den       0x80  
107a0 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64 65    /* Out-of-Orde
107b0 72 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  r hidden columns
107c0 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74   */.../*.** Test
107d0 20 74 6f 20 73 65 65 20 77 68 65 74 68 65 72 20   to see whether 
107e0 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69  or not a table i
107f0 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  s a virtual tabl
10800 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64  e.  This is.** d
10810 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73  one as a macro s
10820 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62  o that it will b
10830 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20  e optimized out 
10840 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20  when virtual.** 
10850 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73  table support is
10860 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68   omitted from th
10870 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e  e build..*/.#ifn
10880 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
10890 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20  VIRTUALTABLE.#  
108a0 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c  define IsVirtual
108b0 28 58 29 20 20 20 20 20 20 28 28 28 58 29 2d 3e  (X)      (((X)->
108c0 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 56 69  tabFlags & TF_Vi
108d0 72 74 75 61 6c 29 21 3d 30 29 0a 23 20 20 64 65  rtual)!=0).#  de
108e0 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
108f0 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f  umn(X) (((X)->co
10900 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47  lFlags & COLFLAG
10910 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c  _HIDDEN)!=0).#el
10920 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56  se.#  define IsV
10930 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 30  irtual(X)      0
10940 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64  .#  define IsHid
10950 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23  denColumn(X) 0.#
10960 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 65 73 20 74  endif../* Does t
10970 68 65 20 74 61 62 6c 65 20 68 61 76 65 20 61 20  he table have a 
10980 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  rowid */.#define
10990 20 48 61 73 52 6f 77 69 64 28 58 29 20 20 20 20   HasRowid(X)    
109a0 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73   (((X)->tabFlags
109b0 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77   & TF_WithoutRow
109c0 69 64 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20  id)==0).#define 
109d0 56 69 73 69 62 6c 65 52 6f 77 69 64 28 58 29 20  VisibleRowid(X) 
109e0 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
109f0 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f  & TF_NoVisibleRo
10a00 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  wid)==0)../*.** 
10a10 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79  Each foreign key
10a20 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61   constraint is a
10a30 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
10a40 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
10a50 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66  cture..**.** A f
10a60 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73  oreign key is as
10a70 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77  sociated with tw
10a80 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22  o tables.  The "
10a90 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a  from" table is.*
10aa0 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  * the table that
10ab0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45   contains the RE
10ac0 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
10ad0 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65  that creates the
10ae0 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e   foreign.** key.
10af0 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65    The "to" table
10b00 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68   is the table th
10b10 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74  at is named in t
10b20 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
10b30 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65  ause..** Conside
10b40 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a  r this example:.
10b50 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
10b60 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20   TABLE ex1(.**  
10b70 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50       a INTEGER P
10b80 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20  RIMARY KEY,.**  
10b90 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43       b INTEGER C
10ba0 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45  ONSTRAINT fk1 RE
10bb0 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a  FERENCES ex2(x).
10bc0 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20  **     );.**.** 
10bd0 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  For foreign key 
10be0 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d  "fk1", the from-
10bf0 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61  table is "ex1" a
10c00 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20  nd the to-table 
10c10 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75  is "ex2"..** Equ
10c20 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a  ivalent names:.*
10c30 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61  *.**     from-ta
10c40 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62  ble == child-tab
10c50 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74  le.**       to-t
10c60 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74  able == parent-t
10c70 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20  able.**.** Each 
10c80 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
10c90 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69  e generates an i
10ca0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
10cb0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
10cc0 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61  re.** which is a
10cd0 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 66  ttached to the f
10ce0 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20  rom-table.  The 
10cf0 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f  to-table need no
10d00 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20  t exist when.** 
10d10 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69  the from-table i
10d20 73 20 63 72 65 61 74 65 64 2e 20 20 54 68 65 20  s created.  The 
10d30 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65  existence of the
10d40 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74   to-table is not
10d50 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20   checked..**.** 
10d60 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  The list of all 
10d70 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c  parents for chil
10d80 64 20 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c  d Table X is hel
10d90 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a  d at X.pFKey..**
10da0 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c  .** A list of al
10db0 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61  l children for a
10dc0 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28   table named Z (
10dd0 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20  which might not 
10de0 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69  even exist).** i
10df0 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61  s held in Schema
10e00 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68 20 61  .fkeyHash with a
10e10 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a   hash key of Z..
10e20 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b  */.struct FKey {
10e30 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b  .  Table *pFrom;
10e40 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f       /* Table co
10e50 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46  ntaining the REF
10e60 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28  ERENCES clause (
10e70 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20  aka: Child) */. 
10e80 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d   FKey *pNextFrom
10e90 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20  ;  /* Next FKey 
10ea0 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e  with the same in
10eb0 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72   pFrom. Next par
10ec0 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a  ent of pFrom */.
10ed0 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20    char *zTo;    
10ee0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
10ef0 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65  able that the ke
10f00 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61  y points to (aka
10f10 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46  : Parent) */.  F
10f20 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20  Key *pNextTo;   
10f30 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68   /* Next with th
10f40 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74  e same zTo. Next
10f50 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a   child of zTo. *
10f60 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54  /.  FKey *pPrevT
10f70 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75  o;    /* Previou
10f80 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  s with the same 
10f90 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f  zTo */.  int nCo
10fa0 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  l;         /* Nu
10fb0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
10fc0 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20  in this key */. 
10fd0 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d   /* EV: R-30323-
10fe0 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73  21917 */.  u8 is
10ff0 44 65 66 65 72 72 65 64 3b 20 20 20 20 20 20 20  Deferred;       
11000 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74  /* True if const
11010 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69  raint checking i
11020 73 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20  s deferred till 
11030 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61  COMMIT */.  u8 a
11040 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20  Action[2];      
11050 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61    /* ON DELETE a
11060 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74  nd ON UPDATE act
11070 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65  ions, respective
11080 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  ly */.  Trigger 
11090 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a  *apTrigger[2];/*
110a0 20 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41   Triggers for aA
110b0 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20  ction[] actions 
110c0 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c  */.  struct sCol
110d0 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61  Map {      /* Ma
110e0 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73  pping of columns
110f0 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c   in pFrom to col
11100 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20  umns in zTo */. 
11110 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20     int iFrom;   
11120 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
11130 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70  x of column in p
11140 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72  From */.    char
11150 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20   *zCol;         
11160 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c    /* Name of col
11170 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20  umn in zTo.  If 
11180 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59  NULL use PRIMARY
11190 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c   KEY */.  } aCol
111a0 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
111b0 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72  /* One entry for
111c0 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f   each of nCol co
111d0 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  lumns */.};../*.
111e0 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72  ** SQLite suppor
111f0 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e  ts many differen
11200 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76  t ways to resolv
11210 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  e a constraint.*
11220 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41  * error.  ROLLBA
11230 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  CK processing me
11240 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74  ans that a const
11250 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a  raint violation.
11260 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70  ** causes the op
11270 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
11280 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66  ss to fail and f
11290 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  or the current t
112a0 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ransaction.** to
112b0 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   be rolled back.
112c0 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69    ABORT processi
112d0 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65  ng means the ope
112e0 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
112f0 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61  s.** fails and a
11300 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ny prior changes
11310 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f   from that one o
11320 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63  peration are bac
11330 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20  ked out,.** but 
11340 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
11350 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61  is not rolled ba
11360 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73  ck.  FAIL proces
11370 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a  sing means that.
11380 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ** the operation
11390 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f   in progress sto
113a0 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61  ps and returns a
113b0 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42  n error code.  B
113c0 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e  ut prior.** chan
113d0 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73  ges due to the s
113e0 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  ame operation ar
113f0 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74  e not backed out
11400 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b   and no rollback
11410 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e  .** occurs.  IGN
11420 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ORE means that t
11430 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f  he particular ro
11440 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68  w that caused th
11450 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  e constraint.** 
11460 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73  error is not ins
11470 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64  erted or updated
11480 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
11490 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
114a0 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72  rror.** is retur
114b0 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65  ned.  REPLACE me
114c0 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73  ans that preexis
114d0 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f  ting database ro
114e0 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a  ws that caused.*
114f0 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  * a UNIQUE const
11500 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
11510 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74  are removed so t
11520 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65  hat the new inse
11530 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20  rt or.** update 
11540 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72  can proceed.  Pr
11550 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75  ocessing continu
11560 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20  es and no error 
11570 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a  is reported..**.
11580 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54  ** RESTRICT, SET
11590 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44  NULL, and CASCAD
115a0 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20  E actions apply 
115b0 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20  only to foreign 
115c0 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43  keys..** RESTRIC
115d0 54 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  T is the same as
115e0 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44   ABORT for IMMED
115f0 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79  IATE foreign key
11600 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d  s and the.** sam
11610 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f  e as ROLLBACK fo
11620 72 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e  r DEFERRED keys.
11630 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20    SETNULL means 
11640 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e  that the foreign
11650 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74  .** key is set t
11660 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45  o NULL.  CASCADE
11670 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45   means that a DE
11680 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f  LETE or UPDATE o
11690 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e  f the.** referen
116a0 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73  ced table row is
116b0 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f   propagated into
116c0 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f   the row that ho
116d0 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69  lds the.** forei
116e0 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54  gn key..** .** T
116f0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d  he following sym
11700 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65  bolic values are
11710 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20   used to record 
11720 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66  which type.** of
11730 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e   action to take.
11740 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e  .*/.#define OE_N
11750 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54  one     0   /* T
11760 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74  here is no const
11770 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a  raint to check *
11780 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c  /.#define OE_Rol
11790 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69  lback 1   /* Fai
117a0 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  l the operation 
117b0 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65  and rollback the
117c0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
117d0 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74  #define OE_Abort
117e0 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20      2   /* Back 
117f0 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20  out changes but 
11800 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74  do no rollback t
11810 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64  ransaction */.#d
11820 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20  efine OE_Fail   
11830 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68    3   /* Stop th
11840 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20  e operation but 
11850 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20  leave all prior 
11860 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
11870 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34  ne OE_Ignore   4
11880 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65     /* Ignore the
11890 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64   error. Do not d
118a0 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20  o the INSERT or 
118b0 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
118c0 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20  e OE_Replace  5 
118d0 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73    /* Delete exis
118e0 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65  ting record, the
118f0 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55  n do INSERT or U
11900 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e  PDATE */..#defin
11910 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20  e OE_Restrict 6 
11920 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f    /* OE_Abort fo
11930 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f  r IMMEDIATE, OE_
11940 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46  Rollback for DEF
11950 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65  ERRED */.#define
11960 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20   OE_SetNull  7  
11970 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
11980 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
11990 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65   NULL */.#define
119a0 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20   OE_SetDflt  8  
119b0 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
119c0 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
119d0 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a   its default */.
119e0 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61  #define OE_Casca
119f0 64 65 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61  de  9   /* Casca
11a00 64 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a  de the changes *
11a10 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65  /..#define OE_De
11a20 66 61 75 6c 74 20 20 31 30 20 20 2f 2a 20 44 6f  fault  10  /* Do
11a30 20 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65   whatever the de
11a40 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20  fault action is 
11a50 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  */.../*.** An in
11a60 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
11a70 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
11a80 65 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74  e is passed as t
11a90 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75  he first.** argu
11aa0 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56  ment to sqlite3V
11ab0 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e  dbeKeyCompare an
11ac0 64 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e  d is used to con
11ad0 74 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63 6f 6d  trol the .** com
11ae0 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74  parison of the t
11af0 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a  wo index keys..*
11b00 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61  *.** Note that a
11b10 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20  SortOrder[] and 
11b20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69  aColl[] have nFi
11b30 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68  eld+1 slots.  Th
11b40 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c  ere.** are nFiel
11b50 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20  d slots for the 
11b60 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e  columns of an in
11b70 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74  dex then one ext
11b80 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74  ra slot.** for t
11b90 68 65 20 72 6f 77 69 64 20 61 74 20 74 68 65 20  he rowid at the 
11ba0 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b  end..*/.struct K
11bb0 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e  eyInfo {.  u32 n
11bc0 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Ref;           /
11bd0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 66 65  * Number of refe
11be0 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73 20 4b  rences to this K
11bf0 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f  eyInfo object */
11c00 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
11c10 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65         /* Text e
11c20 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66  ncoding - one of
11c30 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a   the SQLITE_UTF*
11c40 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36   values */.  u16
11c50 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
11c60 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65   /* Number of ke
11c70 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  y columns in the
11c80 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36 20   index */.  u16 
11c90 6e 58 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20  nXField;        
11ca0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
11cb0 75 6d 6e 73 20 62 65 79 6f 6e 64 20 74 68 65 20  umns beyond the 
11cc0 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  key columns */. 
11cd0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
11ce0 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
11cf0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
11d00 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72  */.  u8 *aSortOr
11d10 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74  der;     /* Sort
11d20 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68 20   order for each 
11d30 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c  column. */.  Col
11d40 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20  lSeq *aColl[1]; 
11d50 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
11d60 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20  quence for each 
11d70 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20  term of the key 
11d80 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  */.};../*.** Thi
11d90 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20 61  s object holds a
11da0 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 68 61   record which ha
11db0 73 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75  s been parsed ou
11dc0 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61  t into individua
11dd0 6c 0a 2a 2a 20 66 69 65 6c 64 73 2c 20 66 6f 72  l.** fields, for
11de0 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66   the purposes of
11df0 20 64 6f 69 6e 67 20 61 20 63 6f 6d 70 61 72 69   doing a compari
11e00 73 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63  son..**.** A rec
11e10 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74  ord is an object
11e20 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f   that contains o
11e30 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64  ne or more field
11e40 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65  s of data..** Re
11e50 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20 74  cords are used t
11e60 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74  o store the cont
11e70 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72  ent of a table r
11e80 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a  ow and to store.
11e90 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e  ** the key of an
11ea0 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20   index.  A blob 
11eb0 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65  encoding of a re
11ec0 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64 20  cord is created 
11ed0 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b  by.** the OP_Mak
11ee0 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f  eRecord opcode o
11ef0 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20 69  f the VDBE and i
11f00 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62  s disassembled b
11f10 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75  y the.** OP_Colu
11f20 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  mn opcode..**.**
11f30 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
11f40 74 68 69 73 20 6f 62 6a 65 63 74 20 73 65 72 76  this object serv
11f50 65 73 20 61 73 20 61 20 22 6b 65 79 22 20 66 6f  es as a "key" fo
11f60 72 20 64 6f 69 6e 67 20 61 20 73 65 61 72 63 68  r doing a search
11f70 20 6f 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 20   on.** an index 
11f80 62 2b 74 72 65 65 2e 20 54 68 65 20 67 6f 61 6c  b+tree. The goal
11f90 20 6f 66 20 74 68 65 20 73 65 61 72 63 68 20 69   of the search i
11fa0 73 20 74 6f 20 66 69 6e 64 20 74 68 65 20 65 6e  s to find the en
11fb0 74 72 79 20 74 68 61 74 0a 2a 2a 20 69 73 20 63  try that.** is c
11fc0 6c 6f 73 65 64 20 74 6f 20 74 68 65 20 6b 65 79  losed to the key
11fd0 20 64 65 73 63 72 69 62 65 64 20 62 79 20 74 68   described by th
11fe0 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68 69 73  is object.  This
11ff0 20 6f 62 6a 65 63 74 20 6d 69 67 68 74 20 68 6f   object might ho
12000 6c 64 0a 2a 2a 20 6a 75 73 74 20 61 20 70 72 65  ld.** just a pre
12010 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79 2e 20  fix of the key. 
12020 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66   The number of f
12030 69 65 6c 64 73 20 69 73 20 67 69 76 65 6e 20 62  ields is given b
12040 79 0a 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e  y.** pKeyInfo->n
12050 46 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  Field..**.** The
12060 20 72 31 20 61 6e 64 20 72 32 20 66 69 65 6c 64   r1 and r2 field
12070 73 20 61 72 65 20 74 68 65 20 76 61 6c 75 65 73  s are the values
12080 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 74 68   to return if th
12090 69 73 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74  is key is less t
120a0 68 61 6e 0a 2a 2a 20 6f 72 20 67 72 65 61 74 65  han.** or greate
120b0 72 20 74 68 61 6e 20 61 20 6b 65 79 20 69 6e 20  r than a key in 
120c0 74 68 65 20 62 74 72 65 65 2c 20 72 65 73 70 65  the btree, respe
120d0 63 74 69 76 65 6c 79 2e 20 20 54 68 65 73 65 20  ctively.  These 
120e0 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a 20  are normally.** 
120f0 2d 31 20 61 6e 64 20 2b 31 20 72 65 73 70 65 63  -1 and +1 respec
12100 74 69 76 65 6c 79 2c 20 62 75 74 20 6d 69 67 68  tively, but migh
12110 74 20 62 65 20 69 6e 76 65 72 74 65 64 20 74 6f  t be inverted to
12120 20 2b 31 20 61 6e 64 20 2d 31 20 69 66 20 74 68   +1 and -1 if th
12130 65 20 62 2d 74 72 65 65 0a 2a 2a 20 69 73 20 69  e b-tree.** is i
12140 6e 20 44 45 53 43 20 6f 72 64 65 72 2e 0a 2a 2a  n DESC order..**
12150 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70  .** The key comp
12160 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  arison functions
12170 20 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e   actually return
12180 20 64 65 66 61 75 6c 74 5f 72 63 20 77 68 65 6e   default_rc when
12190 20 74 68 65 79 20 66 69 6e 64 0a 2a 2a 20 61 6e   they find.** an
121a0 20 65 71 75 61 6c 73 20 63 6f 6d 70 61 72 69 73   equals comparis
121b0 6f 6e 2e 20 20 64 65 66 61 75 6c 74 5f 72 63 20  on.  default_rc 
121c0 63 61 6e 20 62 65 20 2d 31 2c 20 30 2c 20 6f 72  can be -1, 0, or
121d0 20 2b 31 2e 20 20 49 66 20 74 68 65 72 65 20 61   +1.  If there a
121e0 72 65 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 65  re.** multiple e
121f0 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 62 2d  ntries in the b-
12200 74 72 65 65 20 77 69 74 68 20 74 68 65 20 73 61  tree with the sa
12210 6d 65 20 6b 65 79 20 28 77 68 65 6e 20 6f 6e 6c  me key (when onl
12220 79 20 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74 20  y looking.** at 
12230 74 68 65 20 66 69 72 73 74 20 70 4b 65 79 49 6e  the first pKeyIn
12240 66 6f 2d 3e 6e 46 69 65 6c 64 73 2c 29 20 74 68  fo->nFields,) th
12250 65 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61  en default_rc ca
12260 6e 20 62 65 20 73 65 74 20 74 6f 20 2d 31 20 74  n be set to -1 t
12270 6f 20 0a 2a 2a 20 63 61 75 73 65 20 74 68 65 20  o .** cause the 
12280 73 65 61 72 63 68 20 74 6f 20 66 69 6e 64 20 74  search to find t
12290 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2c 20 6f  he last match, o
122a0 72 20 2b 31 20 74 6f 20 63 61 75 73 65 20 74 68  r +1 to cause th
122b0 65 20 73 65 61 72 63 68 20 74 6f 0a 2a 2a 20 66  e search to.** f
122c0 69 6e 64 20 74 68 65 20 66 69 72 73 74 20 6d 61  ind the first ma
122d0 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b  tch..**.** The k
122e0 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75  ey comparison fu
122f0 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73 65 74  nctions will set
12300 20 65 71 53 65 65 6e 20 74 6f 20 74 72 75 65 20   eqSeen to true 
12310 69 66 20 74 68 65 79 20 65 76 65 72 0a 2a 2a 20  if they ever.** 
12320 67 65 74 20 61 6e 64 20 65 71 75 61 6c 20 72 65  get and equal re
12330 73 75 6c 74 73 20 77 68 65 6e 20 63 6f 6d 70 61  sults when compa
12340 72 69 6e 67 20 74 68 69 73 20 73 74 72 75 63 74  ring this struct
12350 75 72 65 20 74 6f 20 61 20 62 2d 74 72 65 65 20  ure to a b-tree 
12360 72 65 63 6f 72 64 2e 0a 2a 2a 20 57 68 65 6e 20  record..** When 
12370 64 65 66 61 75 6c 74 5f 72 63 21 3d 30 2c 20 74  default_rc!=0, t
12380 68 65 20 73 65 61 72 63 68 20 6d 69 67 68 74 20  he search might 
12390 65 6e 64 20 75 70 20 6f 6e 20 74 68 65 20 72 65  end up on the re
123a0 63 6f 72 64 20 69 6d 6d 65 64 69 61 74 65 6c 79  cord immediately
123b0 0a 2a 2a 20 62 65 66 6f 72 65 20 74 68 65 20 66  .** before the f
123c0 69 72 73 74 20 6d 61 74 63 68 20 6f 72 20 69 6d  irst match or im
123d0 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65 72 20  mediately after 
123e0 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2e 20  the last match. 
123f0 20 54 68 65 0a 2a 2a 20 65 71 53 65 65 6e 20 66   The.** eqSeen f
12400 69 65 6c 64 20 77 69 6c 6c 20 69 6e 64 69 63 61  ield will indica
12410 74 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  te whether or no
12420 74 20 61 6e 20 65 78 61 63 74 20 6d 61 74 63 68  t an exact match
12430 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 0a 2a   exists in the.*
12440 2a 20 62 2d 74 72 65 65 2e 0a 2a 2f 0a 73 74 72  * b-tree..*/.str
12450 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  uct UnpackedReco
12460 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a  rd {.  KeyInfo *
12470 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f  pKeyInfo;  /* Co
12480 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74  llation and sort
12490 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74 69  -order informati
124a0 6f 6e 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65  on */.  Mem *aMe
124b0 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  m;          /* V
124c0 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  alues */.  u16 n
124d0 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f  Field;         /
124e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
124f0 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a  ies in apMem[] *
12500 2f 0a 20 20 69 38 20 64 65 66 61 75 6c 74 5f 72  /.  i8 default_r
12510 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61  c;      /* Compa
12520 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 69 66 20  rison result if 
12530 6b 65 79 73 20 61 72 65 20 65 71 75 61 6c 20 2a  keys are equal *
12540 2f 0a 20 20 75 38 20 65 72 72 43 6f 64 65 3b 20  /.  u8 errCode; 
12550 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72          /* Error
12560 20 64 65 74 65 63 74 65 64 20 62 79 20 78 52 65   detected by xRe
12570 63 6f 72 64 43 6f 6d 70 61 72 65 20 28 43 4f 52  cordCompare (COR
12580 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a  RUPT or NOMEM) *
12590 2f 0a 20 20 69 38 20 72 31 3b 20 20 20 20 20 20  /.  i8 r1;      
125a0 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
125b0 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c   to return if (l
125c0 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a 20 20 69  hs > rhs) */.  i
125d0 38 20 72 32 3b 20 20 20 20 20 20 20 20 20 20 20  8 r2;           
125e0 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
125f0 65 74 75 72 6e 20 69 66 20 28 72 68 73 20 3c 20  eturn if (rhs < 
12600 6c 68 73 29 20 2a 2f 0a 20 20 75 38 20 65 71 53  lhs) */.  u8 eqS
12610 65 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  een;          /*
12620 20 54 72 75 65 20 69 66 20 61 6e 20 65 71 75 61   True if an equa
12630 6c 69 74 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20  lity comparison 
12640 68 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f  has been seen */
12650 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  .};.../*.** Each
12660 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65   SQL index is re
12670 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
12680 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73  ory by an.** ins
12690 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
126a0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
126b0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75  ..**.** The colu
126c0 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65  mns of the table
126d0 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65 20   that are to be 
126e0 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73 63  indexed are desc
126f0 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20  ribed.** by the 
12700 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64  aiColumn[] field
12710 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
12720 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  re.  For example
12730 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20  , suppose.** we 
12740 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  have the followi
12750 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64  ng table and ind
12760 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  ex:.**.**     CR
12770 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28 63  EATE TABLE Ex1(c
12780 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63  1 int, c2 int, c
12790 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20  3 text);.**     
127a0 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78 32  CREATE INDEX Ex2
127b0 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a   ON Ex1(c3,c1);.
127c0 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62  **.** In the Tab
127d0 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65 73  le structure des
127e0 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f  cribing Ex1, nCo
127f0 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68 65  l==3 because the
12800 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20  re are.** three 
12810 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
12820 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e  able.  In the In
12830 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64 65  dex structure de
12840 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c  scribing.** Ex2,
12850 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63   nColumn==2 sinc
12860 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c  e 2 of the 3 col
12870 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20  umns of Ex1 are 
12880 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20  indexed..** The 
12890 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d  value of aiColum
128a0 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69  n is {2, 0}.  ai
128b0 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63  Column[0]==2 bec
128c0 61 75 73 65 20 74 68 65 20 0a 2a 2a 20 66 69 72  ause the .** fir
128d0 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20  st column to be 
128e0 69 6e 64 65 78 65 64 20 28 63 33 29 20 68 61 73  indexed (c3) has
128f0 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69   an index of 2 i
12900 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a  n Ex1.aCol[]..**
12910 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75   The second colu
12920 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  mn to be indexed
12930 20 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64   (c1) has an ind
12940 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78  ex of 0 in.** Ex
12950 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20  1.aCol[], hence 
12960 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d  Ex2.aiColumn[1]=
12970 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e  =0..**.** The In
12980 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c  dex.onError fiel
12990 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65  d determines whe
129a0 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
129b0 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a  indexed columns.
129c0 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75  ** must be uniqu
129d0 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f  e and what to do
129e0 20 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74   if they are not
129f0 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e  .  When Index.on
12a00 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a  Error=OE_None,.*
12a10 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20  * it means this 
12a20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20  is not a unique 
12a30 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73  index.  Otherwis
12a40 65 20 69 74 20 69 73 20 61 20 75 6e 69 71 75 65  e it is a unique
12a50 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68   index.** and th
12a60 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78  e value of Index
12a70 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74  .onError indicat
12a80 65 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66  e the which conf
12a90 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
12aa0 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f  .** algorithm to
12ab0 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72   employ whenever
12ac0 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   an attempt is m
12ad0 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20  ade to insert a 
12ae0 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c  non-unique.** el
12af0 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57 68 69  ement..**.** Whi
12b00 6c 65 20 70 61 72 73 69 6e 67 20 61 20 43 52 45  le parsing a CRE
12b10 41 54 45 20 54 41 42 4c 45 20 6f 72 20 43 52 45  ATE TABLE or CRE
12b20 41 54 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d  ATE INDEX statem
12b30 65 6e 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ent in order to.
12b40 2a 2a 20 67 65 6e 65 72 61 74 65 20 56 44 42 45  ** generate VDBE
12b50 20 63 6f 64 65 20 28 61 73 20 6f 70 70 6f 73 65   code (as oppose
12b60 64 20 74 6f 20 70 61 72 73 69 6e 67 20 6f 6e 65  d to parsing one
12b70 20 72 65 61 64 20 66 72 6f 6d 20 61 6e 20 73 71   read from an sq
12b80 6c 69 74 65 5f 6d 61 73 74 65 72 0a 2a 2a 20 74  lite_master.** t
12b90 61 62 6c 65 20 61 73 20 70 61 72 74 20 6f 66 20  able as part of 
12ba0 70 61 72 73 69 6e 67 20 61 6e 20 65 78 69 73 74  parsing an exist
12bb0 69 6e 67 20 64 61 74 61 62 61 73 65 20 73 63 68  ing database sch
12bc0 65 6d 61 29 2c 20 74 72 61 6e 73 69 65 6e 74 20  ema), transient 
12bd0 69 6e 73 74 61 6e 63 65 73 0a 2a 2a 20 6f 66 20  instances.** of 
12be0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 6d  this structure m
12bf0 61 79 20 62 65 20 63 72 65 61 74 65 64 2e 20 49  ay be created. I
12c00 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20  n this case the 
12c10 49 6e 64 65 78 2e 74 6e 75 6d 20 76 61 72 69 61  Index.tnum varia
12c20 62 6c 65 20 69 73 0a 2a 2a 20 75 73 65 64 20 74  ble is.** used t
12c30 6f 20 73 74 6f 72 65 20 74 68 65 20 61 64 64 72  o store the addr
12c40 65 73 73 20 6f 66 20 61 20 56 44 42 45 20 69 6e  ess of a VDBE in
12c50 73 74 72 75 63 74 69 6f 6e 2c 20 6e 6f 74 20 61  struction, not a
12c60 20 64 61 74 61 62 61 73 65 20 70 61 67 65 0a 2a   database page.*
12c70 2a 20 6e 75 6d 62 65 72 20 28 69 74 20 63 61 6e  * number (it can
12c80 6e 6f 74 20 2d 20 74 68 65 20 64 61 74 61 62 61  not - the databa
12c90 73 65 20 70 61 67 65 20 69 73 20 6e 6f 74 20 61  se page is not a
12ca0 6c 6c 6f 63 61 74 65 64 20 75 6e 74 69 6c 20 74  llocated until t
12cb0 68 65 20 56 44 42 45 0a 2a 2a 20 70 72 6f 67 72  he VDBE.** progr
12cc0 61 6d 20 69 73 20 65 78 65 63 75 74 65 64 29 2e  am is executed).
12cd0 20 53 65 65 20 63 6f 6e 76 65 72 74 54 6f 57 69   See convertToWi
12ce0 74 68 6f 75 74 52 6f 77 69 64 54 61 62 6c 65 28  thoutRowidTable(
12cf0 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a  ) for details..*
12d00 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b  /.struct Index {
12d10 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
12d20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
12d30 61 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65  ame of this inde
12d40 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f  x */.  i16 *aiCo
12d50 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
12d60 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73  /* Which columns
12d70 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68 69   are used by thi
12d80 73 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73  s index.  1st is
12d90 20 30 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 2a   0 */.  LogEst *
12da0 61 69 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 20  aiRowLogEst;    
12db0 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45   /* From ANALYZE
12dc0 3a 20 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65  : Est. rows sele
12dd0 63 74 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c  cted by each col
12de0 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  umn */.  Table *
12df0 70 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  pTable;         
12e00 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62    /* The SQL tab
12e10 6c 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64  le being indexed
12e20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
12e30 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Aff;           /
12e40 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e  * String definin
12e50 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  g the affinity o
12e60 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  f each column */
12e70 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b  .  Index *pNext;
12e80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
12e90 68 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73  he next index as
12ea0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
12eb0 65 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a  e same table */.
12ec0 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
12ed0 61 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63  a;         /* Sc
12ee0 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20  hema containing 
12ef0 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
12f00 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20  u8 *aSortOrder; 
12f10 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20           /* for 
12f20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75  each column: Tru
12f30 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d  e==DESC, False==
12f40 41 53 43 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  ASC */.  char **
12f50 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20  azColl;         
12f60 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f    /* Array of co
12f70 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
12f80 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78   names for index
12f90 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50 61 72   */.  Expr *pPar
12fa0 74 49 64 78 57 68 65 72 65 3b 20 20 20 20 20 2f  tIdxWhere;     /
12fb0 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  * WHERE clause f
12fc0 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64 69 63  or partial indic
12fd0 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  es */.  ExprList
12fe0 20 2a 61 43 6f 6c 45 78 70 72 3b 20 20 20 20 20   *aColExpr;     
12ff0 20 2f 2a 20 43 6f 6c 75 6d 6e 20 65 78 70 72 65   /* Column expre
13000 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  ssions */.  int 
13010 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
13020 20 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20       /* DB Page 
13030 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20  containing root 
13040 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  of this index */
13050 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49 64 78 52  .  LogEst szIdxR
13060 6f 77 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45  ow;         /* E
13070 73 74 69 6d 61 74 65 64 20 61 76 65 72 61 67 65  stimated average
13080 20 72 6f 77 20 73 69 7a 65 20 69 6e 20 62 79 74   row size in byt
13090 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79  es */.  u16 nKey
130a0 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
130b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
130c0 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68  lumns forming th
130d0 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e  e key */.  u16 n
130e0 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
130f0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13100 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20   columns stored 
13110 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  in the index */.
13120 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20    u8 onError;   
13130 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45             /* OE
13140 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72  _Abort, OE_Ignor
13150 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f  e, OE_Replace, o
13160 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75  r OE_None */.  u
13170 6e 73 69 67 6e 65 64 20 69 64 78 54 79 70 65 3a  nsigned idxType:
13180 32 3b 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55 4e  2;      /* 1==UN
13190 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59  IQUE, 2==PRIMARY
131a0 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20   KEY, 0==CREATE 
131b0 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67  INDEX */.  unsig
131c0 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31  ned bUnordered:1
131d0 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20  ;   /* Use this 
131e0 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20  index for == or 
131f0 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20  IN queries only 
13200 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e  */.  unsigned un
13210 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a  iqNotNull:1;  /*
13220 20 54 72 75 65 20 69 66 20 55 4e 49 51 55 45 20   True if UNIQUE 
13230 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72  and NOT NULL for
13240 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a   all columns */.
13250 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73    unsigned isRes
13260 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72  ized:1;    /* Tr
13270 75 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65  ue if resizeInde
13280 78 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62 65  xObject() has be
13290 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75  en called */.  u
132a0 6e 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69  nsigned isCoveri
132b0 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20  ng:1;   /* True 
132c0 69 66 20 74 68 69 73 20 69 73 20 61 20 63 6f 76  if this is a cov
132d0 65 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  ering index */. 
132e0 20 75 6e 73 69 67 6e 65 64 20 6e 6f 53 6b 69 70   unsigned noSkip
132f0 53 63 61 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f 20  Scan:1;   /* Do 
13300 6e 6f 74 20 74 72 79 20 74 6f 20 75 73 65 20 73  not try to use s
13310 6b 69 70 2d 73 63 61 6e 20 69 66 20 74 72 75 65  kip-scan if true
13320 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
13330 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
13340 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53  R_STAT4.  int nS
13350 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20  ample;          
13360 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13370 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d  elements in aSam
13380 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  ple[] */.  int n
13390 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20  SampleCol;      
133a0 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49      /* Size of I
133b0 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b  ndexSample.anEq[
133c0 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20  ] and so on */. 
133d0 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71   tRowcnt *aAvgEq
133e0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65  ;         /* Ave
133f0 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20  rage nEq values 
13400 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20  for keys not in 
13410 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64  aSample */.  Ind
13420 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c  exSample *aSampl
13430 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73  e;    /* Samples
13440 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73   of the left-mos
13450 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77 63  t key */.  tRowc
13460 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20  nt *aiRowEst;   
13470 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72      /* Non-logar
13480 69 74 68 6d 69 63 20 73 74 61 74 31 20 64 61 74  ithmic stat1 dat
13490 61 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78  a for this index
134a0 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52   */.  tRowcnt nR
134b0 6f 77 45 73 74 30 3b 20 20 20 20 20 20 20 20 2f  owEst0;        /
134c0 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69  * Non-logarithmi
134d0 63 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  c number of rows
134e0 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f   in the index */
134f0 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a  .#endif.};../*.*
13500 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
13510 20 66 6f 72 20 49 6e 64 65 78 2e 69 64 78 54 79   for Index.idxTy
13520 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  pe.*/.#define SQ
13530 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 41 50 50  LITE_IDXTYPE_APP
13540 44 45 46 20 20 20 20 20 20 30 20 20 20 2f 2a 20  DEF      0   /* 
13550 43 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52  Created using CR
13560 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64  EATE INDEX */.#d
13570 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58  efine SQLITE_IDX
13580 54 59 50 45 5f 55 4e 49 51 55 45 20 20 20 20 20  TYPE_UNIQUE     
13590 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e   1   /* Implemen
135a0 74 73 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73  ts a UNIQUE cons
135b0 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
135c0 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  e SQLITE_IDXTYPE
135d0 5f 50 52 49 4d 41 52 59 4b 45 59 20 20 32 20 20  _PRIMARYKEY  2  
135e0 20 2f 2a 20 49 73 20 74 68 65 20 50 52 49 4d 41   /* Is the PRIMA
135f0 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74  RY KEY for the t
13600 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75  able */../* Retu
13610 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78  rn true if index
13620 20 58 20 69 73 20 61 20 50 52 49 4d 41 52 59 20   X is a PRIMARY 
13630 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  KEY index */.#de
13640 66 69 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65  fine IsPrimaryKe
13650 79 49 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d  yIndex(X)  ((X)-
13660 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45  >idxType==SQLITE
13670 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59  _IDXTYPE_PRIMARY
13680 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20  KEY)../* Return 
13690 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20  true if index X 
136a0 69 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65  is a UNIQUE inde
136b0 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55  x */.#define IsU
136c0 6e 69 71 75 65 49 6e 64 65 78 28 58 29 20 20 20  niqueIndex(X)   
136d0 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72     ((X)->onError
136e0 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20 54  !=OE_None)../* T
136f0 68 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c 75 6d  he Index.aiColum
13700 6e 5b 5d 20 76 61 6c 75 65 73 20 61 72 65 20 6e  n[] values are n
13710 6f 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69 76 65  ormally positive
13720 20 69 6e 74 65 67 65 72 2e 20 20 42 75 74 0a 2a   integer.  But.*
13730 2a 20 74 68 65 72 65 20 61 72 65 20 73 6f 6d 65  * there are some
13740 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73   negative values
13750 20 74 68 61 74 20 68 61 76 65 20 73 70 65 63 69   that have speci
13760 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a 23  al meaning:.*/.#
13770 64 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49 44 20  define XN_ROWID 
13780 20 20 20 20 28 2d 31 29 20 20 20 20 20 2f 2a 20      (-1)     /* 
13790 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69  Indexed column i
137a0 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 23  s the rowid */.#
137b0 64 65 66 69 6e 65 20 58 4e 5f 45 58 50 52 20 20  define XN_EXPR  
137c0 20 20 20 20 28 2d 32 29 20 20 20 20 20 2f 2a 20      (-2)     /* 
137d0 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69  Indexed column i
137e0 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  s an expression 
137f0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73  */../*.** Each s
13800 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20  ample stored in 
13810 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33  the sqlite_stat3
13820 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73   table is repres
13830 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20  ented in memory 
13840 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75  .** using a stru
13850 63 74 75 72 65 20 6f 66 20 74 68 69 73 20 74 79  cture of this ty
13860 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e  pe.  See documen
13870 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f  tation at the to
13880 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c  p of the.** anal
13890 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c  yze.c source fil
138a0 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
138b0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
138c0 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d  .struct IndexSam
138d0 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b  ple {.  void *p;
138e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
138f0 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20  nter to sampled 
13900 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
13910 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
13920 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20   Size of record 
13930 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52  in bytes */.  tR
13940 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20  owcnt *anEq;    
13950 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
13960 66 20 72 6f 77 73 20 77 68 65 72 65 20 74 68 65  f rows where the
13970 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69 73   key equals this
13980 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f   sample */.  tRo
13990 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f  wcnt *anLt;    /
139a0 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66  * Est. number of
139b0 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20   rows where key 
139c0 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  is less than thi
139d0 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52  s sample */.  tR
139e0 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20  owcnt *anDLt;   
139f0 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
13a00 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20  f distinct keys 
13a10 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73  less than this s
13a20 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ample */.};../*.
13a30 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f  ** Each token co
13a40 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65 20  ming out of the 
13a50 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73 74  lexer is an inst
13a60 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20  ance of.** this 
13a70 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b 65  structure.  Toke
13a80 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65 64  ns are also used
13a90 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 65   as part of an e
13aa0 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  xpression..**.**
13ab0 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a   Note if Token.z
13ac0 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64  ==0 then Token.d
13ad0 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61  yn and Token.n a
13ae0 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61 6e 64  re undefined and
13af0 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20  .** may contain 
13b00 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20  random values.  
13b10 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20  Do not make any 
13b20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75  assumptions abou
13b30 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61  t Token.dyn.** a
13b40 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20  nd Token.n when 
13b50 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73  Token.z==0..*/.s
13b60 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20  truct Token {.  
13b70 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20 20  const char *z;  
13b80 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68     /* Text of th
13b90 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55  e token.  Not NU
13ba0 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a  LL-terminated! *
13bb0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  /.  unsigned int
13bc0 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72   n;    /* Number
13bd0 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69   of characters i
13be0 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a  n this token */.
13bf0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
13c00 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
13c10 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
13c20 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65   information nee
13c30 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a  ded to generate.
13c40 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45  ** code for a SE
13c50 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69  LECT that contai
13c60 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ns aggregate fun
13c70 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  ctions..**.** If
13c80 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47   Expr.op==TK_AGG
13c90 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47  _COLUMN or TK_AG
13ca0 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20  G_FUNCTION then 
13cb0 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73  Expr.pAggInfo is
13cc0 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f   a.** pointer to
13cd0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
13ce0 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75    The Expr.iColu
13cf0 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65 20  mn field is the 
13d00 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49  index in.** AggI
13d10 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67  nfo.aCol[] or Ag
13d20 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66  gInfo.aFunc[] of
13d30 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65   information nee
13d40 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a  ded to generate.
13d50 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74  ** code for that
13d60 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67   node..**.** Agg
13d70 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e  Info.pGroupBy an
13d80 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e  d AggInfo.aFunc.
13d90 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66  pExpr point to f
13da0 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65  ields within the
13db0 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c  .** original Sel
13dc0 65 63 74 20 73 74 72 75 63 74 75 72 65 20 74 68  ect structure th
13dd0 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65  at describes the
13de0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
13df0 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65  t.  These.** fie
13e00 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20  lds do not need 
13e10 74 6f 20 62 65 20 66 72 65 65 64 20 77 68 65 6e  to be freed when
13e20 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
13e30 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74  e AggInfo struct
13e40 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ure..*/.struct A
13e50 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69  ggInfo {.  u8 di
13e60 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20  rectMode;       
13e70 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e     /* Direct ren
13e80 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e  dering mode mean
13e90 73 20 74 61 6b 65 20 64 61 74 61 20 64 69 72 65  s take data dire
13ea0 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20  ctly.           
13eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
13ec0 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61  * from source ta
13ed0 62 6c 65 73 20 72 61 74 68 65 72 20 74 68 61 6e  bles rather than
13ee0 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f   from accumulato
13ef0 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f  rs */.  u8 useSo
13f00 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20  rtingIdx;       
13f10 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64  /* In direct mod
13f20 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68 65  e, reference the
13f30 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72   sorting index r
13f40 61 74 68 65 72 0a 20 20 20 20 20 20 20 20 20 20  ather.          
13f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f60 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72  ** than the sour
13f70 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e  ce table */.  in
13f80 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20  t sortingIdx;   
13f90 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20        /* Cursor 
13fa0 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f  number of the so
13fb0 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
13fc0 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 50   int sortingIdxP
13fd0 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72 73  Tab;     /* Curs
13fe0 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65  or number of pse
13ff0 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69  udo-table */.  i
14000 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d  nt nSortingColum
14010 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  n;     /* Number
14020 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
14030 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
14040 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c   */.  int mnReg,
14050 20 6d 78 52 65 67 3b 20 20 20 20 20 20 20 2f 2a   mxReg;       /*
14060 20 52 61 6e 67 65 20 6f 66 20 72 65 67 69 73 74   Range of regist
14070 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f  ers allocated fo
14080 72 20 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63  r aCol and aFunc
14090 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
140a0 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a  pGroupBy;     /*
140b0 20 54 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c   The group by cl
140c0 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74  ause */.  struct
140d0 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20   AggInfo_col {  
140e0 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f    /* For each co
140f0 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75  lumn used in sou
14100 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20  rce tables */.  
14110 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
14120 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f             /* So
14130 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
14140 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20    int iTable;   
14150 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
14160 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
14170 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
14180 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75  */.    int iColu
14190 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  mn;             
141a0 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* Column number
141b0 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72   within the sour
141c0 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
141d0 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d  int iSorterColum
141e0 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75  n;       /* Colu
141f0 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65  mn number in the
14200 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
14210 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20  /.    int iMem; 
14220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14230 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  * Memory locatio
14240 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61  n that acts as a
14250 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20  ccumulator */.  
14260 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
14270 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
14280 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65  e original expre
14290 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43  ssion */.  } *aC
142a0 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d  ol;.  int nColum
142b0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
142c0 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20   Number of used 
142d0 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b  entries in aCol[
142e0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75  ] */.  int nAccu
142f0 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f  mulator;       /
14300 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
14310 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74 68  mns that show th
14320 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74  rough to the out
14330 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20  put..           
14340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
14350 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c  * Additional col
14360 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e  umns are used on
14370 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65 72 73  ly as parameters
14380 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20   to.            
14390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
143a0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
143b0 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  ions */.  struct
143c0 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20   AggInfo_func { 
143d0 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67    /* For each ag
143e0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
143f0 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45   */.    Expr *pE
14400 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
14410 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65   /* Expression e
14420 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63  ncoding the func
14430 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63  tion */.    Func
14440 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20  Def *pFunc;     
14450 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72       /* The aggr
14460 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69  egate function i
14470 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f  mplementation */
14480 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20  .    int iMem;  
14490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
144a0 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   Memory location
144b0 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63   that acts as ac
144c0 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20  cumulator */.   
144d0 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20   int iDistinct; 
144e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68            /* Eph
144f0 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65  emeral table use
14500 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53  d to enforce DIS
14510 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46  TINCT */.  } *aF
14520 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63  unc;.  int nFunc
14530 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
14540 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
14550 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a  ies in aFunc[] *
14560 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
14570 64 61 74 61 74 79 70 65 20 79 6e 56 61 72 20 69  datatype ynVar i
14580 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67  s a signed integ
14590 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69  er, either 16-bi
145a0 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20  t or 32-bit..** 
145b0 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36  Usually it is 16
145c0 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66 20 53  -bits.  But if S
145d0 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
145e0 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65  LE_NUMBER is gre
145f0 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37  ater.** than 327
14600 36 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61  67 we have to ma
14610 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31  ke it 32-bit.  1
14620 36 2d 62 69 74 20 69 73 20 70 72 65 66 65 72 72  6-bit is preferr
14630 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74  ed because.** it
14640 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72   uses less memor
14650 79 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62  y in the Expr ob
14660 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 20 61  ject, which is a
14670 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72   big memory user
14680 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77  .** in systems w
14690 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70  ith lots of prep
146a0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e  ared statements.
146b0 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63    And few applic
146c0 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d  ations.** need m
146d0 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31  ore than about 1
146e0 30 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65  0 or 20 variable
146f0 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74  s.  But some ext
14700 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a  reme users want.
14710 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70 61  ** to have prepa
14720 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77  red statements w
14730 69 74 68 20 6f 76 65 72 20 33 32 37 36 37 20 76  ith over 32767 v
14740 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f  ariables, and fo
14750 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70  r them.** the op
14760 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c  tion is availabl
14770 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  e (at compile-ti
14780 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  me)..*/.#if SQLI
14790 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
147a0 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79  NUMBER<=32767.ty
147b0 70 65 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b  pedef i16 ynVar;
147c0 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69  .#else.typedef i
147d0 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66  nt ynVar;.#endif
147e0 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64  ../*.** Each nod
147f0 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69  e of an expressi
14800 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65 20  on in the parse 
14810 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61  tree is an insta
14820 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  nce.** of this s
14830 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
14840 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f  Expr.op is the o
14850 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67  pcode. The integ
14860 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20  er parser token 
14870 63 6f 64 65 73 20 61 72 65 20 72 65 75 73 65 64  codes are reused
14880 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68  .** as opcodes h
14890 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65  ere. For example
148a0 2c 20 74 68 65 20 70 61 72 73 65 72 20 64 65 66  , the parser def
148b0 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65  ines TK_GE to be
148c0 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63   an integer.** c
148d0 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67  ode representing
148e0 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74   the ">=" operat
148f0 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e  or. This same in
14900 74 65 67 65 72 20 63 6f 64 65 20 69 73 20 72 65  teger code is re
14910 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65  used.** to repre
14920 73 65 6e 74 20 74 68 65 20 67 72 65 61 74 65 72  sent the greater
14930 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74  -than-or-equal-t
14940 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68  o operator in th
14950 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20  e expression.** 
14960 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tree..**.** If t
14970 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
14980 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20   an SQL literal 
14990 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f  (TK_INTEGER, TK_
149a0 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20  FLOAT, TK_BLOB, 
149b0 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47  .** or TK_STRING
149c0 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ), then Expr.tok
149d0 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  en contains the 
149e0 74 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20  text of the SQL 
149f0 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74  literal. If.** t
14a00 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
14a10 20 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f   a variable (TK_
14a20 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20  VARIABLE), then 
14a30 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
14a40 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76 61 72 69  ins the .** vari
14a50 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c  able name. Final
14a60 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70 72 65  ly, if the expre
14a70 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20  ssion is an SQL 
14a80 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e  function (TK_FUN
14a90 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20  CTION),.** then 
14aa0 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
14ab0 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  ins the name of 
14ac0 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a  the function..**
14ad0 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20  .** Expr.pRight 
14ae0 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61  and Expr.pLeft a
14af0 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20  re the left and 
14b00 72 69 67 68 74 20 73 75 62 65 78 70 72 65 73 73  right subexpress
14b10 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e  ions of a.** bin
14b20 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69  ary operator. Ei
14b30 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79  ther or both may
14b40 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   be NULL..**.** 
14b50 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20  Expr.x.pList is 
14b60 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65  a list of argume
14b70 6e 74 73 20 69 66 20 74 68 65 20 65 78 70 72 65  nts if the expre
14b80 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20  ssion is an SQL 
14b90 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43  function,.** a C
14ba0 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f  ASE expression o
14bb0 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69  r an IN expressi
14bc0 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22  on of the form "
14bd0 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c  <lhs> IN (<y>, <
14be0 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72  z>...)"..** Expr
14bf0 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73  .x.pSelect is us
14c00 65 64 20 69 66 20 74 68 65 20 65 78 70 72 65 73  ed if the expres
14c10 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65  sion is a sub-se
14c20 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65  lect or an expre
14c30 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ssion of.** the 
14c40 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28  form "<lhs> IN (
14c50 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66  SELECT ...)". If
14c60 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63   the EP_xIsSelec
14c70 74 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20  t bit is set in 
14c80 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67  the.** Expr.flag
14c90 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70  s mask, then Exp
14ca0 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76  r.x.pSelect is v
14cb0 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  alid. Otherwise,
14cc0 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73   Expr.x.pList is
14cd0 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a   .** valid..**.*
14ce0 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  * An expression 
14cf0 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f  of the form ID o
14d00 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20 74  r ID.ID refers t
14d10 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20  o a column in a 
14d20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75  table..** For su
14d30 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20  ch expressions, 
14d40 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74  Expr.op is set t
14d50 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20  o TK_COLUMN and 
14d60 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a  Expr.iTable is.*
14d70 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63 75  * the integer cu
14d80 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61  rsor number of a
14d90 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69   VDBE cursor poi
14da0 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61  nting to that ta
14db0 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e  ble and.** Expr.
14dc0 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63  iColumn is the c
14dd0 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72  olumn number for
14de0 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63 6f   the specific co
14df0 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a  lumn.  If the.**
14e00 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75   expression is u
14e10 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  sed as a result 
14e20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  in an aggregate 
14e30 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65  SELECT, then the
14e40 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73  .** value is als
14e50 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  o stored in the 
14e60 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e  Expr.iAgg column
14e70 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61 74   in the aggregat
14e80 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20  e so that.** it 
14e90 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20  can be accessed 
14ea0 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67  after all aggreg
14eb0 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65  ates are compute
14ec0 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
14ed0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
14ee0 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c   unbound variabl
14ef0 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73  e marker (a ques
14f00 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63 68  tion mark .** ch
14f10 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74  aracter '?' in t
14f20 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29  he original SQL)
14f30 20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69   then the Expr.i
14f40 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20  Table holds the 
14f50 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d 62 65 72  index .** number
14f60 20 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62   for that variab
14f70 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  le..**.** If the
14f80 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
14f90 20 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45   subquery then E
14fa0 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64  xpr.iColumn hold
14fb0 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  s an integer.** 
14fc0 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20  register number 
14fd0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72  containing the r
14fe0 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62  esult of the sub
14ff0 71 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a  query.  If the.*
15000 2a 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73  * subquery gives
15010 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75   a constant resu
15020 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20  lt, then iTable 
15030 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73  is -1.  If the s
15040 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73  ubquery.** gives
15050 20 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73   a different ans
15060 77 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74  wer at different
15070 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74   times during st
15080 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69  atement processi
15090 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c  ng.** then iTabl
150a0 65 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73  e is the address
150b0 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65   of a subroutine
150c0 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74   that computes t
150d0 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a  he subquery..**.
150e0 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72 20 69  ** If the Expr i
150f0 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c  s of type OP_Col
15100 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62  umn, and the tab
15110 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63 74 69  le it is selecti
15120 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20  ng from.** is a 
15130 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68  disk table or th
15140 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f  e "old.*" pseudo
15150 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61  -table, then pTa
15160 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a  b points to the.
15170 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ** corresponding
15180 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f   table definitio
15190 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54  n..**.** ALLOCAT
151a0 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a  ION NOTES:.**.**
151b0 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61   Expr objects ca
151c0 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d  n use a lot of m
151d0 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64  emory space in d
151e0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20  atabase schema. 
151f0 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75   To.** help redu
15200 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  ce memory requir
15210 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65  ements, sometime
15220 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74  s an Expr object
15230 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e   will be.** trun
15240 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72  cated.  And to r
15250 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72  educe the number
15260 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   of memory alloc
15270 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65  ations, sometime
15280 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65  s.** two or more
15290 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69   Expr objects wi
152a0 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  ll be stored in 
152b0 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20  a single memory 
152c0 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74  allocation,.** t
152d0 6f 67 65 74 68 65 72 20 77 69 74 68 20 45 78 70  ogether with Exp
152e0 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73  r.zToken strings
152f0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45  ..**.** If the E
15300 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45 50  P_Reduced and EP
15310 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73  _TokenOnly flags
15320 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a   are set when.**
15330 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20   an Expr object 
15340 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57  is truncated.  W
15350 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69  hen EP_Reduced i
15360 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a  s set, then all.
15370 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78 70  ** the child Exp
15380 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65  r objects in the
15390 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20   Expr.pLeft and 
153a0 45 78 70 72 2e 70 52 69 67 68 74 20 73 75 62 74  Expr.pRight subt
153b0 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74  rees.** are cont
153c0 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65  ained within the
153d0 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c   same memory all
153e0 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20  ocation.  Note, 
153f0 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a  however, that.**
15400 20 74 68 65 20 73 75 62 74 72 65 65 73 20 69 6e   the subtrees in
15410 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72   Expr.x.pList or
15420 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20   Expr.x.pSelect 
15430 61 72 65 20 61 6c 77 61 79 73 20 73 65 70 61 72  are always separ
15440 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74  ately.** allocat
15450 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  ed, regardless o
15460 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  f whether or not
15470 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73   EP_Reduced is s
15480 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78  et..*/.struct Ex
15490 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20  pr {.  u8 op;   
154a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
154b0 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f   Operation perfo
154c0 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64  rmed by this nod
154d0 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  e */.  char affi
154e0 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a  nity;         /*
154f0 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   The affinity of
15500 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30   the column or 0
15510 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e   if not a column
15520 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b   */.  u32 flags;
15530 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15540 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20  Various flags.  
15550 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a  EP_* See below *
15560 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
15570 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20  char *zToken;   
15580 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
15590 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d  value. Zero term
155a0 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f  inated and dequo
155b0 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ted */.    int i
155c0 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20  Value;          
155d0 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76    /* Non-negativ
155e0 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
155f0 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a  if EP_IntValue *
15600 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49  /.  } u;..  /* I
15610 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  f the EP_TokenOn
15620 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ly flag is set i
15630 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
15640 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20   mask, then no. 
15650 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c   ** space is all
15660 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66  ocated for the f
15670 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73  ields below this
15680 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d   point. An attem
15690 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73  pt to.  ** acces
156a0 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75  s them will resu
156b0 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74  lt in a segfault
156c0 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e   or malfunction.
156d0 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   .  ************
156e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
156f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15700 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15710 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78  *********/..  Ex
15720 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20  pr *pLeft;      
15730 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62       /* Left sub
15740 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  node */.  Expr *
15750 70 52 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  pRight;         
15760 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64   /* Right subnod
15770 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  e */.  union {. 
15780 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69     ExprList *pLi
15790 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20  st;     /* op = 
157a0 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45  IN, EXISTS, SELE
157b0 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49  CT, CASE, FUNCTI
157c0 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20  ON, BETWEEN */. 
157d0 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65     Select *pSele
157e0 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49  ct;     /* EP_xI
157f0 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d  sSelect and op =
15800 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c   IN, EXISTS, SEL
15810 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20  ECT */.  } x;.. 
15820 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65   /* If the EP_Re
15830 64 75 63 65 64 20 66 6c 61 67 20 69 73 20 73 65  duced flag is se
15840 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  t in the Expr.fl
15850 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e  ags mask, then n
15860 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20  o.  ** space is 
15870 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68  allocated for th
15880 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74  e fields below t
15890 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74  his point. An at
158a0 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63  tempt to.  ** ac
158b0 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72  cess them will r
158c0 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61  esult in a segfa
158d0 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69  ult or malfuncti
158e0 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  on..  **********
158f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15900 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15910 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15920 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69  ***********/..#i
15930 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50  f SQLITE_MAX_EXP
15940 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20  R_DEPTH>0.  int 
15950 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20  nHeight;        
15960 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20     /* Height of 
15970 74 68 65 20 74 72 65 65 20 68 65 61 64 65 64 20  the tree headed 
15980 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a  by this node */.
15990 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61  #endif.  int iTa
159a0 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
159b0 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75  /* TK_COLUMN: cu
159c0 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
159d0 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c  able holding col
159e0 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  umn.            
159f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
15a00 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67  TK_REGISTER: reg
15a10 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20  ister number.   
15a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a30 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47        ** TK_TRIG
15a40 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30  GER: 1 -> new, 0
15a50 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20   -> old.        
15a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a70 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a   ** EP_Unlikely:
15a80 20 20 31 33 34 32 31 37 37 32 38 20 74 69 6d 65    134217728 time
15a90 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 20 2a 2f 0a  s likelihood */.
15aa0 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b    ynVar iColumn;
15ab0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43           /* TK_C
15ac0 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e  OLUMN: column in
15ad0 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77  dex.  -1 for row
15ae0 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  id..            
15af0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
15b00 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72  TK_VARIABLE: var
15b10 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c  iable number (al
15b20 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20  ways >= 1). */. 
15b30 20 69 31 36 20 69 41 67 67 3b 20 20 20 20 20 20   i16 iAgg;      
15b40 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
15b50 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e   entry in pAggIn
15b60 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e  fo->aCol[] or ->
15b70 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36  aFunc[] */.  i16
15b80 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65   iRightJoinTable
15b90 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f  ;   /* If EP_Fro
15ba0 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74  mJoin, the right
15bb0 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f   table of the jo
15bc0 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20  in */.  u8 op2; 
15bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15be0 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f  * TK_REGISTER: o
15bf0 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66  riginal value of
15c00 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20 20 20   Expr.op.       
15c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    ** TK_COLUMN: 
15c30 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70 35 20  the value of p5 
15c40 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20  for OP_Column.  
15c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c60 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47         ** TK_AGG
15c70 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69  _FUNCTION: nesti
15c80 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67  ng depth */.  Ag
15c90 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b  gInfo *pAggInfo;
15ca0 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20       /* Used by 
15cb0 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e  TK_AGG_COLUMN an
15cc0 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  d TK_AGG_FUNCTIO
15cd0 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  N */.  Table *pT
15ce0 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ab;           /*
15cf0 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f   Table for TK_CO
15d00 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e 73  LUMN expressions
15d10 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  . */.};../*.** T
15d20 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
15d30 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   the meanings of
15d40 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70   bits in the Exp
15d50 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
15d60 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f  /.#define EP_Fro
15d70 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20  mJoin  0x000001 
15d80 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73 20 69 6e  /* Originates in
15d90 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73 65   ON/USING clause
15da0 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a   of outer join *
15db0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67  /.#define EP_Agg
15dc0 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32 20         0x000002 
15dd0 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  /* Contains one 
15de0 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
15df0 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23  e functions */.#
15e00 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76  define EP_Resolv
15e10 65 64 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20  ed  0x000004 /* 
15e20 49 44 73 20 68 61 76 65 20 62 65 65 6e 20 72 65  IDs have been re
15e30 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e  solved to COLUMN
15e40 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
15e50 45 72 72 6f 72 20 20 20 20 20 30 78 30 30 30 30  Error     0x0000
15e60 30 38 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e  08 /* Expression
15e70 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   contains one or
15e80 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a   more errors */.
15e90 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69  #define EP_Disti
15ea0 6e 63 74 20 20 30 78 30 30 30 30 31 30 20 2f 2a  nct  0x000010 /*
15eb0 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   Aggregate funct
15ec0 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43  ion with DISTINC
15ed0 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  T keyword */.#de
15ee0 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63  fine EP_VarSelec
15ef0 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53  t 0x000020 /* pS
15f00 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61  elect is correla
15f10 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e  ted, not constan
15f20 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
15f30 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30  DblQuoted 0x0000
15f40 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61  40 /* token.z wa
15f50 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20  s originally in 
15f60 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65  "..." */.#define
15f70 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78   EP_InfixFunc 0x
15f80 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66  000080 /* True f
15f90 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63  or an infix func
15fa0 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42  tion: LIKE, GLOB
15fb0 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65  , etc */.#define
15fc0 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78   EP_Collate   0x
15fd0 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63  000100 /* Tree c
15fe0 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c  ontains a TK_COL
15ff0 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f  LATE operator */
16000 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65 6e 65  .#define EP_Gene
16010 72 69 63 20 20 20 30 78 30 30 30 32 30 30 20 2f  ric   0x000200 /
16020 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45  * Ignore COLLATE
16030 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f 6e 20   or affinity on 
16040 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23 64 65  this tree */.#de
16050 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65  fine EP_IntValue
16060 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e    0x000400 /* In
16070 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74  teger value cont
16080 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75  ained in u.iValu
16090 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
160a0 78 49 73 53 65 6c 65 63 74 20 30 78 30 30 30 38  xIsSelect 0x0008
160b0 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20  00 /* x.pSelect 
160c0 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77  is valid (otherw
160d0 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20  ise x.pList is) 
160e0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b  */.#define EP_Sk
160f0 69 70 20 20 20 20 20 20 30 78 30 30 31 30 30 30  ip      0x001000
16100 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c   /* COLLATE, AS,
16110 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a   or UNLIKELY */.
16120 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63  #define EP_Reduc
16130 65 64 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a  ed   0x002000 /*
16140 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50   Expr struct EXP
16150 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62 79  R_REDUCEDSIZE by
16160 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  tes only */.#def
16170 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  ine EP_TokenOnly
16180 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70   0x004000 /* Exp
16190 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f  r struct EXPR_TO
161a0 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65  KENONLYSIZE byte
161b0 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
161c0 65 20 45 50 5f 53 74 61 74 69 63 20 20 20 20 30  e EP_Static    0
161d0 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c 64 20  x008000 /* Held 
161e0 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62  in memory not ob
161f0 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c  tained from mall
16200 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oc() */.#define 
16210 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30  EP_MemToken  0x0
16220 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f  10000 /* Need to
16230 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
16240 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a   Expr.zToken */.
16250 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64  #define EP_NoRed
16260 75 63 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a  uce  0x020000 /*
16270 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f   Cannot EXPRDUP_
16280 52 45 44 55 43 45 20 74 68 69 73 20 45 78 70 72  REDUCE this Expr
16290 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55   */.#define EP_U
162a0 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30 30 30  nlikely  0x04000
162b0 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20  0 /* unlikely() 
162c0 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20  or likelihood() 
162d0 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
162e0 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63  ine EP_ConstFunc
162f0 20 30 78 30 38 30 30 30 30 20 2f 2a 20 41 20 53   0x080000 /* A S
16300 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
16310 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20  ANT or _SLOCHNG 
16320 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
16330 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c  ine EP_CanBeNull
16340 20 30 78 31 30 30 30 30 30 20 2f 2a 20 43 61 6e   0x100000 /* Can
16350 20 62 65 20 6e 75 6c 6c 20 64 65 73 70 69 74 65   be null despite
16360 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
16370 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aint */.#define 
16380 45 50 5f 53 75 62 71 75 65 72 79 20 20 30 78 32  EP_Subquery  0x2
16390 30 30 30 30 30 20 2f 2a 20 54 72 65 65 20 63 6f  00000 /* Tree co
163a0 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45  ntains a TK_SELE
163b0 43 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23  CT operator */.#
163c0 64 65 66 69 6e 65 20 45 50 5f 41 6c 69 61 73 20  define EP_Alias 
163d0 20 20 20 20 30 78 34 30 30 30 30 30 20 2f 2a 20      0x400000 /* 
163e0 49 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  Is an alias for 
163f0 61 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c  a result set col
16400 75 6d 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f  umn */../*.** Co
16410 6d 62 69 6e 61 74 69 6f 6e 73 20 6f 66 20 74 77  mbinations of tw
16420 6f 20 6f 72 20 6d 6f 72 65 20 45 50 5f 2a 20 66  o or more EP_* f
16430 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lags.*/.#define 
16440 45 50 5f 50 72 6f 70 61 67 61 74 65 20 28 45 50  EP_Propagate (EP
16450 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53 75 62 71  _Collate|EP_Subq
16460 75 65 72 79 29 20 2f 2a 20 50 72 6f 70 61 67 61  uery) /* Propaga
16470 74 65 20 74 68 65 73 65 20 62 69 74 73 20 75 70  te these bits up
16480 20 74 72 65 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   tree */../*.** 
16490 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
164a0 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
164b0 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
164c0 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20  bits in the .** 
164d0 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64  Expr.flags field
164e0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70  ..*/.#define Exp
164f0 72 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50  rHasProperty(E,P
16500 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61  )     (((E)->fla
16510 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
16520 69 6e 65 20 45 78 70 72 48 61 73 41 6c 6c 50 72  ine ExprHasAllPr
16530 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 28 28  operty(E,P)  (((
16540 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d  E)->flags&(P))==
16550 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70  (P)).#define Exp
16560 72 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50  rSetProperty(E,P
16570 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73  )     (E)->flags
16580 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78  |=(P).#define Ex
16590 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28  prClearProperty(
165a0 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67  E,P)   (E)->flag
165b0 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20  s&=~(P)../* The 
165c0 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
165d0 74 79 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73  ty() macro is us
165e0 65 64 20 66 6f 72 20 56 65 72 69 66 69 63 61 74  ed for Verificat
165f0 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c  ion, Validation,
16600 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65 64 69 74  .** and Accredit
16610 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20  ation only.  It 
16620 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70 72 53  works like ExprS
16630 65 74 50 72 6f 70 65 72 74 79 28 29 20 64 75 72  etProperty() dur
16640 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65  ing VVA.** proce
16650 73 73 65 73 20 62 75 74 20 69 73 20 61 20 6e 6f  sses but is a no
16660 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76 65 72 79  -op for delivery
16670 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
16680 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e  TE_DEBUG.# defin
16690 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70  e ExprSetVVAProp
166a0 65 72 74 79 28 45 2c 50 29 20 20 28 45 29 2d 3e  erty(E,P)  (E)->
166b0 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65  flags|=(P).#else
166c0 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65  .# define ExprSe
166d0 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50  tVVAProperty(E,P
166e0 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
166f0 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d  Macros to determ
16700 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ine the number o
16710 66 20 62 79 74 65 73 20 72 65 71 75 69 72 65 64  f bytes required
16720 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70   by a normal Exp
16730 72 20 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e  r .** struct, an
16740 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74   Expr struct wit
16750 68 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  h the EP_Reduced
16760 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45 78 70   flag set in Exp
16770 72 2e 66 6c 61 67 73 20 0a 2a 2a 20 61 6e 64 20  r.flags .** and 
16780 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77  an Expr struct w
16790 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e  ith the EP_Token
167a0 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a  Only flag set..*
167b0 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 46  /.#define EXPR_F
167c0 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20 20  ULLSIZE         
167d0 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20 20    sizeof(Expr)  
167e0 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c           /* Full
167f0 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65   size */.#define
16800 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a   EXPR_REDUCEDSIZ
16810 45 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 6f  E        offseto
16820 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20 20  f(Expr,iTable)  
16830 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72  /* Common featur
16840 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  es */.#define EX
16850 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45  PR_TOKENONLYSIZE
16860 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45        offsetof(E
16870 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20  xpr,pLeft)   /* 
16880 46 65 77 65 72 20 66 65 61 74 75 72 65 73 20 2a  Fewer features *
16890 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70  /../*.** Flags p
168a0 61 73 73 65 64 20 74 6f 20 74 68 65 20 73 71 6c  assed to the sql
168b0 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66 75  ite3ExprDup() fu
168c0 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65 20  nction. See the 
168d0 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20 0a  header comment .
168e0 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33  ** above sqlite3
168f0 45 78 70 72 44 75 70 28 29 20 66 6f 72 20 64 65  ExprDup() for de
16900 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tails..*/.#defin
16910 65 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45  e EXPRDUP_REDUCE
16920 20 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20           0x0001 
16930 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65 64   /* Used reduced
16940 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73  -size Expr nodes
16950 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73   */../*.** A lis
16960 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
16970 2e 20 20 45 61 63 68 20 65 78 70 72 65 73 73 69  .  Each expressi
16980 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c  on may optionall
16990 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65  y have a.** name
169a0 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20  .  An expr/name 
169b0 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20  combination can 
169c0 62 65 20 75 73 65 64 20 69 6e 20 73 65 76 65 72  be used in sever
169d0 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a  al ways, such.**
169e0 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20   as the list of 
169f0 22 65 78 70 72 20 41 53 20 49 44 22 20 66 69 65  "expr AS ID" fie
16a00 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20  lds following a 
16a10 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74  "SELECT" or in t
16a20 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49  he.** list of "I
16a30 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20  D = expr" items 
16a40 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41  in an UPDATE.  A
16a50 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
16a60 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f  ions can.** also
16a70 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20   be used as the 
16a80 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75  argument to a fu
16a90 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68  nction, in which
16aa0 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d   case the a.zNam
16ab0 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f  e.** field is no
16ac0 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79  t used..**.** By
16ad0 20 64 65 66 61 75 6c 74 20 74 68 65 20 45 78 70   default the Exp
16ae0 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f  r.zSpan field ho
16af0 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64  lds a human-read
16b00 61 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e  able description
16b10 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65   of.** the expre
16b20 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73  ssion that is us
16b30 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  ed in the genera
16b40 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65  tion of error me
16b50 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f  ssages and.** co
16b60 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e  lumn labels.  In
16b70 20 74 68 69 73 20 63 61 73 65 2c 20 45 78 70 72   this case, Expr
16b80 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63 61  .zSpan is typica
16b90 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66 20  lly the text of 
16ba0 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72  a.** column expr
16bb0 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69  ession as it exi
16bc0 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20  sts in a SELECT 
16bd0 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65  statement.  Howe
16be0 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62  ver, if.** the b
16bf0 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69  SpanIsTab flag i
16c00 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61  s set, then zSpa
16c10 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20  n is overloaded 
16c20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65  to mean the name
16c30 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c  .** of the resul
16c40 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  t column in the 
16c50 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54  form: DATABASE.T
16c60 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68  ABLE.COLUMN.  Th
16c70 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d  is later.** form
16c80 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d   is used for nam
16c90 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74  e resolution wit
16ca0 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c  h nested FROM cl
16cb0 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  auses..*/.struct
16cc0 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e   ExprList {.  in
16cd0 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20  t nExpr;        
16ce0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16cf0 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e  f expressions on
16d00 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73   the list */.  s
16d10 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69  truct ExprList_i
16d20 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63  tem { /* For eac
16d30 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  h expression in 
16d40 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20  the list */.    
16d50 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
16d60 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c          /* The l
16d70 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
16d80 6e 73 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  ns */.    char *
16d90 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
16da0 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63    /* Token assoc
16db0 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
16dc0 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
16dd0 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20    char *zSpan;  
16de0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69            /* Ori
16df0 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68  ginal text of th
16e00 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  e expression */.
16e10 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72      u8 sortOrder
16e20 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31  ;           /* 1
16e30 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66   for DESC or 0 f
16e40 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e  or ASC */.    un
16e50 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20  signed done :1; 
16e60 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20        /* A flag 
16e70 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e  to indicate when
16e80 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66   processing is f
16e90 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75  inished */.    u
16ea0 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54  nsigned bSpanIsT
16eb0 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20  ab :1; /* zSpan 
16ec0 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43  holds DB.TABLE.C
16ed0 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73  OLUMN */.    uns
16ee0 69 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20 3a  igned reusable :
16ef0 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74  1;   /* Constant
16f00 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 72   expression is r
16f10 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75  eusable */.    u
16f20 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 73 74 72  nion {.      str
16f30 75 63 74 20 7b 0a 20 20 20 20 20 20 20 20 75 31  uct {.        u1
16f40 36 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20  6 iOrderByCol;  
16f50 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52      /* For ORDER
16f60 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62   BY, column numb
16f70 65 72 20 69 6e 20 72 65 73 75 6c 74 20 73 65 74  er in result set
16f80 20 2a 2f 0a 20 20 20 20 20 20 20 20 75 31 36 20   */.        u16 
16f90 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20  iAlias;         
16fa0 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20    /* Index into 
16fb0 50 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66  Parse.aAlias[] f
16fc0 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20  or zName */.    
16fd0 20 20 7d 20 78 3b 0a 20 20 20 20 20 20 69 6e 74    } x;.      int
16fe0 20 69 43 6f 6e 73 74 45 78 70 72 52 65 67 3b 20   iConstExprReg; 
16ff0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
17000 20 69 6e 20 77 68 69 63 68 20 45 78 70 72 20 76   in which Expr v
17010 61 6c 75 65 20 69 73 20 63 61 63 68 65 64 20 2a  alue is cached *
17020 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20 7d 20 2a  /.    } u;.  } *
17030 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a;              
17040 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 20 61 20 70      /* Alloc a p
17050 6f 77 65 72 20 6f 66 20 74 77 6f 20 67 72 65 61  ower of two grea
17060 74 65 72 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  ter or equal to 
17070 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  nExpr */.};../*.
17080 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
17090 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
170a0 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20   is used by the 
170b0 70 61 72 73 65 72 20 74 6f 20 72 65 63 6f 72 64  parser to record
170c0 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61 72   both.** the par
170d0 73 65 20 74 72 65 65 20 66 6f 72 20 61 6e 20 65  se tree for an e
170e0 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68  xpression and th
170f0 65 20 73 70 61 6e 20 6f 66 20 69 6e 70 75 74 20  e span of input 
17100 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65  text for an.** e
17110 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74  xpression..*/.st
17120 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 7b 0a  ruct ExprSpan {.
17130 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
17140 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 65          /* The e
17150 78 70 72 65 73 73 69 6f 6e 20 70 61 72 73 65 20  xpression parse 
17160 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  tree */.  const 
17170 63 68 61 72 20 2a 7a 53 74 61 72 74 3b 20 20 20  char *zStart;   
17180 2f 2a 20 46 69 72 73 74 20 63 68 61 72 61 63 74  /* First charact
17190 65 72 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  er of input text
171a0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
171b0 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f   *zEnd;     /* O
171c0 6e 65 20 63 68 61 72 61 63 74 65 72 20 70 61 73  ne character pas
171d0 74 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70  t the end of inp
171e0 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f  ut text */.};../
171f0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
17200 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
17210 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69  re can hold a si
17220 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65  mple list of ide
17230 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63  ntifiers,.** suc
17240 68 20 61 73 20 74 68 65 20 6c 69 73 74 20 22 61  h as the list "a
17250 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c  ,b,c" in the fol
17260 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  lowing statement
17270 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e  s:.**.**      IN
17280 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c  SERT INTO t(a,b,
17290 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a  c) VALUES ...;.*
172a0 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 49 4e  *      CREATE IN
172b0 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62  DEX idx ON t(a,b
172c0 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45  ,c);.**      CRE
172d0 41 54 45 20 54 52 49 47 47 45 52 20 74 72 69 67  ATE TRIGGER trig
172e0 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f   BEFORE UPDATE O
172f0 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a  N t(a,b,c) ...;.
17300 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74  **.** The IdList
17310 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20  .a.idx field is 
17320 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 49 64  used when the Id
17330 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74 73 20  List represents 
17340 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63  the list of.** c
17350 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65  olumn names afte
17360 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69  r a table name i
17370 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  n an INSERT stat
17380 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73  ement.  In the s
17390 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20  tatement.**.**  
173a0 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
173b0 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a  (a,b,c) ....**.*
173c0 2a 20 49 66 20 22 61 22 20 69 73 20 74 68 65 20  * If "a" is the 
173d0 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  k-th column of t
173e0 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49  able "t", then I
173f0 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d  dList.a[0].idx==
17400 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c  k..*/.struct IdL
17410 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49  ist {.  struct I
17420 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  dList_item {.   
17430 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
17440 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
17450 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a  e identifier */.
17460 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20      int idx;    
17470 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
17480 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f  n some Table.aCo
17490 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20  l[] of a column 
174a0 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20  named zName */. 
174b0 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64   } *a;.  int nId
174c0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
174d0 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65  ber of identifie
174e0 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  rs on the list *
174f0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
17500 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65  bitmask datatype
17510 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69   defined below i
17520 73 20 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f  s used for vario
17530 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  us optimizations
17540 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67  ..**.** Changing
17550 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d   this from a 64-
17560 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20  bit to a 32-bit 
17570 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20  type limits the 
17580 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62  number of.** tab
17590 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f  les in a join to
175a0 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36   32 instead of 6
175b0 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20  4.  But it also 
175c0 72 65 64 75 63 65 73 20 74 68 65 20 73 69 7a 65  reduces the size
175d0 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61  .** of the libra
175e0 72 79 20 62 79 20 37 33 38 20 62 79 74 65 73 20  ry by 738 bytes 
175f0 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74 79 70 65  on ix86..*/.type
17600 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b  def u64 Bitmask;
17610 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  ../*.** The numb
17620 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20  er of bits in a 
17630 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20  Bitmask.  "BMS" 
17640 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53  means "BitMask S
17650 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ize"..*/.#define
17660 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a   BMS  ((int)(siz
17670 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29  eof(Bitmask)*8))
17680 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e  ../*.** A bit in
17690 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64   a Bitmask.*/.#d
176a0 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29  efine MASKBIT(n)
176b0 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29     (((Bitmask)1)
176c0 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d  <<(n)).#define M
176d0 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75  ASKBIT32(n) (((u
176e0 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c  nsigned int)1)<<
176f0 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  (n))../*.** The 
17700 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
17710 75 72 65 20 64 65 73 63 72 69 62 65 73 20 74 68  ure describes th
17720 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
17730 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
17740 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62  ent..** Each tab
17750 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69  le or subquery i
17760 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
17770 65 20 69 73 20 61 20 73 65 70 61 72 61 74 65 20  e is a separate 
17780 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68  element of.** th
17790 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72  e SrcList.a[] ar
177a0 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20  ray..**.** With 
177b0 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20  the addition of 
177c0 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73  multiple databas
177d0 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66  e support, the f
177e0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
177f0 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62  re.** can also b
17800 65 20 75 73 65 64 20 74 6f 20 64 65 73 63 72 69  e used to descri
17810 62 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  be a particular 
17820 74 61 62 6c 65 20 73 75 63 68 20 61 73 20 74 68  table such as th
17830 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20  e table that.** 
17840 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61  is modified by a
17850 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45  n INSERT, DELETE
17860 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74  , or UPDATE stat
17870 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64  ement.  In stand
17880 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68  ard SQL,.** such
17890 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65   a table must be
178a0 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20   a simple name: 
178b0 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69  ID.  But in SQLi
178c0 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61  te, the table ca
178d0 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e  n.** now be iden
178e0 74 69 66 69 65 64 20 62 79 20 61 20 64 61 74 61  tified by a data
178f0 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74  base name, a dot
17900 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  , then the table
17910 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a   name: ID.ID..**
17920 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65  .** The jointype
17930 20 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77   starts out show
17940 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70  ing the join typ
17950 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 63 75  e between the cu
17960 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61  rrent table.** a
17970 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c  nd the next tabl
17980 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20  e on the list.  
17990 54 68 65 20 70 61 72 73 65 72 20 62 75 69 6c 64  The parser build
179a0 73 20 74 68 65 20 6c 69 73 74 20 74 68 69 73 20  s the list this 
179b0 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69  way..** But sqli
179c0 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a  te3SrcListShiftJ
179d0 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20  oinType() later 
179e0 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74  shifts the joint
179f0 79 70 65 73 20 73 6f 20 74 68 61 74 20 65 61 63  ypes so that eac
17a00 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78  h.** jointype ex
17a10 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e  presses the join
17a20 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 61 62   between the tab
17a30 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69  le and the previ
17a40 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  ous table..**.**
17a50 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20   In the colUsed 
17a60 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d  field, the high-
17a70 6f 72 64 65 72 20 62 69 74 20 28 62 69 74 20 36  order bit (bit 6
17a80 33 29 20 69 73 20 73 65 74 20 69 66 20 74 68 65  3) is set if the
17a90 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69   table.** contai
17aa0 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20  ns more than 63 
17ab0 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20  columns and the 
17ac0 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63  64-th or later c
17ad0 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a  olumn is used..*
17ae0 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  /.struct SrcList
17af0 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20 20   {.  int nSrc;  
17b00 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
17b10 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62  of tables or sub
17b20 71 75 65 72 69 65 73 20 69 6e 20 74 68 65 20 46  queries in the F
17b30 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
17b40 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20  u32 nAlloc;     
17b50 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
17b60 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20  tries allocated 
17b70 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a  in a[] below */.
17b80 20 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74    struct SrcList
17b90 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65  _item {.    Sche
17ba0 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a  ma *pSchema;  /*
17bb0 20 53 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68   Schema to which
17bc0 20 74 68 69 73 20 69 74 65 6d 20 69 73 20 66 69   this item is fi
17bd0 78 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  xed */.    char 
17be0 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20  *zDatabase;  /* 
17bf0 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65  Name of database
17c00 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61   holding this ta
17c10 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ble */.    char 
17c20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  *zName;      /* 
17c30 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  Name of the tabl
17c40 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
17c50 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68  Alias;     /* Th
17c60 65 20 22 42 22 20 70 61 72 74 20 6f 66 20 61 20  e "B" part of a 
17c70 22 41 20 41 53 20 42 22 20 70 68 72 61 73 65 2e  "A AS B" phrase.
17c80 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22    zName is the "
17c90 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20  A" */.    Table 
17ca0 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41  *pTab;      /* A
17cb0 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72  n SQL table corr
17cc0 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61  esponding to zNa
17cd0 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  me */.    Select
17ce0 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41   *pSelect;  /* A
17cf0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
17d00 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20  t used in place 
17d10 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20  of a table name 
17d20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46  */.    int addrF
17d30 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72  illSub;  /* Addr
17d40 65 73 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e  ess of subroutin
17d50 65 20 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20  e to manifest a 
17d60 73 75 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20  subquery */.    
17d70 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20  int regReturn;  
17d80 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
17d90 6c 64 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64  lding return add
17da0 72 65 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c  ress of addrFill
17db0 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72  Sub */.    int r
17dc0 65 67 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20  egResult;    /* 
17dd0 52 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e  Registers holdin
17de0 67 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 63  g results of a c
17df0 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20  o-routine */.   
17e00 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20   struct {.      
17e10 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20  u8 jointype;    
17e20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69    /* Type of joi
17e30 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73 20 61  n between this a
17e40 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76  ble and the prev
17e50 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ious */.      un
17e60 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65  signed notIndexe
17e70 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65  d :1;    /* True
17e80 20 69 66 20 74 68 65 72 65 20 69 73 20 61 20 4e   if there is a N
17e90 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73  OT INDEXED claus
17ea0 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  e */.      unsig
17eb0 6e 65 64 20 69 73 49 6e 64 65 78 65 64 42 79 20  ned isIndexedBy 
17ec0 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66  :1;   /* True if
17ed0 20 74 68 65 72 65 20 69 73 20 61 6e 20 49 4e 44   there is an IND
17ee0 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 2a  EXED BY clause *
17ef0 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /.      unsigned
17f00 20 69 73 54 61 62 46 75 6e 63 20 3a 31 3b 20 20   isTabFunc :1;  
17f10 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 61     /* True if ta
17f20 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74  ble-valued-funct
17f30 69 6f 6e 20 73 79 6e 74 61 78 20 2a 2f 0a 20 20  ion syntax */.  
17f40 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43      unsigned isC
17f50 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f  orrelated :1;  /
17f60 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d 71 75  * True if sub-qu
17f70 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65  ery is correlate
17f80 64 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  d */.      unsig
17f90 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e 65  ned viaCoroutine
17fa0 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65   :1;  /* Impleme
17fb0 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f 75  nted as a co-rou
17fc0 74 69 6e 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e  tine */.      un
17fd0 73 69 67 6e 65 64 20 69 73 52 65 63 75 72 73 69  signed isRecursi
17fe0 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65  ve :1;   /* True
17ff0 20 66 6f 72 20 72 65 63 75 72 73 69 76 65 20 72   for recursive r
18000 65 66 65 72 65 6e 63 65 20 69 6e 20 57 49 54 48  eference in WITH
18010 20 2a 2f 0a 20 20 20 20 7d 20 66 67 3b 0a 23 69   */.    } fg;.#i
18020 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
18030 54 5f 45 58 50 4c 41 49 4e 0a 20 20 20 20 75 38  T_EXPLAIN.    u8
18040 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20   iSelectId;     
18050 2f 2a 20 49 66 20 70 53 65 6c 65 63 74 21 3d 30  /* If pSelect!=0
18060 2c 20 74 68 65 20 69 64 20 6f 66 20 74 68 65 20  , the id of the 
18070 73 75 62 2d 73 65 6c 65 63 74 20 69 6e 20 45 51  sub-select in EQ
18080 50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20  P */.#endif.    
18090 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20  int iCursor;    
180a0 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75    /* The VDBE cu
180b0 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64  rsor number used
180c0 20 74 6f 20 61 63 63 65 73 73 20 74 68 69 73 20   to access this 
180d0 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70  table */.    Exp
180e0 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f  r *pOn;        /
180f0 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20  * The ON clause 
18100 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20  of a join */.   
18110 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b   IdList *pUsing;
18120 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20     /* The USING 
18130 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
18140 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20   */.    Bitmask 
18150 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74  colUsed;  /* Bit
18160 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66   N (1<<N) set if
18170 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61   column N of pTa
18180 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20  b is used */.   
18190 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 63   union {.      c
181a0 68 61 72 20 2a 7a 49 6e 64 65 78 65 64 42 79 3b  har *zIndexedBy;
181b0 20 20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65      /* Identifie
181c0 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20  r from "INDEXED 
181d0 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61  BY <zIndex>" cla
181e0 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 45 78 70  use */.      Exp
181f0 72 4c 69 73 74 20 2a 70 46 75 6e 63 41 72 67 3b  rList *pFuncArg;
18200 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20 74    /* Arguments t
18210 6f 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66  o table-valued-f
18220 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 7d  unction */.    }
18230 20 75 31 3b 0a 20 20 20 20 49 6e 64 65 78 20 2a   u1;.    Index *
18240 70 49 42 49 6e 64 65 78 3b 20 20 2f 2a 20 49 6e  pIBIndex;  /* In
18250 64 65 78 20 73 74 72 75 63 74 75 72 65 20 63 6f  dex structure co
18260 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 75  rresponding to u
18270 31 2e 7a 49 6e 64 65 78 65 64 42 79 20 2a 2f 0a  1.zIndexedBy */.
18280 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20    } a[1];       
18290 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74        /* One ent
182a0 72 79 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e  ry for each iden
182b0 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69  tifier on the li
182c0 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
182d0 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73  Permitted values
182e0 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e   of the SrcList.
182f0 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64  a.jointype field
18300 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49  .*/.#define JT_I
18310 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30 31 20  NNER     0x0001 
18320 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f     /* Any kind o
18330 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73  f inner or cross
18340 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
18350 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78   JT_CROSS     0x
18360 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69  0002    /* Expli
18370 63 69 74 20 75 73 65 20 6f 66 20 74 68 65 20 43  cit use of the C
18380 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a  ROSS keyword */.
18390 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52  #define JT_NATUR
183a0 41 4c 20 20 20 30 78 30 30 30 34 20 20 20 20 2f  AL   0x0004    /
183b0 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61  * True for a "na
183c0 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23  tural" join */.#
183d0 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20  define JT_LEFT  
183e0 20 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a      0x0008    /*
183f0 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e   Left outer join
18400 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52   */.#define JT_R
18410 49 47 48 54 20 20 20 20 20 30 78 30 30 31 30 20  IGHT     0x0010 
18420 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65     /* Right oute
18430 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
18440 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30  e JT_OUTER     0
18450 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20  x0020    /* The 
18460 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20  "OUTER" keyword 
18470 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64  is present */.#d
18480 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20  efine JT_ERROR  
18490 20 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20     0x0040    /* 
184a0 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70  unknown or unsup
184b0 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65  ported join type
184c0 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67   */.../*.** Flag
184d0 73 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f  s appropriate fo
184e0 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73  r the wctrlFlags
184f0 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71   parameter of sq
18500 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28  lite3WhereBegin(
18510 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65  ).** and the Whe
18520 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67  reInfo.wctrlFlag
18530 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65  s member..*/.#de
18540 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
18550 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30  BY_NORMAL   0x00
18560 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23  00 /* No-op */.#
18570 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
18580 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78  ERBY_MIN      0x
18590 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59  0001 /* ORDER BY
185a0 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20   processing for 
185b0 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64  min() func */.#d
185c0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
185d0 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30  RBY_MAX      0x0
185e0 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  002 /* ORDER BY 
185f0 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d  processing for m
18600 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65  ax() func */.#de
18610 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41  fine WHERE_ONEPA
18620 53 53 5f 44 45 53 49 52 45 44 20 20 30 78 30 30  SS_DESIRED  0x00
18630 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f  04 /* Want to do
18640 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45   one-pass UPDATE
18650 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69  /DELETE */.#defi
18660 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41  ne WHERE_DUPLICA
18670 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 30 38  TES_OK    0x0008
18680 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e   /* Ok to return
18690 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e   a row more than
186a0 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65   once */.#define
186b0 20 57 48 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e   WHERE_OMIT_OPEN
186c0 5f 43 4c 4f 53 45 20 20 30 78 30 30 31 30 20 2f  _CLOSE  0x0010 /
186d0 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72 73 20  * Table cursors 
186e0 61 72 65 20 61 6c 72 65 61 64 79 20 6f 70 65 6e  are already open
186f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
18700 45 5f 46 4f 52 43 45 5f 54 41 42 4c 45 20 20 20  E_FORCE_TABLE   
18710 20 20 20 30 78 30 30 32 30 20 2f 2a 20 44 6f 20     0x0020 /* Do 
18720 6e 6f 74 20 75 73 65 20 61 6e 20 69 6e 64 65 78  not use an index
18730 2d 6f 6e 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a  -only search */.
18740 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e  #define WHERE_ON
18750 45 54 41 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30  ETABLE_ONLY    0
18760 78 30 30 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f  x0040 /* Only co
18770 64 65 20 74 68 65 20 31 73 74 20 74 61 62 6c 65  de the 1st table
18780 20 69 6e 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a   in pTabList */.
18790 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4e 4f  #define WHERE_NO
187a0 5f 41 55 54 4f 49 4e 44 45 58 20 20 20 20 20 30  _AUTOINDEX     0
187b0 78 30 30 38 30 20 2f 2a 20 44 69 73 61 6c 6c 6f  x0080 /* Disallo
187c0 77 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65  w automatic inde
187d0 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  xes */.#define W
187e0 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20  HERE_GROUPBY    
187f0 20 20 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20        0x0100 /* 
18800 70 4f 72 64 65 72 42 79 20 69 73 20 72 65 61 6c  pOrderBy is real
18810 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f  ly a GROUP BY */
18820 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
18830 49 53 54 49 4e 43 54 42 59 20 20 20 20 20 20 20  ISTINCTBY       
18840 30 78 30 32 30 30 20 2f 2a 20 70 4f 72 64 65 72  0x0200 /* pOrder
18850 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44  by is really a D
18860 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a  ISTINCT clause *
18870 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
18880 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20  WANT_DISTINCT   
18890 20 30 78 30 34 30 30 20 2f 2a 20 41 6c 6c 20 6f   0x0400 /* All o
188a0 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62  utput needs to b
188b0 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64  e distinct */.#d
188c0 65 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52 54  efine WHERE_SORT
188d0 42 59 47 52 4f 55 50 20 20 20 20 20 20 30 78 30  BYGROUP      0x0
188e0 38 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20 73  800 /* Support s
188f0 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72  qlite3WhereIsSor
18900 74 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ted() */.#define
18910 20 57 48 45 52 45 5f 52 45 4f 50 45 4e 5f 49 44   WHERE_REOPEN_ID
18920 58 20 20 20 20 20 20 20 30 78 31 30 30 30 20 2f  X       0x1000 /
18930 2a 20 54 72 79 20 74 6f 20 75 73 65 20 4f 50 5f  * Try to use OP_
18940 52 65 6f 70 65 6e 49 64 78 20 2a 2f 0a 23 64 65  ReopenIdx */.#de
18950 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41  fine WHERE_ONEPA
18960 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78 32 30  SS_MULTIROW 0x20
18970 30 30 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73  00 /* ONEPASS is
18980 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69 70 6c   ok with multipl
18990 65 20 72 6f 77 73 20 2a 2f 0a 0a 2f 2a 20 41 6c  e rows */../* Al
189a0 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c  lowed return val
189b0 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ues from sqlite3
189c0 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28  WhereIsDistinct(
189d0 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  ).*/.#define WHE
189e0 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50  RE_DISTINCT_NOOP
189f0 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54        0  /* DIST
18a00 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74  INCT keyword not
18a10 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65   used */.#define
18a20 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
18a30 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20  UNIQUE    1  /* 
18a40 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f  No duplicates */
18a50 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
18a60 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20  ISTINCT_ORDERED 
18a70 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c    2  /* All dupl
18a80 69 63 61 74 65 73 20 61 72 65 20 61 64 6a 61 63  icates are adjac
18a90 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ent */.#define W
18aa0 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e  HERE_DISTINCT_UN
18ab0 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75  ORDERED 3  /* Du
18ac0 70 6c 69 63 61 74 65 73 20 61 72 65 20 73 63 61  plicates are sca
18ad0 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ttered */../*.**
18ae0 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64   A NameContext d
18af0 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74  efines a context
18b00 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73   in which to res
18b10 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63  olve table and c
18b20 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20  olumn.** names. 
18b30 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e   The context con
18b40 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20  sists of a list 
18b50 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65 20 70  of tables (the p
18b60 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61  SrcList) field a
18b70 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20  nd.** a list of 
18b80 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e  named expression
18b90 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20   (pEList).  The 
18ba0 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e  named expression
18bb0 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20   list may.** be 
18bc0 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20  NULL.  The pSrc 
18bd0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
18be0 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f  he FROM clause o
18bf0 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a  f a SELECT or.**
18c00 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65   to the table be
18c10 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20  ing operated on 
18c20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54  by INSERT, UPDAT
18c30 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54  E, or DELETE.  T
18c40 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72  he.** pEList cor
18c50 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
18c60 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20  result set of a 
18c70 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55  SELECT and is NU
18c80 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20  LL for.** other 
18c90 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
18ca0 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63  * NameContexts c
18cb0 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57  an be nested.  W
18cc0 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61  hen resolving na
18cd0 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d  mes, the inner-m
18ce0 6f 73 74 20 0a 2a 2a 20 63 6f 6e 74 65 78 74 20  ost .** context 
18cf0 69 73 20 73 65 61 72 63 68 65 64 20 66 69 72 73  is searched firs
18d00 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20  t.  If no match 
18d10 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65  is found, the ne
18d20 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74  xt outer.** cont
18d30 65 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20  ext is checked. 
18d40 20 49 66 20 74 68 65 72 65 20 69 73 20 73 74 69   If there is sti
18d50 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65  ll no match, the
18d60 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a   next context.**
18d70 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68   is checked.  Th
18d80 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69  is process conti
18d90 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65  nues until eithe
18da0 72 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  r a match is fou
18db0 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e  nd.** or all con
18dc0 74 65 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e  texts are check.
18dd0 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69    When a match i
18de0 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65  s found, the nRe
18df0 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74  f member of.** t
18e00 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61  he context conta
18e10 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20  ining the match 
18e20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 20  is incremented. 
18e30 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71  .**.** Each subq
18e40 75 65 72 79 20 67 65 74 73 20 61 20 6e 65 77 20  uery gets a new 
18e50 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68  NameContext.  Th
18e60 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f  e pNext field po
18e70 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e  ints to the.** N
18e80 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68  ameContext in th
18e90 65 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20  e parent query. 
18ea0 20 54 68 75 73 20 74 68 65 20 70 72 6f 63 65 73   Thus the proces
18eb0 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68  s of scanning th
18ec0 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  e.** NameContext
18ed0 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64   list correspond
18ee0 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74  s to searching t
18ef0 68 72 6f 75 67 68 20 73 75 63 63 65 73 73 69 76  hrough successiv
18f00 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62  ely outer.** sub
18f10 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20  queries looking 
18f20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a  for a match..*/.
18f30 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65  struct NameConte
18f40 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  xt {.  Parse *pP
18f50 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54  arse;       /* T
18f60 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53  he parser */.  S
18f70 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74  rcList *pSrcList
18f80 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f  ;   /* One or mo
18f90 72 65 20 74 61 62 6c 65 73 20 75 73 65 64 20 74  re tables used t
18fa0 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20  o resolve names 
18fb0 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
18fc0 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74  EList;    /* Opt
18fd0 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72 65  ional list of re
18fe0 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73  sult-set columns
18ff0 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70   */.  AggInfo *p
19000 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e  AggInfo;   /* In
19010 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
19020 61 67 67 72 65 67 61 74 65 73 20 61 74 20 74 68  aggregates at th
19030 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61  is level */.  Na
19040 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74  meContext *pNext
19050 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72  ;  /* Next outer
19060 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20   name context.  
19070 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f  NULL for outermo
19080 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  st */.  int nRef
19090 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
190a0 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73 20  Number of names 
190b0 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69 73  resolved by this
190c0 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e   context */.  in
190d0 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20  t nErr;         
190e0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
190f0 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72  errors encounter
19100 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76 69  ed while resolvi
19110 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 31  ng names */.  u1
19120 36 20 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20  6 ncFlags;      
19130 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f     /* Zero or mo
19140 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65  re NC_* flags de
19150 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d  fined below */.}
19160 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
19170 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
19180 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46  NameContext, ncF
19190 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a  lags field..**.*
191a0 2a 20 4e 6f 74 65 3a 20 20 4e 43 5f 4d 69 6e 4d  * Note:  NC_MinM
191b0 61 78 41 67 67 20 6d 75 73 74 20 68 61 76 65 20  axAgg must have 
191c0 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 61  the same value a
191d0 73 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 61  s SF_MinMaxAgg a
191e0 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e  nd.** SQLITE_FUN
191f0 43 5f 4d 49 4e 4d 41 58 2e 0a 2a 2a 20 0a 2a 2f  C_MINMAX..** .*/
19200 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f  .#define NC_Allo
19210 77 41 67 67 20 20 30 78 30 30 30 31 20 20 2f 2a  wAgg  0x0001  /*
19220 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   Aggregate funct
19230 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64  ions are allowed
19240 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65   here */.#define
19250 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30 78   NC_HasAgg    0x
19260 30 30 30 32 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  0002  /* One or 
19270 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
19280 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f  unctions seen */
19290 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43 68  .#define NC_IsCh
192a0 65 63 6b 20 20 20 30 78 30 30 30 34 20 20 2f 2a  eck   0x0004  /*
192b0 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
192c0 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 48  ng names in a CH
192d0 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ECK constraint *
192e0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41  /.#define NC_InA
192f0 67 67 46 75 6e 63 20 30 78 30 30 30 38 20 20 2f  ggFunc 0x0008  /
19300 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79 7a  * True if analyz
19310 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  ing arguments to
19320 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a   an agg func */.
19330 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49  #define NC_PartI
19340 64 78 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20  dx   0x0010  /* 
19350 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e  True if resolvin
19360 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65  g a partial inde
19370 78 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69  x WHERE */.#defi
19380 6e 65 20 4e 43 5f 49 64 78 45 78 70 72 20 20 20  ne NC_IdxExpr   
19390 30 78 30 30 32 30 20 20 2f 2a 20 54 72 75 65 20  0x0020  /* True 
193a0 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 63 6f 6c  if resolving col
193b0 75 6d 6e 73 20 6f 66 20 43 52 45 41 54 45 20 49  umns of CREATE I
193c0 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NDEX */.#define 
193d0 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78 31  NC_MinMaxAgg 0x1
193e0 30 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20  000  /* min/max 
193f0 61 67 67 72 65 67 61 74 65 73 20 73 65 65 6e 2e  aggregates seen.
19400 20 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 76 65    See note above
19410 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e   */../*.** An in
19420 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
19430 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
19440 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69  e contains all i
19450 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65  nformation.** ne
19460 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
19470 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67   code for a sing
19480 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
19490 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69  ent..**.** nLimi
194a0 74 20 69 73 20 73 65 74 20 74 6f 20 2d 31 20 69  t is set to -1 i
194b0 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49  f there is no LI
194c0 4d 49 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66  MIT clause.  nOf
194d0 66 73 65 74 20 69 73 20 73 65 74 20 74 6f 20 30  fset is set to 0
194e0 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73  ..** If there is
194f0 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c   a LIMIT clause,
19500 20 74 68 65 20 70 61 72 73 65 72 20 73 65 74 73   the parser sets
19510 20 6e 4c 69 6d 69 74 20 74 6f 20 74 68 65 20 76   nLimit to the v
19520 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  alue of the.** l
19530 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74  imit and nOffset
19540 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
19550 20 74 68 65 20 6f 66 66 73 65 74 20 28 6f 72 20   the offset (or 
19560 30 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f  0 if there is no
19570 74 0a 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20 42  t.** offset).  B
19580 75 74 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69  ut later on, nLi
19590 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20  mit and nOffset 
195a0 62 65 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72  become the memor
195b0 79 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69  y locations.** i
195c0 6e 20 74 68 65 20 56 44 42 45 20 74 68 61 74 20  n the VDBE that 
195d0 72 65 63 6f 72 64 20 74 68 65 20 6c 69 6d 69 74  record the limit
195e0 20 61 6e 64 20 6f 66 66 73 65 74 20 63 6f 75 6e   and offset coun
195f0 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72  ters..**.** addr
19600 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69  OpenEphm[] entri
19610 65 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61  es contain the a
19620 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65  ddress of OP_Ope
19630 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64  nEphemeral opcod
19640 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64  es..** These add
19650 72 65 73 73 65 73 20 6d 75 73 74 20 62 65 20 73  resses must be s
19660 74 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77 65  tored so that we
19670 20 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64   can go back and
19680 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20   fill in.** the 
19690 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50  P4_KEYINFO and P
196a0 32 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74  2 parameters lat
196b0 65 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65  er.  Neither the
196c0 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20   KeyInfo nor.** 
196d0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
196e0 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20  lumns in P2 can 
196f0 62 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74  be computed at t
19700 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20  he same time.** 
19710 61 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70  as the OP_OpenEp
19720 68 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  hm instruction i
19730 73 20 63 6f 64 65 64 20 62 65 63 61 75 73 65 20  s coded because 
19740 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e  not.** enough in
19750 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
19760 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65  the compound que
19770 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74  ry is known at t
19780 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68  hat point..** Th
19790 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64  e KeyInfo for ad
197a0 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e  drOpenTran[0] an
197b0 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63  d [1] contains c
197c0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
197d0 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65  es.** for the re
197e0 73 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b  sult set.  The K
197f0 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f  eyInfo for addrO
19800 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61  penEphm[2] conta
19810 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a  ins collating.**
19820 20 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74   sequences for t
19830 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
19840 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65  se..*/.struct Se
19850 6c 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73  lect {.  ExprLis
19860 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20  t *pEList;      
19870 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66  /* The fields of
19880 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20   the result */. 
19890 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
198a0 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
198b0 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41  f: TK_UNION TK_A
198c0 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20  LL TK_INTERSECT 
198d0 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 75  TK_EXCEPT */.  u
198e0 31 36 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20  16 selFlags;    
198f0 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73        /* Various
19900 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a   SF_* values */.
19910 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f    int iLimit, iO
19920 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f  ffset;   /* Memo
19930 72 79 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c  ry registers hol
19940 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46  ding LIMIT & OFF
19950 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a  SET counters */.
19960 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f  #if SELECTTRACE_
19970 45 4e 41 42 4c 45 44 0a 20 20 63 68 61 72 20 7a  ENABLED.  char z
19980 53 65 6c 4e 61 6d 65 5b 31 32 5d 3b 20 20 20 20  SelName[12];    
19990 20 2f 2a 20 53 79 6d 62 6f 6c 69 63 20 6e 61 6d   /* Symbolic nam
199a0 65 20 6f 66 20 74 68 69 73 20 53 45 4c 45 43 54  e of this SELECT
199b0 20 75 73 65 20 66 6f 72 20 64 65 62 75 67 67 69   use for debuggi
199c0 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  ng */.#endif.  i
199d0 6e 74 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  nt addrOpenEphm[
199e0 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e  2];   /* OP_Open
199f0 45 70 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65  Ephem opcodes re
19a00 6c 61 74 65 64 20 74 6f 20 74 68 69 73 20 73 65  lated to this se
19a10 6c 65 63 74 20 2a 2f 0a 20 20 75 36 34 20 6e 53  lect */.  u64 nS
19a20 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 20 20  electRow;       
19a30 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75   /* Estimated nu
19a40 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72  mber of result r
19a50 6f 77 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74  ows */.  SrcList
19a60 20 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20 20   *pSrc;         
19a70 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75  /* The FROM clau
19a80 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  se */.  Expr *pW
19a90 68 65 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f  here;          /
19aa0 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  * The WHERE clau
19ab0 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  se */.  ExprList
19ac0 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f   *pGroupBy;    /
19ad0 2a 20 54 68 65 20 47 52 4f 55 50 20 42 59 20 63  * The GROUP BY c
19ae0 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20  lause */.  Expr 
19af0 2a 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20  *pHaving;       
19b00 20 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20    /* The HAVING 
19b10 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
19b20 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20  List *pOrderBy; 
19b30 20 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20     /* The ORDER 
19b40 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53  BY clause */.  S
19b50 65 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20  elect *pPrior;  
19b60 20 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73        /* Prior s
19b70 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f  elect in a compo
19b80 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65  und select state
19b90 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ment */.  Select
19ba0 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
19bb0 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20   /* Next select 
19bc0 74 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61  to the left in a
19bd0 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45   compound */.  E
19be0 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20  xpr *pLimit;    
19bf0 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65        /* LIMIT e
19c00 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20  xpression. NULL 
19c10 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20  means not used. 
19c20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66 66 73  */.  Expr *pOffs
19c30 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  et;         /* O
19c40 46 46 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e  FFSET expression
19c50 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74  . NULL means not
19c60 20 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68   used. */.  With
19c70 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20   *pWith;        
19c80 20 20 20 2f 2a 20 57 49 54 48 20 63 6c 61 75 73     /* WITH claus
19c90 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  e attached to th
19ca0 69 73 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55  is select. Or NU
19cb0 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  LL. */.};../*.**
19cc0 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
19cd0 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c  for Select.selFl
19ce0 61 67 73 2e 20 20 54 68 65 20 22 53 46 22 20 70  ags.  The "SF" p
19cf0 72 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72  refix stands for
19d00 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67  .** "Select Flag
19d10 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  "..*/.#define SF
19d20 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20 20  _Distinct       
19d30 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 75 74 70   0x0001  /* Outp
19d40 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53  ut should be DIS
19d50 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65  TINCT */.#define
19d60 20 53 46 5f 41 6c 6c 20 20 20 20 20 20 20 20 20   SF_All         
19d70 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49      0x0002  /* I
19d80 6e 63 6c 75 64 65 73 20 74 68 65 20 41 4c 4c 20  ncludes the ALL 
19d90 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
19da0 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20  ne SF_Resolved  
19db0 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
19dc0 20 49 64 65 6e 74 69 66 69 65 72 73 20 68 61 76   Identifiers hav
19dd0 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20  e been resolved 
19de0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67  */.#define SF_Ag
19df0 67 72 65 67 61 74 65 20 20 20 20 20 20 20 30 78  gregate       0x
19e00 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  0008  /* Contain
19e10 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  s aggregate func
19e20 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
19e30 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61   SF_UsesEphemera
19e40 6c 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 55  l   0x0010  /* U
19e50 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65  ses the OpenEphe
19e60 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a  meral opcode */.
19e70 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e  #define SF_Expan
19e80 64 65 64 20 20 20 20 20 20 20 20 30 78 30 30 32  ded        0x002
19e90 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c  0  /* sqlite3Sel
19ea0 65 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c  ectExpand() call
19eb0 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64  ed on this */.#d
19ec0 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65  efine SF_HasType
19ed0 49 6e 66 6f 20 20 20 20 20 30 78 30 30 34 30 20  Info     0x0040 
19ee0 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72   /* FROM subquer
19ef0 69 65 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d  ies have Table m
19f00 65 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69  etadata */.#defi
19f10 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20  ne SF_Compound  
19f20 20 20 20 20 20 20 30 78 30 30 38 30 20 20 2f 2a        0x0080  /*
19f30 20 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f   Part of a compo
19f40 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65  und query */.#de
19f50 66 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20  fine SF_Values  
19f60 20 20 20 20 20 20 20 20 30 78 30 31 30 30 20 20          0x0100  
19f70 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66  /* Synthesized f
19f80 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73  rom VALUES claus
19f90 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
19fa0 4d 75 6c 74 69 56 61 6c 75 65 20 20 20 20 20 20  MultiValue      
19fb0 30 78 30 32 30 30 20 20 2f 2a 20 53 69 6e 67 6c  0x0200  /* Singl
19fc0 65 20 56 41 4c 55 45 53 20 74 65 72 6d 20 77 69  e VALUES term wi
19fd0 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  th multiple rows
19fe0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e   */.#define SF_N
19ff0 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20 20 30  estedFrom      0
1a000 78 30 34 30 30 20 20 2f 2a 20 50 61 72 74 20 6f  x0400  /* Part o
1a010 66 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65  f a parenthesize
1a020 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  d FROM clause */
1a030 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 79 62  .#define SF_Mayb
1a040 65 43 6f 6e 76 65 72 74 20 20 20 20 30 78 30 38  eConvert    0x08
1a050 30 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76  00  /* Need conv
1a060 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63  ertCompoundSelec
1a070 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f  tToSubquery() */
1a080 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d  .#define SF_MinM
1a090 61 78 41 67 67 20 20 20 20 20 20 20 30 78 31 30  axAgg       0x10
1a0a0 30 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65  00  /* Aggregate
1a0b0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28   containing min(
1a0c0 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64  ) or max() */.#d
1a0d0 65 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69  efine SF_Recursi
1a0e0 76 65 20 20 20 20 20 20 20 30 78 32 30 30 30 20  ve       0x2000 
1a0f0 20 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69 76   /* The recursiv
1a100 65 20 70 61 72 74 20 6f 66 20 61 20 72 65 63 75  e part of a recu
1a110 72 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65  rsive CTE */.#de
1a120 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74 65  fine SF_Converte
1a130 64 20 20 20 20 20 20 20 30 78 34 30 30 30 20 20  d       0x4000  
1a140 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d  /* By convertCom
1a150 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
1a160 71 75 65 72 79 28 29 20 2a 2f 0a 0a 0a 2f 2a 0a  query() */.../*.
1a170 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f  ** The results o
1a180 66 20 61 20 53 45 4c 45 43 54 20 63 61 6e 20 62  f a SELECT can b
1a190 65 20 64 69 73 74 72 69 62 75 74 65 64 20 69 6e  e distributed in
1a1a0 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 61   several ways, a
1a1b0 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20  s defined.** by 
1a1c0 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  one of the follo
1a1d0 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54 68  wing macros.  Th
1a1e0 65 20 22 53 52 54 22 20 70 72 65 66 69 78 20 6d  e "SRT" prefix m
1a1f0 65 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73  eans "SELECT Res
1a200 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a  ult.** Type"..**
1a210 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e 69 6f  .**     SRT_Unio
1a220 6e 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65  n       Store re
1a230 73 75 6c 74 73 20 61 73 20 61 20 6b 65 79 20 69  sults as a key i
1a240 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e  n a temporary in
1a250 64 65 78 20 0a 2a 2a 20 20 20 20 20 20 20 20 20  dex .**         
1a260 20 20 20 20 20 20 20 20 20 20 20 20 69 64 65 6e              iden
1a270 74 69 66 69 65 64 20 62 79 20 70 44 65 73 74 2d  tified by pDest-
1a280 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20  >iSDParm..**.** 
1a290 20 20 20 20 53 52 54 5f 45 78 63 65 70 74 20 20      SRT_Except  
1a2a0 20 20 20 20 52 65 6d 6f 76 65 20 72 65 73 75 6c      Remove resul
1a2b0 74 73 20 66 72 6f 6d 20 74 68 65 20 74 65 6d 70  ts from the temp
1a2c0 6f 72 61 72 79 20 69 6e 64 65 78 20 70 44 65 73  orary index pDes
1a2d0 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a  t->iSDParm..**.*
1a2e0 2a 20 20 20 20 20 53 52 54 5f 45 78 69 73 74 73  *     SRT_Exists
1a2f0 20 20 20 20 20 20 53 74 6f 72 65 20 61 20 31 20        Store a 1 
1a300 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70  in memory cell p
1a310 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 69 66  Dest->iSDParm if
1a320 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20   the result.**  
1a330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a340 20 20 20 73 65 74 20 69 73 20 6e 6f 74 20 65 6d     set is not em
1a350 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  pty..**.**     S
1a360 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 54  RT_Discard     T
1a370 68 72 6f 77 20 74 68 65 20 72 65 73 75 6c 74 73  hrow the results
1a380 20 61 77 61 79 2e 20 20 54 68 69 73 20 69 73 20   away.  This is 
1a390 75 73 65 64 20 62 79 20 53 45 4c 45 43 54 0a 2a  used by SELECT.*
1a3a0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1a3b0 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73        statements
1a3c0 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
1a3d0 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70   whose only purp
1a3e0 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20 20 20 20  ose is.**       
1a3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1a400 65 20 73 69 64 65 2d 65 66 66 65 63 74 73 20 6f  e side-effects o
1a410 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  f functions..**.
1a420 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20 61 62  ** All of the ab
1a430 6f 76 65 20 61 72 65 20 66 72 65 65 20 74 6f 20  ove are free to 
1a440 69 67 6e 6f 72 65 20 74 68 65 69 72 20 4f 52 44  ignore their ORD
1a450 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68  ER BY clause. Th
1a460 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c  ose that.** foll
1a470 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68  ow must honor th
1a480 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1a490 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  e..**.**     SRT
1a4a0 5f 4f 75 74 70 75 74 20 20 20 20 20 20 47 65 6e  _Output      Gen
1a4b0 65 72 61 74 65 20 61 20 72 6f 77 20 6f 66 20 6f  erate a row of o
1a4c0 75 74 70 75 74 20 28 75 73 69 6e 67 20 74 68 65  utput (using the
1a4d0 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a   OP_ResultRow.**
1a4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4f0 20 20 20 20 20 6f 70 63 6f 64 65 29 20 66 6f 72       opcode) for
1a500 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65   each row in the
1a510 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a   result set..**.
1a520 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d 20 20  **     SRT_Mem  
1a530 20 20 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69         Only vali
1a540 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  d if the result 
1a550 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  is a single colu
1a560 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  mn..**          
1a570 20 20 20 20 20 20 20 20 20 20 20 53 74 6f 72 65             Store
1a580 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d   the first colum
1a590 6e 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 72  n of the first r
1a5a0 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20  esult row.**    
1a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5c0 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65   in register pDe
1a5d0 73 74 2d 3e 69 53 44 50 61 72 6d 20 74 68 65 6e  st->iSDParm then
1a5e0 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 72 65 73   abandon the res
1a5f0 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
1a600 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20           of the 
1a610 71 75 65 72 79 2e 20 20 54 68 69 73 20 64 65 73  query.  This des
1a620 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73  tination implies
1a630 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a   "LIMIT 1"..**.*
1a640 2a 20 20 20 20 20 53 52 54 5f 53 65 74 20 20 20  *     SRT_Set   
1a650 20 20 20 20 20 20 54 68 65 20 72 65 73 75 6c 74        The result
1a660 20 6d 75 73 74 20 62 65 20 61 20 73 69 6e 67 6c   must be a singl
1a670 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65  e column.  Store
1a680 20 65 61 63 68 0a 2a 2a 20 20 20 20 20 20 20 20   each.**        
1a690 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
1a6a0 20 6f 66 20 72 65 73 75 6c 74 20 61 73 20 74 68   of result as th
1a6b0 65 20 6b 65 79 20 69 6e 20 74 61 62 6c 65 20 70  e key in table p
1a6c0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 20 0a  Dest->iSDParm. .
1a6d0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1a6e0 20 20 20 20 20 20 20 41 70 70 6c 79 20 74 68 65         Apply the
1a6f0 20 61 66 66 69 6e 69 74 79 20 70 44 65 73 74 2d   affinity pDest-
1a700 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72 65 20  >affSdst before 
1a710 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20  storing.**      
1a720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1a730 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74 6f  esults.  Used to
1a740 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28   implement "IN (
1a750 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a  SELECT ...)"..**
1a760 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68 65  .**     SRT_Ephe
1a770 6d 54 61 62 20 20 20 20 43 72 65 61 74 65 20 61  mTab    Create a
1a780 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  n temporary tabl
1a790 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1a7a0 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20   and store.**   
1a7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7c0 20 20 74 68 65 20 72 65 73 75 6c 74 20 74 68 65    the result the
1a7d0 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20 69  re. The cursor i
1a7e0 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74 65  s left open afte
1a7f0 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  r.**            
1a800 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 69           returni
1a810 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69 6b  ng.  This is lik
1a820 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63 65  e SRT_Table exce
1a830 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20 20  pt that.**      
1a840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1a850 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  his destination 
1a860 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65  uses OP_OpenEphe
1a870 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65 0a  meral to create.
1a880 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1a890 20 20 20 20 20 20 20 74 68 65 20 74 61 62 6c 65         the table
1a8a0 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20   first..**.**   
1a8b0 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20    SRT_Coroutine 
1a8c0 20 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f 2d    Generate a co-
1a8d0 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65 74  routine that ret
1a8e0 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20 6f  urns a new row o
1a8f0 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  f.**            
1a900 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73           results
1a910 20 65 61 63 68 20 74 69 6d 65 20 69 74 20 69 73   each time it is
1a920 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20 65   invoked.  The e
1a930 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20  ntry point.**   
1a940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a950 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75 74    of the co-rout
1a960 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ine is stored in
1a970 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d   register pDest-
1a980 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20  >iSDParm.**     
1a990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9a0 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 72  and the result r
1a9b0 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ow is stored in 
1a9c0 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65 67  pDest->nDest reg
1a9d0 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20 20  isters.**       
1a9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1a9f0 61 72 74 69 6e 67 20 77 69 74 68 20 70 44 65 73  arting with pDes
1aa00 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20  t->iSdst..**.** 
1aa10 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20 20      SRT_Table   
1aa20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
1aa30 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 74  s in temporary t
1aa40 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1aa50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f  arm..**     SRT_
1aa60 46 69 66 6f 20 20 20 20 20 20 20 20 54 68 69 73  Fifo        This
1aa70 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70 68   is like SRT_Eph
1aa80 65 6d 54 61 62 20 65 78 63 65 70 74 20 74 68 61  emTab except tha
1aa90 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20  t the table.**  
1aaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aab0 20 20 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f     is assumed to
1aac0 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65 6e   already be open
1aad0 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73 0a  .  SRT_Fifo has.
1aae0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1aaf0 20 20 20 20 20 20 20 74 68 65 20 61 64 64 69 74         the addit
1ab00 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20 6f  ional property o
1ab10 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20  f being able to 
1ab20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20  ignore.**       
1ab30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1ab40 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1ab50 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  e..**.**     SRT
1ab60 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53 74 6f  _DistFifo    Sto
1ab70 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20  re results in a 
1ab80 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
1ab90 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1aba0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1abb0 20 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f 20         But also 
1abc0 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61  use temporary ta
1abd0 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1abe0 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20 20  rm+1 as.**      
1abf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1ac00 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70   record of all p
1ac10 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e 64  rior results and
1ac20 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c   ignore any dupl
1ac30 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20  icate.**        
1ac40 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
1ac50 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20  s.  Name means: 
1ac60 20 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f 22   "Distinct Fifo"
1ac70 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1ac80 51 75 65 75 65 20 20 20 20 20 20 20 53 74 6f 72  Queue       Stor
1ac90 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69  e results in pri
1aca0 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73  ority queue pDes
1acb0 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61 6c  t->iSDParm (real
1acc0 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ly.**           
1acd0 20 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e 64            an ind
1ace0 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20 73  ex).  Append a s
1acf0 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 73  equence number s
1ad00 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72 69  o that all entri
1ad10 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  es.**           
1ad20 20 20 20 20 20 20 20 20 20 20 61 72 65 20 64 69            are di
1ad30 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  stinct..**.**   
1ad40 20 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20    SRT_DistQueue 
1ad50 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1ad60 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75  in priority queu
1ad70 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1ad80 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20   only if.**     
1ad90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ada0 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64 20  the same record 
1adb0 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20 73  has never been s
1adc0 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20 54  tored before.  T
1add0 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  he.**           
1ade0 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 20            index 
1adf0 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  at pDest->iSDPar
1ae00 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69  m+1 hold all pri
1ae10 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64  or stores..*/.#d
1ae20 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20  efine SRT_Union 
1ae30 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f         1  /* Sto
1ae40 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79  re result as key
1ae50 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f  s in an index */
1ae60 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63  .#define SRT_Exc
1ae70 65 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20  ept       2  /* 
1ae80 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72  Remove result fr
1ae90 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78  om a UNION index
1aea0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1aeb0 45 78 69 73 74 73 20 20 20 20 20 20 20 33 20 20  Exists       3  
1aec0 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74 68  /* Store 1 if th
1aed0 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20  e result is not 
1aee0 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65  empty */.#define
1aef0 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20   SRT_Discard    
1af00 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73    4  /* Do not s
1af10 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ave the results 
1af20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65 66  anywhere */.#def
1af30 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20 20  ine SRT_Fifo    
1af40 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72 65       5  /* Store
1af50 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20   result as data 
1af60 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69  with an automati
1af70 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  c rowid */.#defi
1af80 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20  ne SRT_DistFifo 
1af90 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53      6  /* Like S
1afa0 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e 69  RT_Fifo, but uni
1afb0 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79  que results only
1afc0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1afd0 51 75 65 75 65 20 20 20 20 20 20 20 20 37 20 20  Queue        7  
1afe0 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1aff0 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23  in an queue */.#
1b000 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 51  define SRT_DistQ
1b010 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c 69  ueue    8  /* Li
1b020 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62 75  ke SRT_Queue, bu
1b030 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73  t unique results
1b040 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65   only */../* The
1b050 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1b060 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20   is ignored for 
1b070 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  all of the above
1b080 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f   */.#define Igno
1b090 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20  rableOrderby(X) 
1b0a0 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54  ((X->eDest)<=SRT
1b0b0 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64 65  _DistQueue)..#de
1b0c0 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20  fine SRT_Output 
1b0d0 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74 70        9  /* Outp
1b0e0 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72  ut each row of r
1b0f0 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esult */.#define
1b100 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20   SRT_Mem        
1b110 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65   10  /* Store re
1b120 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79  sult in a memory
1b130 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65   cell */.#define
1b140 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20   SRT_Set        
1b150 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65   11  /* Store re
1b160 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e  sults as keys in
1b170 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65   an index */.#de
1b180 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61  fine SRT_EphemTa
1b190 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65 61  b    12  /* Crea
1b1a0 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62  te transient tab
1b1b0 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20   and store like 
1b1c0 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65  SRT_Table */.#de
1b1d0 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74 69  fine SRT_Corouti
1b1e0 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e 65  ne   13  /* Gene
1b1f0 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72 6f  rate a single ro
1b200 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23  w of result */.#
1b210 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65  define SRT_Table
1b220 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53 74         14  /* St
1b230 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61  ore result as da
1b240 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d  ta with an autom
1b250 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f  atic rowid */../
1b260 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
1b270 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20   of this object 
1b280 64 65 73 63 72 69 62 65 73 20 77 68 65 72 65 20  describes where 
1b290 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72 65  to put of the re
1b2a0 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45  sults of.** a SE
1b2b0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
1b2c0 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74  */.struct Select
1b2d0 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73  Dest {.  u8 eDes
1b2e0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
1b2f0 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65 20   How to dispose 
1b300 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e 20  of the results. 
1b310 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f   On of SRT_* abo
1b320 76 65 2e 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  ve. */.  char af
1b330 66 53 64 73 74 3b 20 20 20 20 20 20 20 20 2f 2a  fSdst;        /*
1b340 20 41 66 66 69 6e 69 74 79 20 75 73 65 64 20 77   Affinity used w
1b350 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53  hen eDest==SRT_S
1b360 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50  et */.  int iSDP
1b370 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  arm;         /* 
1b380 41 20 70 61 72 61 6d 65 74 65 72 20 75 73 65 64  A parameter used
1b390 20 62 79 20 74 68 65 20 65 44 65 73 74 20 64 69   by the eDest di
1b3a0 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f  sposal method */
1b3b0 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20  .  int iSdst;   
1b3c0 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20          /* Base 
1b3d0 72 65 67 69 73 74 65 72 20 77 68 65 72 65 20 72  register where r
1b3e0 65 73 75 6c 74 73 20 61 72 65 20 77 72 69 74 74  esults are writt
1b3f0 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73  en */.  int nSds
1b400 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
1b410 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74  Number of regist
1b420 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f  ers allocated */
1b430 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72  .  ExprList *pOr
1b440 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63  derBy;  /* Key c
1b450 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51  olumns for SRT_Q
1b460 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69 73  ueue and SRT_Dis
1b470 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  tQueue */.};../*
1b480 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65 20  .** During code 
1b490 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73 74  generation of st
1b4a0 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64 6f  atements that do
1b4b0 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41 55   inserts into AU
1b4c0 54 4f 49 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a 20  TOINCREMENT .** 
1b4d0 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c  tables, the foll
1b4e0 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f  owing informatio
1b4f0 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  n is attached to
1b500 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74   the Table.u.aut
1b510 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65  oInc.p.** pointe
1b520 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e  r of each autoin
1b530 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f  crement table to
1b540 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64   record some sid
1b550 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  e information th
1b560 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67  at.** the code g
1b570 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20  enerator needs. 
1b580 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70   We have to keep
1b590 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69   per-table autoi
1b5a0 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f  ncrement.** info
1b5b0 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20  rmation in case 
1b5c0 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 77 6e  inserts are down
1b5d0 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
1b5e0 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e  .  Triggers do n
1b5f0 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63  ot.** normally c
1b600 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72 20  oordinate their 
1b610 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74 20  activities, but 
1b620 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f  we do need to co
1b630 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20  ordinate the.** 
1b640 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69  loading and savi
1b650 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d  ng of autoincrem
1b660 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ent information.
1b670 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69  .*/.struct Autoi
1b680 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69  ncInfo {.  Autoi
1b690 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20  ncInfo *pNext;  
1b6a0 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c   /* Next info bl
1b6b0 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66  ock in a list of
1b6c0 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54   them all */.  T
1b6d0 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
1b6e0 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68       /* Table th
1b6f0 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65  is info block re
1b700 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74  fers to */.  int
1b710 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
1b720 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73     /* Index in s
1b730 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20  qlite3.aDb[] of 
1b740 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67  database holding
1b750 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72   pTab */.  int r
1b760 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20 20  egCtr;          
1b770 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73   /* Memory regis
1b780 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ter holding the 
1b790 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f  rowid counter */
1b7a0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20  .};../*.** Size 
1b7b0 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61  of the column ca
1b7c0 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  che.*/.#ifndef S
1b7d0 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45  QLITE_N_COLCACHE
1b7e0 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1b7f0 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a 23  _N_COLCACHE 10.#
1b800 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20  endif../*.** At 
1b810 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e  least one instan
1b820 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
1b830 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
1b840 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63   created for eac
1b850 68 20 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68  h .** trigger th
1b860 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64 20  at may be fired 
1b870 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e  while parsing an
1b880 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20   INSERT, UPDATE 
1b890 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61  or DELETE.** sta
1b8a0 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68  tement. All such
1b8b0 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f   objects are sto
1b8c0 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65  red in the linke
1b8d0 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61 74  d list headed at
1b8e0 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67  .** Parse.pTrigg
1b8f0 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65  erPrg and delete
1b900 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74  d once statement
1b910 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73   compilation has
1b920 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74   been.** complet
1b930 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65  ed..**.** A Vdbe
1b940 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61   sub-program tha
1b950 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65  t implements the
1b960 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63   body and WHEN c
1b970 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65 72  lause of trigger
1b980 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70  .** TriggerPrg.p
1b990 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e  Trigger, assumin
1b9a0 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43  g a default ON C
1b9b0 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f  ONFLICT clause o
1b9c0 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  f.** TriggerPrg.
1b9d0 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65  orconf, is store
1b9e0 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65 72  d in the Trigger
1b9f0 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72  Prg.pProgram var
1ba00 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61  iable..** The Pa
1ba10 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1ba20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61  list never conta
1ba30 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20  ins two entries 
1ba40 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a  with the same.**
1ba50 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68   values for both
1ba60 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72   pTrigger and or
1ba70 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  conf..**.** The 
1ba80 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d  TriggerPrg.aColm
1ba90 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20  ask[0] variable 
1baa0 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b  is set to a mask
1bab0 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e   of old.* column
1bac0 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f  s.** accessed (o
1bad0 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74  r set to 0 for t
1bae0 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61 73  riggers fired as
1baf0 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53   a result of INS
1bb00 45 52 54 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  ERT .** statemen
1bb10 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20  ts). Similarly, 
1bb20 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61  the TriggerPrg.a
1bb30 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61  Colmask[1] varia
1bb40 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a  ble is set to.**
1bb50 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a   a mask of new.*
1bb60 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79   columns used by
1bb70 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f   the program..*/
1bb80 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50  .struct TriggerP
1bb90 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a  rg {.  Trigger *
1bba0 70 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f  pTrigger;      /
1bbb0 2a 20 54 72 69 67 67 65 72 20 74 68 69 73 20 70  * Trigger this p
1bbc0 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64  rogram was coded
1bbd0 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67   from */.  Trigg
1bbe0 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20  erPrg *pNext;   
1bbf0 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79     /* Next entry
1bc00 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67   in Parse.pTrigg
1bc10 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20  erPrg list */.  
1bc20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f  SubProgram *pPro
1bc30 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72  gram;   /* Progr
1bc40 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  am implementing 
1bc50 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20  pTrigger/orconf 
1bc60 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b  */.  int orconf;
1bc70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1bc80 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
1bc90 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20  ICT policy */.  
1bca0 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b  u32 aColmask[2];
1bcb0 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73          /* Masks
1bcc0 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a   of old.*, new.*
1bcd0 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65   columns accesse
1bce0 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  d */.};../*.** T
1bcf0 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74  he yDbMask datat
1bd00 79 70 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d  ype for the bitm
1bd10 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63  ask of all attac
1bd20 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  hed databases..*
1bd30 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
1bd40 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74  _ATTACHED>30.  t
1bd50 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20  ypedef unsigned 
1bd60 63 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53 51  char yDbMask[(SQ
1bd70 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
1bd80 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e  D+9)/8];.# defin
1bd90 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49  e DbMaskTest(M,I
1bda0 29 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f 38  )    (((M)[(I)/8
1bdb0 5d 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29 21  ]&(1<<((I)&7)))!
1bdc0 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  =0).# define DbM
1bdd0 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20  askZero(M)      
1bde0 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a  memset((M),0,siz
1bdf0 65 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e 65  eof(M)).# define
1be00 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20   DbMaskSet(M,I) 
1be10 20 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d      (M)[(I)/8]|=
1be20 28 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20 64  (1<<((I)&7)).# d
1be30 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a  efine DbMaskAllZ
1be40 65 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65 33  ero(M)   sqlite3
1be50 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1be60 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1be70 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73 71  NonZero(M)   (sq
1be80 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65  lite3DbMaskAllZe
1be90 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a  ro(M)==0).#else.
1bea0 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e    typedef unsign
1beb0 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a  ed int yDbMask;.
1bec0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54  # define DbMaskT
1bed0 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d  est(M,I)    (((M
1bee0 29 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  )&(((yDbMask)1)<
1bef0 3c 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65 66  <(I)))!=0).# def
1bf00 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d  ine DbMaskZero(M
1bf10 29 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20 64  )      (M)=0.# d
1bf20 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28  efine DbMaskSet(
1bf30 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28 28  M,I)     (M)|=((
1bf40 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29  (yDbMask)1)<<(I)
1bf50 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1bf60 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d  kAllZero(M)   (M
1bf70 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62  )==0.# define Db
1bf80 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20  MaskNonZero(M)  
1bf90 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a   (M)!=0.#endif..
1bfa0 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72  /*.** An SQL par
1bfb0 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20  ser context.  A 
1bfc0 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74 72  copy of this str
1bfd0 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64  ucture is passed
1bfe0 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20   through.** the 
1bff0 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20  parser and down 
1c000 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72  into all the par
1c010 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69  ser action routi
1c020 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ne in order to.*
1c030 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69  * carry around i
1c040 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20  nformation that 
1c050 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65  is global to the
1c060 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a   entire parse..*
1c070 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75  *.** The structu
1c080 72 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e  re is divided in
1c090 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57  to two parts.  W
1c0a0 68 65 6e 20 74 68 65 20 70 61 72 73 65 72 20 61  hen the parser a
1c0b0 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72  nd code.** gener
1c0c0 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c  ate call themsel
1c0d0 76 65 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c  ves recursively,
1c0e0 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20   the first part 
1c0f0 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65  of the structure
1c100 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20  .** is constant 
1c110 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70  but the second p
1c120 61 72 74 20 69 73 20 72 65 73 65 74 20 61 74 20  art is reset at 
1c130 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e  the beginning an
1c140 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68  d end of.** each
1c150 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a   recursion..**.*
1c160 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b  * The nTableLock
1c170 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20   and aTableLock 
1c180 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e  variables are on
1c190 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20 73  ly used if the s
1c1a0 68 61 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a 20  hared-cache .** 
1c1b0 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c  feature is enabl
1c1c0 65 64 20 28 69 66 20 73 71 6c 69 74 65 33 54 73  ed (if sqlite3Ts
1c1d0 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61  d()->useSharedDa
1c1e0 74 61 20 69 73 20 74 72 75 65 29 2e 20 54 68 65  ta is true). The
1c1f0 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f  y are.** used to
1c200 20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f   store the set o
1c210 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65  f table-locks re
1c220 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73 74  quired by the st
1c230 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a  atement being.**
1c240 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74   compiled. Funct
1c250 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65  ion sqlite3Table
1c260 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20 74  Lock() is used t
1c270 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f  o add entries to
1c280 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f   the.** list..*/
1c290 0a 73 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a  .struct Parse {.
1c2a0 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
1c2b0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61         /* The ma
1c2c0 69 6e 20 64 61 74 61 62 61 73 65 20 73 74 72 75  in database stru
1c2d0 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20  cture */.  char 
1c2e0 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20  *zErrMsg;       
1c2f0 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73  /* An error mess
1c300 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70  age */.  Vdbe *p
1c310 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Vdbe;         /*
1c320 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65   An engine for e
1c330 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61 73  xecuting databas
1c340 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20  e bytecode */.  
1c350 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20  int rc;         
1c360 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63       /* Return c
1c370 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69  ode from executi
1c380 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61  on */.  u8 colNa
1c390 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20  mesSet;      /* 
1c3a0 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f  TRUE after OP_Co
1c3b0 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65  lumnName has bee
1c3c0 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56 64 62  n issued to pVdb
1c3d0 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53  e */.  u8 checkS
1c3e0 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43  chema;      /* C
1c3f0 61 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f  auses schema coo
1c400 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65 72 20  kie check after 
1c410 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38  an error */.  u8
1c420 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20 20   nested;        
1c430 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1c440 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20  nested calls to 
1c450 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20  the parser/code 
1c460 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75  generator */.  u
1c470 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20  8 nTempReg;     
1c480 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1c490 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
1c4a0 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67  ters in aTempReg
1c4b0 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c  [] */.  u8 isMul
1c4c0 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20  tiWrite;     /* 
1c4d0 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e  True if statemen
1c4e0 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73  t may modify/ins
1c4f0 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  ert multiple row
1c500 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f  s */.  u8 mayAbo
1c510 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  rt;         /* T
1c520 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74  rue if statement
1c530 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42   may throw an AB
1c540 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f  ORT exception */
1c550 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e  .  u8 hasCompoun
1c560 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20  d;      /* Need 
1c570 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72  to invoke conver
1c580 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54  tCompoundSelectT
1c590 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20  oSubquery() */. 
1c5a0 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f   u8 okConstFacto
1c5b0 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66  r;    /* OK to f
1c5c0 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61  actor out consta
1c5d0 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65  nts */.  int aTe
1c5e0 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f 2a  mpReg[8];     /*
1c5f0 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f   Holding area fo
1c600 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  r temporary regi
1c610 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  sters */.  int n
1c620 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
1c630 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74  /* Size of the t
1c640 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
1c650 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74  r block */.  int
1c660 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20   iRangeReg;     
1c670 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73    /* First regis
1c680 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79  ter in temporary
1c690 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20   register block 
1c6a0 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
1c6b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1c6c0 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65  ber of errors se
1c6d0 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62  en */.  int nTab
1c6e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1c6f0 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f  Number of previo
1c700 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56  usly allocated V
1c710 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20  DBE cursors */. 
1c720 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20   int nMem;      
1c730 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1c740 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  of memory cells 
1c750 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
1c760 20 69 6e 74 20 6e 53 65 74 3b 20 20 20 20 20 20   int nSet;      
1c770 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1c780 6f 66 20 73 65 74 73 20 75 73 65 64 20 73 6f 20  of sets used so 
1c790 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e  far */.  int nOn
1c7a0 63 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ce;           /*
1c7b0 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f 6e   Number of OP_On
1c7c0 63 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20  ce instructions 
1c7d0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1c7e0 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20  nOpAlloc;       
1c7f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c   /* Number of sl
1c800 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f  ots allocated fo
1c810 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a  r Vdbe.aOp[] */.
1c820 20 20 69 6e 74 20 69 46 69 78 65 64 4f 70 3b 20    int iFixedOp; 
1c830 20 20 20 20 20 20 20 2f 2a 20 4e 65 76 65 72 20         /* Never 
1c840 62 61 63 6b 20 6f 75 74 20 6f 70 63 6f 64 65 73  back out opcodes
1c850 20 69 46 69 78 65 64 4f 70 2d 31 20 6f 72 20 65   iFixedOp-1 or e
1c860 61 72 6c 69 65 72 20 2a 2f 0a 20 20 69 6e 74 20  arlier */.  int 
1c870 63 6b 42 61 73 65 3b 20 20 20 20 20 20 20 20 20  ckBase;         
1c880 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65   /* Base registe
1c890 72 20 6f 66 20 64 61 74 61 20 64 75 72 69 6e 67  r of data during
1c8a0 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e   check constrain
1c8b0 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 6c  ts */.  int iSel
1c8c0 66 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20  fTab;        /* 
1c8d0 54 61 62 6c 65 20 6f 66 20 61 6e 20 69 6e 64 65  Table of an inde
1c8e0 78 20 77 68 6f 73 65 20 65 78 70 72 73 20 61 72  x whose exprs ar
1c8f0 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 2a 2f  e being coded */
1c900 0a 20 20 69 6e 74 20 69 43 61 63 68 65 4c 65 76  .  int iCacheLev
1c910 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61  el;     /* ColCa
1c920 63 68 65 20 76 61 6c 69 64 20 77 68 65 6e 20 61  che valid when a
1c930 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65  ColCache[].iLeve
1c940 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c 20 2a  l<=iCacheLevel *
1c950 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65 43 6e  /.  int iCacheCn
1c960 74 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e  t;       /* Coun
1c970 74 65 72 20 75 73 65 64 20 74 6f 20 67 65 6e 65  ter used to gene
1c980 72 61 74 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d  rate aColCache[]
1c990 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20  .lru values */. 
1c9a0 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20   int nLabel;    
1c9b0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1c9c0 6f 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a  of labels used *
1c9d0 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b  /.  int *aLabel;
1c9e0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
1c9f0 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61  e to hold the la
1ca00 62 65 6c 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  bels */.  struct
1ca10 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20   yColCache {.   
1ca20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20   int iTable;    
1ca30 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
1ca40 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f  cursor number */
1ca50 0a 20 20 20 20 69 31 36 20 69 43 6f 6c 75 6d 6e  .    i16 iColumn
1ca60 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61  ;          /* Ta
1ca70 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  ble column numbe
1ca80 72 20 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d 70  r */.    u8 temp
1ca90 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Reg;           /
1caa0 2a 20 69 52 65 67 20 69 73 20 61 20 74 65 6d 70  * iReg is a temp
1cab0 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 6e   register that n
1cac0 65 65 64 73 20 74 6f 20 62 65 20 66 72 65 65 64  eeds to be freed
1cad0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65 76   */.    int iLev
1cae0 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  el;           /*
1caf0 20 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a   Nesting level *
1cb00 2f 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20  /.    int iReg; 
1cb10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
1cb20 65 67 20 77 69 74 68 20 76 61 6c 75 65 20 6f 66  eg with value of
1cb30 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20   this column. 0 
1cb40 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20  means none. */. 
1cb50 20 20 20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20     int lru;     
1cb60 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73           /* Leas
1cb70 74 20 72 65 63 65 6e 74 6c 79 20 75 73 65 64 20  t recently used 
1cb80 65 6e 74 72 79 20 68 61 73 20 74 68 65 20 73 6d  entry has the sm
1cb90 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a  allest value */.
1cba0 20 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53 51    } aColCache[SQ
1cbb0 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d  LITE_N_COLCACHE]
1cbc0 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61  ;  /* One for ea
1cbd0 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20  ch column cache 
1cbe0 65 6e 74 72 79 20 2a 2f 0a 20 20 45 78 70 72 4c  entry */.  ExprL
1cbf0 69 73 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b  ist *pConstExpr;
1cc00 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72  /* Constant expr
1cc10 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b  essions */.  Tok
1cc20 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d  en constraintNam
1cc30 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  e;/* Name of the
1cc40 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72   constraint curr
1cc50 65 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73  ently being pars
1cc60 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20  ed */.  yDbMask 
1cc70 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20  writeMask;   /* 
1cc80 53 74 61 72 74 20 61 20 77 72 69 74 65 20 74 72  Start a write tr
1cc90 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65  ansaction on the
1cca0 73 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a  se databases */.
1ccb0 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65    yDbMask cookie
1ccc0 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73  Mask;  /* Bitmas
1ccd0 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69  k of schema veri
1cce0 66 69 65 64 20 64 61 74 61 62 61 73 65 73 20 2a  fied databases *
1ccf0 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61  /.  int cookieVa
1cd00 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41  lue[SQLITE_MAX_A
1cd10 54 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20  TTACHED+2];  /* 
1cd20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65  Values of cookie
1cd30 73 20 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a 20  s to verify */. 
1cd40 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20   int regRowid;  
1cd50 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
1cd60 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20  r holding rowid 
1cd70 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  of CREATE TABLE 
1cd80 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72  entry */.  int r
1cd90 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20  egRoot;         
1cda0 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
1cdb0 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  ing root page nu
1cdc0 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a  mber for new obj
1cdd0 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  ects */.  int nM
1cde0 61 78 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f  axArg;         /
1cdf0 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73 73 65  * Max args passe
1ce00 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69  d to user functi
1ce10 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61  on by sub-progra
1ce20 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54  m */.#if SELECTT
1ce30 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 69  RACE_ENABLED.  i
1ce40 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20 20 20 20  nt nSelect;     
1ce50 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1ce60 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1ce70 74 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74  ts seen */.  int
1ce80 20 6e 53 65 6c 65 63 74 49 6e 64 65 6e 74 3b 20   nSelectIndent; 
1ce90 20 20 2f 2a 20 48 6f 77 20 66 61 72 20 74 6f 20    /* How far to 
1cea0 69 6e 64 65 6e 74 20 53 45 4c 45 43 54 54 52 41  indent SELECTTRA
1ceb0 43 45 28 29 20 6f 75 74 70 75 74 20 2a 2f 0a 23  CE() output */.#
1cec0 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
1ced0 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
1cee0 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61  _CACHE.  int nTa
1cef0 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20  bleLock;        
1cf00 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63  /* Number of loc
1cf10 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b  ks in aTableLock
1cf20 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20   */.  TableLock 
1cf30 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20  *aTableLock; /* 
1cf40 52 65 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c  Required table l
1cf50 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d  ocks for shared-
1cf60 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65  cache mode */.#e
1cf70 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e  ndif.  AutoincIn
1cf80 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49  fo *pAinc;  /* I
1cf90 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
1cfa0 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63   AUTOINCREMENT c
1cfb0 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a  ounters */..  /*
1cfc0 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65   Information use
1cfd0 64 20 77 68 69 6c 65 20 63 6f 64 69 6e 67 20 74  d while coding t
1cfe0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e  rigger programs.
1cff0 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f   */.  Parse *pTo
1d000 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61  plevel;    /* Pa
1d010 72 73 65 20 73 74 72 75 63 74 75 72 65 20 66 6f  rse structure fo
1d020 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28  r main program (
1d030 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61  or NULL) */.  Ta
1d040 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61 62  ble *pTriggerTab
1d050 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67  ;  /* Table trig
1d060 67 65 72 73 20 61 72 65 20 62 65 69 6e 67 20 63  gers are being c
1d070 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e  oded for */.  in
1d080 74 20 61 64 64 72 43 72 54 61 62 3b 20 20 20 20  t addrCrTab;    
1d090 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66     /* Address of
1d0a0 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20   OP_CreateTable 
1d0b0 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45 41 54 45  opcode on CREATE
1d0c0 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75 33 32 20   TABLE */.  u32 
1d0d0 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20  nQueryLoop;     
1d0e0 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f   /* Est number o
1d0f0 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20  f iterations of 
1d100 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32  a query (10*log2
1d110 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c  (N)) */.  u32 ol
1d120 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f  dmask;         /
1d130 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  * Mask of old.* 
1d140 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63  columns referenc
1d150 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d  ed */.  u32 newm
1d160 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
1d170 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  Mask of new.* co
1d180 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
1d190 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65   */.  u8 eTrigge
1d1a0 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b  rOp;       /* TK
1d1b0 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
1d1c0 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20  RT or TK_DELETE 
1d1d0 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b  */.  u8 eOrconf;
1d1e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1d1f0 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
1d200 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67   policy for trig
1d210 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75  ger steps */.  u
1d220 38 20 64 69 73 61 62 6c 65 54 72 69 67 67 65 72  8 disableTrigger
1d230 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64  s;  /* True to d
1d240 69 73 61 62 6c 65 20 74 72 69 67 67 65 72 73 20  isable triggers 
1d250 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a  */..  /*********
1d260 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d270 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d280 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d290 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
1d2a0 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20 63 6f    ** Above is co
1d2b0 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72  nstant between r
1d2c0 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f  ecursions.  Belo
1d2d0 77 20 69 73 20 72 65 73 65 74 20 62 65 66 6f 72  w is reset befor
1d2e0 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a  e and after.  **
1d2f0 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e   each recursion.
1d300 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20 62    The boundary b
1d310 65 74 77 65 65 6e 20 74 68 65 73 65 20 74 77 6f  etween these two
1d320 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65 74 65   regions is dete
1d330 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e  rmined.  ** usin
1d340 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65  g offsetof(Parse
1d350 2c 6e 56 61 72 29 20 73 6f 20 74 68 65 20 6e 56  ,nVar) so the nV
1d360 61 72 20 66 69 65 6c 64 20 6d 75 73 74 20 62 65  ar field must be
1d370 20 74 68 65 20 66 69 72 73 74 20 66 69 65 6c 64   the first field
1d380 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20 72 65 63  .  ** in the rec
1d390 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20  ursive region.. 
1d3a0 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
1d3b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d3c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d3d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1d3e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e  *********/..  in
1d3f0 74 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20  t nVar;         
1d400 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1d410 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c  r of '?' variabl
1d420 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53  es seen in the S
1d430 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  QL so far */.  i
1d440 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20 20 20  nt nzVar;       
1d450 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1d460 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  er of available 
1d470 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d  slots in azVar[]
1d480 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72 74   */.  u8 iPkSort
1d490 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
1d4a0 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43 20 66  /* ASC or DESC f
1d4b0 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  or INTEGER PRIMA
1d4c0 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20 65  RY KEY */.  u8 e
1d4d0 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20  xplain;         
1d4e0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
1d4f0 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61   the EXPLAIN fla
1d500 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68  g is found on th
1d510 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64  e query */.#ifnd
1d520 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
1d530 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 75 38  IRTUALTABLE.  u8
1d540 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20 20 20   declareVtab;   
1d550 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1d560 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69 74 65  if inside sqlite
1d570 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29  3_declare_vtab()
1d580 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c   */.  int nVtabL
1d590 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ock;            
1d5a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72  /* Number of vir
1d5b0 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c  tual tables to l
1d5c0 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ock */.#endif.  
1d5d0 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20 20 20 20  int nAlias;     
1d5e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1d5f0 62 65 72 20 6f 66 20 61 6c 69 61 73 65 64 20 72  ber of aliased r
1d600 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e  esult set column
1d610 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 69 67  s */.  int nHeig
1d620 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ht;             
1d630 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74   /* Expression t
1d640 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63 75  ree height of cu
1d650 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74  rrent sub-select
1d660 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
1d670 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
1d680 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49 64 3b    int iSelectId;
1d690 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1d6a0 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73 65 6c  D of current sel
1d6b0 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49 4e 20  ect for EXPLAIN 
1d6c0 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20  output */.  int 
1d6d0 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b 20 20  iNextSelectId;  
1d6e0 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 61 76        /* Next av
1d6f0 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74 20 49  ailable select I
1d700 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75  D for EXPLAIN ou
1d710 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  tput */.#endif. 
1d720 20 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20   char **azVar;  
1d730 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f             /* Po
1d740 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d 65 73 20  inters to names 
1d750 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f  of parameters */
1d760 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72 65 70  .  Vdbe *pReprep
1d770 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  are;         /* 
1d780 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70 61  VM being reprepa
1d790 72 65 64 20 28 73 71 6c 69 74 65 33 52 65 70 72  red (sqlite3Repr
1d7a0 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f  epare()) */.  co
1d7b0 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b  nst char *zTail;
1d7c0 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53          /* All S
1d7d0 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68 65  QL text past the
1d7e0 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20   last semicolon 
1d7f0 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c  parsed */.  Tabl
1d800 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20  e *pNewTable;   
1d810 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65        /* A table
1d820 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74   being construct
1d830 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41 42  ed by CREATE TAB
1d840 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  LE */.  Trigger 
1d850 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20  *pNewTrigger;   
1d860 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64    /* Trigger und
1d870 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20  er construct by 
1d880 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  a CREATE TRIGGER
1d890 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1d8a0 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
1d8b0 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61 6d  /* The 6th param
1d8c0 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74  eter to db->xAut
1d8d0 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20  h callbacks */. 
1d8e0 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65   Token sNameToke
1d8f0 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f  n;         /* To
1d900 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69  ken with unquali
1d910 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65  fied schema obje
1d920 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b  ct name */.  Tok
1d930 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20  en sLastToken;  
1d940 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61         /* The la
1d950 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20  st token parsed 
1d960 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
1d970 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
1d980 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67  BLE.  Token sArg
1d990 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1d9a0 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74  /* Complete text
1d9b0 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67   of a module arg
1d9c0 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65  ument */.  Table
1d9d0 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20   **apVtabLock;  
1d9e0 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
1d9f0 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  to virtual table
1da00 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e  s needing lockin
1da10 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61  g */.#endif.  Ta
1da20 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b  ble *pZombieTab;
1da30 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
1da40 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  of Table objects
1da50 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72   to delete after
1da60 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54   code gen */.  T
1da70 72 69 67 67 65 72 50 72 67 20 2a 70 54 72 69 67  riggerPrg *pTrig
1da80 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b  gerPrg;  /* Link
1da90 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64  ed list of coded
1daa0 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20 57   triggers */.  W
1dab0 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20  ith *pWith;     
1dac0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
1dad0 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73 65 2c  ent WITH clause,
1dae0 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69   or NULL */.  Wi
1daf0 74 68 20 2a 70 57 69 74 68 54 6f 46 72 65 65 3b  th *pWithToFree;
1db00 20 20 20 20 20 20 20 20 2f 2a 20 46 72 65 65 20          /* Free 
1db10 74 68 69 73 20 57 49 54 48 20 6f 62 6a 65 63 74  this WITH object
1db20 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
1db30 68 65 20 70 61 72 73 65 20 2a 2f 0a 7d 3b 0a 0a  he parse */.};..
1db40 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
1db50 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69  e if currently i
1db60 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33  nside an sqlite3
1db70 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20  _declare_vtab() 
1db80 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  call..*/.#ifdef 
1db90 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
1dba0 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69  UALTABLE.  #defi
1dbb0 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54  ne IN_DECLARE_VT
1dbc0 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65  AB 0.#else.  #de
1dbd0 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f  fine IN_DECLARE_
1dbe0 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65  VTAB (pParse->de
1dbf0 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69  clareVtab).#endi
1dc00 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  f../*.** An inst
1dc10 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
1dc20 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1dc30 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20  can be declared 
1dc40 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75  on a stack and u
1dc50 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74  sed.** to save t
1dc60 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  he Parse.zAuthCo
1dc70 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74  ntext value so t
1dc80 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65  hat it can be re
1dc90 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f  stored later..*/
1dca0 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74  .struct AuthCont
1dcb0 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ext {.  const ch
1dcc0 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74  ar *zAuthContext
1dcd0 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64  ;   /* Put saved
1dce0 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74   Parse.zAuthCont
1dcf0 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61  ext here */.  Pa
1dd00 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
1dd10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1dd20 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
1dd30 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69   */.};../*.** Bi
1dd40 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72  tfield flags for
1dd50 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72   P5 value in var
1dd60 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f  ious opcodes..*/
1dd70 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1dd80 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30 78  NCHANGE       0x
1dd90 30 31 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20  01    /* Set to 
1dda0 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e  update db->nChan
1ddb0 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ge */.#define OP
1ddc0 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20 20 20  FLAG_EPHEM      
1ddd0 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
1dde0 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72  _Column: Ephemer
1ddf0 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f 6b 20  al output is ok 
1de00 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1de10 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20  G_LASTROWID     
1de20 30 78 30 32 20 20 20 20 2f 2a 20 53 65 74 20 74  0x02    /* Set t
1de30 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73  o update db->las
1de40 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e  tRowid */.#defin
1de50 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  e OPFLAG_ISUPDAT
1de60 45 20 20 20 20 20 20 30 78 30 34 20 20 20 20 2f  E      0x04    /
1de70 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74  * This OP_Insert
1de80 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54   is an sql UPDAT
1de90 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E */.#define OPF
1dea0 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20  LAG_APPEND      
1deb0 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69    0x08    /* Thi
1dec0 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62  s is likely to b
1ded0 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23  e an append */.#
1dee0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53  define OPFLAG_US
1def0 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30  ESEEKRESULT 0x10
1df00 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76      /* Try to av
1df10 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74  oid a seek in Bt
1df20 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23  reeInsert() */.#
1df30 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45  define OPFLAG_LE
1df40 4e 47 54 48 41 52 47 20 20 20 20 20 30 78 34 30  NGTHARG     0x40
1df50 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
1df60 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c   only used for l
1df70 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69  ength() */.#defi
1df80 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  ne OPFLAG_TYPEOF
1df90 41 52 47 20 20 20 20 20 30 78 38 30 20 20 20 20  ARG     0x80    
1dfa0 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c  /* OP_Column onl
1dfb0 79 20 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f  y used for typeo
1dfc0 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  f() */.#define O
1dfd0 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20  PFLAG_BULKCSR   
1dfe0 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
1dff0 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f  P_Open** used to
1e000 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f   open bulk curso
1e010 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
1e020 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20  LAG_SEEKEQ      
1e030 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f    0x02    /* OP_
1e040 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73  Open** cursor us
1e050 65 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20  es EQ seek only 
1e060 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1e070 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20 20  G_FORDELETE     
1e080 30 78 30 38 20 20 20 20 2f 2a 20 4f 50 5f 4f 70  0x08    /* OP_Op
1e090 65 6e 20 69 73 20 6f 70 65 6e 69 6e 67 20 66 6f  en is opening fo
1e0a0 72 2d 64 65 6c 65 74 65 20 63 73 72 20 2a 2f 0a  r-delete csr */.
1e0b0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50  #define OPFLAG_P
1e0c0 32 49 53 52 45 47 20 20 20 20 20 20 20 30 78 31  2ISREG       0x1
1e0d0 30 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50  0    /* P2 to OP
1e0e0 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65 67  _Open** is a reg
1e0f0 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ister number */.
1e100 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50  #define OPFLAG_P
1e110 45 52 4d 55 54 45 20 20 20 20 20 20 20 30 78 30  ERMUTE       0x0
1e120 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61  1    /* OP_Compa
1e130 72 65 3a 20 75 73 65 20 74 68 65 20 70 65 72 6d  re: use the perm
1e140 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 20  utation */../*. 
1e150 2a 20 45 61 63 68 20 74 72 69 67 67 65 72 20 70  * Each trigger p
1e160 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61  resent in the da
1e170 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
1e180 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e   stored as an in
1e190 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72  stance of. * str
1e1a0 75 63 74 20 54 72 69 67 67 65 72 2e 20 0a 20 2a  uct Trigger. . *
1e1b0 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20  . * Pointers to 
1e1c0 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72  instances of str
1e1d0 75 63 74 20 54 72 69 67 67 65 72 20 61 72 65 20  uct Trigger are 
1e1e0 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77 61  stored in two wa
1e1f0 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65  ys.. * 1. In the
1e200 20 22 74 72 69 67 48 61 73 68 22 20 68 61 73 68   "trigHash" hash
1e210 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66 20   table (part of 
1e220 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68 61  the sqlite3* tha
1e230 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65  t represents the
1e240 20 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73 65   . *    database
1e250 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 54  ). This allows T
1e260 72 69 67 67 65 72 20 73 74 72 75 63 74 75 72 65  rigger structure
1e270 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 76 65  s to be retrieve
1e280 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e  d by name.. * 2.
1e290 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61 73   All triggers as
1e2a0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
1e2b0 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f 72  single table for
1e2c0 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c  m a linked list,
1e2d0 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20 20   using the. *   
1e2e0 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f 66   pNext member of
1e2f0 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e   struct Trigger.
1e300 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
1e310 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
1e320 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e  of the. *    lin
1e330 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f 72  ked list is stor
1e340 65 64 20 61 73 20 74 68 65 20 22 70 54 72 69 67  ed as the "pTrig
1e350 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20 74  ger" member of t
1e360 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20 2a  he associated. *
1e370 20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c 65      struct Table
1e380 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74 65  .. *. * The "ste
1e390 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 70  p_list" member p
1e3a0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72  oints to the fir
1e3b0 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20  st element of a 
1e3c0 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63  linked list. * c
1e3d0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51  ontaining the SQ
1e3e0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65  L statements spe
1e3f0 63 69 66 69 65 64 20 61 73 20 74 68 65 20 74 72  cified as the tr
1e400 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20  igger program.. 
1e410 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
1e420 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  r {.  char *zNam
1e430 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
1e440 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
1e450 20 74 72 69 67 67 65 72 20 20 20 20 20 20 20 20   trigger        
1e460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e470 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c 65  */.  char *table
1e480 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1e490 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65  The table or vie
1e4a0 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74  w to which the t
1e4b0 72 69 67 67 65 72 20 61 70 70 6c 69 65 73 20 2a  rigger applies *
1e4c0 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  /.  u8 op;      
1e4d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1e4e0 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c  ne of TK_DELETE,
1e4f0 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
1e500 4e 53 45 52 54 20 20 20 20 20 20 20 20 20 2a 2f  NSERT         */
1e510 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20 20  .  u8 tr_tm;    
1e520 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
1e530 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45 46  e of TRIGGER_BEF
1e540 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46 54  ORE, TRIGGER_AFT
1e550 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  ER */.  Expr *pW
1e560 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  hen;            
1e570 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61 75  /* The WHEN clau
1e580 73 65 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  se of the expres
1e590 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c  sion (may be NUL
1e5a0 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a  L) */.  IdList *
1e5b0 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20  pColumns;       
1e5c0 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  /* If this is an
1e5d0 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75   UPDATE OF <colu
1e5e0 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65 72  mn-list> trigger
1e5f0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1e600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e610 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e  he <column-list>
1e620 20 69 73 20 73 74 6f 72 65 64 20 68 65 72 65 20   is stored here 
1e630 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
1e640 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a 20  hema;        /* 
1e650 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e  Schema containin
1e660 67 20 74 68 65 20 74 72 69 67 67 65 72 20 2a 2f  g the trigger */
1e670 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62 53  .  Schema *pTabS
1e680 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63  chema;     /* Sc
1e690 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20  hema containing 
1e6a0 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54  the table */.  T
1e6b0 72 69 67 67 65 72 53 74 65 70 20 2a 73 74 65 70  riggerStep *step
1e6c0 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c  _list; /* Link l
1e6d0 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 20 70  ist of trigger p
1e6e0 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20 20  rogram steps    
1e6f0 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54 72           */.  Tr
1e700 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20 20  igger *pNext;   
1e710 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74 72        /* Next tr
1e720 69 67 67 65 72 20 61 73 73 6f 63 69 61 74 65 64  igger associated
1e730 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65 20   with the table 
1e740 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74  */.};../*.** A t
1e750 72 69 67 67 65 72 20 69 73 20 65 69 74 68 65 72  rigger is either
1e760 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e 20   a BEFORE or an 
1e770 41 46 54 45 52 20 74 72 69 67 67 65 72 2e 20 20  AFTER trigger.  
1e780 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  The following co
1e790 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72  nstants.** deter
1e7a0 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a 2a 2a 0a  mine which. .**.
1e7b0 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65 20  ** If there are 
1e7c0 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65 72  multiple trigger
1e7d0 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66 20  s, you might of 
1e7e0 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64 20  some BEFORE and 
1e7f0 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49  some AFTER..** I
1e800 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74 68  n that cases, th
1e810 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f  e constants belo
1e820 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74 6f  w can be ORed to
1e830 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  gether..*/.#defi
1e840 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52  ne TRIGGER_BEFOR
1e850 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52 49  E  1.#define TRI
1e860 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a 0a  GGER_AFTER   2..
1e870 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*. * An instanc
1e880 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  e of struct Trig
1e890 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64 20  gerStep is used 
1e8a0 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c  to store a singl
1e8b0 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a  e SQL statement.
1e8c0 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61 72   * that is a par
1e8d0 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d 70  t of a trigger-p
1e8e0 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20 49  rogram. . *. * I
1e8f0 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75  nstances of stru
1e900 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 61  ct TriggerStep a
1e910 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73  re stored in a s
1e920 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73  ingly linked lis
1e930 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69  t (linked. * usi
1e940 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d  ng the "pNext" m
1e950 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63 65  ember) reference
1e960 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c  d by the "step_l
1e970 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74  ist" member of t
1e980 68 65 20 0a 20 2a 20 61 73 73 6f 63 69 61 74 65  he . * associate
1e990 64 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  d struct Trigger
1e9a0 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66   instance. The f
1e9b0 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
1e9c0 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  the linked list 
1e9d0 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20  is. * the first 
1e9e0 73 74 65 70 20 6f 66 20 74 68 65 20 74 72 69 67  step of the trig
1e9f0 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 20  ger-program.. * 
1ea00 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d  . * The "op" mem
1ea10 62 65 72 20 69 6e 64 69 63 61 74 65 73 20 77 68  ber indicates wh
1ea20 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20  ether this is a 
1ea30 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52  "DELETE", "INSER
1ea40 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a  T", "UPDATE" or.
1ea50 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61 74   * "SELECT" stat
1ea60 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69  ement. The meani
1ea70 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72  ngs of the other
1ea80 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74 65   members is dete
1ea90 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 0a 20  rmined by the . 
1eaa0 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20  * value of "op" 
1eab0 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20  as follows:. *. 
1eac0 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45  * (op == TK_INSE
1ead0 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20  RT). * orconf   
1eae0 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f   -> stores the O
1eaf0 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72  N CONFLICT algor
1eb00 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20  ithm. * pSelect 
1eb10 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20    -> If this is 
1eb20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
1eb30 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74  .. SELECT ... st
1eb40 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a  atement, then. *
1eb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1eb60 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e  is stores a poin
1eb70 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43  ter to the SELEC
1eb80 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68  T statement. Oth
1eb90 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
1eba0 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71  zTarget   -> Deq
1ebb0 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
1ebc0 65 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72  e table to inser
1ebd0 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72  t into.. * pExpr
1ebe0 4c 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20  List -> If this 
1ebf0 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
1ec00 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e  O ... VALUES ...
1ec10 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
1ec20 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1ec30 20 74 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c   this stores val
1ec40 75 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74  ues to be insert
1ec50 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55  ed. Otherwise NU
1ec60 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20  LL.. * pIdList  
1ec70 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
1ec80 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
1ec90 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73  . (<column-names
1eca0 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e 20 0a 20  >) VALUES ... . 
1ecb0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  *              s
1ecc0 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74  tatement, then t
1ecd0 68 69 73 20 73 74 6f 72 65 73 20 74 68 65 20 63  his stores the c
1ece0 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62  olumn-names to b
1ecf0 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  e. *            
1ed00 20 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e    inserted into.
1ed10 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
1ed20 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a 54 61 72  _DELETE). * zTar
1ed30 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65  get   -> Dequote
1ed40 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
1ed50 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72  ble to delete fr
1ed60 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20  om.. * pWhere   
1ed70 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c   -> The WHERE cl
1ed80 61 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45  ause of the DELE
1ed90 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20  TE statement if 
1eda0 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64  one is specified
1edb0 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
1edc0 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c    Otherwise NULL
1edd0 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20  .. * . * (op == 
1ede0 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 7a 54  TK_UPDATE). * zT
1edf0 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f  arget   -> Dequo
1ee00 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
1ee10 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65 2e  table to update.
1ee20 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e  . * pWhere    ->
1ee30 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
1ee40 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  e of the UPDATE 
1ee50 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65  statement if one
1ee60 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20   is specified.. 
1ee70 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f  *              O
1ee80 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
1ee90 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41  * pExprList -> A
1eea0 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c   list of the col
1eeb0 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61  umns to update a
1eec0 6e 64 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  nd the expressio
1eed0 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20  ns to update. * 
1eee0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1eef0 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65  m to. See sqlite
1ef00 33 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65  3Update() docume
1ef10 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61  ntation of "pCha
1ef20 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20  nges". *        
1ef30 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a        argument..
1ef40 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54   * . */.struct T
1ef50 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75  riggerStep {.  u
1ef60 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
1ef70 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b      /* One of TK
1ef80 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41  _DELETE, TK_UPDA
1ef90 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54  TE, TK_INSERT, T
1efa0 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38  K_SELECT */.  u8
1efb0 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20   orconf;        
1efc0 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63     /* OE_Rollbac
1efd0 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67  k etc. */.  Trig
1efe0 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20  ger *pTrig;     
1eff0 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72 20   /* The trigger 
1f000 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20 69  that this step i
1f010 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20  s a part of */. 
1f020 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
1f030 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20  ;     /* SELECT 
1f040 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 52 48 53  statement or RHS
1f050 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   of INSERT INTO 
1f060 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20  SELECT ... */.  
1f070 63 68 61 72 20 2a 7a 54 61 72 67 65 74 3b 20 20  char *zTarget;  
1f080 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20 74       /* Target t
1f090 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45 2c  able for DELETE,
1f0a0 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54 20   UPDATE, INSERT 
1f0b0 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72  */.  Expr *pWher
1f0c0 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  e;        /* The
1f0d0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f   WHERE clause fo
1f0e0 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  r DELETE or UPDA
1f0f0 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45 78  TE steps */.  Ex
1f100 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69 73  prList *pExprLis
1f110 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73 65  t; /* SET clause
1f120 20 66 6f 72 20 55 50 44 41 54 45 2e 20 2a 2f 0a   for UPDATE. */.
1f130 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73    IdList *pIdLis
1f140 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  t;     /* Column
1f150 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45 52   names for INSER
1f160 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  T */.  TriggerSt
1f170 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  ep *pNext;  /* N
1f180 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d  ext in the link-
1f190 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67 65  list */.  Trigge
1f1a0 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f  rStep *pLast;  /
1f1b0 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20 69  * Last element i
1f1c0 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c  n link-list. Val
1f1d0 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d 20  id for 1st elem 
1f1e0 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  only */.};../*.*
1f1f0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
1f200 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
1f210 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  ns information u
1f220 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74  sed by the sqlit
1f230 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69  eFix....** routi
1f240 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c 6b  nes as they walk
1f250 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
1f260 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73 65  to make database
1f270 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65   references.** e
1f280 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a 74 79  xplicit.  .*/.ty
1f290 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62 46  pedef struct DbF
1f2a0 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74  ixer DbFixer;.st
1f2b0 72 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20  ruct DbFixer {. 
1f2c0 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
1f2d0 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73       /* The pars
1f2e0 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72  ing context.  Er
1f2f0 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72 69  ror messages wri
1f300 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53  tten here */.  S
1f310 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
1f320 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20     /* Fix items 
1f330 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a  to this schema *
1f340 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79  /.  int bVarOnly
1f350 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b  ;       /* Check
1f360 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72 65   for variable re
1f370 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f  ferences only */
1f380 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1f390 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  Db;    /* Make s
1f3a0 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20  ure all objects 
1f3b0 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  are contained in
1f3c0 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
1f3d0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
1f3e0 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20  zType;  /* Type 
1f3f0 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72  of the container
1f400 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f   - used for erro
1f410 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20  r messages */.  
1f420 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61  const Token *pNa
1f430 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74  me; /* Name of t
1f440 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75  he container - u
1f450 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65  sed for error me
1f460 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ssages */.};../*
1f470 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20  .** An objected 
1f480 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61  used to accumula
1f490 74 65 20 74 68 65 20 74 65 78 74 20 6f 66 20 61  te the text of a
1f4a0 20 73 74 72 69 6e 67 20 77 68 65 72 65 20 77 65   string where we
1f4b0 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73  .** do not neces
1f4c0 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20  sarily know how 
1f4d0 62 69 67 20 74 68 65 20 73 74 72 69 6e 67 20 77  big the string w
1f4e0 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e  ill be in the en
1f4f0 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74 72  d..*/.struct Str
1f500 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65  Accum {.  sqlite
1f510 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f  3 *db;         /
1f520 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61 62  * Optional datab
1f530 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64  ase for lookasid
1f540 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20  e.  Can be NULL 
1f550 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61 73 65  */.  char *zBase
1f560 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62  ;         /* A b
1f570 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20  ase allocation. 
1f580 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63   Not from malloc
1f590 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65  . */.  char *zTe
1f5a0 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  xt;         /* T
1f5b0 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63  he string collec
1f5c0 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ted so far */.  
1f5d0 69 6e 74 20 20 6e 43 68 61 72 3b 20 20 20 20 20  int  nChar;     
1f5e0 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f       /* Length o
1f5f0 66 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20  f the string so 
1f600 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 41  far */.  int  nA
1f610 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  lloc;         /*
1f620 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65   Amount of space
1f630 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54   allocated in zT
1f640 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 20 6d 78  ext */.  int  mx
1f650 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a  Alloc;        /*
1f660 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64   Maximum allowed
1f670 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30 20   allocation.  0 
1f680 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73  for no malloc us
1f690 61 67 65 20 2a 2f 0a 20 20 75 38 20 20 20 61 63  age */.  u8   ac
1f6a0 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a  cError;       /*
1f6b0 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20   STRACCUM_NOMEM 
1f6c0 6f 72 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42  or STRACCUM_TOOB
1f6d0 49 47 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65  IG */.};.#define
1f6e0 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20   STRACCUM_NOMEM 
1f6f0 20 20 31 0a 23 64 65 66 69 6e 65 20 53 54 52 41    1.#define STRA
1f700 43 43 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a 0a  CCUM_TOOBIG  2..
1f710 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20  /*.** A pointer 
1f720 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
1f730 65 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d  e is used to com
1f740 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61  municate informa
1f750 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c  tion.** from sql
1f760 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f  ite3Init and OP_
1f770 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f  ParseSchema into
1f780 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74   the sqlite3Init
1f790 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70  Callback..*/.typ
1f7a0 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20  edef struct {.  
1f7b0 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
1f7c0 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
1f7d0 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61  ase being initia
1f7e0 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  lized */.  char 
1f7f0 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f  **pzErrMsg;    /
1f800 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
1f810 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20  stored here */. 
1f820 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
1f830 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61       /* 0 for ma
1f840 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31 20  in database.  1 
1f850 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f  for TEMP, 2.. fo
1f860 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20  r ATTACHed */.  
1f870 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20  int rc;         
1f880 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f      /* Result co
1f890 64 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a  de stored here *
1f8a0 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f  /.} InitData;../
1f8b0 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63  *.** Structure c
1f8c0 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c  ontaining global
1f8d0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64   configuration d
1f8e0 61 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ata for the SQLi
1f8f0 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a  te library..**.*
1f900 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
1f910 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73   also contains s
1f920 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d  ome state inform
1f930 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
1f940 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b   Sqlite3Config {
1f950 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b  .  int bMemstat;
1f960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f970 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1f980 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74  enable memory st
1f990 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43  atus */.  int bC
1f9a0 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20  oreMutex;       
1f9b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1f9c0 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f  rue to enable co
1f9d0 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20  re mutexing */. 
1f9e0 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b   int bFullMutex;
1f9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa00 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
1fa10 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69  able full mutexi
1fa20 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65  ng */.  int bOpe
1fa30 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20 20 20  nUri;           
1fa40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1fa50 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66  e to interpret f
1fa60 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73  ilenames as URIs
1fa70 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69   */.  int bUseCi
1fa80 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
1fa90 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63          /* Use c
1faa0 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20  overing indices 
1fab0 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a  for full-scans *
1fac0 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e  /.  int mxStrlen
1fad0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1fae0 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
1faf0 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a   string length *
1fb00 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72  /.  int neverCor
1fb10 72 75 70 74 3b 20 20 20 20 20 20 20 20 20 20 20  rupt;           
1fb20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
1fb30 65 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c  e is always well
1fb40 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74  -formed */.  int
1fb50 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20   szLookaside;   
1fb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1fb70 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73  * Default lookas
1fb80 69 64 65 20 62 75 66 66 65 72 20 73 69 7a 65 20  ide buffer size 
1fb90 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73  */.  int nLookas
1fba0 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ide;            
1fbb0 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1fbc0 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66  t lookaside buff
1fbd0 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 73 71  er count */.  sq
1fbe0 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
1fbf0 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  s m;            
1fc00 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d  /* Low-level mem
1fc10 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  ory allocation i
1fc20 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71  nterface */.  sq
1fc30 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
1fc40 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20  ods mutex;      
1fc50 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74  /* Low-level mut
1fc60 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  ex interface */.
1fc70 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65    sqlite3_pcache
1fc80 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68 65  _methods2 pcache
1fc90 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c  2;  /* Low-level
1fca0 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65   page-cache inte
1fcb0 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20  rface */.  void 
1fcc0 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20 20 20  *pHeap;         
1fcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1fce0 48 65 61 70 20 73 74 6f 72 61 67 65 20 73 70 61  Heap storage spa
1fcf0 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61  ce */.  int nHea
1fd00 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
1fd10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
1fd20 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a  e of pHeap[] */.
1fd30 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52    int mnReq, mxR
1fd40 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eq;             
1fd50 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d      /* Min and m
1fd60 61 78 20 68 65 61 70 20 72 65 71 75 65 73 74 73  ax heap requests
1fd70 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69   sizes */.  sqli
1fd80 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70  te3_int64 szMmap
1fd90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1fda0 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70 65   mmap() space pe
1fdb0 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20  r open file */. 
1fdc0 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d   sqlite3_int64 m
1fdd0 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  xMmap;          
1fde0 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61     /* Maximum va
1fdf0 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a  lue for szMmap *
1fe00 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63 72 61 74  /.  void *pScrat
1fe10 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ch;             
1fe20 20 20 20 20 20 20 2f 2a 20 53 63 72 61 74 63 68        /* Scratch
1fe30 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74   memory */.  int
1fe40 20 73 7a 53 63 72 61 74 63 68 3b 20 20 20 20 20   szScratch;     
1fe50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1fe60 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 73  * Size of each s
1fe70 63 72 61 74 63 68 20 62 75 66 66 65 72 20 2a 2f  cratch buffer */
1fe80 0a 20 20 69 6e 74 20 6e 53 63 72 61 74 63 68 3b  .  int nScratch;
1fe90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fea0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1feb0 66 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72  f scratch buffer
1fec0 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61  s */.  void *pPa
1fed0 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
1fee0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65           /* Page
1fef0 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f   cache memory */
1ff00 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20  .  int szPage;  
1ff10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
1ff30 65 61 63 68 20 70 61 67 65 20 69 6e 20 70 50 61  each page in pPa
1ff40 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50  ge[] */.  int nP
1ff50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
1ff60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1ff70 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
1ff80 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69  n pPage[] */.  i
1ff90 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b  nt mxParserStack
1ffa0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ffb0 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74   /* maximum dept
1ffc0 68 20 6f 66 20 74 68 65 20 70 61 72 73 65 72 20  h of the parser 
1ffd0 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73  stack */.  int s
1ffe0 68 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65  haredCacheEnable
1fff0 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
20000 74 72 75 65 20 69 66 20 73 68 61 72 65 64 2d 63  true if shared-c
20010 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65  ache mode enable
20020 64 20 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61  d */.  u32 szPma
20030 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20040 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
20050 6d 75 6d 20 53 6f 72 74 65 72 20 50 4d 41 20 73  mum Sorter PMA s
20060 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20  ize */.  /* The 
20070 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69  above might be i
20080 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f  nitialized to no
20090 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c  n-zero.  The fol
200a0 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61  lowing need to a
200b0 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69  lways.  ** initi
200c0 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f  ally be zero, ho
200d0 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20  wever. */.  int 
200e0 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  isInit;         
200f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20100 20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69 74   True after init
20110 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66  ialization has f
20120 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74  inished */.  int
20130 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20   inProgress;    
20140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20150 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69  * True while ini
20160 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70  tialization in p
20170 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74  rogress */.  int
20180 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20   isMutexInit;   
20190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
201a0 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 75 74  * True after mut
201b0 65 78 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c  exes are initial
201c0 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ized */.  int is
201d0 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20  MallocInit;     
201e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
201f0 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63  rue after malloc
20200 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
20210 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68  */.  int isPCach
20220 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  eInit;          
20230 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
20240 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69  fter malloc is i
20250 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
20260 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65  int nRefInitMute
20270 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
20280 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75    /* Number of u
20290 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74  sers of pInitMut
202a0 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ex */.  sqlite3_
202b0 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65  mutex *pInitMute
202c0 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74  x;        /* Mut
202d0 65 78 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  ex used by sqlit
202e0 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20  e3_initialize() 
202f0 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67  */.  void (*xLog
20300 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
20310 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e  t char*); /* Fun
20320 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e  ction for loggin
20330 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f  g */.  void *pLo
20340 67 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  gArg;           
20350 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
20360 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
20370 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65   xLog() */.#ifde
20380 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
20390 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78  SQLLOG.  void(*x
203a0 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71  Sqllog)(void*,sq
203b0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
203c0 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  r*, int);.  void
203d0 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65   *pSqllogArg;.#e
203e0 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
203f0 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45  TE_VDBE_COVERAGE
20400 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
20410 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69 66  ing callback (if
20420 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e   not NULL) is in
20430 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20 56  voked on every V
20440 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20  DBE branch.  ** 
20450 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74 20  operation.  Set 
20460 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73 69  the callback usi
20470 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54  ng SQLITE_TESTCT
20480 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45  RL_VDBE_COVERAGE
20490 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ..  */.  void (*
204a0 78 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f 69  xVdbeBranch)(voi
204b0 64 2a 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c  d*,int iSrcLine,
204c0 75 38 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29  u8 eThis,u8 eMx)
204d0 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a  ;  /* Callback *
204e0 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42  /.  void *pVdbeB
204f0 72 61 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20  ranchArg;       
20500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20520 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f   1st argument */
20530 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
20540 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
20550 54 49 4e 5f 54 45 53 54 0a 20 20 69 6e 74 20 28  TIN_TEST.  int (
20560 2a 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29 28  *xTestCallback)(
20570 69 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a 20  int);        /* 
20580 49 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69 74  Invoked by sqlit
20590 65 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a  e3FaultSim() */.
205a0 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f  #endif.  int bLo
205b0 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20  caltimeFault;   
205c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
205d0 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c  ue to fail local
205e0 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a  time() calls */.
205f0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d  };../*.** This m
20600 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73  acro is used ins
20610 69 64 65 20 6f 66 20 61 73 73 65 72 74 28 29 20  ide of assert() 
20620 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e  statements to in
20630 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74  dicate that.** t
20640 68 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c  he assert is onl
20650 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c  y valid on a wel
20660 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73  l-formed databas
20670 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a  e.  Instead of:.
20680 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74  **.**     assert
20690 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65  ( X );.**.** One
206a0 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20   writes:.**.**  
206b0 20 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20     assert( X || 
206c0 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a  CORRUPT_DB );.**
206d0 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69  .** CORRUPT_DB i
206e0 73 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f  s true during no
206f0 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20  rmal operation. 
20700 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73   CORRUPT_DB does
20710 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a   not indicate.**
20720 20 74 68 61 74 20 74 68 65 20 64 61 74 61 62 61   that the databa
20730 73 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79  se is definitely
20740 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74   corrupt, only t
20750 68 61 74 20 69 74 20 6d 69 67 68 74 20 62 65 20  hat it might be 
20760 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20  corrupt..** For 
20770 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65 73 2c  most test cases,
20780 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73   CORRUPT_DB is s
20790 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e  et to false usin
207a0 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73  g a special.** s
207b0 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
207c0 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61  rol().  This ena
207d0 62 6c 65 73 20 61 73 73 65 72 74 28 29 20 73 74  bles assert() st
207e0 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76  atements to prov
207f0 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74  e.** things that
20800 20 61 72 65 20 61 6c 77 61 79 73 20 74 72 75 65   are always true
20810 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64   for well-formed
20820 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23   databases..*/.#
20830 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44  define CORRUPT_D
20840 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69  B  (sqlite3Confi
20850 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d  g.neverCorrupt==
20860 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78  0)../*.** Contex
20870 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64  t pointer passed
20880 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68   down through th
20890 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a  e tree-walk..*/.
208a0 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a  struct Walker {.
208b0 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c    int (*xExprCal
208c0 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20  lback)(Walker*, 
208d0 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43  Expr*);     /* C
208e0 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72  allback for expr
208f0 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74  essions */.  int
20900 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61   (*xSelectCallba
20910 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65  ck)(Walker*,Sele
20920 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61  ct*);  /* Callba
20930 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
20940 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c 65  /.  void (*xSele
20950 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c  ctCallback2)(Wal
20960 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a  ker*,Select*);/*
20970 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b   Second callback
20980 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a   for SELECTs */.
20990 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
209a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
209c0 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20  arser context.  
209d0 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44  */.  int walkerD
209e0 65 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  epth;           
209f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20a00 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71  * Number of subq
20a10 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65  ueries */.  u8 e
20a20 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Code;           
20a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a40 20 20 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c        /* A small
20a50 20 70 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65   processing code
20a60 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20   */.  union {   
20a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a90 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f  /* Extra data fo
20aa0 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  r callback */.  
20ab0 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
20ac0 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  NC;             
20ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20ae0 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a  Naming context *
20af0 2f 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20  /.    int n;    
20b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b20 20 2f 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f   /* A counter */
20b30 0a 20 20 20 20 69 6e 74 20 69 43 75 72 3b 20 20  .    int iCur;  
20b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b60 2f 2a 20 41 20 63 75 72 73 6f 72 20 6e 75 6d 62  /* A cursor numb
20b70 65 72 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73  er */.    SrcLis
20b80 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 20  t *pSrcList;    
20b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ba0 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61       /* FROM cla
20bb0 75 73 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  use */.    struc
20bc0 74 20 53 72 63 43 6f 75 6e 74 20 2a 70 53 72 63  t SrcCount *pSrc
20bd0 43 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20  Count;          
20be0 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e        /* Countin
20bf0 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e  g column referen
20c00 63 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  ces */.    struc
20c10 74 20 43 43 75 72 48 69 6e 74 20 2a 70 43 43 75  t CCurHint *pCCu
20c20 72 48 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  rHint;          
20c30 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79        /* Used by
20c40 20 63 6f 64 65 43 75 72 73 6f 72 48 69 6e 74 28   codeCursorHint(
20c50 29 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a  ) */.  } u;.};..
20c60 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61  /* Forward decla
20c70 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73  rations */.int s
20c80 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57  qlite3WalkExpr(W
20c90 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  alker*, Expr*);.
20ca0 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
20cb0 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c  xprList(Walker*,
20cc0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
20cd0 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
20ce0 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  ct(Walker*, Sele
20cf0 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
20d00 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28  3WalkSelectExpr(
20d10 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
20d20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
20d30 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c  lkSelectFrom(Wal
20d40 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
20d50 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 57  int sqlite3ExprW
20d60 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c  alkNoop(Walker*,
20d70 20 45 78 70 72 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20   Expr*);../*.** 
20d80 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d  Return code from
20d90 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65 20   the parse-tree 
20da0 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76  walking primitiv
20db0 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20  es and their.** 
20dc0 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64  callbacks..*/.#d
20dd0 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e  efine WRC_Contin
20de0 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e  ue    0   /* Con
20df0 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20  tinue down into 
20e00 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66  children */.#def
20e10 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20  ine WRC_Prune   
20e20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20      1   /* Omit 
20e30 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e  children but con
20e40 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69  tinue walking si
20e50 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e  blings */.#defin
20e60 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20  e WRC_Abort     
20e70 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e    2   /* Abandon
20e80 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a   the tree walk *
20e90 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
20ea0 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
20eb0 75 63 74 75 72 65 20 72 65 70 72 65 73 65 6e 74  ucture represent
20ec0 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f  s a set of one o
20ed0 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28  r more CTEs.** (
20ee0 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
20ef0 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65  ressions) create
20f00 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49  d by a single WI
20f10 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74  TH clause..*/.st
20f20 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e  ruct With {.  in
20f30 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20  t nCte;         
20f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20f50 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20   Number of CTEs 
20f60 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75  in the WITH clau
20f70 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f  se */.  With *pO
20f80 75 74 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  uter;           
20f90 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61          /* Conta
20fa0 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73  ining WITH claus
20fb0 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  e, or NULL */.  
20fc0 73 74 72 75 63 74 20 43 74 65 20 7b 20 20 20 20  struct Cte {    
20fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20fe0 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45 20  /* For each CTE 
20ff0 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75  in the WITH clau
21000 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68  se.... */.    ch
21010 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
21020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21030 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54   Name of this CT
21040 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73  E */.    ExprLis
21050 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20  t *pCols;       
21060 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74           /* List
21070 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c   of explicit col
21080 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55  umn names, or NU
21090 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  LL */.    Select
210a0 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20   *pSelect;      
210b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
210c0 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74   definition of t
210d0 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63  his CTE */.    c
210e0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 74 65 45  onst char *zCteE
210f0 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
21100 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
21110 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65 66  for circular ref
21120 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61  erences */.  } a
21130 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20  [1];.};..#ifdef 
21140 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
21150 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
21160 66 20 74 68 65 20 54 72 65 65 56 69 65 77 20 6f  f the TreeView o
21170 62 6a 65 63 74 20 69 73 20 75 73 65 64 20 66 6f  bject is used fo
21180 72 20 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63  r printing the c
21190 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74  ontent of.** dat
211a0 61 20 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20  a structures on 
211b0 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
211c0 74 66 28 29 20 75 73 69 6e 67 20 61 20 74 72 65  tf() using a tre
211d0 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a  e-like view..*/.
211e0 73 74 72 75 63 74 20 54 72 65 65 56 69 65 77 20  struct TreeView 
211f0 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20  {.  int iLevel; 
21200 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
21210 68 69 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68  hich level of th
21220 65 20 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e  e tree we are on
21230 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b   */.  u8  bLine[
21240 31 30 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a  100];         /*
21250 20 44 72 61 77 20 76 65 72 74 69 63 61 6c 20 69   Draw vertical i
21260 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c  n column i if bL
21270 69 6e 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a  ine[i] is true *
21280 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  /.};.#endif /* S
21290 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a  QLITE_DEBUG */..
212a0 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a  /*.** Assuming z
212b0 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  In points to the
212c0 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 61   first byte of a
212d0 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
212e0 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e  ,.** advance zIn
212f0 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65   to point to the
21300 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 74   first byte of t
21310 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68  he next UTF-8 ch
21320 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66  aracter..*/.#def
21330 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f  ine SQLITE_SKIP_
21340 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20  UTF8(zIn) {     
21350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21360 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49     \.  if( (*(zI
21370 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20  n++))>=0xc0 ){  
21380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21390 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
213a0 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26    while( (*zIn &
213b0 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20   0xc0)==0x80 ){ 
213c0 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20  zIn++; }        
213d0 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20       \.  }      
213e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
21410 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  }../*.** The SQL
21420 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f  ITE_*_BKPT macro
21430 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65  s are substitute
21440 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20  s for the error 
21450 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68  codes with.** th
21460 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20  e same name but 
21470 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50  without the _BKP
21480 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73 65  T suffix.  These
21490 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a   macros invoke.*
214a0 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20  * routines that 
214b0 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d  report the line-
214c0 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20  number on which 
214d0 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e  the error origin
214e0 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71  ated.** using sq
214f0 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68  lite3_log().  Th
21500 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20  e routines also 
21510 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e  provide a conven
21520 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f  ient place.** to
21530 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72 20   set a debugger 
21540 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69  breakpoint..*/.i
21550 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  nt sqlite3Corrup
21560 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  tError(int);.int
21570 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
21580 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
21590 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72  lite3CantopenErr
215a0 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65  or(int);.#define
215b0 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
215c0 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72  BKPT sqlite3Corr
215d0 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  uptError(__LINE_
215e0 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  _).#define SQLIT
215f0 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71  E_MISUSE_BKPT sq
21600 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
21610 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69  (__LINE__).#defi
21620 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50  ne SQLITE_CANTOP
21630 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  EN_BKPT sqlite3C
21640 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c  antopenError(__L
21650 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46  INE__).../*.** F
21660 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e  TS4 is really an
21670 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46   extension for F
21680 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62  TS3.  It is enab
21690 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  led using the.**
216a0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
216b0 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20  TS3 macro.  But 
216c0 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69  to avoid confusi
216d0 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a  on we also call.
216e0 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e  ** the SQLITE_EN
216f0 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20  ABLE_FTS4 macro 
21700 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20 61  to serve as an a
21710 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45 5f  lias for SQLITE_
21720 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a  ENABLE_FTS3..*/.
21730 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
21740 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20  TE_ENABLE_FTS4) 
21750 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
21760 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a  TE_ENABLE_FTS3).
21770 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
21780 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a 23 65  ENABLE_FTS3 1.#e
21790 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
217a0 63 74 79 70 65 2e 68 20 68 65 61 64 65 72 20 69  ctype.h header i
217b0 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e  s needed for non
217c0 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20  -ASCII systems. 
217d0 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e   It is also.** n
217e0 65 65 64 65 64 20 62 79 20 46 54 53 33 20 77 68  eeded by FTS3 wh
217f0 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75  en FTS3 is inclu
21800 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67  ded in the amalg
21810 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  amation..*/.#if 
21820 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
21830 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20  ASCII) || \.    
21840 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  (defined(SQLITE_
21850 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20  ENABLE_FTS3) && 
21860 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41  defined(SQLITE_A
21870 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20  MALGAMATION)).# 
21880 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68  include <ctype.h
21890 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  >.#endif../*.** 
218a0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
218b0 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73  cros mimic the s
218c0 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20  tandard library 
218d0 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65  functions touppe
218e0 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28  r(),.** isspace(
218f0 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73  ), isalnum(), is
21900 64 69 67 69 74 28 29 20 61 6e 64 20 69 73 78 64  digit() and isxd
21910 69 67 69 74 28 29 2c 20 72 65 73 70 65 63 74 69  igit(), respecti
21920 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c  vely. The.** sql
21930 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c  ite versions onl
21940 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49  y work for ASCII
21950 20 63 68 61 72 61 63 74 65 72 73 2c 20 72 65 67   characters, reg
21960 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c  ardless of local
21970 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  e..*/.#ifdef SQL
21980 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69  ITE_ASCII.# defi
21990 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65  ne sqlite3Touppe
219a0 72 28 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c  r(x)  ((x)&~(sql
219b0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
219c0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
219d0 26 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65  &0x20)).# define
219e0 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28   sqlite3Isspace(
219f0 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
21a00 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
21a10 63 68 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a  char)(x)]&0x01).
21a20 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
21a30 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71  Isalnum(x)   (sq
21a40 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
21a50 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
21a60 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65  ]&0x06).# define
21a70 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28   sqlite3Isalpha(
21a80 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
21a90 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
21aa0 63 68 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a  char)(x)]&0x02).
21ab0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
21ac0 49 73 64 69 67 69 74 28 78 29 20 20 20 28 73 71  Isdigit(x)   (sq
21ad0 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
21ae0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
21af0 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65  ]&0x04).# define
21b00 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74   sqlite3Isxdigit
21b10 28 78 29 20 20 28 73 71 6c 69 74 65 33 43 74 79  (x)  (sqlite3Cty
21b20 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
21b30 63 68 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a  char)(x)]&0x08).
21b40 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
21b50 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71  Tolower(x)   (sq
21b60 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65  lite3UpperToLowe
21b70 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r[(unsigned char
21b80 29 28 78 29 5d 29 0a 23 65 6c 73 65 0a 23 20 64  )(x)]).#else.# d
21b90 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75  efine sqlite3Tou
21ba0 70 70 65 72 28 78 29 20 20 20 74 6f 75 70 70 65  pper(x)   touppe
21bb0 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
21bc0 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
21bd0 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29  qlite3Isspace(x)
21be0 20 20 20 69 73 73 70 61 63 65 28 28 75 6e 73 69     isspace((unsi
21bf0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
21c00 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
21c10 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c  salnum(x)   isal
21c20 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68  num((unsigned ch
21c30 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
21c40 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28   sqlite3Isalpha(
21c50 78 29 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e  x)   isalpha((un
21c60 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
21c70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
21c80 33 49 73 64 69 67 69 74 28 78 29 20 20 20 69 73  3Isdigit(x)   is
21c90 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20  digit((unsigned 
21ca0 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
21cb0 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67  ne sqlite3Isxdig
21cc0 69 74 28 78 29 20 20 69 73 78 64 69 67 69 74 28  it(x)  isxdigit(
21cd0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
21ce0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
21cf0 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20  ite3Tolower(x)  
21d00 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e   tolower((unsign
21d10 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 65 6e  ed char)(x)).#en
21d20 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
21d30 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f  TE_OMIT_COMPILEO
21d40 50 54 49 4f 4e 5f 44 49 41 47 53 0a 69 6e 74 20  PTION_DIAGS.int 
21d50 73 71 6c 69 74 65 33 49 73 49 64 43 68 61 72 28  sqlite3IsIdChar(
21d60 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  u8);.#endif../*.
21d70 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63  ** Internal func
21d80 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a  tion prototypes.
21d90 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  */.#define sqlit
21da0 65 33 53 74 72 49 43 6d 70 20 73 71 6c 69 74 65  e3StrICmp sqlite
21db0 33 5f 73 74 72 69 63 6d 70 0a 69 6e 74 20 73 71  3_stricmp.int sq
21dc0 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f  lite3Strlen30(co
21dd0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66  nst char*);.#def
21de0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49  ine sqlite3StrNI
21df0 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e  Cmp sqlite3_strn
21e00 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65  icmp..int sqlite
21e10 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64  3MallocInit(void
21e20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
21e30 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a  allocEnd(void);.
21e40 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
21e50 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a  loc(u64);.void *
21e60 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72  sqlite3MallocZer
21e70 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  o(u64);.void *sq
21e80 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
21e90 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29  o(sqlite3*, u64)
21ea0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
21eb0 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74  bMallocRaw(sqlit
21ec0 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20  e3*, u64);.char 
21ed0 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70  *sqlite3DbStrDup
21ee0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
21ef0 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71  char*);.char *sq
21f00 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73  lite3DbStrNDup(s
21f10 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
21f20 61 72 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  ar*, u64);.void 
21f30 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28  *sqlite3Realloc(
21f40 76 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  void*, u64);.voi
21f50 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c  d *sqlite3DbReal
21f60 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65  locOrFree(sqlite
21f70 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34  3 *, void *, u64
21f80 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
21f90 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65  DbRealloc(sqlite
21fa0 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34  3 *, void *, u64
21fb0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
21fc0 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20  bFree(sqlite3*, 
21fd0 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
21fe0 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f  te3MallocSize(vo
21ff0 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
22000 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71  3DbMallocSize(sq
22010 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
22020 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72  void *sqlite3Scr
22030 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b  atchMalloc(int);
22040 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72  .void sqlite3Scr
22050 61 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b  atchFree(void*);
22060 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61  .void *sqlite3Pa
22070 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  geMalloc(int);.v
22080 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46  oid sqlite3PageF
22090 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  ree(void*);.void
220a0 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65   sqlite3MemSetDe
220b0 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66  fault(void);.#if
220c0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
220d0 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 76 6f  _BUILTIN_TEST.vo
220e0 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e  id sqlite3Benign
220f0 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64  MallocHooks(void
22100 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64   (*)(void), void
22110 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 23 65 6e   (*)(void));.#en
22120 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 48  dif.int sqlite3H
22130 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f  eapNearlyFull(vo
22140 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73  id);../*.** On s
22150 79 73 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c  ystems with ampl
22160 65 20 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e  e stack space an
22170 64 20 74 68 61 74 20 73 75 70 70 6f 72 74 20 61  d that support a
22180 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a  lloca(), make.**
22190 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29   use of alloca()
221a0 20 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65   to obtain space
221b0 20 66 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d   for large autom
221c0 61 74 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42  atic objects.  B
221d0 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62  y default,.** ob
221e0 74 61 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20  tain space from 
221f0 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20  malloc()..**.** 
22200 54 68 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75  The alloca() rou
22210 74 69 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72  tine never retur
22220 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77  ns NULL.  This w
22230 69 6c 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70  ill cause code p
22240 61 74 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61  aths.** that dea
22250 6c 20 77 69 74 68 20 73 71 6c 69 74 65 33 53 74  l with sqlite3St
22260 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75  ackAlloc() failu
22270 72 65 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63  res to be unreac
22280 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  hable..*/.#ifdef
22290 20 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f   SQLITE_USE_ALLO
222a0 43 41 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  CA.# define sqli
222b0 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77  te3StackAllocRaw
222c0 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e  (D,N)   alloca(N
222d0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
222e0 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f  e3StackAllocZero
222f0 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c  (D,N)  memset(al
22300 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23  loca(N), 0, N).#
22310 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
22320 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20  tackFree(D,P)   
22330 20 20 20 20 0a 23 65 6c 73 65 0a 23 20 64 65 66      .#else.# def
22340 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
22350 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
22360 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
22370 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65  aw(D,N).# define
22380 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
22390 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c  ocZero(D,N)  sql
223a0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
223b0 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  (D,N).# define s
223c0 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28  qlite3StackFree(
223d0 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69 74  D,P)       sqlit
223e0 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65  e3DbFree(D,P).#e
223f0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
22400 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
22410 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  S3.const sqlite3
22420 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71  _mem_methods *sq
22430 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79  lite3MemGetMemsy
22440 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  s3(void);.#endif
22450 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
22460 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f  NABLE_MEMSYS5.co
22470 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  nst sqlite3_mem_
22480 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33  methods *sqlite3
22490 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f  MemGetMemsys5(vo
224a0 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  id);.#endif...#i
224b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54  fndef SQLITE_MUT
224c0 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65  EX_OMIT.  sqlite
224d0 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
224e0 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65  const *sqlite3De
224f0 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29  faultMutex(void)
22500 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
22510 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20  x_methods const 
22520 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65  *sqlite3NoopMute
22530 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74  x(void);.  sqlit
22540 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
22550 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29  3MutexAlloc(int)
22560 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
22570 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a  utexInit(void);.
22580 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74    int sqlite3Mut
22590 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e  exEnd(void);.#en
225a0 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
225b0 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d  (SQLITE_MUTEX_OM
225c0 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  IT) && !defined(
225d0 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f  SQLITE_MUTEX_NOO
225e0 50 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  P).  void sqlite
225f0 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 76  3MemoryBarrier(v
22600 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  oid);.#else.# de
22610 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 6f  fine sqlite3Memo
22620 72 79 42 61 72 72 69 65 72 28 29 0a 23 65 6e 64  ryBarrier().#end
22630 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36  if..sqlite3_int6
22640 34 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56  4 sqlite3StatusV
22650 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20  alue(int);.void 
22660 73 71 6c 69 74 65 33 53 74 61 74 75 73 55 70 28  sqlite3StatusUp(
22670 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
22680 73 71 6c 69 74 65 33 53 74 61 74 75 73 44 6f 77  sqlite3StatusDow
22690 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  n(int, int);.voi
226a0 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 48  d sqlite3StatusH
226b0 69 67 68 77 61 74 65 72 28 69 6e 74 2c 20 69 6e  ighwater(int, in
226c0 74 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74  t);../* Access t
226d0 6f 20 6d 75 74 65 78 65 73 20 75 73 65 64 20 62  o mutexes used b
226e0 79 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73  y sqlite3_status
226f0 28 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75  () */.sqlite3_mu
22700 74 65 78 20 2a 73 71 6c 69 74 65 33 50 63 61 63  tex *sqlite3Pcac
22710 68 65 31 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  he1Mutex(void);.
22720 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73  sqlite3_mutex *s
22730 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65  qlite3MallocMute
22740 78 28 76 6f 69 64 29 3b 0a 0a 23 69 66 6e 64 65  x(void);..#ifnde
22750 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
22760 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69  OATING_POINT.  i
22770 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  nt sqlite3IsNaN(
22780 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23  double);.#else.#
22790 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
227a0 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69  sNaN(X)  0.#endi
227b0 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  f../*.** An inst
227c0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
227d0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
227e0 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f  holds informatio
227f0 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66  n about SQL.** f
22800 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e  unctions argumen
22810 74 73 20 74 68 61 74 20 61 72 65 20 74 68 65 20  ts that are the 
22820 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20 74 68  parameters to th
22830 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e 63 74  e printf() funct
22840 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50  ion..*/.struct P
22850 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 7b  rintfArguments {
22860 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20 20 20  .  int nArg;    
22870 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
22880 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61  otal number of a
22890 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e  rguments */.  in
228a0 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20 20 20  t nUsed;        
228b0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
228c0 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 75 73   of arguments us
228d0 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73  ed so far */.  s
228e0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
228f0 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65 20 61  pArg;   /* The a
22900 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a  rgument values *
22910 2f 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65 20 53 51  /.};..#define SQ
22920 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45  LITE_PRINTF_INTE
22930 52 4e 41 4c 20 30 78 30 31 0a 23 64 65 66 69 6e  RNAL 0x01.#defin
22940 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
22950 53 51 4c 46 55 4e 43 20 20 30 78 30 32 0a 76 6f  SQLFUNC  0x02.vo
22960 69 64 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e  id sqlite3VXPrin
22970 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 75 33  tf(StrAccum*, u3
22980 32 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  2, const char*, 
22990 76 61 5f 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73  va_list);.void s
229a0 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53 74  qlite3XPrintf(St
229b0 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c 20 63 6f  rAccum*, u32, co
229c0 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
229d0 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50  .char *sqlite3MP
229e0 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63  rintf(sqlite3*,c
229f0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
22a00 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56  ;.char *sqlite3V
22a10 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a  MPrintf(sqlite3*
22a20 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61  ,const char*, va
22a30 5f 6c 69 73 74 29 3b 0a 23 69 66 20 64 65 66 69  _list);.#if defi
22a40 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
22a50 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
22a60 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43  ITE_HAVE_OS_TRAC
22a70 45 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  E).  void sqlite
22a80 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e  3DebugPrintf(con
22a90 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
22aa0 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
22ab0 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a  ed(SQLITE_TEST).
22ac0 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54    void *sqlite3T
22ad0 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e  estTextToPtr(con
22ae0 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  st char*);.#endi
22af0 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
22b00 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76  QLITE_DEBUG).  v
22b10 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
22b20 69 65 77 45 78 70 72 28 54 72 65 65 56 69 65 77  iewExpr(TreeView
22b30 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20  *, const Expr*, 
22b40 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  u8);.  void sqli
22b50 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72 4c  te3TreeViewExprL
22b60 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ist(TreeView*, c
22b70 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20  onst ExprList*, 
22b80 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  u8, const char*)
22b90 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
22ba0 54 72 65 65 56 69 65 77 53 65 6c 65 63 74 28 54  TreeViewSelect(T
22bb0 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
22bc0 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20  Select*, u8);.  
22bd0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
22be0 56 69 65 77 57 69 74 68 28 54 72 65 65 56 69 65  ViewWith(TreeVie
22bf0 77 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c  w*, const With*,
22c00 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76   u8);.#endif...v
22c10 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74  oid sqlite3SetSt
22c20 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71  ring(char **, sq
22c30 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
22c40 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
22c50 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65  e3ErrorMsg(Parse
22c60 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
22c70 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ...);.int sqlite
22c80 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b  3Dequote(char*);
22c90 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77  .int sqlite3Keyw
22ca0 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e  ordCode(const un
22cb0 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e  signed char*, in
22cc0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  t);.int sqlite3R
22cd0 75 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c  unParser(Parse*,
22ce0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68   const char*, ch
22cf0 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ar **);.void sql
22d00 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67  ite3FinishCoding
22d10 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71  (Parse*);.int sq
22d20 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65 67 28  lite3GetTempReg(
22d30 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
22d40 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70  lite3ReleaseTemp
22d50 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  Reg(Parse*,int);
22d60 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
22d70 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c  empRange(Parse*,
22d80 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22d90 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e  e3ReleaseTempRan
22da0 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e  ge(Parse*,int,in
22db0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22dc0 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63 68  ClearTempRegCach
22dd0 65 28 50 61 72 73 65 2a 29 3b 0a 45 78 70 72 20  e(Parse*);.Expr 
22de0 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f  *sqlite3ExprAllo
22df0 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  c(sqlite3*,int,c
22e00 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29  onst Token*,int)
22e10 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
22e20 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  xpr(sqlite3*,int
22e30 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
22e40 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
22e50 74 74 61 63 68 53 75 62 74 72 65 65 73 28 73 71  ttachSubtrees(sq
22e60 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70  lite3*,Expr*,Exp
22e70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20  r*,Expr*);.Expr 
22e80 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28 50 61  *sqlite3PExpr(Pa
22e90 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a  rse*, int, Expr*
22ea0 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54  , Expr*, const T
22eb0 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71  oken*);.Expr *sq
22ec0 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c  lite3ExprAnd(sql
22ed0 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70  ite3*,Expr*, Exp
22ee0 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
22ef0 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50  e3ExprFunction(P
22f00 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
22f10 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
22f20 71 6c 69 74 65 33 45 78 70 72 41 73 73 69 67 6e  qlite3ExprAssign
22f30 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a  VarNumber(Parse*
22f40 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
22f50 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74 65  qlite3ExprDelete
22f60 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a  (sqlite3*, Expr*
22f70 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c  );.ExprList *sql
22f80 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70 65  ite3ExprListAppe
22f90 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  nd(Parse*,ExprLi
22fa0 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64  st*,Expr*);.void
22fb0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
22fc0 53 65 74 53 6f 72 74 4f 72 64 65 72 28 45 78 70  SetSortOrder(Exp
22fd0 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69  rList*,int);.voi
22fe0 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
22ff0 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c  tSetName(Parse*,
23000 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a  ExprList*,Token*
23010 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
23020 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 70  te3ExprListSetSp
23030 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  an(Parse*,ExprLi
23040 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a  st*,ExprSpan*);.
23050 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23060 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
23070 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  e3*, ExprList*);
23080 0a 75 33 32 20 73 71 6c 69 74 65 33 45 78 70 72  .u32 sqlite3Expr
23090 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e 73 74 20  ListFlags(const 
230a0 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
230b0 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69  sqlite3Init(sqli
230c0 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69  te3*, char**);.i
230d0 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  nt sqlite3InitCa
230e0 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e  llback(void*, in
230f0 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a  t, char**, char*
23100 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23110 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f  Pragma(Parse*,To
23120 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  ken*,Token*,Toke
23130 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  n*,int);.void sq
23140 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
23150 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
23160 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
23170 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65   sqlite3ResetOne
23180 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c  Schema(sqlite3*,
23190 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
231a0 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61  e3CollapseDataba
231b0 73 65 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a  seArray(sqlite3*
231c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
231d0 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a  eginParse(Parse*
231e0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
231f0 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61  te3CommitInterna
23200 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  lChanges(sqlite3
23210 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23220 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65  DeleteColumnName
23230 73 28 73 71 6c 69 74 65 33 2a 2c 54 61 62 6c 65  s(sqlite3*,Table
23240 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
23250 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78 70 72 4c 69  olumnsFromExprLi
23260 73 74 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  st(Parse*,ExprLi
23270 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a  st*,i16*,Column*
23280 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
23290 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c  e3ResultSetOfSel
232a0 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63  ect(Parse*,Selec
232b0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
232c0 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65  3OpenMasterTable
232d0 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a  (Parse *, int);.
232e0 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72  Index *sqlite3Pr
232f0 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61  imaryKeyIndex(Ta
23300 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74  ble*);.i16 sqlit
23310 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28  e3ColumnOfIndex(
23320 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f  Index*, i16);.vo
23330 69 64 20 73 71 6c 69 74 65 33 53 74 61 72 74 54  id sqlite3StartT
23340 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  able(Parse*,Toke
23350 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e  n*,Token*,int,in
23360 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  t,int,int);.void
23370 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d   sqlite3AddColum
23380 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29  n(Parse*,Token*)
23390 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
233a0 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c  dNotNull(Parse*,
233b0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
233c0 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79  te3AddPrimaryKey
233d0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
233e0 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  t*, int, int, in
233f0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
23400 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69  AddCheckConstrai
23410 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  nt(Parse*, Expr*
23420 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
23430 64 64 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72  ddColumnType(Par
23440 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  se*,Token*);.voi
23450 64 20 73 71 6c 69 74 65 33 41 64 64 44 65 66 61  d sqlite3AddDefa
23460 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c  ultValue(Parse*,
23470 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64  ExprSpan*);.void
23480 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61   sqlite3AddColla
23490 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54  teType(Parse*, T
234a0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
234b0 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72  ite3EndTable(Par
234c0 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
234d0 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69  *,u8,Select*);.i
234e0 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 55  nt sqlite3ParseU
234f0 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  ri(const char*,c
23500 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67  onst char*,unsig
23510 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20  ned int*,.      
23520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
23530 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72  lite3_vfs**,char
23540 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72  **,char **);.Btr
23550 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d  ee *sqlite3DbNam
23560 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33  eToBtree(sqlite3
23570 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
23580 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 4f  int sqlite3CodeO
23590 6e 63 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 23  nce(Parse *);..#
235a0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
235b0 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23  T_BUILTIN_TEST.#
235c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46   define sqlite3F
235d0 61 75 6c 74 53 69 6d 28 58 29 20 53 51 4c 49 54  aultSim(X) SQLIT
235e0 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74  E_OK.#else.  int
235f0 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
23600 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42  (int);.#endif..B
23610 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33 42 69  itvec *sqlite3Bi
23620 74 76 65 63 43 72 65 61 74 65 28 75 33 32 29 3b  tvecCreate(u32);
23630 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
23640 65 63 54 65 73 74 28 42 69 74 76 65 63 2a 2c 20  ecTest(Bitvec*, 
23650 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
23660 33 42 69 74 76 65 63 54 65 73 74 4e 6f 74 4e 75  3BitvecTestNotNu
23670 6c 6c 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  ll(Bitvec*, u32)
23680 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
23690 76 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20  vecSet(Bitvec*, 
236a0 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u32);.void sqlit
236b0 65 33 42 69 74 76 65 63 43 6c 65 61 72 28 42 69  e3BitvecClear(Bi
236c0 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64  tvec*, u32, void
236d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
236e0 42 69 74 76 65 63 44 65 73 74 72 6f 79 28 42 69  BitvecDestroy(Bi
236f0 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69  tvec*);.u32 sqli
23700 74 65 33 42 69 74 76 65 63 53 69 7a 65 28 42 69  te3BitvecSize(Bi
23710 74 76 65 63 2a 29 3b 0a 23 69 66 6e 64 65 66 20  tvec*);.#ifndef 
23720 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
23730 54 49 4e 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c  TIN_TEST.int sql
23740 69 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69  ite3BitvecBuilti
23750 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b  nTest(int,int*);
23760 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20  .#endif..RowSet 
23770 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e  *sqlite3RowSetIn
23780 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  it(sqlite3*, voi
23790 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  d*, unsigned int
237a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
237b0 6f 77 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65  owSetClear(RowSe
237c0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
237d0 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f  3RowSetInsert(Ro
237e0 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74  wSet*, i64);.int
237f0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65   sqlite3RowSetTe
23800 73 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20  st(RowSet*, int 
23810 69 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e  iBatch, i64);.in
23820 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e  t sqlite3RowSetN
23830 65 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34  ext(RowSet*, i64
23840 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  *);..void sqlite
23850 33 43 72 65 61 74 65 56 69 65 77 28 50 61 72 73  3CreateView(Pars
23860 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
23870 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
23880 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e  *,Select*,int,in
23890 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  t);..#if !define
238a0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
238b0 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28  EW) || !defined(
238c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
238d0 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20  UALTABLE).  int 
238e0 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f  sqlite3ViewGetCo
238f0 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a  lumnNames(Parse*
23900 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a  ,Table*);.#else.
23910 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23920 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d  ViewGetColumnNam
23930 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66  es(A,B) 0.#endif
23940 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
23950 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69  _ATTACHED>30.  i
23960 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b  nt sqlite3DbMask
23970 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29  AllZero(yDbMask)
23980 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
23990 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50  lite3DropTable(P
239a0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
239b0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
239c0 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70   sqlite3CodeDrop
239d0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61  Table(Parse*, Ta
239e0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ble*, int, int);
239f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
23a00 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33  eteTable(sqlite3
23a10 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e  *, Table*);.#ifn
23a20 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
23a30 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
23a40 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
23a50 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50  incrementBegin(P
23a60 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20  arse *pParse);. 
23a70 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
23a80 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61  oincrementEnd(Pa
23a90 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65  rse *pParse);.#e
23aa0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
23ab0 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
23ac0 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69  tBegin(X).# defi
23ad0 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  ne sqlite3Autoin
23ae0 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65  crementEnd(X).#e
23af0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
23b00 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20  3Insert(Parse*, 
23b10 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74  SrcList*, Select
23b20 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29  *, IdList*, int)
23b30 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41  ;.void *sqlite3A
23b40 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c  rrayAllocate(sql
23b50 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c  ite3*,void*,int,
23b60 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69  int*,int*);.IdLi
23b70 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73  st *sqlite3IdLis
23b80 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a  tAppend(sqlite3*
23b90 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  , IdList*, Token
23ba0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
23bb0 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73  dListIndex(IdLis
23bc0 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  t*,const char*);
23bd0 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
23be0 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28  3SrcListEnlarge(
23bf0 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
23c00 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53  t*, int, int);.S
23c10 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
23c20 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c  rcListAppend(sql
23c30 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  ite3*, SrcList*,
23c40 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
23c50 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
23c60 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46  e3SrcListAppendF
23c70 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20  romTerm(Parse*, 
23c80 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
23c90 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20  , Token*,.      
23ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cc0 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c  Token*, Select*,
23cd0 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29   Expr*, IdList*)
23ce0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
23cf0 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28 50  cListIndexedBy(P
23d00 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20  arse *, SrcList 
23d10 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69  *, Token *);.voi
23d20 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
23d30 46 75 6e 63 41 72 67 73 28 50 61 72 73 65 2a 2c  FuncArgs(Parse*,
23d40 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c   SrcList*, ExprL
23d50 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
23d60 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75  e3IndexedByLooku
23d70 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63  p(Parse *, struc
23d80 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a  t SrcList_item *
23d90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
23da0 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54  rcListShiftJoinT
23db0 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76  ype(SrcList*);.v
23dc0 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
23dd0 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28  stAssignCursors(
23de0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
23df0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  );.void sqlite3I
23e00 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  dListDelete(sqli
23e10 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a  te3*, IdList*);.
23e20 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
23e30 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
23e40 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49  3*, SrcList*);.I
23e50 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c  ndex *sqlite3All
23e60 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74  ocateIndexObject
23e70 28 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e  (sqlite3*,i16,in
23e80 74 2c 63 68 61 72 2a 2a 29 3b 0a 49 6e 64 65 78  t,char**);.Index
23e90 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 49   *sqlite3CreateI
23ea0 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65  ndex(Parse*,Toke
23eb0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73  n*,Token*,SrcLis
23ec0 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  t*,ExprList*,int
23ed0 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20  ,Token*,.       
23ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ef0 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69     Expr*, int, i
23f00 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
23f10 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65  3DropIndex(Parse
23f20 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
23f30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65  );.int sqlite3Se
23f40 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c  lect(Parse*, Sel
23f50 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74  ect*, SelectDest
23f60 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69  *);.Select *sqli
23f70 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72  te3SelectNew(Par
23f80 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72  se*,ExprList*,Sr
23f90 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
23fa0 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  rList*,.        
23fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fc0 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a   Expr*,ExprList*
23fd0 2c 75 31 36 2c 45 78 70 72 2a 2c 45 78 70 72 2a  ,u16,Expr*,Expr*
23fe0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
23ff0 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69  electDelete(sqli
24000 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  te3*, Select*);.
24010 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72  Table *sqlite3Sr
24020 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73  cListLookup(Pars
24030 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69  e*, SrcList*);.i
24040 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64  nt sqlite3IsRead
24050 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62  Only(Parse*, Tab
24060 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  le*, int);.void 
24070 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
24080 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75  (Parse*, int iCu
24090 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c  r, int iDb, Tabl
240a0 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65  e*, int);.#if de
240b0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
240c0 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54  BLE_UPDATE_DELET
240d0 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66  E_LIMIT) && !def
240e0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
240f0 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20  _SUBQUERY).Expr 
24100 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65  *sqlite3LimitWhe
24110 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73  re(Parse*,SrcLis
24120 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
24130 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63  t*,Expr*,Expr*,c
24140 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  har*);.#endif.vo
24150 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
24160 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63  From(Parse*, Src
24170 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  List*, Expr*);.v
24180 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74  oid sqlite3Updat
24190 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
241a0 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45  t*, ExprList*, E
241b0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72  xpr*, int);.Wher
241c0 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68  eInfo *sqlite3Wh
241d0 65 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c  ereBegin(Parse*,
241e0 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
241f0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73  xprList*,ExprLis
24200 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69  t*,u16,int);.voi
24210 64 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e  d sqlite3WhereEn
24220 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 75  d(WhereInfo*);.u
24230 36 34 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f  64 sqlite3WhereO
24240 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68  utputRowCount(Wh
24250 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
24260 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73  qlite3WhereIsDis
24270 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a  tinct(WhereInfo*
24280 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
24290 65 72 65 49 73 4f 72 64 65 72 65 64 28 57 68 65  ereIsOrdered(Whe
242a0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
242b0 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74  lite3WhereIsSort
242c0 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  ed(WhereInfo*);.
242d0 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
242e0 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57 68  ContinueLabel(Wh
242f0 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
24300 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61 6b  qlite3WhereBreak
24310 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a  Label(WhereInfo*
24320 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
24330 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65  ereOkOnePass(Whe
24340 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a  reInfo*, int*);.
24350 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f  #define ONEPASS_
24360 4f 46 46 20 20 20 20 20 20 30 20 20 20 20 20 20  OFF      0      
24370 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e 45 50    /* Use of ONEP
24380 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20  ASS not allowed 
24390 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41  */.#define ONEPA
243a0 53 53 5f 53 49 4e 47 4c 45 20 20 20 31 20 20 20  SS_SINGLE   1   
243b0 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20       /* ONEPASS 
243c0 76 61 6c 69 64 20 66 6f 72 20 61 20 73 69 6e 67  valid for a sing
243d0 6c 65 20 72 6f 77 20 75 70 64 61 74 65 20 2a 2f  le row update */
243e0 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53  .#define ONEPASS
243f0 5f 4d 55 4c 54 49 20 20 20 20 32 20 20 20 20 20  _MULTI    2     
24400 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73     /* ONEPASS is
24410 20 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c 74 69   valid for multi
24420 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76 6f 69 64  ple rows */.void
24430 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
24440 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d 6e 28  LoadIndexColumn(
24450 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20  Parse*, Index*, 
24460 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
24470 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
24480 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72  odeGetColumn(Par
24490 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
244a0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
244b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
244c0 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 54 6f  rCodeGetColumnTo
244d0 52 65 67 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  Reg(Parse*, Tabl
244e0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
244f0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
24500 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
24510 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20  nOfTable(Vdbe*, 
24520 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
24530 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
24540 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65  ite3ExprCodeMove
24550 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
24560 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
24570 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 53 74  lite3ExprCacheSt
24580 6f 72 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ore(Parse*, int,
24590 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
245a0 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
245b0 65 50 75 73 68 28 50 61 72 73 65 2a 29 3b 0a 76  ePush(Parse*);.v
245c0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
245d0 61 63 68 65 50 6f 70 28 50 61 72 73 65 2a 29 3b  achePop(Parse*);
245e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
245f0 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72  rCacheRemove(Par
24600 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
24610 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
24620 43 61 63 68 65 43 6c 65 61 72 28 50 61 72 73 65  CacheClear(Parse
24630 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24640 45 78 70 72 43 61 63 68 65 41 66 66 69 6e 69 74  ExprCacheAffinit
24650 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20  yChange(Parse*, 
24660 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
24670 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28  sqlite3ExprCode(
24680 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
24690 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
246a0 33 45 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61  3ExprCodeFactora
246b0 62 6c 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ble(Parse*, Expr
246c0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
246d0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 74 49  lite3ExprCodeAtI
246e0 6e 69 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  nit(Parse*, Expr
246f0 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
24700 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
24710 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70  Temp(Parse*, Exp
24720 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  r*, int*);.int s
24730 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 61  qlite3ExprCodeTa
24740 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70  rget(Parse*, Exp
24750 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
24760 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e  qlite3ExprCodeAn
24770 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45  dCache(Parse*, E
24780 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
24790 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45  sqlite3ExprCodeE
247a0 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20  xprList(Parse*, 
247b0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
247c0 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e  int, u8);.#defin
247d0 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55  e SQLITE_ECEL_DU
247e0 50 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20  P      0x01  /* 
247f0 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f  Deep, not shallo
24800 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66  w copies */.#def
24810 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
24820 46 41 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f  FACTOR   0x02  /
24830 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e  * Factor out con
24840 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 23  stant terms */.#
24850 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
24860 45 4c 5f 52 45 46 20 20 20 20 20 20 30 78 30 34  EL_REF      0x04
24870 20 20 2f 2a 20 55 73 65 20 45 78 70 72 4c 69 73    /* Use ExprLis
24880 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f  t.u.x.iOrderByCo
24890 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  l */.void sqlite
248a0 33 45 78 70 72 49 66 54 72 75 65 28 50 61 72 73  3ExprIfTrue(Pars
248b0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
248c0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
248d0 65 33 45 78 70 72 49 66 46 61 6c 73 65 28 50 61  e3ExprIfFalse(Pa
248e0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
248f0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
24900 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 44  ite3ExprIfFalseD
24910 75 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  up(Parse*, Expr*
24920 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62  , int, int);.Tab
24930 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54  le *sqlite3FindT
24940 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  able(sqlite3*,co
24950 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
24960 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a   char*);.Table *
24970 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62  sqlite3LocateTab
24980 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73  le(Parse*,int is
24990 56 69 65 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a  View,const char*
249a0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
249b0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f  Table *sqlite3Lo
249c0 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61  cateTableItem(Pa
249d0 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c  rse*,int isView,
249e0 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
249f0 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73  tem *);.Index *s
24a00 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28  qlite3FindIndex(
24a10 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
24a20 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
24a30 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24a40 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
24a50 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e  able(sqlite3*,in
24a60 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
24a70 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
24a80 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78  nkAndDeleteIndex
24a90 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
24aa0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
24ab0 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50   sqlite3Vacuum(P
24ac0 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  arse*);.int sqli
24ad0 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61  te3RunVacuum(cha
24ae0 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a  r**, sqlite3*);.
24af0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d  char *sqlite3Nam
24b00 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74  eFromToken(sqlit
24b10 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  e3*, Token*);.in
24b20 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d  t sqlite3ExprCom
24b30 70 61 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72  pare(Expr*, Expr
24b40 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
24b50 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70  ite3ExprListComp
24b60 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45  are(ExprList*, E
24b70 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  xprList*, int);.
24b80 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
24b90 6d 70 6c 69 65 73 45 78 70 72 28 45 78 70 72 2a  mpliesExpr(Expr*
24ba0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
24bb0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
24bc0 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65 73  nalyzeAggregates
24bd0 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45  (NameContext*, E
24be0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
24bf0 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67  te3ExprAnalyzeAg
24c00 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78  gList(NameContex
24c10 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  t*,ExprList*);.i
24c20 6e 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69  nt sqlite3Functi
24c30 6f 6e 55 73 65 73 54 68 69 73 53 72 63 28 45 78  onUsesThisSrc(Ex
24c40 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  pr*, SrcList*);.
24c50 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74  Vdbe *sqlite3Get
24c60 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 23 69  Vdbe(Parse*);.#i
24c70 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
24c80 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 76  T_BUILTIN_TEST.v
24c90 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53  oid sqlite3PrngS
24ca0 61 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a  aveState(void);.
24cb0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67  void sqlite3Prng
24cc0 52 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69  RestoreState(voi
24cd0 64 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  d);.#endif.void 
24ce0 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
24cf0 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ll(sqlite3*,int)
24d00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
24d10 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50  deVerifySchema(P
24d20 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
24d30 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72  d sqlite3CodeVer
24d40 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50  ifyNamedSchema(P
24d50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
24d60 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71  r *zDb);.void sq
24d70 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61  lite3BeginTransa
24d80 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e  ction(Parse*, in
24d90 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
24da0 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f  CommitTransactio
24db0 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  n(Parse*);.void 
24dc0 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54  sqlite3RollbackT
24dd0 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
24de0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24df0 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a  Savepoint(Parse*
24e00 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  , int, Token*);.
24e10 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73  void sqlite3Clos
24e20 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69  eSavepoints(sqli
24e30 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  te3 *);.void sql
24e40 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e  ite3LeaveMutexAn
24e50 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c  dCloseZombie(sql
24e60 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
24e70 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
24e80 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  t(Expr*);.int sq
24e90 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
24ea0 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a  antNotJoin(Expr*
24eb0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
24ec0 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75  prIsConstantOrFu
24ed0 6e 63 74 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38  nction(Expr*, u8
24ee0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
24ef0 70 72 49 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e  prIsTableConstan
24f00 74 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 69  t(Expr*,int);.#i
24f10 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
24f20 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a  LE_CURSOR_HINTS.
24f30 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
24f40 6f 6e 74 61 69 6e 73 53 75 62 71 75 65 72 79 28  ontainsSubquery(
24f50 45 78 70 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69  Expr*);.#endif.i
24f60 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
24f70 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69  Integer(Expr*, i
24f80 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
24f90 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63  3ExprCanBeNull(c
24fa0 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74  onst Expr*);.int
24fb0 20 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64   sqlite3ExprNeed
24fc0 73 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67  sNoAffinityChang
24fd0 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63  e(const Expr*, c
24fe0 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  har);.int sqlite
24ff0 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63  3IsRowid(const c
25000 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
25010 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65  te3GenerateRowDe
25020 6c 65 74 65 28 0a 20 20 20 20 50 61 72 73 65 2a  lete(.    Parse*
25030 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a  ,Table*,Trigger*
25040 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36  ,int,int,int,i16
25050 2c 75 38 2c 75 38 2c 75 38 2c 69 6e 74 29 3b 0a  ,u8,u8,u8,int);.
25060 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
25070 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65  rateRowIndexDele
25080 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  te(Parse*, Table
25090 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
250a0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
250b0 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65  ite3GenerateInde
250c0 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64  xKey(Parse*, Ind
250d0 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  ex*, int, int, i
250e0 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c  nt, int*,Index*,
250f0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
25100 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78  e3ResolvePartIdx
25110 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74  Label(Parse*,int
25120 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
25130 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e  enerateConstrain
25140 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54  tChecks(Parse*,T
25150 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69  able*,int*,int,i
25160 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20  nt,int,int,.    
25170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25190 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29   u8,u8,int,int*)
251a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
251b0 6d 70 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28  mpleteInsertion(
251c0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
251d0 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69  t,int,int,int*,i
251e0 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74  nt,int,int);.int
251f0 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
25200 65 41 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73  eAndIndices(Pars
25210 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
25220 20 75 38 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69   u8, int, u8*, i
25230 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64  nt*, int*);.void
25240 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69   sqlite3BeginWri
25250 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61 72 73  teOperation(Pars
25260 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
25270 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c 74 69  oid sqlite3Multi
25280 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b 0a 76  Write(Parse*);.v
25290 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79 41 62  oid sqlite3MayAb
252a0 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ort(Parse*);.voi
252b0 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e  d sqlite3HaltCon
252c0 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
252d0 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c  int, int, char*,
252e0 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73   i8, u8);.void s
252f0 71 6c 69 74 65 33 55 6e 69 71 75 65 43 6f 6e 73  qlite3UniqueCons
25300 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  traint(Parse*, i
25310 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  nt, Index*);.voi
25320 64 20 73 71 6c 69 74 65 33 52 6f 77 69 64 43 6f  d sqlite3RowidCo
25330 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
25340 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45   int, Table*);.E
25350 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
25360 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  Dup(sqlite3*,Exp
25370 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73  r*,int);.ExprLis
25380 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
25390 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45  stDup(sqlite3*,E
253a0 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53  xprList*,int);.S
253b0 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
253c0 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  rcListDup(sqlite
253d0 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29  3*,SrcList*,int)
253e0 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65  ;.IdList *sqlite
253f0 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74  3IdListDup(sqlit
25400 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65  e3*,IdList*);.Se
25410 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c  lect *sqlite3Sel
25420 65 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  ectDup(sqlite3*,
25430 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 23 69  Select*,int);.#i
25440 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  f SELECTTRACE_EN
25450 41 42 4c 45 44 0a 76 6f 69 64 20 73 71 6c 69 74  ABLED.void sqlit
25460 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28  e3SelectSetName(
25470 53 65 6c 65 63 74 2a 2c 63 6f 6e 73 74 20 63 68  Select*,const ch
25480 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ar*);.#else.# de
25490 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65  fine sqlite3Sele
254a0 63 74 53 65 74 4e 61 6d 65 28 41 2c 42 29 0a 23  ctSetName(A,B).#
254b0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
254c0 65 33 46 75 6e 63 44 65 66 49 6e 73 65 72 74 28  e3FuncDefInsert(
254d0 46 75 6e 63 44 65 66 48 61 73 68 2a 2c 20 46 75  FuncDefHash*, Fu
254e0 6e 63 44 65 66 2a 29 3b 0a 46 75 6e 63 44 65 66  ncDef*);.FuncDef
254f0 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e   *sqlite3FindFun
25500 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63  ction(sqlite3*,c
25510 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69  onst char*,int,i
25520 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20  nt,u8,u8);.void 
25530 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 42  sqlite3RegisterB
25540 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28  uiltinFunctions(
25550 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
25560 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 44  sqlite3RegisterD
25570 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73  ateTimeFunctions
25580 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
25590 69 74 65 33 52 65 67 69 73 74 65 72 47 6c 6f 62  ite3RegisterGlob
255a0 61 6c 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  alFunctions(void
255b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  );.int sqlite3Sa
255c0 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69  fetyCheckOk(sqli
255d0 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
255e0 65 33 53 61 66 65 74 79 43 68 65 63 6b 53 69 63  e3SafetyCheckSic
255f0 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b  kOrOk(sqlite3*);
25600 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 68 61  .void sqlite3Cha
25610 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a  ngeCookie(Parse*
25620 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65  , int);..#if !de
25630 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
25640 54 5f 56 49 45 57 29 20 26 26 20 21 64 65 66 69  T_VIEW) && !defi
25650 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
25660 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20 73 71  TRIGGER).void sq
25670 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69 7a 65  lite3Materialize
25680 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54 61 62  View(Parse*, Tab
25690 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  le*, Expr*, int)
256a0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ;.#endif..#ifnde
256b0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
256c0 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73 71 6c  IGGER.  void sql
256d0 69 74 65 33 42 65 67 69 6e 54 72 69 67 67 65 72  ite3BeginTrigger
256e0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
256f0 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49  Token*,int,int,I
25700 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  dList*,SrcList*,
25710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25720 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
25730 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  *,int, int);.  v
25740 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73  oid sqlite3Finis
25750 68 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  hTrigger(Parse*,
25760 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c 20 54   TriggerStep*, T
25770 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73  oken*);.  void s
25780 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
25790 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  r(Parse*, SrcLis
257a0 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  t*, int);.  void
257b0 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
257c0 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20 54  gerPtr(Parse*, T
257d0 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72 69 67  rigger*);.  Trig
257e0 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67  ger *sqlite3Trig
257f0 67 65 72 73 45 78 69 73 74 28 50 61 72 73 65 20  gersExist(Parse 
25800 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
25810 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a  ExprList*, int *
25820 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67 67 65  pMask);.  Trigge
25830 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  r *sqlite3Trigge
25840 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54  rList(Parse *, T
25850 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20  able *);.  void 
25860 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
25870 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
25880 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78  igger *, int, Ex
25890 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61  prList*, int, Ta
258a0 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20 20 20  ble *,.         
258b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258c0 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74     int, int, int
258d0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
258e0 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44  3CodeRowTriggerD
258f0 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c 20 54  irect(Parse *, T
25900 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c 65 20  rigger *, Table 
25910 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
25920 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
25930 56 69 65 77 54 72 69 67 67 65 72 73 28 50 61 72  ViewTriggers(Par
25940 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
25950 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73  r*, int, ExprLis
25960 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  t*);.  void sqli
25970 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
25980 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 20 54  Step(sqlite3*, T
25990 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20 20  riggerStep*);.  
259a0 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
259b0 69 74 65 33 54 72 69 67 67 65 72 53 65 6c 65 63  ite3TriggerSelec
259c0 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 53  tStep(sqlite3*,S
259d0 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69 67 67  elect*);.  Trigg
259e0 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
259f0 72 69 67 67 65 72 49 6e 73 65 72 74 53 74 65 70  riggerInsertStep
25a00 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a  (sqlite3*,Token*
25a10 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20  , IdList*,.     
25a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a40 20 20 20 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a     Select*,u8);.
25a50 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
25a60 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70 64  qlite3TriggerUpd
25a70 61 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ateStep(sqlite3*
25a80 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
25a90 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20  *, Expr*, u8);. 
25aa0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
25ab0 6c 69 74 65 33 54 72 69 67 67 65 72 44 65 6c 65  lite3TriggerDele
25ac0 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  teStep(sqlite3*,
25ad0 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a  Token*, Expr*);.
25ae0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
25af0 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
25b00 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  te3*, Trigger*);
25b10 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55  .  void sqlite3U
25b20 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
25b30 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69  igger(sqlite3*,i
25b40 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
25b50 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54 72  .  u32 sqlite3Tr
25b60 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72  iggerColmask(Par
25b70 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70  se*,Trigger*,Exp
25b80 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54  rList*,int,int,T
25b90 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65  able*,int);.# de
25ba0 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
25bb0 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70  eToplevel(p) ((p
25bc0 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28  )->pToplevel ? (
25bd0 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20  p)->pToplevel : 
25be0 28 70 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (p)).# define sq
25bf0 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28  lite3IsToplevel(
25c00 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76  p) ((p)->pToplev
25c10 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64  el==0).#else.# d
25c20 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
25c30 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44  ggersExist(B,C,D
25c40 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65  ,E,F) 0.# define
25c50 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
25c60 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66  igger(A,B).# def
25c70 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54  ine sqlite3DropT
25c80 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23  riggerPtr(A,B).#
25c90 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55   define sqlite3U
25ca0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
25cb0 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64  igger(A,B,C).# d
25cc0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
25cd0 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c  eRowTrigger(A,B,
25ce0 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23  C,D,E,F,G,H,I).#
25cf0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
25d00 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72  odeRowTriggerDir
25d10 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29  ect(A,B,C,D,E,F)
25d20 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25d30 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20  3TriggerList(X, 
25d40 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  Y) 0.# define sq
25d50 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
25d60 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65  el(p) p.# define
25d70 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76   sqlite3IsToplev
25d80 65 6c 28 70 29 20 31 0a 23 20 64 65 66 69 6e 65  el(p) 1.# define
25d90 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
25da0 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45  olmask(A,B,C,D,E
25db0 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a  ,F,G) 0.#endif..
25dc0 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54  int sqlite3JoinT
25dd0 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
25de0 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
25df0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
25e00 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65  3CreateForeignKe
25e10 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
25e20 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70  st*, Token*, Exp
25e30 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f  rList*, int);.vo
25e40 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46  id sqlite3DeferF
25e50 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
25e60 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  , int);.#ifndef 
25e70 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
25e80 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64  ORIZATION.  void
25e90 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
25ea0 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63  (Parse*,Expr*,Sc
25eb0 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b  hema*,SrcList*);
25ec0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
25ed0 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69  thCheck(Parse*,i
25ee0 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
25ef0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
25f00 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
25f10 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
25f20 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a  ntextPush(Parse*
25f30 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20  , AuthContext*, 
25f40 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
25f50 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
25f60 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43  ContextPop(AuthC
25f70 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20  ontext*);.  int 
25f80 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43  sqlite3AuthReadC
25f90 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  ol(Parse*, const
25fa0 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63   char *, const c
25fb0 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  har *, int);.#el
25fc0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
25fd0 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c  te3AuthRead(a,b,
25fe0 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71  c,d).# define sq
25ff0 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61  lite3AuthCheck(a
26000 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c  ,b,c,d,e)    SQL
26010 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20  ITE_OK.# define 
26020 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
26030 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20  xtPush(a,b,c).# 
26040 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
26050 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20  thContextPop(a) 
26060 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e   ((void)(a)).#en
26070 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
26080 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Attach(Parse*, E
26090 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  xpr*, Expr*, Exp
260a0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
260b0 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Detach(Parse*, 
260c0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
260d0 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69  ite3FixInit(DbFi
260e0 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e  xer*, Parse*, in
260f0 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
26100 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69  const Token*);.i
26110 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63  nt sqlite3FixSrc
26120 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53  List(DbFixer*, S
26130 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
26140 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44  lite3FixSelect(D
26150 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a  bFixer*, Select*
26160 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
26170 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20  xExpr(DbFixer*, 
26180 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
26190 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44  te3FixExprList(D
261a0 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73  bFixer*, ExprLis
261b0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
261c0 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44  FixTriggerStep(D
261d0 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72  bFixer*, Trigger
261e0 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Step*);.int sqli
261f0 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68  te3AtoF(const ch
26200 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20  ar *z, double*, 
26210 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
26220 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f  lite3GetInt32(co
26230 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a  nst char *, int*
26240 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
26250 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  oi(const char*);
26260 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31  .int sqlite3Utf1
26270 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76  6ByteLen(const v
26280 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  oid *pData, int 
26290 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69  nChar);.int sqli
262a0 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63  te3Utf8CharLen(c
262b0 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61  onst char *pData
262c0 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33  , int nByte);.u3
262d0 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61  2 sqlite3Utf8Rea
262e0 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c  d(const u8**);.L
262f0 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
26300 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74  Est(u64);.LogEst
26310 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64   sqlite3LogEstAd
26320 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29  d(LogEst,LogEst)
26330 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
26340 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
26350 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  LE.LogEst sqlite
26360 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c  3LogEstFromDoubl
26370 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69  e(double);.#endi
26380 66 0a 75 36 34 20 73 71 6c 69 74 65 33 4c 6f 67  f.u64 sqlite3Log
26390 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29  EstToInt(LogEst)
263a0 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65  ;../*.** Routine
263b0 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72  s to read and wr
263c0 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e  ite variable-len
263d0 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54  gth integers.  T
263e0 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  hese used to.** 
263f0 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c  be defined local
26400 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75  ly, but now we u
26410 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f  se the varint ro
26420 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74  utines in the ut
26430 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f  il.c.** file..*/
26440 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56  .int sqlite3PutV
26450 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63  arint(unsigned c
26460 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73  har*, u64);.u8 s
26470 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 28  qlite3GetVarint(
26480 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
26490 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75  har *, u64 *);.u
264a0 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  8 sqlite3GetVari
264b0 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67  nt32(const unsig
264c0 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20  ned char *, u32 
264d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
264e0 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b  arintLen(u64 v);
264f0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d  ../*.** The comm
26500 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20 61  on case is for a
26510 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20   varint to be a 
26520 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68  single byte.  Th
26530 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  ey following.** 
26540 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68  macros handle th
26550 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69  e common case wi
26560 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72  thout a procedur
26570 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e  e call, but then
26580 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f   call.** the pro
26590 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65  cedure for large
265a0 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64  r varints..*/.#d
265b0 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33  efine getVarint3
265c0 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29  2(A,B)  \.  (u8)
265d0 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29  ((*(A)<(u8)0x80)
265e0 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29  ?((B)=(u32)*(A))
265f0 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72  ,1:sqlite3GetVar
26600 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a  int32((A),(u32 *
26610 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  )&(B))).#define 
26620 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29  putVarint32(A,B)
26630 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32    \.  (u8)(((u32
26640 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f  )(B)<(u32)0x80)?
26650 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20  (*(A)=(unsigned 
26660 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20  char)(B)),1:\.  
26670 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
26680 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69  ((A),(B))).#defi
26690 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20 20  ne getVarint    
266a0 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
266b0 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69  .#define putVari
266c0 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75 74  nt    sqlite3Put
266d0 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63  Varint...const c
266e0 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65  har *sqlite3Inde
266f0 78 41 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c  xAffinityStr(sql
26700 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a  ite3*, Index*);.
26710 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
26720 65 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c  eAffinity(Vdbe*,
26730 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63   Table*, int);.c
26740 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61  har sqlite3Compa
26750 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20  reAffinity(Expr 
26760 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66  *pExpr, char aff
26770 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  2);.int sqlite3I
26780 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45  ndexAffinityOk(E
26790 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72  xpr *pExpr, char
267a0 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a   idx_affinity);.
267b0 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70 72  char sqlite3Expr
267c0 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
267d0 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Expr);.int sqlit
267e0 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63  e3Atoi64(const c
267f0 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c  har*, i64*, int,
26800 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
26810 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63  3DecOrHexToI64(c
26820 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a  onst char*, i64*
26830 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
26840 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69  rrorWithMsg(sqli
26850 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
26860 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69   char*,...);.voi
26870 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73  d sqlite3Error(s
26880 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
26890 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f  id *sqlite3HexTo
268a0 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63  Blob(sqlite3*, c
268b0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e  onst char *z, in
268c0 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  t n);.u8 sqlite3
268d0 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b  HexToInt(int h);
268e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50  .int sqlite3TwoP
268f0 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c  artName(Parse *,
26900 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20   Token *, Token 
26910 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23  *, Token **);..#
26920 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
26930 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 29  E_NEED_ERR_NAME)
26940 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
26950 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74 29  ite3ErrName(int)
26960 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20  ;.#endif..const 
26970 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72  char *sqlite3Err
26980 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  Str(int);.int sq
26990 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
269a0 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
269b0 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
269c0 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69  FindCollSeq(sqli
269d0 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e  te3*,u8 enc, con
269e0 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43  st char*,int);.C
269f0 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c  ollSeq *sqlite3L
26a00 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72  ocateCollSeq(Par
26a10 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73  se *pParse, cons
26a20 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43  t char*zName);.C
26a30 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45  ollSeq *sqlite3E
26a40 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  xprCollSeq(Parse
26a50 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a   *pParse, Expr *
26a60 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71  pExpr);.Expr *sq
26a70 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c  lite3ExprAddColl
26a80 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a  ateToken(Parse *
26a90 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 63  pParse, Expr*, c
26aa0 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74  onst Token*, int
26ab0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
26ac0 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 53 74  ExprAddCollateSt
26ad0 72 69 6e 67 28 50 61 72 73 65 2a 2c 45 78 70 72  ring(Parse*,Expr
26ae0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
26af0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
26b00 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78 70  rSkipCollate(Exp
26b10 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
26b20 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72  CheckCollSeq(Par
26b30 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29  se *, CollSeq *)
26b40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65  ;.int sqlite3Che
26b50 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72  ckObjectName(Par
26b60 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  se *, const char
26b70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
26b80 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28  3VdbeSetChanges(
26b90 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b  sqlite3 *, int);
26ba0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49  .int sqlite3AddI
26bb0 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
26bc0 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e  int sqlite3SubIn
26bd0 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
26be0 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74  nt sqlite3MulInt
26bf0 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
26c00 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33  t sqlite3AbsInt3
26c10 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53  2(int);.#ifdef S
26c20 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33  QLITE_ENABLE_8_3
26c30 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69  _NAMES.void sqli
26c40 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 63  te3FileSuffix3(c
26c50 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72  onst char*, char
26c60 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
26c70 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75  ne sqlite3FileSu
26c80 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69  ffix3(X,Y).#endi
26c90 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 42  f.u8 sqlite3GetB
26ca0 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61  oolean(const cha
26cb0 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74  r *z,u8);..const
26cc0 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61   void *sqlite3Va
26cd0 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f  lueText(sqlite3_
26ce0 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74  value*, u8);.int
26cf0 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74   sqlite3ValueByt
26d00 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  es(sqlite3_value
26d10 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  *, u8);.void sql
26d20 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28  ite3ValueSetStr(
26d30 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
26d40 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  int, const void 
26d50 2a 2c 75 38 2c 20 0a 20 20 20 20 20 20 20 20 20  *,u8, .         
26d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
26d70 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a  oid(*)(void*));.
26d80 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
26d90 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33  eSetNull(sqlite3
26da0 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73  _value*);.void s
26db0 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28  qlite3ValueFree(
26dc0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b  sqlite3_value*);
26dd0 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  .sqlite3_value *
26de0 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28  sqlite3ValueNew(
26df0 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63 68 61 72  sqlite3 *);.char
26e00 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f   *sqlite3Utf16to
26e10 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  8(sqlite3 *, con
26e20 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75  st void*, int, u
26e30 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  8);.int sqlite3V
26e40 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c  alueFromExpr(sql
26e50 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20  ite3 *, Expr *, 
26e60 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f  u8, u8, sqlite3_
26e70 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20  value **);.void 
26e80 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c  sqlite3ValueAppl
26e90 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65  yAffinity(sqlite
26ea0 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75  3_value *, u8, u
26eb0 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  8);.#ifndef SQLI
26ec0 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a  TE_AMALGAMATION.
26ed0 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
26ee0 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
26ef0 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79  e3OpcodeProperty
26f00 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
26f10 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
26f20 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
26f30 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  er[];.extern con
26f40 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
26f50 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70   sqlite3CtypeMap
26f60 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
26f70 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e   Token sqlite3In
26f80 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72  tTokens[];.exter
26f90 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72  n SQLITE_WSD str
26fa0 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
26fb0 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b  g sqlite3Config;
26fc0 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57  .extern SQLITE_W
26fd0 53 44 20 46 75 6e 63 44 65 66 48 61 73 68 20 73  SD FuncDefHash s
26fe0 71 6c 69 74 65 33 47 6c 6f 62 61 6c 46 75 6e 63  qlite3GlobalFunc
26ff0 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53  tions;.#ifndef S
27000 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65  QLITE_OMIT_WSD.e
27010 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
27020 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65  3PendingByte;.#e
27030 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64  ndif.#endif.void
27040 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65   sqlite3RootPage
27050 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20  Moved(sqlite3*, 
27060 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
27070 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e  void sqlite3Rein
27080 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  dex(Parse*, Toke
27090 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  n*, Token*);.voi
270a0 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75  d sqlite3AlterFu
270b0 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
270c0 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
270d0 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73  RenameTable(Pars
270e0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
270f0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
27100 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74  e3GetToken(const
27110 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
27120 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73  , int *);.void s
27130 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73  qlite3NestedPars
27140 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  e(Parse*, const 
27150 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  char*, ...);.voi
27160 64 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50  d sqlite3ExpireP
27170 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
27180 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  s(sqlite3*);.int
27190 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73   sqlite3CodeSubs
271a0 65 6c 65 63 74 28 50 61 72 73 65 20 2a 2c 20 45  elect(Parse *, E
271b0 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  xpr *, int, int)
271c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
271d0 6c 65 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c  lectPrep(Parse*,
271e0 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f   Select*, NameCo
271f0 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71  ntext*);.void sq
27200 6c 69 74 65 33 53 65 6c 65 63 74 57 72 6f 6e 67  lite3SelectWrong
27210 4e 75 6d 54 65 72 6d 73 45 72 72 6f 72 28 50 61  NumTermsError(Pa
27220 72 73 65 20 2a 70 50 61 72 73 65 2c 20 53 65 6c  rse *pParse, Sel
27230 65 63 74 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c  ect *p);.int sql
27240 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d  ite3MatchSpanNam
27250 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  e(const char*, c
27260 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
27270 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
27280 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
27290 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d  e3ResolveExprNam
272a0 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
272b0 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
272c0 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4c  ite3ResolveExprL
272d0 69 73 74 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e  istNames(NameCon
272e0 74 65 78 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  text*, ExprList*
272f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
27300 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65  esolveSelectName
27310 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  s(Parse*, Select
27320 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29  *, NameContext*)
27330 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
27340 73 6f 6c 76 65 53 65 6c 66 52 65 66 65 72 65 6e  solveSelfReferen
27350 63 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ce(Parse*,Table*
27360 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ,int,Expr*,ExprL
27370 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
27380 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72  e3ResolveOrderGr
27390 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65  oupBy(Parse*, Se
273a0 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  lect*, ExprList*
273b0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
273c0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75  void sqlite3Colu
273d0 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a  mnDefault(Vdbe *
273e0 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20  , Table *, int, 
273f0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
27400 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64  e3AlterFinishAdd
27410 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
27420 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73  Token *);.void s
27430 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e  qlite3AlterBegin
27440 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20  AddColumn(Parse 
27450 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43  *, SrcList *);.C
27460 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47  ollSeq *sqlite3G
27470 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a  etCollSeq(Parse*
27480 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c  , u8, CollSeq *,
27490 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63   const char*);.c
274a0 68 61 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e  har sqlite3Affin
274b0 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68  ityType(const ch
274c0 61 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20  ar*, u8*);.void 
274d0 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50  sqlite3Analyze(P
274e0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
274f0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
27500 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e  te3InvokeBusyHan
27510 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72  dler(BusyHandler
27520 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
27530 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20  indDb(sqlite3*, 
27540 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
27550 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73  ite3FindDbName(s
27560 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
27570 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  char *);.int sql
27580 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64  ite3AnalysisLoad
27590 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44  (sqlite3*,int iD
275a0 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  B);.void sqlite3
275b0 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c  DeleteIndexSampl
275c0 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65  es(sqlite3*,Inde
275d0 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
275e0 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49  3DefaultRowEst(I
275f0 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
27600 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65  ite3RegisterLike
27610 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65  Functions(sqlite
27620 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  3*, int);.int sq
27630 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74  lite3IsLikeFunct
27640 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  ion(sqlite3*,Exp
27650 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a  r*,int*,char*);.
27660 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 69 6e 69  void sqlite3Mini
27670 6d 75 6d 46 69 6c 65 46 6f 72 6d 61 74 28 50 61  mumFileFormat(Pa
27680 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
27690 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68  .void sqlite3Sch
276a0 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29  emaClear(void *)
276b0 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65  ;.Schema *sqlite
276c0 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74  3SchemaGet(sqlit
276d0 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a  e3 *, Btree *);.
276e0 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d  int sqlite3Schem
276f0 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33  aToIndex(sqlite3
27700 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b   *db, Schema *);
27710 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
27720 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71  3KeyInfoAlloc(sq
27730 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b  lite3*,int,int);
27740 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79  .void sqlite3Key
27750 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66  InfoUnref(KeyInf
27760 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71  o*);.KeyInfo *sq
27770 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28  lite3KeyInfoRef(
27780 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e  KeyInfo*);.KeyIn
27790 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
277a0 66 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a  foOfIndex(Parse*
277b0 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65  , Index*);.#ifde
277c0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69  f SQLITE_DEBUG.i
277d0 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  nt sqlite3KeyInf
277e0 6f 49 73 57 72 69 74 65 61 62 6c 65 28 4b 65 79  oIsWriteable(Key
277f0 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69  Info*);.#endif.i
27800 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  nt sqlite3Create
27810 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20  Func(sqlite3 *, 
27820 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
27830 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20  t, int, void *, 
27840 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
27850 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
27860 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
27870 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73  *),.  void (*)(s
27880 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
27890 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
278a0 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28  e **), void (*)(
278b0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
278c0 29 2c 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63  ),.  FuncDestruc
278d0 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72  tor *pDestructor
278e0 0a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  .);.int sqlite3A
278f0 70 69 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a  piExit(sqlite3 *
27900 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  db, int);.int sq
27910 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74  lite3OpenTempDat
27920 61 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a  abase(Parse *);.
27930 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
27940 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63  AccumInit(StrAcc
27950 75 6d 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63  um*, sqlite3*, c
27960 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  har*, int, int);
27970 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
27980 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41  AccumAppend(StrA
27990 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ccum*,const char
279a0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
279b0 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65  ite3StrAccumAppe
279c0 6e 64 41 6c 6c 28 53 74 72 41 63 63 75 6d 2a 2c  ndAll(StrAccum*,
279d0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
279e0 69 64 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64  id sqlite3Append
279f0 43 68 61 72 28 53 74 72 41 63 63 75 6d 2a 2c 69  Char(StrAccum*,i
27a00 6e 74 2c 63 68 61 72 29 3b 0a 63 68 61 72 20 2a  nt,char);.char *
27a10 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46  sqlite3StrAccumF
27a20 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29  inish(StrAccum*)
27a30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
27a40 72 41 63 63 75 6d 52 65 73 65 74 28 53 74 72 41  rAccumReset(StrA
27a50 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ccum*);.void sql
27a60 69 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e  ite3SelectDestIn
27a70 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69  it(SelectDest*,i
27a80 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  nt,int);.Expr *s
27a90 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75  qlite3CreateColu
27aa0 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a  mnExpr(sqlite3 *
27ab0 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74  , SrcList *, int
27ac0 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71  , int);..void sq
27ad0 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61  lite3BackupResta
27ae0 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  rt(sqlite3_backu
27af0 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  p *);.void sqlit
27b00 65 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73  e3BackupUpdate(s
27b10 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c  qlite3_backup *,
27b20 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20   Pgno, const u8 
27b30 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  *);..#ifdef SQLI
27b40 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
27b50 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73 71  OR_STAT4.void sq
27b60 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63  lite3AnalyzeFunc
27b70 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74  tions(void);.int
27b80 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f   sqlite3Stat4Pro
27b90 62 65 53 65 74 56 61 6c 75 65 28 50 61 72 73 65  beSetValue(Parse
27ba0 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65  *,Index*,Unpacke
27bb0 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c  dRecord**,Expr*,
27bc0 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e  u8,int,int*);.in
27bd0 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 56 61  t sqlite3Stat4Va
27be0 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73  lueFromExpr(Pars
27bf0 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73  e*, Expr*, u8, s
27c00 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
27c10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
27c20 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61  t4ProbeFree(Unpa
27c30 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e  ckedRecord*);.in
27c40 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f  t sqlite3Stat4Co
27c50 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63  lumn(sqlite3*, c
27c60 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
27c70 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61   int, sqlite3_va
27c80 6c 75 65 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  lue**);.#endif..
27c90 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
27ca0 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e  ace to the LEMON
27cb0 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65  -generated parse
27cc0 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74  r.*/.void *sqlit
27cd0 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f  e3ParserAlloc(vo
27ce0 69 64 2a 28 2a 29 28 75 36 34 29 29 3b 0a 76 6f  id*(*)(u64));.vo
27cf0 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
27d00 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64  Free(void*, void
27d10 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69  (*)(void*));.voi
27d20 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 28  d sqlite3Parser(
27d30 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  void*, int, Toke
27d40 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64  n, Parse*);.#ifd
27d50 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41  ef YYTRACKMAXSTA
27d60 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71  CKDEPTH.  int sq
27d70 6c 69 74 65 33 50 61 72 73 65 72 53 74 61 63 6b  lite3ParserStack
27d80 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e  Peak(void*);.#en
27d90 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  dif..void sqlite
27da0 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69  3AutoLoadExtensi
27db0 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ons(sqlite3*);.#
27dc0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
27dd0 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f  IT_LOAD_EXTENSIO
27de0 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  N.  void sqlite3
27df0 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28  CloseExtensions(
27e00 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65  sqlite3*);.#else
27e10 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27e20 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
27e30 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  (X).#endif..#ifn
27e40 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
27e50 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76  SHARED_CACHE.  v
27e60 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
27e70 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e  Lock(Parse *, in
27e80 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73  t, int, u8, cons
27e90 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65  t char *);.#else
27ea0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
27eb0 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c  e3TableLock(v,w,
27ec0 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23  x,y,z).#endif..#
27ed0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
27ee0 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55  T.  int sqlite3U
27ef0 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20  tf8To8(unsigned 
27f00 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
27f10 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
27f20 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
27f30 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
27f40 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20  3VtabClear(Y).# 
27f50 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
27f60 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c  tabSync(X,Y) SQL
27f70 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65  ITE_OK.#  define
27f80 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c   sqlite3VtabRoll
27f90 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e  back(X).#  defin
27fa0 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d  e sqlite3VtabCom
27fb0 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65  mit(X).#  define
27fc0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79   sqlite3VtabInSy
27fd0 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65 66 69  nc(db) 0.#  defi
27fe0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  ne sqlite3VtabLo
27ff0 63 6b 28 58 29 20 0a 23 20 20 64 65 66 69 6e 65  ck(X) .#  define
28000 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
28010 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
28020 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
28030 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66 69  kList(X).#  defi
28040 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 61  ne sqlite3VtabSa
28050 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29  vepoint(X, Y, Z)
28060 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65   SQLITE_OK.#  de
28070 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56  fine sqlite3GetV
28080 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54  Table(X,Y)  ((VT
28090 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20  able*)0).#else. 
280a0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
280b0 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20  abClear(sqlite3 
280c0 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  *db, Table*);.  
280d0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
280e0 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69  bDisconnect(sqli
280f0 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a  te3 *db, Table *
28100 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  p);.   int sqlit
28110 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74  e3VtabSync(sqlit
28120 65 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a  e3 *db, Vdbe*);.
28130 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
28140 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74  abRollback(sqlit
28150 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20  e3 *db);.   int 
28160 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
28170 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  t(sqlite3 *db);.
28180 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
28190 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a  tabLock(VTable *
281a0 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
281b0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61  e3VtabUnlock(VTa
281c0 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
281d0 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
281e0 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b  kList(sqlite3*);
281f0 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
28200 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c  tabSavepoint(sql
28210 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  ite3 *, int, int
28220 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
28230 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
28240 73 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65  sg(Vdbe*, sqlite
28250 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61  3_vtab*);.   VTa
28260 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56  ble *sqlite3GetV
28270 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20  Table(sqlite3*, 
28280 54 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69  Table*);.#  defi
28290 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e  ne sqlite3VtabIn
282a0 53 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e  Sync(db) ((db)->
282b0 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62  nVTrans>0 && (db
282c0 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23  )->aVTrans==0).#
282d0 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
282e0 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61  3VtabEponymousTa
282f0 62 6c 65 49 6e 69 74 28 50 61 72 73 65 2a 2c 4d  bleInit(Parse*,M
28300 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71  odule*);.void sq
28310 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f  lite3VtabEponymo
28320 75 73 54 61 62 6c 65 43 6c 65 61 72 28 73 71 6c  usTableClear(sql
28330 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a  ite3*,Module*);.
28340 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
28350 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72  MakeWritable(Par
28360 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69  se*,Table*);.voi
28370 64 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  d sqlite3VtabBeg
28380 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  inParse(Parse*, 
28390 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
283a0 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Token*, int);.vo
283b0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 46 69  id sqlite3VtabFi
283c0 6e 69 73 68 50 61 72 73 65 28 50 61 72 73 65 2a  nishParse(Parse*
283d0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
283e0 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e  sqlite3VtabArgIn
283f0 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  it(Parse*);.void
28400 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 45   sqlite3VtabArgE
28410 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f  xtend(Parse*, To
28420 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
28430 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65  e3VtabCallCreate
28440 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
28450 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68  const char *, ch
28460 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ar **);.int sqli
28470 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65  te3VtabCallConne
28480 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ct(Parse*, Table
28490 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
284a0 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73  tabCallDestroy(s
284b0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f  qlite3*, int, co
284c0 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74  nst char *);.int
284d0 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
284e0 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61  n(sqlite3 *, VTa
284f0 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20  ble *);.FuncDef 
28500 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72  *sqlite3VtabOver
28510 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  loadFunction(sql
28520 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c  ite3 *,FuncDef*,
28530 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a   int nArg, Expr*
28540 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  );.void sqlite3I
28550 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73  nvalidFunction(s
28560 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
28570 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
28580 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e  e**);.sqlite3_in
28590 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43  t64 sqlite3StmtC
285a0 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74  urrentTime(sqlit
285b0 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e  e3_context*);.in
285c0 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72  t sqlite3VdbePar
285d0 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62 65  ameterIndex(Vdbe
285e0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
285f0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
28600 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67  3TransferBinding
28610 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  s(sqlite3_stmt *
28620 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  , sqlite3_stmt *
28630 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
28640 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73 65  arserReset(Parse
28650 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
28660 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b  eprepare(Vdbe*);
28670 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
28680 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68  rListCheckLength
28690 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
286a0 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
286b0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
286c0 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43  e3BinaryCompareC
286d0 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20  ollSeq(Parse *, 
286e0 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b  Expr *, Expr *);
286f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70  .int sqlite3Temp
28700 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73  InMemory(const s
28710 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20  qlite3*);.const 
28720 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75  char *sqlite3Jou
28730 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74  rnalModename(int
28740 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
28750 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74  E_OMIT_WAL.  int
28760 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
28770 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  nt(sqlite3*, int
28780 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
28790 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
287a0 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28  3WalDefaultHook(
287b0 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
287c0 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
287d0 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
287e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a  SQLITE_OMIT_CTE.
287f0 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33 57    With *sqlite3W
28800 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57 69  ithAdd(Parse*,Wi
28810 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  th*,Token*,ExprL
28820 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20  ist*,Select*);. 
28830 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74   void sqlite3Wit
28840 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  hDelete(sqlite3*
28850 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20  ,With*);.  void 
28860 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28  sqlite3WithPush(
28870 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75  Parse*, With*, u
28880 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  8);.#else.#defin
28890 65 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73  e sqlite3WithPus
288a0 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65  h(x,y,z).#define
288b0 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
288c0 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a  te(x,y).#endif..
288d0 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20  /* Declarations 
288e0 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e  for functions in
288f0 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20   fkey.c. All of 
28900 74 68 65 73 65 20 61 72 65 20 72 65 70 6c 61 63  these are replac
28910 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d  ed by.** no-op m
28920 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f  acros if OMIT_FO
28930 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66  REIGN_KEY is def
28940 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ined. In this ca
28950 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a  se no foreign.**
28960 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69   key functionali
28970 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e  ty is available.
28980 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52   If OMIT_TRIGGER
28990 20 69 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a   is defined but.
289a0 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  ** OMIT_FOREIGN_
289b0 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79  KEY is not, only
289c0 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   some of the fun
289d0 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70  ctions are no-op
289e0 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63  ed. In.** this c
289f0 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  ase foreign keys
28a00 20 61 72 65 20 70 61 72 73 65 64 2c 20 62 75 74   are parsed, but
28a10 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69   no other functi
28a20 6f 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a 20 70  onality is .** p
28a30 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65  rovided (enforce
28a40 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74  ment of FK const
28a50 72 61 69 6e 74 73 20 72 65 71 75 69 72 65 73 20  raints requires 
28a60 74 68 65 20 74 72 69 67 67 65 72 73 20 73 75 62  the triggers sub
28a70 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66  -system)..*/.#if
28a80 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
28a90 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
28aa0 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  Y) && !defined(S
28ab0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
28ac0 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ER).  void sqlit
28ad0 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a  e3FkCheck(Parse*
28ae0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
28af0 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  nt, int*, int);.
28b00 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
28b10 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
28b20 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62  , SrcList *, Tab
28b30 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  le*);.  void sql
28b40 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61  ite3FkActions(Pa
28b50 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
28b60 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
28b70 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20  t*, int);.  int 
28b80 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65  sqlite3FkRequire
28b90 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  d(Parse*, Table*
28ba0 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  , int*, int);.  
28bb0 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64  u32 sqlite3FkOld
28bc0 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  mask(Parse*, Tab
28bd0 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71  le*);.  FKey *sq
28be0 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65  lite3FkReference
28bf0 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73  s(Table *);.#els
28c00 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
28c10 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62  te3FkActions(a,b
28c20 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66  ,c,d,e,f).  #def
28c30 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65  ine sqlite3FkChe
28c40 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a  ck(a,b,c,d,e,f).
28c50 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
28c60 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62  3FkDropTable(a,b
28c70 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,c).  #define sq
28c80 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61  lite3FkOldmask(a
28c90 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a 20 20  ,b)         0.  
28ca0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
28cb0 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c  kRequired(a,b,c,
28cc0 64 29 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23  d)    0.#endif.#
28cd0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
28ce0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20  IT_FOREIGN_KEY. 
28cf0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44   void sqlite3FkD
28d00 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c  elete(sqlite3 *,
28d10 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20   Table*);.  int 
28d20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
28d30 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c  ndex(Parse*,Tabl
28d40 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a  e*,FKey*,Index**
28d50 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20  ,int**);.#else. 
28d60 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
28d70 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20  FkDelete(a,b).  
28d80 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
28d90 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62  kLocateIndex(a,b
28da0 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a  ,c,d,e).#endif..
28db0 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65  ./*.** Available
28dc0 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73   fault injectors
28dd0 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d  .  Should be num
28de0 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20  bered beginning 
28df0 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69  with 0..*/.#defi
28e00 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49  ne SQLITE_FAULTI
28e10 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20  NJECTOR_MALLOC  
28e20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c     0.#define SQL
28e30 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f  ITE_FAULTINJECTO
28e40 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a  R_COUNT      1..
28e50 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
28e60 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20  ace to the code 
28e70 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20  in fault.c used 
28e80 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20  for identifying 
28e90 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c  "benign".** mall
28ea0 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69  oc failures. Thi
28eb0 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e  s is only presen
28ec0 74 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  t if SQLITE_OMIT
28ed0 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a  _BUILTIN_TEST.**
28ee0 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e   is not defined.
28ef0 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
28f00 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
28f10 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  TEST.  void sqli
28f20 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
28f30 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f  lloc(void);.  vo
28f40 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  id sqlite3EndBen
28f50 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ignMalloc(void);
28f60 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
28f70 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
28f80 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64  ignMalloc().  #d
28f90 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64  efine sqlite3End
28fa0 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23  BenignMalloc().#
28fb0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  endif../*.** All
28fc0 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75  owed return valu
28fd0 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46  es from sqlite3F
28fe0 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a  indInIndex().*/.
28ff0 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
29000 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20 31 20  _ROWID        1 
29010 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20    /* Search the 
29020 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62  rowid of the tab
29030 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  le */.#define IN
29040 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20  _INDEX_EPH      
29050 20 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63      2   /* Searc
29060 68 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62  h an ephemeral b
29070 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65  -tree */.#define
29080 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
29090 41 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78  ASC    3   /* Ex
290a0 69 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43  isting index ASC
290b0 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e  ENDING */.#defin
290c0 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
290d0 5f 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45  _DESC   4   /* E
290e0 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45  xisting index DE
290f0 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66  SCENDING */.#def
29100 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  ine IN_INDEX_NOO
29110 50 20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a  P         5   /*
29120 20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61   No table availa
29130 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69  ble. Use compari
29140 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c  sons */./*.** Al
29150 6c 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20  lowed flags for 
29160 74 68 65 20 33 72 64 20 70 61 72 61 6d 65 74 65  the 3rd paramete
29170 72 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64  r to sqlite3Find
29180 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64  InIndex()..*/.#d
29190 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e  efine IN_INDEX_N
291a0 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30  OOP_OK     0x000
291b0 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75  1  /* OK to retu
291c0 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  rn IN_INDEX_NOOP
291d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
291e0 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20  NDEX_MEMBERSHIP 
291f0 20 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f   0x0002  /* IN o
29200 70 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72  perator used for
29210 20 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73 74   membership test
29220 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
29230 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20  NDEX_LOOP       
29240 20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f   0x0004  /* IN o
29250 70 65 72 61 74 6f 72 20 75 73 65 64 20 61 73 20  perator used as 
29260 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71  a loop */.int sq
29270 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
29280 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a  (Parse *, Expr *
29290 2c 20 75 33 32 2c 20 69 6e 74 2a 29 3b 0a 0a 23  , u32, int*);..#
292a0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
292b0 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  BLE_ATOMIC_WRITE
292c0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
292d0 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65  urnalOpen(sqlite
292e0 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63  3_vfs *, const c
292f0 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66  har *, sqlite3_f
29300 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ile *, int, int)
29310 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  ;.  int sqlite3J
29320 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74  ournalSize(sqlit
29330 65 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74  e3_vfs *);.  int
29340 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43   sqlite3JournalC
29350 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69  reate(sqlite3_fi
29360 6c 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  le *);.  int sql
29370 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74  ite3JournalExist
29380 73 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  s(sqlite3_file *
29390 70 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  p);.#else.  #def
293a0 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  ine sqlite3Journ
293b0 61 6c 53 69 7a 65 28 70 56 66 73 29 20 28 28 70  alSize(pVfs) ((p
293c0 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a  Vfs)->szOsFile).
293d0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
293e0 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 70  3JournalExists(p
293f0 29 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  ) 1.#endif..void
29400 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e   sqlite3MemJourn
29410 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66  alOpen(sqlite3_f
29420 69 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ile *);.int sqli
29430 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a  te3MemJournalSiz
29440 65 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c  e(void);.int sql
29450 69 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c  ite3IsMemJournal
29460 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
29470 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  ;..void sqlite3E
29480 78 70 72 53 65 74 48 65 69 67 68 74 41 6e 64 46  xprSetHeightAndF
29490 6c 61 67 73 28 50 61 72 73 65 20 2a 70 50 61 72  lags(Parse *pPar
294a0 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23 69  se, Expr *p);.#i
294b0 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50  f SQLITE_MAX_EXP
294c0 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20  R_DEPTH>0.  int 
294d0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
294e0 72 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a  rHeight(Select *
294f0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
29500 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28  ExprCheckHeight(
29510 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65  Parse*, int);.#e
29520 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
29530 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48  lite3SelectExprH
29540 65 69 67 68 74 28 78 29 20 30 0a 20 20 23 64 65  eight(x) 0.  #de
29550 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72  fine sqlite3Expr
29560 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29  CheckHeight(x,y)
29570 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c  .#endif..u32 sql
29580 69 74 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e  ite3Get4byte(con
29590 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71  st u8*);.void sq
295a0 6c 69 74 65 33 50 75 74 34 62 79 74 65 28 75 38  lite3Put4byte(u8
295b0 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66  *, u32);..#ifdef
295c0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
295d0 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76  NLOCK_NOTIFY.  v
295e0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
295f0 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c  ctionBlocked(sql
29600 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20  ite3 *, sqlite3 
29610 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
29620 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f  e3ConnectionUnlo
29630 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62  cked(sqlite3 *db
29640 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
29650 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
29660 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  d(sqlite3 *db);.
29670 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
29680 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
29690 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20  nBlocked(x,y).  
296a0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
296b0 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65  onnectionUnlocke
296c0 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73  d(x).  #define s
296d0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
296e0 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66  Closed(x).#endif
296f0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
29700 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c  DEBUG.  void sql
29710 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28  ite3ParserTrace(
29720 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a  FILE*, char *);.
29730 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
29740 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
29750 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73 74  LE IOTRACE exist
29760 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61  s then the globa
29770 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71  l variable.** sq
29780 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73 20  lite3IoTrace is 
29790 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70  a pointer to a p
297a0 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69  rintf-like routi
297b0 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72  ne used to.** pr
297c0 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20  int I/O tracing 
297d0 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69  messages. .*/.#i
297e0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
297f0 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66  LE_IOTRACE.# def
29800 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20  ine IOTRACE(A)  
29810 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61  if( sqlite3IoTra
29820 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54  ce ){ sqlite3IoT
29830 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64  race A; }.  void
29840 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
29850 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53  aceSql(Vdbe*);.S
29860 51 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54 45  QLITE_API SQLITE
29870 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53 51  _EXTERN void (SQ
29880 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69  LITE_CDECL *sqli
29890 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73  te3IoTrace)(cons
298a0 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65  t char*,...);.#e
298b0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54  lse.# define IOT
298c0 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65  RACE(A).# define
298d0 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
298e0 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66  aceSql(X).#endif
298f0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f  ../*.** These ro
29900 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c  utines are avail
29910 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d  able for the mem
29920 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65  2.c debugging me
29930 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a  mory allocator.*
29940 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72  * only.  They ar
29950 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79  e used to verify
29960 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74 20   that different 
29970 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72  "types" of memor
29980 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  y.** allocations
29990 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72   are properly tr
299a0 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79 73  acked by the sys
299b0 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  tem..**.** sqlit
299c0 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
299d0 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74 79  e() sets the "ty
299e0 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61  pe" of an alloca
299f0 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a  tion to one of.*
29a00 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20  * the MEMTYPE_* 
29a10 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62  macros defined b
29a20 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20  elow.  The type 
29a30 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61 73  must be a bitmas
29a40 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67  k with.** a sing
29a50 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a  le bit set..**.*
29a60 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
29a70 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75 72  gHasType() retur
29a80 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f  ns true if any o
29a90 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74  f the bits in it
29aa0 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75  s second.** argu
29ab0 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74  ment match the t
29ac0 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70  ype set by the p
29ad0 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d  revious sqlite3M
29ae0 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
29af0 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  ..** sqlite3Memd
29b00 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69 73  ebugHasType() is
29b10 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73   intended for us
29b20 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74 28  e inside assert(
29b30 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  ) statements..**
29b40 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
29b50 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75  bugNoType() retu
29b60 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65  rns true if none
29b70 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20   of the bits in 
29b80 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72  its second.** ar
29b90 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65  gument match the
29ba0 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65   type set by the
29bb0 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65   previous sqlite
29bc0 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
29bd0 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70  ()..**.** Perhap
29be0 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72  s the most impor
29bf0 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68  tant point is th
29c00 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
29c10 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41  ween MEMTYPE_HEA
29c20 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45  P.** and MEMTYPE
29c30 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20  _LOOKASIDE.  If 
29c40 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73  an allocation is
29c50 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
29c60 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a  DE, that means.*
29c70 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65 20  * it might have 
29c80 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62  been allocated b
29c90 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63  y lookaside, exc
29ca0 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69  ept the allocati
29cb0 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61  on was.** too la
29cc0 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65  rge or lookaside
29cd0 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c   was already ful
29ce0 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74  l.  It is import
29cf0 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  ant to verify.**
29d00 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e   that allocation
29d10 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76  s that might hav
29d20 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65 64  e been satisfied
29d30 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72   by lookaside ar
29d40 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20  e not.** passed 
29d50 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b  back to non-look
29d60 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75  aside free() rou
29d70 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20  tines.  Asserts 
29d80 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65  such as the.** e
29d90 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65  xample above are
29da0 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e   placed on the n
29db0 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
29dc0 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20  e() routines to 
29dd0 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63  verify.** this c
29de0 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a  onstraint. .**.*
29df0 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73  * All of this is
29e00 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f   no-op for a pro
29e10 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20  duction build.  
29e20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e  It only comes in
29e30 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20  to.** play when 
29e40 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  the SQLITE_MEMDE
29e50 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  BUG compile-time
29e60 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e   option is used.
29e70 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
29e80 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69  E_MEMDEBUG.  voi
29e90 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  d sqlite3Memdebu
29ea0 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75  gSetType(void*,u
29eb0 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  8);.  int sqlite
29ec0 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
29ed0 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e  (void*,u8);.  in
29ee0 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  t sqlite3Memdebu
29ef0 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  gNoType(void*,u8
29f00 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
29f10 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
29f20 67 53 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f  gSetType(X,Y)  /
29f30 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66  * no-op */.# def
29f40 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
29f50 62 75 67 48 61 73 54 79 70 65 28 58 2c 59 29 20  bugHasType(X,Y) 
29f60 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   1.# define sqli
29f70 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
29f80 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69  e(X,Y)   1.#endi
29f90 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  f.#define MEMTYP
29fa0 45 5f 48 45 41 50 20 20 20 20 20 20 20 30 78 30  E_HEAP       0x0
29fb0 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65  1  /* General he
29fc0 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  ap allocations *
29fd0 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
29fe0 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30  E_LOOKASIDE  0x0
29ff0 32 20 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20  2  /* Heap that 
2a000 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
2a010 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65  lookaside */.#de
2a020 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52  fine MEMTYPE_SCR
2a030 41 54 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a  ATCH    0x04  /*
2a040 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74   Scratch allocat
2a050 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
2a060 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20  MEMTYPE_PCACHE  
2a070 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65     0x08  /* Page
2a080 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f   cache allocatio
2a090 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72  ns */../*.** Thr
2a0a0 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65  eading interface
2a0b0 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
2a0c0 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
2a0d0 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  S>0.int sqlite3T
2a0e0 68 72 65 61 64 43 72 65 61 74 65 28 53 51 4c 69  hreadCreate(SQLi
2a0f0 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a  teThread**,void*
2a100 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a  (*)(void*),void*
2a110 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68  );.int sqlite3Th
2a120 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54  readJoin(SQLiteT
2a130 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b  hread*, void**);
2a140 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66  .#endif..#if def
2a150 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
2a160 4c 45 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20  LE_DBSTAT_VTAB) 
2a170 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
2a180 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69  E_TEST).int sqli
2a190 74 65 33 44 62 73 74 61 74 52 65 67 69 73 74 65  te3DbstatRegiste
2a1a0 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e  r(sqlite3*);.#en
2a1b0 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 5f  dif..#endif /* _
2a1c0 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a  SQLITEINT_H_ */.