/ Hex Artifact Content
Login

Artifact 681f38fc0decba6edcf3bad230e76fa5bf55a7bf:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 49 6e  INT_H_../*.** In
01e0: 63 6c 75 64 65 20 74 68 65 20 68 65 61 64 65 72  clude the header
01f0: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 63 75   file used to cu
0200: 73 74 6f 6d 69 7a 65 20 74 68 65 20 63 6f 6d 70  stomize the comp
0210: 69 6c 65 72 20 6f 70 74 69 6f 6e 73 20 66 6f 72  iler options for
0220: 20 4d 53 56 43 2e 0a 2a 2a 20 54 68 69 73 20 73   MSVC..** This s
0230: 68 6f 75 6c 64 20 62 65 20 64 6f 6e 65 20 66 69  hould be done fi
0240: 72 73 74 20 73 6f 20 74 68 61 74 20 69 74 20 63  rst so that it c
0250: 61 6e 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20  an successfully 
0260: 70 72 65 76 65 6e 74 20 73 70 75 72 69 6f 75 73  prevent spurious
0270: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  .** compiler war
0280: 6e 69 6e 67 73 20 64 75 65 20 74 6f 20 73 75 62  nings due to sub
0290: 73 65 71 75 65 6e 74 20 63 6f 6e 74 65 6e 74 20  sequent content 
02a0: 69 6e 20 74 68 69 73 20 66 69 6c 65 20 61 6e 64  in this file and
02b0: 20 6f 74 68 65 72 20 66 69 6c 65 73 0a 2a 2a 20   other files.** 
02c0: 74 68 61 74 20 61 72 65 20 69 6e 63 6c 75 64 65  that are include
02d0: 64 20 62 79 20 74 68 69 73 20 66 69 6c 65 2e 0a  d by this file..
02e0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 6d 73 76  */.#include "msv
02f0: 63 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 53 70 65 63  c.h"../*.** Spec
0300: 69 61 6c 20 73 65 74 75 70 20 66 6f 72 20 56 78  ial setup for Vx
0310: 57 6f 72 6b 73 0a 2a 2f 0a 23 69 6e 63 6c 75 64  Works.*/.#includ
0320: 65 20 22 76 78 77 6f 72 6b 73 2e 68 22 0a 0a 2f  e "vxworks.h"../
0330: 2a 0a 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69  *.** These #defi
0340: 6e 65 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c  nes should enabl
0350: 65 20 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70  e >2GB file supp
0360: 6f 72 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20  ort on POSIX if 
0370: 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e  the.** underlyin
0380: 67 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74  g operating syst
0390: 65 6d 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20  em supports it. 
03a0: 20 49 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73   If the OS lacks
03b0: 0a 2a 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73  .** large file s
03c0: 75 70 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68  upport, or if th
03d0: 65 20 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c  e OS is windows,
03e0: 20 74 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65   these should be
03f0: 20 6e 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54   no-ops..**.** T
0400: 69 63 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68  icket #2739:  Th
0410: 65 20 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55  e _LARGEFILE_SOU
0420: 52 43 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61  RCE macro must a
0430: 70 70 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79  ppear before any
0440: 0a 2a 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c  .** system #incl
0450: 75 64 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68  udes.  Hence, th
0460: 69 73 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65  is block of code
0470: 20 6d 75 73 74 20 62 65 20 74 68 65 20 76 65 72   must be the ver
0480: 79 20 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20  y first.** code 
0490: 69 6e 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69  in all source fi
04a0: 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65  les..**.** Large
04b0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61   file support ca
04c0: 6e 20 62 65 20 64 69 73 61 62 6c 65 64 20 75 73  n be disabled us
04d0: 69 6e 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45  ing the -DSQLITE
04e0: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69  _DISABLE_LFS swi
04f0: 74 63 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f  tch.** on the co
0500: 6d 70 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c  mpiler command l
0510: 69 6e 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65  ine.  This is ne
0520: 63 65 73 73 61 72 79 20 69 66 20 79 6f 75 20 61  cessary if you a
0530: 72 65 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20  re compiling.** 
0540: 6f 6e 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68  on a recent mach
0550: 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61 74  ine (ex: Red Hat
0560: 20 37 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61   7.2) but you wa
0570: 6e 74 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20  nt your code to 
0580: 77 6f 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c  work.** on an ol
0590: 64 65 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a  der machine (ex:
05a0: 20 52 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20   Red Hat 6.0).  
05b0: 49 66 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f  If you compile o
05c0: 6e 20 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a  n Red Hat 7.2.**
05d0: 20 77 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70   without this op
05e0: 74 69 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61  tion, LFS is ena
05f0: 62 6c 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f  ble.  But LFS do
0600: 65 73 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20  es not exist in 
0610: 74 68 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e  the kernel.** in
0620: 20 52 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f   Red Hat 6.0, so
0630: 20 74 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20   the code won't 
0640: 77 6f 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f  work.  Hence, fo
0650: 72 20 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79  r maximum binary
0660: 0a 2a 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20  .** portability 
0670: 79 6f 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20  you should omit 
0680: 4c 46 53 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70  LFS..**.** The p
0690: 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61 70  revious paragrap
06a0: 68 20 77 61 73 20 77 72 69 74 74 65 6e 20 69 6e  h was written in
06b0: 20 32 30 30 35 2e 20 20 28 54 68 69 73 20 70 61   2005.  (This pa
06c0: 72 61 67 72 61 70 68 20 69 73 20 77 72 69 74 74  ragraph is writt
06d0: 65 6e 0a 2a 2a 20 6f 6e 20 32 30 30 38 2d 31 31  en.** on 2008-11
06e0: 2d 32 38 2e 29 20 54 68 65 73 65 20 64 61 79 73  -28.) These days
06f0: 2c 20 61 6c 6c 20 4c 69 6e 75 78 20 6b 65 72 6e  , all Linux kern
0700: 65 6c 73 20 73 75 70 70 6f 72 74 20 6c 61 72 67  els support larg
0710: 65 20 66 69 6c 65 73 2c 20 73 6f 0a 2a 2a 20 79  e files, so.** y
0720: 6f 75 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62  ou should probab
0730: 6c 79 20 6c 65 61 76 65 20 4c 46 53 20 65 6e 61  ly leave LFS ena
0740: 62 6c 65 64 2e 20 20 42 75 74 20 73 6f 6d 65 20  bled.  But some 
0750: 65 6d 62 65 64 64 65 64 20 70 6c 61 74 66 6f 72  embedded platfor
0760: 6d 73 20 6d 69 67 68 74 0a 2a 2a 20 6c 61 63 6b  ms might.** lack
0770: 20 4c 46 53 20 69 6e 20 77 68 69 63 68 20 63 61   LFS in which ca
0780: 73 65 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49  se the SQLITE_DI
0790: 53 41 42 4c 45 5f 4c 46 53 20 6d 61 63 72 6f 20  SABLE_LFS macro 
07a0: 6d 69 67 68 74 20 73 74 69 6c 6c 20 62 65 20 75  might still be u
07b0: 73 65 66 75 6c 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d  seful..**.** Sim
07c0: 69 6c 61 72 20 69 73 20 74 72 75 65 20 66 6f 72  ilar is true for
07d0: 20 4d 61 63 20 4f 53 20 58 2e 20 20 4c 46 53 20   Mac OS X.  LFS 
07e0: 69 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65  is only supporte
07f0: 64 20 6f 6e 20 4d 61 63 20 4f 53 20 58 20 39 20  d on Mac OS X 9 
0800: 61 6e 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69  and later..*/.#i
0810: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53  fndef SQLITE_DIS
0820: 41 42 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69 6e  ABLE_LFS.# defin
0830: 65 20 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20 20  e _LARGE_FILE   
0840: 20 20 20 20 31 0a 23 20 69 66 6e 64 65 66 20 5f      1.# ifndef _
0850: 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53  FILE_OFFSET_BITS
0860: 0a 23 20 20 20 64 65 66 69 6e 65 20 5f 46 49 4c  .#   define _FIL
0870: 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34  E_OFFSET_BITS 64
0880: 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e  .# endif.# defin
0890: 65 20 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55  e _LARGEFILE_SOU
08a0: 52 43 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  RCE 1.#endif../*
08b0: 20 57 68 61 74 20 76 65 72 73 69 6f 6e 20 6f 66   What version of
08c0: 20 47 43 43 20 69 73 20 62 65 69 6e 67 20 75 73   GCC is being us
08d0: 65 64 2e 20 20 30 20 6d 65 61 6e 73 20 47 43 43  ed.  0 means GCC
08e0: 20 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 75 73   is not being us
08f0: 65 64 20 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 47  ed */.#ifdef __G
0900: 4e 55 43 5f 5f 0a 23 20 64 65 66 69 6e 65 20 47  NUC__.# define G
0910: 43 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e  CC_VERSION (__GN
0920: 55 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47  UC__*1000000+__G
0930: 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30  NUC_MINOR__*1000
0940: 2b 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56  +__GNUC_PATCHLEV
0950: 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65  EL__).#else.# de
0960: 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e  fine GCC_VERSION
0970: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65   0.#endif../* Ne
0980: 65 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  eded for various
0990: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20   definitions... 
09a0: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  */.#if defined(_
09b0: 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66  _GNUC__) && !def
09c0: 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45  ined(_GNU_SOURCE
09d0: 29 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f  ).# define _GNU_
09e0: 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23  SOURCE.#endif..#
09f0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
0a00: 6e 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69  nBSD__) && !defi
0a10: 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29  ned(_BSD_SOURCE)
0a20: 0a 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53  .# define _BSD_S
0a30: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OURCE.#endif../*
0a40: 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63  .** For MinGW, c
0a50: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
0a60: 65 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68  e can include th
0a70: 65 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f  e header file co
0a80: 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20  ntaining its.** 
0a90: 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  version informat
0aa0: 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72  ion, among other
0ab0: 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c   things.  Normal
0ac0: 6c 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61  ly, this interna
0ad0: 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65  l MinGW.** heade
0ae0: 72 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e  r file would [on
0af0: 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20  ly] be included 
0b00: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79  automatically by
0b10: 20 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61   other MinGW hea
0b20: 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f  der.** files; ho
0b30: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61  wever, the conta
0b40: 69 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66  ined version inf
0b50: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20  ormation is now 
0b60: 72 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73  required by this
0b70: 0a 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20  .** header file 
0b80: 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62  to work around b
0b90: 69 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c  inary compatibil
0ba0: 69 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20  ity issues (see 
0bb0: 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68  below) and.** th
0bc0: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b  is is the only k
0bd0: 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69  nown way to reli
0be0: 61 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20  ably obtain it. 
0bf0: 20 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66   This entire #if
0c00: 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20   block.** would 
0c10: 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e  be completely un
0c20: 6e 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65  necessary if the
0c30: 72 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72  re was any other
0c40: 20 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e   way of detectin
0c50: 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74  g.** MinGW via t
0c60: 68 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f  heir preprocesso
0c70: 72 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20  r (e.g. if they 
0c80: 63 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72  customized their
0c90: 20 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a   GCC to define.*
0ca0: 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65  * some MinGW-spe
0cb0: 63 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20  cific macros).  
0cc0: 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66  When compiling f
0cd0: 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72  or MinGW, either
0ce0: 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49   the.** _HAVE_MI
0cf0: 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f  NGW_H or _HAVE__
0d00: 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68  MINGW_H (note th
0d10: 65 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f  e extra undersco
0d20: 72 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62  re) macro must b
0d30: 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74  e.** defined; ot
0d40: 68 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69  herwise, detecti
0d50: 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73  on of conditions
0d60: 20 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e   specific to Min
0d70: 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69  GW will be.** di
0d80: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  sabled..*/.#if d
0d90: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e  efined(_HAVE_MIN
0da0: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
0db0: 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20  "mingw.h".#elif 
0dc0: 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d  defined(_HAVE__M
0dd0: 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64  INGW_H).# includ
0de0: 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e  e "_mingw.h".#en
0df0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
0e00: 69 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78  inGW version 4.x
0e10: 20 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63   (and higher), c
0e20: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
0e30: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
0e40: 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69  ME_T.** define i
0e50: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61  s required to ma
0e60: 69 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f  intain binary co
0e70: 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
0e80: 20 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d   the MSVC runtim
0e90: 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20  e.** library in 
0ea0: 75 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69  use (e.g. for Wi
0eb0: 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69  ndows XP)..*/.#i
0ec0: 66 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f  f !defined(_USE_
0ed0: 33 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26  32BIT_TIME_T) &&
0ee0: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36   !defined(_USE_6
0ef0: 34 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  4BIT_TIME_T) && 
0f00: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57  \.    defined(_W
0f10: 49 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65  IN32) && !define
0f20: 64 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20  d(_WIN64) && \. 
0f30: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e     defined(__MIN
0f40: 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e  GW_MAJOR_VERSION
0f50: 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a  ) && __MINGW_MAJ
0f60: 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20  OR_VERSION >= 4 
0f70: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
0f80: 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64  (__MSVCRT__).# d
0f90: 65 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54  efine _USE_32BIT
0fa0: 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a  _TIME_T.#endif..
0fb0: 2f 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51  /* The public SQ
0fc0: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20  Lite interface. 
0fd0: 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45   The _FILE_OFFSE
0fe0: 54 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73  T_BITS macro mus
0ff0: 74 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73  t appear.** firs
1000: 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c  t in QNX.  Also,
1010: 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f   the _USE_32BIT_
1020: 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73  TIME_T macro mus
1030: 74 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66  t appear first f
1040: 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a  or.** MinGW..*/.
1050: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1060: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  3.h"../*.** Incl
1070: 75 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ude the configur
1080: 61 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74  ation header out
1090: 70 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72  put by 'configur
10a0: 65 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e  e' if we're usin
10b0: 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e  g the.** autocon
10c0: 66 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f  f-based build.*/
10d0: 0a 23 69 66 64 65 66 20 5f 48 41 56 45 5f 53 51  .#ifdef _HAVE_SQ
10e0: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48 0a 23 69  LITE_CONFIG_H.#i
10f0: 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e 68  nclude "config.h
1100: 22 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75  ".#endif..#inclu
1110: 64 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e  de "sqliteLimit.
1120: 68 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e  h"../* Disable n
1130: 75 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73  uisance warnings
1140: 20 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70   on Borland comp
1150: 69 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66  ilers */.#if def
1160: 69 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f  ined(__BORLANDC_
1170: 5f 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20  _).#pragma warn 
1180: 2d 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61  -rch /* unreacha
1190: 62 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61  ble code */.#pra
11a0: 67 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a  gma warn -ccc /*
11b0: 20 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c   Condition is al
11c0: 77 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c  ways true or fal
11d0: 73 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  se */.#pragma wa
11e0: 72 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67  rn -aus /* Assig
11f0: 6e 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76  ned value is nev
1200: 65 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67  er used */.#prag
1210: 6d 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20  ma warn -csu /* 
1220: 43 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64  Comparing signed
1230: 20 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f   and unsigned */
1240: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73  .#pragma warn -s
1250: 70 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73  pa /* Suspicious
1260: 20 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65   pointer arithme
1270: 74 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  tic */.#endif../
1280: 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 73 74 61  *.** Include sta
1290: 6e 64 61 72 64 20 68 65 61 64 65 72 20 66 69 6c  ndard header fil
12a0: 65 73 20 61 73 20 6e 65 63 65 73 73 61 72 79 0a  es as necessary.
12b0: 2a 2f 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53  */.#ifdef HAVE_S
12c0: 54 44 49 4e 54 5f 48 0a 23 69 6e 63 6c 75 64 65  TDINT_H.#include
12d0: 20 3c 73 74 64 69 6e 74 2e 68 3e 0a 23 65 6e 64   <stdint.h>.#end
12e0: 69 66 0a 23 69 66 64 65 66 20 48 41 56 45 5f 49  if.#ifdef HAVE_I
12f0: 4e 54 54 59 50 45 53 5f 48 0a 23 69 6e 63 6c 75  NTTYPES_H.#inclu
1300: 64 65 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e 0a  de <inttypes.h>.
1310: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1320: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
1330: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 63  os are used to c
1340: 61 73 74 20 70 6f 69 6e 74 65 72 73 20 74 6f 20  ast pointers to 
1350: 69 6e 74 65 67 65 72 73 20 61 6e 64 0a 2a 2a 20  integers and.** 
1360: 69 6e 74 65 67 65 72 73 20 74 6f 20 70 6f 69 6e  integers to poin
1370: 74 65 72 73 2e 20 20 54 68 65 20 77 61 79 20 79  ters.  The way y
1380: 6f 75 20 64 6f 20 74 68 69 73 20 76 61 72 69 65  ou do this varie
1390: 73 20 66 72 6f 6d 20 6f 6e 65 20 63 6f 6d 70 69  s from one compi
13a0: 6c 65 72 0a 2a 2a 20 74 6f 20 74 68 65 20 6e 65  ler.** to the ne
13b0: 78 74 2c 20 73 6f 20 77 65 20 68 61 76 65 20 64  xt, so we have d
13c0: 65 76 65 6c 6f 70 65 64 20 74 68 65 20 66 6f 6c  eveloped the fol
13d0: 6c 6f 77 69 6e 67 20 73 65 74 20 6f 66 20 23 69  lowing set of #i
13e0: 66 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20  f statements.** 
13f0: 74 6f 20 67 65 6e 65 72 61 74 65 20 61 70 70 72  to generate appr
1400: 6f 70 72 69 61 74 65 20 6d 61 63 72 6f 73 20 66  opriate macros f
1410: 6f 72 20 61 20 77 69 64 65 20 72 61 6e 67 65 20  or a wide range 
1420: 6f 66 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2a  of compilers..**
1430: 0a 2a 2a 20 54 68 65 20 63 6f 72 72 65 63 74 20  .** The correct 
1440: 22 41 4e 53 49 22 20 77 61 79 20 74 6f 20 64 6f  "ANSI" way to do
1450: 20 74 68 69 73 20 69 73 20 74 6f 20 75 73 65 20   this is to use 
1460: 74 68 65 20 69 6e 74 70 74 72 5f 74 20 74 79 70  the intptr_t typ
1470: 65 2e 20 0a 2a 2a 20 55 6e 66 6f 72 74 75 6e 61  e. .** Unfortuna
1480: 74 65 6c 79 2c 20 74 68 61 74 20 74 79 70 65 64  tely, that typed
1490: 65 66 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61  ef is not availa
14a0: 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f 6d 70 69  ble on all compi
14b0: 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69 66 20 69  lers, or.** if i
14c0: 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20  t is available, 
14d0: 69 74 20 72 65 71 75 69 72 65 73 20 61 6e 20 23  it requires an #
14e0: 69 6e 63 6c 75 64 65 20 6f 66 20 73 70 65 63 69  include of speci
14f0: 66 69 63 20 68 65 61 64 65 72 73 0a 2a 2a 20 74  fic headers.** t
1500: 68 61 74 20 76 61 72 79 20 66 72 6f 6d 20 6f 6e  hat vary from on
1510: 65 20 6d 61 63 68 69 6e 65 20 74 6f 20 74 68 65  e machine to the
1520: 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 54 69 63   next..**.** Tic
1530: 6b 65 74 20 23 33 38 36 30 3a 20 20 54 68 65 20  ket #3860:  The 
1540: 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20 63 6f 6d  llvm-gcc-4.2 com
1550: 70 69 6c 65 72 20 66 72 6f 6d 20 41 70 70 6c 65  piler from Apple
1560: 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a 20 74 68   chokes on.** th
1570: 65 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61  e ((void*)&((cha
1580: 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e 73 74 72  r*)0)[X]) constr
1590: 75 63 74 2e 20 20 42 75 74 20 4d 53 56 43 20 63  uct.  But MSVC c
15a0: 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f 69 64 2a  hokes on ((void*
15b0: 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20 77 65 20  )(X))..** So we 
15c0: 68 61 76 65 20 74 6f 20 64 65 66 69 6e 65 20 74  have to define t
15d0: 68 65 20 6d 61 63 72 6f 73 20 69 6e 20 64 69 66  he macros in dif
15e0: 66 65 72 65 6e 74 20 77 61 79 73 20 64 65 70 65  ferent ways depe
15f0: 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a 2a 2a 20  nding on the.** 
1600: 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a 23 69 66  compiler..*/.#if
1610: 20 64 65 66 69 6e 65 64 28 5f 5f 50 54 52 44 49   defined(__PTRDI
1620: 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20 54  FF_TYPE__)  /* T
1630: 68 69 73 20 63 61 73 65 20 73 68 6f 75 6c 64 20  his case should 
1640: 77 6f 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f 0a  work for GCC */.
1650: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1660: 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28  INT_TO_PTR(X)  (
1670: 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49 46  (void*)(__PTRDIF
1680: 46 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 20  F_TYPE__)(X)).# 
1690: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
16a0: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
16b0: 6e 74 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59  nt)(__PTRDIFF_TY
16c0: 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66 20  PE__)(X)).#elif 
16d0: 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f  !defined(__GNUC_
16e0: 5f 29 20 20 20 20 20 20 20 2f 2a 20 57 6f 72 6b  _)       /* Work
16f0: 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73 20  s for compilers 
1700: 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d 20  other than LLVM 
1710: 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  */.# define SQLI
1720: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29  TE_INT_TO_PTR(X)
1730: 20 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61    ((void*)&((cha
1740: 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64 65 66 69  r*)0)[X]).# defi
1750: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
1760: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
1770: 28 28 63 68 61 72 2a 29 58 29 2d 28 63 68 61 72  ((char*)X)-(char
1780: 2a 29 30 29 29 0a 23 65 6c 69 66 20 64 65 66 69  *)0)).#elif defi
1790: 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f  ned(HAVE_STDINT_
17a0: 48 29 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73  H)   /* Use this
17b0: 20 63 61 73 65 20 69 66 20 77 65 20 68 61 76 65   case if we have
17c0: 20 41 4e 53 49 20 68 65 61 64 65 72 73 20 2a 2f   ANSI headers */
17d0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
17e0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
17f0: 28 28 76 6f 69 64 2a 29 28 69 6e 74 70 74 72 5f  ((void*)(intptr_
1800: 74 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20  t)(X)).# define 
1810: 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e  SQLITE_PTR_TO_IN
1820: 54 28 58 29 20 20 28 28 69 6e 74 29 28 69 6e 74  T(X)  ((int)(int
1830: 70 74 72 5f 74 29 28 58 29 29 0a 23 65 6c 73 65  ptr_t)(X)).#else
1840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1850: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 47 65 6e            /* Gen
1860: 65 72 61 74 65 73 20 61 20 77 61 72 6e 69 6e 67  erates a warning
1870: 20 2d 20 62 75 74 20 69 74 20 61 6c 77 61 79 73   - but it always
1880: 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64 65 66 69   works */.# defi
1890: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f  ne SQLITE_INT_TO
18a0: 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a  _PTR(X)  ((void*
18b0: 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53  )(X)).# define S
18c0: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
18d0: 28 58 29 20 20 28 28 69 6e 74 29 28 58 29 29 0a  (X)  ((int)(X)).
18e0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20  #endif../*.** A 
18f0: 6d 61 63 72 6f 20 74 6f 20 68 69 6e 74 20 74 6f  macro to hint to
1900: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 68   the compiler th
1910: 61 74 20 61 20 66 75 6e 63 74 69 6f 6e 20 73 68  at a function sh
1920: 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 69  ould not be.** i
1930: 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 20 64  nlined..*/.#if d
1940: 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29  efined(__GNUC__)
1950: 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  .#  define SQLIT
1960: 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 61 74  E_NOINLINE  __at
1970: 74 72 69 62 75 74 65 5f 5f 28 28 6e 6f 69 6e 6c  tribute__((noinl
1980: 69 6e 65 29 29 0a 23 65 6c 69 66 20 64 65 66 69  ine)).#elif defi
1990: 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26  ned(_MSC_VER) &&
19a0: 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33 31 30 0a   _MSC_VER>=1310.
19b0: 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  #  define SQLITE
19c0: 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 64 65 63  _NOINLINE  __dec
19d0: 6c 73 70 65 63 28 6e 6f 69 6e 6c 69 6e 65 29 0a  lspec(noinline).
19e0: 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
19f0: 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 0a  SQLITE_NOINLINE.
1a00: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
1a10: 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65  ke sure that the
1a20: 20 63 6f 6d 70 69 6c 65 72 20 69 6e 74 72 69 6e   compiler intrin
1a30: 73 69 63 73 20 77 65 20 64 65 73 69 72 65 20 61  sics we desire a
1a40: 72 65 20 65 6e 61 62 6c 65 64 20 77 68 65 6e 0a  re enabled when.
1a50: 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74  ** compiling wit
1a60: 68 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65  h an appropriate
1a70: 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53 56 43   version of MSVC
1a80: 20 75 6e 6c 65 73 73 20 70 72 65 76 65 6e 74 65   unless prevente
1a90: 64 20 62 79 0a 2a 2a 20 74 68 65 20 53 51 4c 49  d by.** the SQLI
1aa0: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
1ab0: 4e 53 49 43 20 64 65 66 69 6e 65 2e 0a 2a 2f 0a  NSIC define..*/.
1ac0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1ad0: 49 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52  ITE_DISABLE_INTR
1ae0: 49 4e 53 49 43 29 0a 23 20 20 69 66 20 64 65 66  INSIC).#  if def
1af0: 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20 26  ined(_MSC_VER) &
1b00: 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33 30 30  & _MSC_VER>=1300
1b10: 0a 23 20 20 20 20 69 66 20 21 64 65 66 69 6e 65  .#    if !define
1b20: 64 28 5f 57 49 4e 33 32 5f 57 43 45 29 0a 23 20  d(_WIN32_WCE).# 
1b30: 20 20 20 20 20 69 6e 63 6c 75 64 65 20 3c 69 6e       include <in
1b40: 74 72 69 6e 2e 68 3e 0a 23 20 20 20 20 20 20 70  trin.h>.#      p
1b50: 72 61 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28  ragma intrinsic(
1b60: 5f 62 79 74 65 73 77 61 70 5f 75 73 68 6f 72 74  _byteswap_ushort
1b70: 29 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61 20  ).#      pragma 
1b80: 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73  intrinsic(_bytes
1b90: 77 61 70 5f 75 6c 6f 6e 67 29 0a 23 20 20 20 20  wap_ulong).#    
1ba0: 65 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c  else.#      incl
1bb0: 75 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68  ude <cmnintrin.h
1bc0: 3e 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20  >.#    endif.#  
1bd0: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
1be0: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54  .** The SQLITE_T
1bf0: 48 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20  HREADSAFE macro 
1c00: 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20  must be defined 
1c10: 61 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a  as 0, 1, or 2..*
1c20: 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65  * 0 means mutexe
1c30: 73 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c  s are permanentl
1c40: 79 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68  y disable and th
1c50: 65 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76  e library is nev
1c60: 65 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65  er.** threadsafe
1c70: 2e 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c  .  1 means the l
1c80: 69 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c  ibrary is serial
1c90: 69 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68  ized which is th
1ca0: 65 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76  e highest.** lev
1cb0: 65 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65  el of threadsafe
1cc0: 74 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65  ty.  2 means the
1cd0: 20 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74   library is mult
1ce0: 69 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74  ithreaded - mult
1cf0: 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20  iple.** threads 
1d00: 63 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61  can use SQLite a
1d10: 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f  s long as no two
1d20: 20 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20   threads try to 
1d30: 75 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20  use the same.** 
1d40: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
1d50: 69 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20  ion at the same 
1d60: 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65  time..**.** Olde
1d70: 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  r versions of SQ
1d80: 4c 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74  Lite used an opt
1d90: 69 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45  ional THREADSAFE
1da0: 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75   macro..** We su
1db0: 70 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c  pport that for l
1dc0: 65 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21 64  egacy..*/.#if !d
1dd0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 48  efined(SQLITE_TH
1de0: 52 45 41 44 53 41 46 45 29 0a 23 20 69 66 20 64  READSAFE).# if d
1df0: 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41 46  efined(THREADSAF
1e00: 45 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  E).#   define SQ
1e10: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20  LITE_THREADSAFE 
1e20: 54 48 52 45 41 44 53 41 46 45 0a 23 20 65 6c 73  THREADSAFE.# els
1e30: 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  e.#   define SQL
1e40: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 31  ITE_THREADSAFE 1
1e50: 20 2f 2a 20 49 4d 50 3a 20 52 2d 30 37 32 37 32   /* IMP: R-07272
1e60: 2d 32 32 33 30 39 20 2a 2f 0a 23 20 65 6e 64 69  -22309 */.# endi
1e70: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  f.#endif../*.** 
1e80: 50 6f 77 65 72 73 61 66 65 20 6f 76 65 72 77 72  Powersafe overwr
1e90: 69 74 65 20 69 73 20 6f 6e 20 62 79 20 64 65 66  ite is on by def
1ea0: 61 75 6c 74 2e 20 20 42 75 74 20 63 61 6e 20 62  ault.  But can b
1eb0: 65 20 74 75 72 6e 65 64 20 6f 66 66 20 75 73 69  e turned off usi
1ec0: 6e 67 0a 2a 2a 20 74 68 65 20 2d 44 53 51 4c 49  ng.** the -DSQLI
1ed0: 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45  TE_POWERSAFE_OVE
1ee0: 52 57 52 49 54 45 3d 30 20 63 6f 6d 6d 61 6e 64  RWRITE=0 command
1ef0: 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a 2f  -line option..*/
1f00: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1f10: 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52  POWERSAFE_OVERWR
1f20: 49 54 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ITE.# define SQL
1f30: 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56  ITE_POWERSAFE_OV
1f40: 45 52 57 52 49 54 45 20 31 0a 23 65 6e 64 69 66  ERWRITE 1.#endif
1f50: 0a 0a 2f 2a 0a 2a 2a 20 45 56 49 44 45 4e 43 45  ../*.** EVIDENCE
1f60: 2d 4f 46 3a 20 52 2d 32 35 37 31 35 2d 33 37 30  -OF: R-25715-370
1f70: 37 32 20 4d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  72 Memory alloca
1f80: 74 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20  tion statistics 
1f90: 61 72 65 20 65 6e 61 62 6c 65 64 20 62 79 0a 2a  are enabled by.*
1fa0: 2a 20 64 65 66 61 75 6c 74 20 75 6e 6c 65 73 73  * default unless
1fb0: 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69   SQLite is compi
1fc0: 6c 65 64 20 77 69 74 68 20 53 51 4c 49 54 45 5f  led with SQLITE_
1fd0: 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55  DEFAULT_MEMSTATU
1fe0: 53 3d 30 20 69 6e 0a 2a 2a 20 77 68 69 63 68 20  S=0 in.** which 
1ff0: 63 61 73 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  case memory allo
2000: 63 61 74 69 6f 6e 20 73 74 61 74 69 73 74 69 63  cation statistic
2010: 73 20 61 72 65 20 64 69 73 61 62 6c 65 64 20 62  s are disabled b
2020: 79 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69  y default..*/.#i
2030: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2040: 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41  E_DEFAULT_MEMSTA
2050: 54 55 53 29 0a 23 20 64 65 66 69 6e 65 20 53 51  TUS).# define SQ
2060: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2070: 53 54 41 54 55 53 20 31 0a 23 65 6e 64 69 66 0a  STATUS 1.#endif.
2080: 0a 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c 79 20 6f  ./*.** Exactly o
2090: 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ne of the follow
20a0: 69 6e 67 20 6d 61 63 72 6f 73 20 6d 75 73 74 20  ing macros must 
20b0: 62 65 20 64 65 66 69 6e 65 64 20 69 6e 20 6f 72  be defined in or
20c0: 64 65 72 20 74 6f 0a 2a 2a 20 73 70 65 63 69 66  der to.** specif
20d0: 79 20 77 68 69 63 68 20 6d 65 6d 6f 72 79 20 61  y which memory a
20e0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 75 62 73 79 73  llocation subsys
20f0: 74 65 6d 20 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a  tem to use..**.*
2100: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 53 59 53  *     SQLITE_SYS
2110: 54 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20  TEM_MALLOC      
2120: 20 20 20 20 2f 2f 20 55 73 65 20 6e 6f 72 6d 61      // Use norma
2130: 6c 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28  l system malloc(
2140: 29 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  ).**     SQLITE_
2150: 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 20 20 20 20  WIN32_MALLOC    
2160: 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 57 69         // Use Wi
2170: 6e 33 32 20 6e 61 74 69 76 65 20 68 65 61 70 20  n32 native heap 
2180: 41 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  API.**     SQLIT
2190: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20  E_ZERO_MALLOC   
21a0: 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20           // Use 
21b0: 61 20 73 74 75 62 20 61 6c 6c 6f 63 61 74 6f 72  a stub allocator
21c0: 20 74 68 61 74 20 61 6c 77 61 79 73 20 66 61 69   that always fai
21d0: 6c 73 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  ls.**     SQLITE
21e0: 5f 4d 45 4d 44 45 42 55 47 20 20 20 20 20 20 20  _MEMDEBUG       
21f0: 20 20 20 20 20 20 20 20 2f 2f 20 44 65 62 75 67          // Debug
2200: 67 69 6e 67 20 76 65 72 73 69 6f 6e 20 6f 66 20  ging version of 
2210: 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a  system malloc().
2220: 2a 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 64 6f 77 73  **.** On Windows
2230: 2c 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f  , if the SQLITE_
2240: 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c  WIN32_MALLOC_VAL
2250: 49 44 41 54 45 20 6d 61 63 72 6f 20 69 73 20 64  IDATE macro is d
2260: 65 66 69 6e 65 64 20 61 6e 64 20 74 68 65 0a 2a  efined and the.*
2270: 2a 20 61 73 73 65 72 74 28 29 20 6d 61 63 72 6f  * assert() macro
2280: 20 69 73 20 65 6e 61 62 6c 65 64 2c 20 65 61 63   is enabled, eac
2290: 68 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20  h call into the 
22a0: 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65 61  Win32 native hea
22b0: 70 20 73 75 62 73 79 73 74 65 6d 0a 2a 2a 20 77  p subsystem.** w
22c0: 69 6c 6c 20 63 61 75 73 65 20 48 65 61 70 56 61  ill cause HeapVa
22d0: 6c 69 64 61 74 65 20 74 6f 20 62 65 20 63 61 6c  lidate to be cal
22e0: 6c 65 64 2e 20 20 49 66 20 68 65 61 70 20 76 61  led.  If heap va
22f0: 6c 69 64 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20  lidation should 
2300: 66 61 69 6c 2c 20 61 6e 0a 2a 2a 20 61 73 73 65  fail, an.** asse
2310: 72 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 74 72  rtion will be tr
2320: 69 67 67 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  iggered..**.** I
2330: 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 62  f none of the ab
2340: 6f 76 65 20 61 72 65 20 64 65 66 69 6e 65 64 2c  ove are defined,
2350: 20 74 68 65 6e 20 73 65 74 20 53 51 4c 49 54 45   then set SQLITE
2360: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61  _SYSTEM_MALLOC a
2370: 73 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74  s.** the default
2380: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
2390: 28 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d  (SQLITE_SYSTEM_M
23a0: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
23b0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33  ined(SQLITE_WIN3
23c0: 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  2_MALLOC) \.  + 
23d0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a  defined(SQLITE_Z
23e0: 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  ERO_MALLOC) \.  
23f0: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2400: 5f 4d 45 4d 44 45 42 55 47 29 3e 31 0a 23 20 65  _MEMDEBUG)>1.# e
2410: 72 72 6f 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72  rror "Two or mor
2420: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
2430: 6e 67 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  ng compile-time 
2440: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70  configuration op
2450: 74 69 6f 6e 73 5c 0a 20 61 72 65 20 64 65 66 69  tions\. are defi
2460: 6e 65 64 20 62 75 74 20 61 74 20 6d 6f 73 74 20  ned but at most 
2470: 6f 6e 65 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c  one is allowed:\
2480: 0a 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  . SQLITE_SYSTEM_
2490: 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57  MALLOC, SQLITE_W
24a0: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c  IN32_MALLOC, SQL
24b0: 49 54 45 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20  ITE_MEMDEBUG,\. 
24c0: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
24d0: 4f 43 22 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  OC".#endif.#if d
24e0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59  efined(SQLITE_SY
24f0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  STEM_MALLOC) \. 
2500: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
2510: 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20  E_WIN32_MALLOC) 
2520: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
2530: 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43  LITE_ZERO_MALLOC
2540: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2550: 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29  SQLITE_MEMDEBUG)
2560: 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ==0.# define SQL
2570: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
2580: 43 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  C 1.#endif../*.*
2590: 2a 20 49 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c  * If SQLITE_MALL
25a0: 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73  OC_SOFT_LIMIT is
25b0: 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
25c0: 74 72 79 20 74 6f 20 6b 65 65 70 20 74 68 65 0a  try to keep the.
25d0: 2a 2a 20 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f  ** sizes of memo
25e0: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62  ry allocations b
25f0: 65 6c 6f 77 20 74 68 69 73 20 76 61 6c 75 65 20  elow this value 
2600: 77 68 65 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a  where possible..
2610: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2620: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
2630: 46 54 5f 4c 49 4d 49 54 29 0a 23 20 64 65 66 69  FT_LIMIT).# defi
2640: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43  ne SQLITE_MALLOC
2650: 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 31 30 32 34  _SOFT_LIMIT 1024
2660: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57  .#endif../*.** W
2670: 65 20 6e 65 65 64 20 74 6f 20 64 65 66 69 6e 65  e need to define
2680: 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61   _XOPEN_SOURCE a
2690: 73 20 66 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64  s follows in ord
26a0: 65 72 20 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20  er to enable.** 
26b0: 72 65 63 75 72 73 69 76 65 20 6d 75 74 65 78 65  recursive mutexe
26c0: 73 20 6f 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73  s on most Unix s
26d0: 79 73 74 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f  ystems and fchmo
26e0: 64 28 29 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a  d() on OpenBSD..
26f0: 2a 2a 20 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f  ** But _XOPEN_SO
2700: 55 52 43 45 20 64 65 66 69 6e 65 20 63 61 75 73  URCE define caus
2710: 65 73 20 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20  es problems for 
2720: 4d 61 63 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69  Mac OS X, so omi
2730: 74 0a 2a 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20  t.** it..*/.#if 
2740: 21 64 65 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f  !defined(_XOPEN_
2750: 53 4f 55 52 43 45 29 20 26 26 20 21 64 65 66 69  SOURCE) && !defi
2760: 6e 65 64 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20  ned(__DARWIN__) 
2770: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 41 50  && !defined(__AP
2780: 50 4c 45 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65  PLE__).#  define
2790: 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36   _XOPEN_SOURCE 6
27a0: 30 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  00.#endif../*.**
27b0: 20 4e 44 45 42 55 47 20 61 6e 64 20 53 51 4c 49   NDEBUG and SQLI
27c0: 54 45 5f 44 45 42 55 47 20 61 72 65 20 6f 70 70  TE_DEBUG are opp
27d0: 6f 73 69 74 65 73 2e 20 20 49 74 20 73 68 6f 75  osites.  It shou
27e0: 6c 64 20 61 6c 77 61 79 73 20 62 65 20 74 72 75  ld always be tru
27f0: 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65  e that.** define
2800: 64 28 4e 44 45 42 55 47 29 3d 3d 21 64 65 66 69  d(NDEBUG)==!defi
2810: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
2820: 29 2e 20 20 49 66 20 74 68 69 73 20 69 73 20 6e  ).  If this is n
2830: 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 74 72 75  ot currently tru
2840: 65 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72  e,.** make it tr
2850: 75 65 20 62 79 20 64 65 66 69 6e 69 6e 67 20 6f  ue by defining o
2860: 72 20 75 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45  r undefining NDE
2870: 42 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69  BUG..**.** Setti
2880: 6e 67 20 4e 44 45 42 55 47 20 6d 61 6b 65 73 20  ng NDEBUG makes 
2890: 74 68 65 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72  the code smaller
28a0: 20 61 6e 64 20 66 61 73 74 65 72 20 62 79 20 64   and faster by d
28b0: 69 73 61 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20  isabling the.** 
28c0: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
28d0: 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 2e  nts in the code.
28e0: 20 20 53 6f 20 77 65 20 77 61 6e 74 20 74 68 65    So we want the
28f0: 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a   default action.
2900: 2a 2a 20 74 6f 20 62 65 20 66 6f 72 20 4e 44 45  ** to be for NDE
2910: 42 55 47 20 74 6f 20 62 65 20 73 65 74 20 61 6e  BUG to be set an
2920: 64 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 75  d NDEBUG to be u
2930: 6e 64 65 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66  ndefined only if
2940: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a   SQLITE_DEBUG.**
2950: 20 69 73 20 73 65 74 2e 20 20 54 68 75 73 20 4e   is set.  Thus N
2960: 44 45 42 55 47 20 62 65 63 6f 6d 65 73 20 61 6e  DEBUG becomes an
2970: 20 6f 70 74 2d 69 6e 20 72 61 74 68 65 72 20 74   opt-in rather t
2980: 68 61 6e 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a  han an opt-out.*
2990: 2a 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69  * feature..*/.#i
29a0: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
29b0: 47 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  G) && !defined(S
29c0: 51 4c 49 54 45 5f 44 45 42 55 47 29 20 0a 23 20  QLITE_DEBUG) .# 
29d0: 64 65 66 69 6e 65 20 4e 44 45 42 55 47 20 31 0a  define NDEBUG 1.
29e0: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
29f0: 65 64 28 4e 44 45 42 55 47 29 20 26 26 20 64 65  ed(NDEBUG) && de
2a00: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
2a10: 55 47 29 0a 23 20 75 6e 64 65 66 20 4e 44 45 42  UG).# undef NDEB
2a20: 55 47 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  UG.#endif../*.**
2a30: 20 45 6e 61 62 6c 65 20 53 51 4c 49 54 45 5f 45   Enable SQLITE_E
2a40: 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f  NABLE_EXPLAIN_CO
2a50: 4d 4d 45 4e 54 53 20 69 66 20 53 51 4c 49 54 45  MMENTS if SQLITE
2a60: 5f 44 45 42 55 47 20 69 73 20 74 75 72 6e 65 64  _DEBUG is turned
2a70: 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66   on..*/.#if !def
2a80: 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
2a90: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
2aa0: 4e 54 53 29 20 26 26 20 64 65 66 69 6e 65 64 28  NTS) && defined(
2ab0: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20  SQLITE_DEBUG).# 
2ac0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
2ad0: 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d  ABLE_EXPLAIN_COM
2ae0: 4d 45 4e 54 53 20 31 0a 23 65 6e 64 69 66 0a 0a  MENTS 1.#endif..
2af0: 2f 2a 0a 2a 2a 20 54 68 65 20 74 65 73 74 63 61  /*.** The testca
2b00: 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73  se() macro is us
2b10: 65 64 20 74 6f 20 61 69 64 20 69 6e 20 63 6f 76  ed to aid in cov
2b20: 65 72 61 67 65 20 74 65 73 74 69 6e 67 2e 20 20  erage testing.  
2b30: 57 68 65 6e 20 0a 2a 2a 20 64 6f 69 6e 67 20 63  When .** doing c
2b40: 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67 2c  overage testing,
2b50: 20 74 68 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69   the condition i
2b60: 6e 73 69 64 65 20 74 68 65 20 61 72 67 75 6d 65  nside the argume
2b70: 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73  nt to.** testcas
2b80: 65 28 29 20 6d 75 73 74 20 62 65 20 65 76 61 6c  e() must be eval
2b90: 75 61 74 65 64 20 62 6f 74 68 20 74 72 75 65 20  uated both true 
2ba0: 61 6e 64 20 66 61 6c 73 65 20 69 6e 20 6f 72 64  and false in ord
2bb0: 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c  er to.** get ful
2bc0: 6c 20 62 72 61 6e 63 68 20 63 6f 76 65 72 61 67  l branch coverag
2bd0: 65 2e 20 20 54 68 65 20 74 65 73 74 63 61 73 65  e.  The testcase
2be0: 28 29 20 6d 61 63 72 6f 20 69 73 20 69 6e 73 65  () macro is inse
2bf0: 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20  rted.** to help 
2c00: 65 6e 73 75 72 65 20 61 64 65 71 75 61 74 65 20  ensure adequate 
2c10: 74 65 73 74 20 63 6f 76 65 72 61 67 65 20 69 6e  test coverage in
2c20: 20 70 6c 61 63 65 73 20 77 68 65 72 65 20 73 69   places where si
2c30: 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f  mple.** conditio
2c40: 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f 76 65 72  n/decision cover
2c50: 61 67 65 20 69 73 20 69 6e 61 64 65 71 75 61 74  age is inadequat
2c60: 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  e.  For example,
2c70: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
2c80: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61  an be used to ma
2c90: 6b 65 20 73 75 72 65 20 62 6f 75 6e 64 61 72 79  ke sure boundary
2ca0: 20 76 61 6c 75 65 73 20 61 72 65 20 74 65 73 74   values are test
2cb0: 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d  ed.  For.** bitm
2cc0: 61 73 6b 20 74 65 73 74 73 2c 20 74 65 73 74 63  ask tests, testc
2cd0: 61 73 65 28 29 20 63 61 6e 20 62 65 20 75 73 65  ase() can be use
2ce0: 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 65  d to make sure e
2cf0: 61 63 68 20 62 69 74 0a 2a 2a 20 69 73 20 73 69  ach bit.** is si
2d00: 67 6e 69 66 69 63 61 6e 74 20 61 6e 64 20 75 73  gnificant and us
2d10: 65 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 63 65  ed at least once
2d20: 2e 20 20 4f 6e 20 73 77 69 74 63 68 20 73 74 61  .  On switch sta
2d30: 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65  tements.** where
2d40: 20 6d 75 6c 74 69 70 6c 65 20 63 61 73 65 73 20   multiple cases 
2d50: 67 6f 20 74 6f 20 74 68 65 20 73 61 6d 65 20 62  go to the same b
2d60: 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65  lock of code, te
2d70: 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20  stcase().** can 
2d80: 69 6e 73 75 72 65 20 74 68 61 74 20 61 6c 6c 20  insure that all 
2d90: 63 61 73 65 73 20 61 72 65 20 65 76 61 6c 75 61  cases are evalua
2da0: 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65  ted..**.*/.#ifde
2db0: 66 20 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47  f SQLITE_COVERAG
2dc0: 45 5f 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71  E_TEST.  void sq
2dd0: 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28 69 6e  lite3Coverage(in
2de0: 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 74 65 73  t);.# define tes
2df0: 74 63 61 73 65 28 58 29 20 20 69 66 28 20 58 20  tcase(X)  if( X 
2e00: 29 7b 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61  ){ sqlite3Covera
2e10: 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a  ge(__LINE__); }.
2e20: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 74  #else.# define t
2e30: 65 73 74 63 61 73 65 28 58 29 0a 23 65 6e 64 69  estcase(X).#endi
2e40: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53  f../*.** The TES
2e50: 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69 73 20 75  TONLY macro is u
2e60: 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76  sed to enclose v
2e70: 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74  ariable declarat
2e80: 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72  ions or.** other
2e90: 20 62 69 74 73 20 6f 66 20 63 6f 64 65 20 74 68   bits of code th
2ea0: 61 74 20 61 72 65 20 6e 65 65 64 65 64 20 74 6f  at are needed to
2eb0: 20 73 75 70 70 6f 72 74 20 74 68 65 20 61 72 67   support the arg
2ec0: 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e  uments.** within
2ed0: 20 74 65 73 74 63 61 73 65 28 29 20 61 6e 64 20   testcase() and 
2ee0: 61 73 73 65 72 74 28 29 20 6d 61 63 72 6f 73 2e  assert() macros.
2ef0: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
2f00: 28 4e 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  (NDEBUG) || defi
2f10: 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52  ned(SQLITE_COVER
2f20: 41 47 45 5f 54 45 53 54 29 0a 23 20 64 65 66 69  AGE_TEST).# defi
2f30: 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 20 20  ne TESTONLY(X)  
2f40: 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  X.#else.# define
2f50: 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e   TESTONLY(X).#en
2f60: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74  dif../*.** Somet
2f70: 69 6d 65 73 20 77 65 20 6e 65 65 64 20 61 20 73  imes we need a s
2f80: 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63  mall amount of c
2f90: 6f 64 65 20 73 75 63 68 20 61 73 20 61 20 76 61  ode such as a va
2fa0: 72 69 61 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a  riable initializ
2fb0: 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75  ation.** to setu
2fc0: 70 20 66 6f 72 20 61 20 6c 61 74 65 72 20 61 73  p for a later as
2fd0: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
2fe0: 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e  .  We do not wan
2ff0: 74 20 74 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a  t this code to.*
3000: 2a 20 61 70 70 65 61 72 20 77 68 65 6e 20 61 73  * appear when as
3010: 73 65 72 74 28 29 20 69 73 20 64 69 73 61 62 6c  sert() is disabl
3020: 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  ed.  The followi
3030: 6e 67 20 6d 61 63 72 6f 20 69 73 20 74 68 65 72  ng macro is ther
3040: 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f  efore.** used to
3050: 20 63 6f 6e 74 61 69 6e 20 74 68 61 74 20 73 65   contain that se
3060: 74 75 70 20 63 6f 64 65 2e 20 20 54 68 65 20 22  tup code.  The "
3070: 56 56 41 22 20 61 63 72 6f 6e 79 6d 20 73 74 61  VVA" acronym sta
3080: 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69  nds for.** "Veri
3090: 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61  fication, Valida
30a0: 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63 72 65 64  tion, and Accred
30b0: 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74  itation".  In ot
30c0: 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a  her words, the.*
30d0: 2a 20 63 6f 64 65 20 77 69 74 68 69 6e 20 56 56  * code within VV
30e0: 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e  A_ONLY() will on
30f0: 6c 79 20 72 75 6e 20 64 75 72 69 6e 67 20 76 65  ly run during ve
3100: 72 69 66 69 63 61 74 69 6f 6e 20 70 72 6f 63 65  rification proce
3110: 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  sses..*/.#ifndef
3120: 20 4e 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65   NDEBUG.# define
3130: 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a   VVA_ONLY(X)  X.
3140: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 56  #else.# define V
3150: 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69  VA_ONLY(X).#endi
3160: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57  f../*.** The ALW
3170: 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 6d 61  AYS and NEVER ma
3180: 63 72 6f 73 20 73 75 72 72 6f 75 6e 64 20 62 6f  cros surround bo
3190: 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
31a0: 73 20 77 68 69 63 68 20 0a 2a 2a 20 61 72 65 20  s which .** are 
31b0: 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c 77 61  intended to alwa
31c0: 79 73 20 62 65 20 74 72 75 65 20 6f 72 20 66 61  ys be true or fa
31d0: 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c  lse, respectivel
31e0: 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78 70 72  y.  Such.** expr
31f0: 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20 62 65  essions could be
3200: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68   omitted from th
3210: 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74 65 6c  e code completel
3220: 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a 2a 20  y.  But they.** 
3230: 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69 6e 20  are included in 
3240: 61 20 66 65 77 20 63 61 73 65 73 20 69 6e 20 6f  a few cases in o
3250: 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63 65 20  rder to enhance 
3260: 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65 0a 2a  the resilience.*
3270: 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 75  * of SQLite to u
3280: 6e 65 78 70 65 63 74 65 64 20 62 65 68 61 76 69  nexpected behavi
3290: 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74 68 65  or - to make the
32a0: 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65 61 6c   code "self-heal
32b0: 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75 63 74  ing".** or "duct
32c0: 69 6c 65 22 20 72 61 74 68 65 72 20 74 68 61 6e  ile" rather than
32d0: 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c 65 22   being "brittle"
32e0: 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20 61 74   and crashing at
32f0: 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 68 69   the first.** hi
3300: 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65 64 20  nt of unplanned 
3310: 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20  behavior..**.** 
3320: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
3330: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3340: 20 61 72 65 20 61 64 64 65 64 20 66 6f 72 20 64   are added for d
3350: 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e 0a 2a  efensive code..*
3360: 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e 67 20  *.** When doing 
3370: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
3380: 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45   ALWAYS and NEVE
3390: 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64 65 64  R are hard-coded
33a0: 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65 20 61   to.** be true a
33b0: 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68 61 74  nd false so that
33c0: 20 74 68 65 20 75 6e 72 65 61 63 68 61 62 6c 65   the unreachable
33d0: 20 63 6f 64 65 20 74 68 65 79 20 73 70 65 63 69   code they speci
33e0: 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62  fy will.** not b
33f0: 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75 6e 74  e counted as unt
3400: 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23  ested code..*/.#
3410: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
3420: 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29  E_COVERAGE_TEST)
3430: 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53  .# define ALWAYS
3440: 28 58 29 20 20 20 20 20 20 28 31 29 0a 23 20 64  (X)      (1).# d
3450: 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20  efine NEVER(X)  
3460: 20 20 20 20 20 28 30 29 0a 23 65 6c 69 66 20 21       (0).#elif !
3470: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 0a  defined(NDEBUG).
3480: 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28  # define ALWAYS(
3490: 58 29 20 20 20 20 20 20 28 28 58 29 3f 31 3a 28  X)      ((X)?1:(
34a0: 61 73 73 65 72 74 28 30 29 2c 30 29 29 0a 23 20  assert(0),0)).# 
34b0: 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20  define NEVER(X) 
34c0: 20 20 20 20 20 20 28 28 58 29 3f 28 61 73 73 65        ((X)?(asse
34d0: 72 74 28 30 29 2c 31 29 3a 30 29 0a 23 65 6c 73  rt(0),1):0).#els
34e0: 65 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59  e.# define ALWAY
34f0: 53 28 58 29 20 20 20 20 20 20 28 58 29 0a 23 20  S(X)      (X).# 
3500: 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20  define NEVER(X) 
3510: 20 20 20 20 20 20 28 58 29 0a 23 65 6e 64 69 66        (X).#endif
3520: 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6c 61 72 61 74  ../*.** Declarat
3530: 69 6f 6e 73 20 75 73 65 64 20 66 6f 72 20 74 72  ions used for tr
3540: 61 63 69 6e 67 20 74 68 65 20 6f 70 65 72 61 74  acing the operat
3550: 69 6e 67 20 73 79 73 74 65 6d 20 69 6e 74 65 72  ing system inter
3560: 66 61 63 65 73 2e 0a 2a 2f 0a 23 69 66 20 64 65  faces..*/.#if de
3570: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 46 4f 52  fined(SQLITE_FOR
3580: 43 45 5f 4f 53 5f 54 52 41 43 45 29 20 7c 7c 20  CE_OS_TRACE) || 
3590: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
35a0: 45 53 54 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64  EST) || \.    (d
35b0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
35c0: 42 55 47 29 20 26 26 20 53 51 4c 49 54 45 5f 4f  BUG) && SQLITE_O
35d0: 53 5f 57 49 4e 29 0a 20 20 65 78 74 65 72 6e 20  S_WIN).  extern 
35e0: 69 6e 74 20 73 71 6c 69 74 65 33 4f 53 54 72 61  int sqlite3OSTra
35f0: 63 65 3b 0a 23 20 64 65 66 69 6e 65 20 4f 53 54  ce;.# define OST
3600: 52 41 43 45 28 58 29 20 20 20 20 20 20 20 20 20  RACE(X)         
3610: 20 69 66 28 20 73 71 6c 69 74 65 33 4f 53 54 72   if( sqlite3OSTr
3620: 61 63 65 20 29 20 73 71 6c 69 74 65 33 44 65 62  ace ) sqlite3Deb
3630: 75 67 50 72 69 6e 74 66 20 58 0a 23 20 64 65 66  ugPrintf X.# def
3640: 69 6e 65 20 53 51 4c 49 54 45 5f 48 41 56 45 5f  ine SQLITE_HAVE_
3650: 4f 53 5f 54 52 41 43 45 0a 23 65 6c 73 65 0a 23  OS_TRACE.#else.#
3660: 20 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28   define OSTRACE(
3670: 58 29 0a 23 20 75 6e 64 65 66 20 20 53 51 4c 49  X).# undef  SQLI
3680: 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45  TE_HAVE_OS_TRACE
3690: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
36a0: 73 20 74 68 65 20 73 71 6c 69 74 65 33 45 72 72  s the sqlite3Err
36b0: 4e 61 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  Name() function 
36c0: 6e 65 65 64 65 64 20 69 6e 20 74 68 65 20 62 75  needed in the bu
36d0: 69 6c 64 3f 20 20 43 75 72 72 65 6e 74 6c 79 2c  ild?  Currently,
36e0: 0a 2a 2a 20 69 74 20 69 73 20 6e 65 65 64 65 64  .** it is needed
36f0: 20 62 79 20 22 6d 75 74 65 78 5f 77 33 32 2e 63   by "mutex_w32.c
3700: 22 20 28 77 68 65 6e 20 64 65 62 75 67 67 69 6e  " (when debuggin
3710: 67 29 2c 20 22 6f 73 5f 77 69 6e 2e 63 22 20 28  g), "os_win.c" (
3720: 77 68 65 6e 0a 2a 2a 20 4f 53 54 52 41 43 45 20  when.** OSTRACE 
3730: 69 73 20 65 6e 61 62 6c 65 64 29 2c 20 61 6e 64  is enabled), and
3740: 20 62 79 20 73 65 76 65 72 61 6c 20 22 74 65 73   by several "tes
3750: 74 2a 2e 63 22 20 66 69 6c 65 73 20 28 77 68 69  t*.c" files (whi
3760: 63 68 20 61 72 65 0a 2a 2a 20 63 6f 6d 70 69 6c  ch are.** compil
3770: 65 64 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f  ed using SQLITE_
3780: 54 45 53 54 29 2e 0a 2a 2f 0a 23 69 66 20 64 65  TEST)..*/.#if de
3790: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56  fined(SQLITE_HAV
37a0: 45 5f 4f 53 5f 54 52 41 43 45 29 20 7c 7c 20 64  E_OS_TRACE) || d
37b0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
37c0: 53 54 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65  ST) || \.    (de
37d0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
37e0: 55 47 29 20 26 26 20 53 51 4c 49 54 45 5f 4f 53  UG) && SQLITE_OS
37f0: 5f 57 49 4e 29 0a 23 20 64 65 66 69 6e 65 20 53  _WIN).# define S
3800: 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e  QLITE_NEED_ERR_N
3810: 41 4d 45 0a 23 65 6c 73 65 0a 23 20 75 6e 64 65  AME.#else.# unde
3820: 66 20 20 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45  f  SQLITE_NEED_E
3830: 52 52 5f 4e 41 4d 45 0a 23 65 6e 64 69 66 0a 0a  RR_NAME.#endif..
3840: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
3850: 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20  e (non-zero) if 
3860: 74 68 65 20 69 6e 70 75 74 20 69 73 20 61 6e 20  the input is an 
3870: 69 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20  integer that is 
3880: 74 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20  too large.** to 
3890: 66 69 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20  fit in 32-bits. 
38a0: 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75   This macro is u
38b0: 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61  sed inside of va
38c0: 72 69 6f 75 73 20 74 65 73 74 63 61 73 65 28 29  rious testcase()
38d0: 0a 2a 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65  .** macros to ve
38e0: 72 69 66 79 20 74 68 61 74 20 77 65 20 68 61 76  rify that we hav
38f0: 65 20 74 65 73 74 65 64 20 53 51 4c 69 74 65 20  e tested SQLite 
3900: 66 6f 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73  for large-file s
3910: 75 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69  upport..*/.#defi
3920: 6e 65 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29  ne IS_BIG_INT(X)
3930: 20 20 28 28 28 58 29 26 7e 28 69 36 34 29 30 78    (((X)&~(i64)0x
3940: 66 66 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f  ffffffff)!=0)../
3950: 2a 0a 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75  *.** The macro u
3960: 6e 6c 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68  nlikely() is a h
3970: 69 6e 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e  int that surroun
3980: 64 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20  ds a boolean.** 
3990: 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
39a0: 69 73 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65  is usually false
39b0: 2e 20 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28  .  Macro likely(
39c0: 29 20 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61  ) surrounds.** a
39d0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
39e0: 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61  ion that is usua
39f0: 6c 6c 79 20 74 72 75 65 2e 20 20 54 68 65 73 65  lly true.  These
3a00: 20 68 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a   hints could,.**
3a10: 20 69 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75   in theory, be u
3a20: 73 65 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69  sed by the compi
3a30: 6c 65 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20  ler to generate 
3a40: 62 65 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74  better code, but
3a50: 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68  .** currently th
3a60: 65 79 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d  ey are just comm
3a70: 65 6e 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72  ents for human r
3a80: 65 61 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69  eaders..*/.#defi
3a90: 6e 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20  ne likely(X)    
3aa0: 28 58 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69  (X).#define unli
3ab0: 6b 65 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69  kely(X)  (X)..#i
3ac0: 6e 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a  nclude "hash.h".
3ad0: 23 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e  #include "parse.
3ae0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h".#include <std
3af0: 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  io.h>.#include <
3b00: 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75  stdlib.h>.#inclu
3b10: 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69  de <string.h>.#i
3b20: 6e 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68  nclude <assert.h
3b30: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64  >.#include <stdd
3b40: 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  ef.h>../*.** If 
3b50: 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20  compiling for a 
3b60: 70 72 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c  processor that l
3b70: 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f  acks floating po
3b80: 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20  int support,.** 
3b90: 73 75 62 73 74 69 74 75 74 65 20 69 6e 74 65 67  substitute integ
3ba0: 65 72 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d  er for floating-
3bb0: 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20  point.*/.#ifdef 
3bc0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
3bd0: 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66  TING_POINT.# def
3be0: 69 6e 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74  ine double sqlit
3bf0: 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65  e_int64.# define
3c00: 20 66 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e   float sqlite_in
3c10: 74 36 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e  t64.# define LON
3c20: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 73 71 6c  GDOUBLE_TYPE sql
3c30: 69 74 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64  ite_int64.# ifnd
3c40: 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42  ef SQLITE_BIG_DB
3c50: 4c 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  L.#   define SQL
3c60: 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 28 28 73  ITE_BIG_DBL (((s
3c70: 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 31 29 3c  qlite3_int64)1)<
3c80: 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a 23 20 64  <50).# endif.# d
3c90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49  efine SQLITE_OMI
3ca0: 54 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53  T_DATETIME_FUNCS
3cb0: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
3cc0: 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a  TE_OMIT_TRACE 1.
3cd0: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  # undef SQLITE_M
3ce0: 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49  IXED_ENDIAN_64BI
3cf0: 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20  T_FLOAT.# undef 
3d00: 53 51 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41  SQLITE_HAVE_ISNA
3d10: 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  N.#endif.#ifndef
3d20: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a   SQLITE_BIG_DBL.
3d30: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3d40: 42 49 47 5f 44 42 4c 20 28 31 65 39 39 29 0a 23  BIG_DBL (1e99).#
3d50: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49  endif../*.** OMI
3d60: 54 5f 54 45 4d 50 44 42 20 69 73 20 73 65 74 20  T_TEMPDB is set 
3d70: 74 6f 20 31 20 69 66 20 53 51 4c 49 54 45 5f 4f  to 1 if SQLITE_O
3d80: 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 64 65  MIT_TEMPDB is de
3d90: 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61  fined, or 0.** a
3da0: 66 74 65 72 77 61 72 64 2e 20 48 61 76 69 6e 67  fterward. Having
3db0: 20 74 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f   this macro allo
3dc0: 77 73 20 75 73 20 74 6f 20 63 61 75 73 65 20 74  ws us to cause t
3dd0: 68 65 20 43 20 63 6f 6d 70 69 6c 65 72 20 0a 2a  he C compiler .*
3de0: 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75  * to omit code u
3df0: 73 65 64 20 62 79 20 54 45 4d 50 20 74 61 62 6c  sed by TEMP tabl
3e00: 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73 73 79  es without messy
3e10: 20 23 69 66 6e 64 65 66 20 73 74 61 74 65 6d 65   #ifndef stateme
3e20: 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  nts..*/.#ifdef S
3e30: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44  QLITE_OMIT_TEMPD
3e40: 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54  B.#define OMIT_T
3e50: 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a 23 64  EMPDB 1.#else.#d
3e60: 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44  efine OMIT_TEMPD
3e70: 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  B 0.#endif../*.*
3e80: 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f 72 6d  * The "file form
3e90: 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20 61 6e  at" number is an
3ea0: 20 69 6e 74 65 67 65 72 20 74 68 61 74 20 69 73   integer that is
3eb0: 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65   incremented whe
3ec0: 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56 44 42  never.** the VDB
3ed0: 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66 6f 72  E-level file for
3ee0: 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20 54 68  mat changes.  Th
3ef0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
3f00: 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a  os define the.**
3f10: 20 74 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c   the default fil
3f20: 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77  e format for new
3f30: 20 64 61 74 61 62 61 73 65 73 20 61 6e 64 20 74   databases and t
3f40: 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20  he maximum file 
3f50: 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74  format.** that t
3f60: 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e 20 72  he library can r
3f70: 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ead..*/.#define 
3f80: 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f  SQLITE_MAX_FILE_
3f90: 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64 65 66  FORMAT 4.#ifndef
3fa0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
3fb0: 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65  FILE_FORMAT.# de
3fc0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
3fd0: 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20  ULT_FILE_FORMAT 
3fe0: 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  4.#endif../*.** 
3ff0: 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65  Determine whethe
4000: 72 20 74 72 69 67 67 65 72 73 20 61 72 65 20 72  r triggers are r
4010: 65 63 75 72 73 69 76 65 20 62 79 20 64 65 66 61  ecursive by defa
4020: 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e 20 62  ult.  This can b
4030: 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61 74 20  e.** changed at 
4040: 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67 20 61  run-time using a
4050: 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e   pragma..*/.#ifn
4060: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
4070: 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49  LT_RECURSIVE_TRI
4080: 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65 20 53  GGERS.# define S
4090: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45  QLITE_DEFAULT_RE
40a0: 43 55 52 53 49 56 45 5f 54 52 49 47 47 45 52 53  CURSIVE_TRIGGERS
40b0: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
40c0: 20 50 72 6f 76 69 64 65 20 61 20 64 65 66 61 75   Provide a defau
40d0: 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53 51 4c  lt value for SQL
40e0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69  ITE_TEMP_STORE i
40f0: 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e 6f 74  n case it is not
4100: 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e   specified.** on
4110: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e   the command-lin
4120: 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  e.*/.#ifndef SQL
4130: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23  ITE_TEMP_STORE.#
4140: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54   define SQLITE_T
4150: 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 20 64 65  EMP_STORE 1.# de
4160: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50  fine SQLITE_TEMP
4170: 5f 53 54 4f 52 45 5f 78 63 20 31 20 20 2f 2a 20  _STORE_xc 1  /* 
4180: 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69  Exclude from cti
4190: 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  me.c */.#endif..
41a0: 2f 2a 0a 2a 2a 20 49 66 20 6e 6f 20 76 61 6c 75  /*.** If no valu
41b0: 65 20 68 61 73 20 62 65 65 6e 20 70 72 6f 76 69  e has been provi
41c0: 64 65 64 20 66 6f 72 20 53 51 4c 49 54 45 5f 4d  ded for SQLITE_M
41d0: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
41e0: 53 2c 20 6f 72 20 69 66 0a 2a 2a 20 53 51 4c 49  S, or if.** SQLI
41f0: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 73  TE_TEMP_STORE is
4200: 20 73 65 74 20 74 6f 20 33 20 28 6e 65 76 65 72   set to 3 (never
4210: 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 66   use temporary f
4220: 69 6c 65 73 29 2c 20 73 65 74 20 69 74 20 0a 2a  iles), set it .*
4230: 2a 20 74 6f 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69  * to zero..*/.#i
4240: 66 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  f SQLITE_TEMP_ST
4250: 4f 52 45 3d 3d 33 20 7c 7c 20 53 51 4c 49 54 45  ORE==3 || SQLITE
4260: 5f 54 48 52 45 41 44 53 41 46 45 3d 3d 30 0a 23  _THREADSAFE==0.#
4270: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41   undef SQLITE_MA
4280: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
4290: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
42a0: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
42b0: 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66  ADS 0.#endif.#if
42c0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
42d0: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23  WORKER_THREADS.#
42e0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
42f0: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
4300: 53 20 38 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  S 8.#endif.#ifnd
4310: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
4320: 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  T_WORKER_THREADS
4330: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4340: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
4350: 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69 66  THREADS 0.#endif
4360: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41  .#if SQLITE_DEFA
4370: 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  ULT_WORKER_THREA
4380: 44 53 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  DS>SQLITE_MAX_WO
4390: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 75  RKER_THREADS.# u
43a0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
43b0: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23  WORKER_THREADS.#
43c0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
43d0: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
43e0: 53 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  S SQLITE_DEFAULT
43f0: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a  _WORKER_THREADS.
4400: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
4410: 65 20 64 65 66 61 75 6c 74 20 69 6e 69 74 69 61  e default initia
4420: 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 66 6f 72  l allocation for
4430: 20 74 68 65 20 70 61 67 65 63 61 63 68 65 20 77   the pagecache w
4440: 68 65 6e 20 75 73 69 6e 67 20 73 65 70 61 72 61  hen using separa
4450: 74 65 0a 2a 2a 20 70 61 67 65 63 61 63 68 65 73  te.** pagecaches
4460: 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61   for each databa
4470: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
4480: 41 20 70 6f 73 69 74 69 76 65 20 6e 75 6d 62 65  A positive numbe
4490: 72 20 69 73 20 74 68 65 0a 2a 2a 20 6e 75 6d 62  r is the.** numb
44a0: 65 72 20 6f 66 20 70 61 67 65 73 2e 20 20 41 20  er of pages.  A 
44b0: 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20  negative number 
44c0: 4e 20 74 72 61 6e 73 6c 61 74 69 6f 6e 73 20 6d  N translations m
44d0: 65 61 6e 73 20 74 68 61 74 20 61 20 62 75 66 66  eans that a buff
44e0: 65 72 0a 2a 2a 20 6f 66 20 2d 31 30 32 34 2a 4e  er.** of -1024*N
44f0: 20 62 79 74 65 73 20 69 73 20 61 6c 6c 6f 63 61   bytes is alloca
4500: 74 65 64 20 61 6e 64 20 75 73 65 64 20 66 6f 72  ted and used for
4510: 20 61 73 20 6d 61 6e 79 20 70 61 67 65 73 20 61   as many pages a
4520: 73 20 69 74 20 77 69 6c 6c 20 68 6f 6c 64 2e 0a  s it will hold..
4530: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
4540: 45 5f 44 45 46 41 55 4c 54 5f 50 43 41 43 48 45  E_DEFAULT_PCACHE
4550: 5f 49 4e 49 54 53 5a 0a 23 20 64 65 66 69 6e 65  _INITSZ.# define
4560: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
4570: 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 20 31 30  PCACHE_INITSZ 10
4580: 30 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a  0.#endif.../*.**
4590: 20 47 43 43 20 64 6f 65 73 20 6e 6f 74 20 64 65   GCC does not de
45a0: 66 69 6e 65 20 74 68 65 20 6f 66 66 73 65 74 6f  fine the offseto
45b0: 66 28 29 20 6d 61 63 72 6f 20 73 6f 20 77 65 27  f() macro so we'
45c0: 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f 20 69 74  ll have to do it
45d0: 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73 2e 0a 2a  .** ourselves..*
45e0: 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66 73 65 74  /.#ifndef offset
45f0: 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66 66 73 65  of.#define offse
4600: 74 6f 66 28 53 54 52 55 43 54 55 52 45 2c 46 49  tof(STRUCTURE,FI
4610: 45 4c 44 29 20 28 28 69 6e 74 29 28 28 63 68 61  ELD) ((int)((cha
4620: 72 2a 29 26 28 28 53 54 52 55 43 54 55 52 45 2a  r*)&((STRUCTURE*
4630: 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a 23 65 6e  )0)->FIELD)).#en
4640: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f  dif../*.** Macro
4650: 73 20 74 6f 20 63 6f 6d 70 75 74 65 20 6d 69 6e  s to compute min
4660: 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d  imum and maximum
4670: 20 6f 66 20 74 77 6f 20 6e 75 6d 62 65 72 73 2e   of two numbers.
4680: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 49 4e 28  .*/.#define MIN(
4690: 41 2c 42 29 20 28 28 41 29 3c 28 42 29 3f 28 41  A,B) ((A)<(B)?(A
46a0: 29 3a 28 42 29 29 0a 23 64 65 66 69 6e 65 20 4d  ):(B)).#define M
46b0: 41 58 28 41 2c 42 29 20 28 28 41 29 3e 28 42 29  AX(A,B) ((A)>(B)
46c0: 3f 28 41 29 3a 28 42 29 29 0a 0a 2f 2a 0a 2a 2a  ?(A):(B))../*.**
46d0: 20 53 77 61 70 20 74 77 6f 20 6f 62 6a 65 63 74   Swap two object
46e0: 73 20 6f 66 20 74 79 70 65 20 54 59 50 45 2e 0a  s of type TYPE..
46f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 57 41 50 28  */.#define SWAP(
4700: 54 59 50 45 2c 41 2c 42 29 20 7b 54 59 50 45 20  TYPE,A,B) {TYPE 
4710: 74 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a  t=A; A=B; B=t;}.
4720: 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20  ./*.** Check to 
4730: 73 65 65 20 69 66 20 74 68 69 73 20 6d 61 63 68  see if this mach
4740: 69 6e 65 20 75 73 65 73 20 45 42 43 44 49 43 2e  ine uses EBCDIC.
4750: 20 20 28 59 65 73 2c 20 62 65 6c 69 65 76 65 20    (Yes, believe 
4760: 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68  it or.** not, th
4770: 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20 6d 61  ere are still ma
4780: 63 68 69 6e 65 73 20 6f 75 74 20 74 68 65 72 65  chines out there
4790: 20 74 68 61 74 20 75 73 65 20 45 42 43 44 49 43   that use EBCDIC
47a0: 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d  .).*/.#if 'A' ==
47b0: 20 27 5c 33 30 31 27 0a 23 20 64 65 66 69 6e 65   '\301'.# define
47c0: 20 53 51 4c 49 54 45 5f 45 42 43 44 49 43 20 31   SQLITE_EBCDIC 1
47d0: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
47e0: 53 51 4c 49 54 45 5f 41 53 43 49 49 20 31 0a 23  SQLITE_ASCII 1.#
47f0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74  endif../*.** Int
4800: 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73  egers of known s
4810: 69 7a 65 73 2e 20 20 54 68 65 73 65 20 74 79 70  izes.  These typ
4820: 65 64 65 66 73 20 6d 69 67 68 74 20 63 68 61 6e  edefs might chan
4830: 67 65 20 66 6f 72 20 61 72 63 68 69 74 65 63 74  ge for architect
4840: 75 72 65 73 0a 2a 2a 20 77 68 65 72 65 20 74 68  ures.** where th
4850: 65 20 73 69 7a 65 73 20 76 65 72 79 2e 20 20 50  e sizes very.  P
4860: 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72  reprocessor macr
4870: 6f 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  os are available
4880: 20 73 6f 20 74 68 61 74 20 74 68 65 0a 2a 2a 20   so that the.** 
4890: 74 79 70 65 73 20 63 61 6e 20 62 65 20 63 6f 6e  types can be con
48a0: 76 65 6e 69 65 6e 74 6c 79 20 72 65 64 65 66 69  veniently redefi
48b0: 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ned at compile-t
48c0: 79 70 65 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a  ype.  Like this:
48d0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 63  .**.**         c
48e0: 63 20 27 2d 44 55 49 4e 54 50 54 52 5f 54 59 50  c '-DUINTPTR_TYP
48f0: 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27  E=long long int'
4900: 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20   ....*/.#ifndef 
4910: 55 49 4e 54 33 32 5f 54 59 50 45 0a 23 20 69 66  UINT32_TYPE.# if
4920: 64 65 66 20 48 41 56 45 5f 55 49 4e 54 33 32 5f  def HAVE_UINT32_
4930: 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54  T.#  define UINT
4940: 33 32 5f 54 59 50 45 20 75 69 6e 74 33 32 5f 74  32_TYPE uint32_t
4950: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
4960: 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 6e  e UINT32_TYPE un
4970: 73 69 67 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64  signed int.# end
4980: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
4990: 66 20 55 49 4e 54 31 36 5f 54 59 50 45 0a 23 20  f UINT16_TYPE.# 
49a0: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 31  ifdef HAVE_UINT1
49b0: 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49  6_T.#  define UI
49c0: 4e 54 31 36 5f 54 59 50 45 20 75 69 6e 74 31 36  NT16_TYPE uint16
49d0: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
49e0: 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20  ine UINT16_TYPE 
49f0: 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69  unsigned short i
4a00: 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  nt.# endif.#endi
4a10: 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 31 36 5f  f.#ifndef INT16_
4a20: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
4a30: 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66  E_INT16_T.#  def
4a40: 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 69  ine INT16_TYPE i
4a50: 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20  nt16_t.# else.# 
4a60: 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59   define INT16_TY
4a70: 50 45 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65  PE short int.# e
4a80: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
4a90: 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 0a 23  def UINT8_TYPE.#
4aa0: 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54   ifdef HAVE_UINT
4ab0: 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49  8_T.#  define UI
4ac0: 4e 54 38 5f 54 59 50 45 20 75 69 6e 74 38 5f 74  NT8_TYPE uint8_t
4ad0: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
4ae0: 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75 6e 73  e UINT8_TYPE uns
4af0: 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64  igned char.# end
4b00: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
4b10: 66 20 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66  f INT8_TYPE.# if
4b20: 64 65 66 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a  def HAVE_INT8_T.
4b30: 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54  #  define INT8_T
4b40: 59 50 45 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73  YPE int8_t.# els
4b50: 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38  e.#  define INT8
4b60: 5f 54 59 50 45 20 73 69 67 6e 65 64 20 63 68 61  _TYPE signed cha
4b70: 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  r.# endif.#endif
4b80: 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55  .#ifndef LONGDOU
4b90: 42 4c 45 5f 54 59 50 45 0a 23 20 64 65 66 69 6e  BLE_TYPE.# defin
4ba0: 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50  e LONGDOUBLE_TYP
4bb0: 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65  E long double.#e
4bc0: 6e 64 69 66 0a 74 79 70 65 64 65 66 20 73 71 6c  ndif.typedef sql
4bd0: 69 74 65 5f 69 6e 74 36 34 20 69 36 34 3b 20 20  ite_int64 i64;  
4be0: 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74          /* 8-byt
4bf0: 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  e signed integer
4c00: 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 71 6c 69   */.typedef sqli
4c10: 74 65 5f 75 69 6e 74 36 34 20 75 36 34 3b 20 20  te_uint64 u64;  
4c20: 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65         /* 8-byte
4c30: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
4c40: 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e  r */.typedef UIN
4c50: 54 33 32 5f 54 59 50 45 20 75 33 32 3b 20 20 20  T32_TYPE u32;   
4c60: 20 20 20 20 20 20 20 20 2f 2a 20 34 2d 62 79 74          /* 4-byt
4c70: 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  e unsigned integ
4c80: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49  er */.typedef UI
4c90: 4e 54 31 36 5f 54 59 50 45 20 75 31 36 3b 20 20  NT16_TYPE u16;  
4ca0: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79           /* 2-by
4cb0: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
4cc0: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49  ger */.typedef I
4cd0: 4e 54 31 36 5f 54 59 50 45 20 69 31 36 3b 20 20  NT16_TYPE i16;  
4ce0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d 62            /* 2-b
4cf0: 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67  yte signed integ
4d00: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55 49  er */.typedef UI
4d10: 4e 54 38 5f 54 59 50 45 20 75 38 3b 20 20 20 20  NT8_TYPE u8;    
4d20: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79           /* 1-by
4d30: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
4d40: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 49  ger */.typedef I
4d50: 4e 54 38 5f 54 59 50 45 20 69 38 3b 20 20 20 20  NT8_TYPE i8;    
4d60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d 62            /* 1-b
4d70: 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67  yte signed integ
4d80: 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c  er */../*.** SQL
4d90: 49 54 45 5f 4d 41 58 5f 55 33 32 20 69 73 20 61  ITE_MAX_U32 is a
4da0: 20 75 36 34 20 63 6f 6e 73 74 61 6e 74 20 74 68   u64 constant th
4db0: 61 74 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75  at is the maximu
4dc0: 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74  m u64 value.** t
4dd0: 68 61 74 20 63 61 6e 20 62 65 20 73 74 6f 72 65  hat can be store
4de0: 64 20 69 6e 20 61 20 75 33 32 20 77 69 74 68 6f  d in a u32 witho
4df0: 75 74 20 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e  ut loss of data.
4e00: 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69    The value.** i
4e10: 73 20 30 78 30 30 30 30 30 30 30 30 66 66 66 66  s 0x00000000ffff
4e20: 66 66 66 66 2e 20 20 42 75 74 20 62 65 63 61 75  ffff.  But becau
4e30: 73 65 20 6f 66 20 71 75 69 72 6b 73 20 6f 66 20  se of quirks of 
4e40: 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20  some compilers, 
4e50: 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20 73 70  we.** have to sp
4e60: 65 63 69 66 79 20 74 68 65 20 76 61 6c 75 65 20  ecify the value 
4e70: 69 6e 20 74 68 65 20 6c 65 73 73 20 69 6e 74 75  in the less intu
4e80: 69 74 69 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f  itive manner sho
4e90: 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  wn:.*/.#define S
4ea0: 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 20 28  QLITE_MAX_U32  (
4eb0: 28 28 28 75 36 34 29 31 29 3c 3c 33 32 29 2d 31  (((u64)1)<<32)-1
4ec0: 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74  )../*.** The dat
4ed0: 61 74 79 70 65 20 75 73 65 64 20 74 6f 20 73 74  atype used to st
4ee0: 6f 72 65 20 65 73 74 69 6d 61 74 65 73 20 6f 66  ore estimates of
4ef0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
4f00: 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c  ows in a.** tabl
4f10: 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 69  e or index.  Thi
4f20: 73 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64  s is an unsigned
4f30: 20 69 6e 74 65 67 65 72 20 74 79 70 65 2e 20 20   integer type.  
4f40: 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20  For 99.9% of.** 
4f50: 74 68 65 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d  the world, a 32-
4f60: 62 69 74 20 69 6e 74 65 67 65 72 20 69 73 20 73  bit integer is s
4f70: 75 66 66 69 63 69 65 6e 74 2e 20 20 42 75 74 20  ufficient.  But 
4f80: 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
4f90: 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20  .** can be used 
4fa0: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  at compile-time 
4fb0: 69 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23  if desired..*/.#
4fc0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 36 34 42  ifdef SQLITE_64B
4fd0: 49 54 5f 53 54 41 54 53 0a 20 74 79 70 65 64 65  IT_STATS. typede
4fe0: 66 20 75 36 34 20 74 52 6f 77 63 6e 74 3b 20 20  f u64 tRowcnt;  
4ff0: 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79    /* 64-bit only
5000: 20 69 66 20 72 65 71 75 65 73 74 65 64 20 61 74   if requested at
5010: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f   compile-time */
5020: 0a 23 65 6c 73 65 0a 20 74 79 70 65 64 65 66 20  .#else. typedef 
5030: 75 33 32 20 74 52 6f 77 63 6e 74 3b 20 20 20 20  u32 tRowcnt;    
5040: 2f 2a 20 33 32 2d 62 69 74 20 69 73 20 74 68 65  /* 32-bit is the
5050: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64   default */.#end
5060: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61  if../*.** Estima
5070: 74 65 64 20 71 75 61 6e 74 69 74 69 65 73 20 75  ted quantities u
5080: 73 65 64 20 66 6f 72 20 71 75 65 72 79 20 70 6c  sed for query pl
5090: 61 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f 72 65  anning are store
50a0: 64 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c  d as 16-bit.** l
50b0: 6f 67 61 72 69 74 68 6d 73 2e 20 20 46 6f 72 20  ogarithms.  For 
50c0: 71 75 61 6e 74 69 74 79 20 58 2c 20 74 68 65 20  quantity X, the 
50d0: 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 73 20  value stored is 
50e0: 31 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54 68 69  10*log2(X).  Thi
50f0: 73 0a 2a 2a 20 67 69 76 65 73 20 61 20 70 6f 73  s.** gives a pos
5100: 73 69 62 6c 65 20 72 61 6e 67 65 20 6f 66 20 76  sible range of v
5110: 61 6c 75 65 73 20 6f 66 20 61 70 70 72 6f 78 69  alues of approxi
5120: 6d 61 74 65 6c 79 20 31 2e 30 65 39 38 36 20 74  mately 1.0e986 t
5130: 6f 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74  o 1e-986..** But
5140: 20 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c   the allowed val
5150: 75 65 73 20 61 72 65 20 22 67 72 61 69 6e 79 22  ues are "grainy"
5160: 2e 20 20 4e 6f 74 20 65 76 65 72 79 20 76 61 6c  .  Not every val
5170: 75 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 61  ue is representa
5180: 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ble..** For exam
5190: 70 6c 65 2c 20 71 75 61 6e 74 69 74 69 65 73 20  ple, quantities 
51a0: 31 36 20 61 6e 64 20 31 37 20 61 72 65 20 62 6f  16 and 17 are bo
51b0: 74 68 20 72 65 70 72 65 73 65 6e 74 65 64 20 62  th represented b
51c0: 79 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66  y a LogEst.** of
51d0: 20 34 30 2e 20 20 48 6f 77 65 76 65 72 2c 20 73   40.  However, s
51e0: 69 6e 63 65 20 4c 6f 67 45 73 74 20 71 75 61 6e  ince LogEst quan
51f0: 74 69 74 69 65 73 20 61 72 65 20 73 75 70 70 6f  tities are suppo
5200: 73 65 20 74 6f 20 62 65 20 65 73 74 69 6d 61 74  se to be estimat
5210: 65 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74  es,.** not exact
5220: 20 76 61 6c 75 65 73 2c 20 74 68 69 73 20 69 6d   values, this im
5230: 70 72 65 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74  precision is not
5240: 20 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a   a problem..**.*
5250: 2a 20 22 4c 6f 67 45 73 74 22 20 69 73 20 73 68  * "LogEst" is sh
5260: 6f 72 74 20 66 6f 72 20 22 4c 6f 67 61 72 69 74  ort for "Logarit
5270: 68 6d 69 63 20 45 73 74 69 6d 61 74 65 22 2e 0a  hmic Estimate"..
5280: 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a  **.** Examples:.
5290: 2a 2a 20 20 20 20 20 20 31 20 2d 3e 20 30 20 20  **      1 -> 0  
52a0: 20 20 20 20 20 20 20 20 20 20 20 20 32 30 20 2d              20 -
52b0: 3e 20 34 33 20 20 20 20 20 20 20 20 20 20 31 30  > 43          10
52c0: 30 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20  000 -> 132.**   
52d0: 20 20 20 32 20 2d 3e 20 31 30 20 20 20 20 20 20     2 -> 10      
52e0: 20 20 20 20 20 20 20 32 35 20 2d 3e 20 34 36 20         25 -> 46 
52f0: 20 20 20 20 20 20 20 20 20 32 35 30 30 30 20 2d           25000 -
5300: 3e 20 31 34 36 0a 2a 2a 20 20 20 20 20 20 33 20  > 146.**      3 
5310: 2d 3e 20 31 36 20 20 20 20 20 20 20 20 20 20 20  -> 16           
5320: 20 31 30 30 20 2d 3e 20 36 36 20 20 20 20 20 20   100 -> 66      
5330: 20 20 31 30 30 30 30 30 30 20 2d 3e 20 31 39 39    1000000 -> 199
5340: 0a 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20 32 30  .**      4 -> 20
5350: 20 20 20 20 20 20 20 20 20 20 20 31 30 30 30 20             1000 
5360: 2d 3e 20 39 39 20 20 20 20 20 20 20 20 31 30 34  -> 99        104
5370: 38 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20  8576 -> 200.**  
5380: 20 20 20 31 30 20 2d 3e 20 33 33 20 20 20 20 20     10 -> 33     
5390: 20 20 20 20 20 20 31 30 32 34 20 2d 3e 20 31 30        1024 -> 10
53a0: 30 20 20 20 20 34 32 39 34 39 36 37 32 39 36 20  0    4294967296 
53b0: 2d 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65  -> 320.**.** The
53c0: 20 4c 6f 67 45 73 74 20 63 61 6e 20 62 65 20 6e   LogEst can be n
53d0: 65 67 61 74 69 76 65 20 74 6f 20 69 6e 64 69 63  egative to indic
53e0: 61 74 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 76  ate fractional v
53f0: 61 6c 75 65 73 2e 20 0a 2a 2a 20 45 78 61 6d 70  alues. .** Examp
5400: 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e  les:.**.**    0.
5410: 35 20 2d 3e 20 2d 31 30 20 20 20 20 20 20 20 20  5 -> -10        
5420: 20 20 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20     0.1 -> -33   
5430: 20 20 20 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d       0.0625 -> -
5440: 34 30 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e  40.*/.typedef IN
5450: 54 31 36 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b  T16_TYPE LogEst;
5460: 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  ../*.** Set the 
5470: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 6d  SQLITE_PTRSIZE m
5480: 61 63 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62  acro to the numb
5490: 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61  er of bytes in a
54a0: 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e   pointer.*/.#ifn
54b0: 64 65 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49  def SQLITE_PTRSI
54c0: 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  ZE.# if defined(
54d0: 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52  __SIZEOF_POINTER
54e0: 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  __).#   define S
54f0: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f  QLITE_PTRSIZE __
5500: 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f  SIZEOF_POINTER__
5510: 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65 64 28  .# elif defined(
5520: 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66  i386)     || def
5530: 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20  ined(__i386__)  
5540: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49   || defined(_M_I
5550: 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20  X86) ||    \.   
5560: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41      defined(_M_A
5570: 52 4d 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  RM)   || defined
5580: 28 5f 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20  (__arm__)    || 
5590: 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 0a 23  defined(__x86).#
55a0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
55b0: 5f 50 54 52 53 49 5a 45 20 34 0a 23 20 65 6c 73  _PTRSIZE 4.# els
55c0: 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  e.#   define SQL
55d0: 49 54 45 5f 50 54 52 53 49 5a 45 20 38 0a 23 20  ITE_PTRSIZE 8.# 
55e0: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
55f0: 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65  .** Macros to de
5600: 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
5610: 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73 20 62  the machine is b
5620: 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64  ig or little end
5630: 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20 77 68 65 74  ian,.** and whet
5640: 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20  her or not that 
5650: 64 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 69 73  determination is
5660: 20 72 75 6e 2d 74 69 6d 65 20 6f 72 20 63 6f 6d   run-time or com
5670: 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a  pile-time..**.**
5680: 20 46 6f 72 20 62 65 73 74 20 70 65 72 66 6f 72   For best perfor
5690: 6d 61 6e 63 65 2c 20 61 6e 20 61 74 74 65 6d 70  mance, an attemp
56a0: 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67 75 65  t is made to gue
56b0: 73 73 20 61 74 20 74 68 65 20 62 79 74 65 2d 6f  ss at the byte-o
56c0: 72 64 65 72 0a 2a 2a 20 75 73 69 6e 67 20 43 2d  rder.** using C-
56d0: 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63  preprocessor mac
56e0: 72 6f 73 2e 20 20 49 66 20 74 68 61 74 20 69 73  ros.  If that is
56f0: 20 75 6e 73 75 63 63 65 73 73 66 75 6c 2c 20 6f   unsuccessful, o
5700: 72 20 69 66 0a 2a 2a 20 2d 44 53 51 4c 49 54 45  r if.** -DSQLITE
5710: 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44  _RUNTIME_BYTEORD
5720: 45 52 3d 31 20 69 73 20 73 65 74 2c 20 74 68 65  ER=1 is set, the
5730: 6e 20 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20  n byte-order is 
5740: 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74  determined.** at
5750: 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69   run-time..*/.#i
5760: 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  fdef SQLITE_AMAL
5770: 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e 73 74 20 69  GAMATION.const i
5780: 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20  nt sqlite3one = 
5790: 31 3b 0a 23 65 6c 73 65 0a 65 78 74 65 72 6e 20  1;.#else.extern 
57a0: 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65  const int sqlite
57b0: 33 6f 6e 65 3b 0a 23 65 6e 64 69 66 0a 23 69 66  3one;.#endif.#if
57c0: 20 28 64 65 66 69 6e 65 64 28 69 33 38 36 29 20   (defined(i386) 
57d0: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
57e0: 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65  _i386__)   || de
57f0: 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c  fined(_M_IX86) |
5800: 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69  |    \.     defi
5810: 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c  ned(__x86_64) ||
5820: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36   defined(__x86_6
5830: 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  4__) || defined(
5840: 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20 5c  _M_X64)  ||    \
5850: 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d  .     defined(_M
5860: 5f 41 4d 44 36 34 29 20 7c 7c 20 64 65 66 69 6e  _AMD64) || defin
5870: 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20 7c  ed(_M_ARM)     |
5880: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29  | defined(__x86)
5890: 20 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20     ||    \.     
58a0: 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29  defined(__arm__)
58b0: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
58c0: 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54  LITE_RUNTIME_BYT
58d0: 45 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65  EORDER).# define
58e0: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
58f0: 52 20 20 20 20 31 32 33 34 0a 23 20 64 65 66 69  R    1234.# defi
5900: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  ne SQLITE_BIGEND
5910: 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e  IAN    0.# defin
5920: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
5930: 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65  NDIAN 1.# define
5940: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
5950: 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31  IVE  SQLITE_UTF1
5960: 36 4c 45 0a 23 65 6e 64 69 66 0a 23 69 66 20 28  6LE.#endif.#if (
5970: 64 65 66 69 6e 65 64 28 73 70 61 72 63 29 20 20  defined(sparc)  
5980: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 70    || defined(__p
5990: 70 63 5f 5f 29 29 20 20 5c 0a 20 20 20 20 26 26  pc__))  \.    &&
59a0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
59b0: 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44  _RUNTIME_BYTEORD
59c0: 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ER).# define SQL
59d0: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20  ITE_BYTEORDER   
59e0: 20 34 33 32 31 0a 23 20 64 65 66 69 6e 65 20 53   4321.# define S
59f0: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
5a00: 20 20 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51     1.# define SQ
5a10: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
5a20: 4e 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  N 0.# define SQL
5a30: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
5a40: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 0a   SQLITE_UTF16BE.
5a50: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
5a60: 6e 65 64 28 53 51 4c 49 54 45 5f 42 59 54 45 4f  ned(SQLITE_BYTEO
5a70: 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53  RDER).# define S
5a80: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20  QLITE_BYTEORDER 
5a90: 20 20 20 30 20 20 20 20 20 2f 2a 20 30 20 6d 65     0     /* 0 me
5aa0: 61 6e 73 20 22 75 6e 6b 6e 6f 77 6e 20 61 74 20  ans "unknown at 
5ab0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 22 20 2a 2f  compile-time" */
5ac0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5ad0: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a  _BIGENDIAN    (*
5ae0: 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65  (char *)(&sqlite
5af0: 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69  3one)==0).# defi
5b00: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
5b10: 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a  ENDIAN (*(char *
5b20: 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d  )(&sqlite3one)==
5b30: 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1).# define SQLI
5b40: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20  TE_UTF16NATIVE  
5b50: 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41  (SQLITE_BIGENDIA
5b60: 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  N?SQLITE_UTF16BE
5b70: 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29  :SQLITE_UTF16LE)
5b80: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43  .#endif../*.** C
5b90: 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65  onstants for the
5ba0: 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61   largest and sma
5bb0: 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36  llest possible 6
5bc0: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
5bd0: 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20  egers..** These 
5be0: 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69 67  macros are desig
5bf0: 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72  ned to work corr
5c00: 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32  ectly on both 32
5c10: 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a  -bit and 64-bit.
5c20: 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f  ** compilers..*/
5c30: 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54  .#define LARGEST
5c40: 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66 66  _INT64  (0xfffff
5c50: 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66 66  fff|(((i64)0x7ff
5c60: 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65  fffff)<<32)).#de
5c70: 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e  fine SMALLEST_IN
5c80: 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d  T64 (((i64)-1) -
5c90: 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a   LARGEST_INT64).
5ca0: 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e 64 20 75 70  ./* .** Round up
5cb0: 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65   a number to the
5cc0: 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75 6c   next larger mul
5cd0: 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68 69  tiple of 8.  Thi
5ce0: 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20  s is used.** to 
5cf0: 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c 69  force 8-byte ali
5d00: 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74  gnment on 64-bit
5d10: 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2e 0a   architectures..
5d20: 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44  */.#define ROUND
5d30: 38 28 78 29 20 20 20 20 20 28 28 28 78 29 2b 37  8(x)     (((x)+7
5d40: 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75  )&~7)../*.** Rou
5d50: 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e  nd down to the n
5d60: 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65 20  earest multiple 
5d70: 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  of 8.*/.#define 
5d80: 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28 28  ROUNDDOWN8(x) ((
5d90: 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73  x)&~7)../*.** As
5da0: 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70 6f  sert that the po
5db0: 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67 6e  inter X is align
5dc0: 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65 20  ed to an 8-byte 
5dd0: 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73 0a  boundary.  This.
5de0: 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  ** macro is used
5df0: 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73 73   only within ass
5e00: 65 72 74 28 29 20 74 6f 20 76 65 72 69 66 79 20  ert() to verify 
5e10: 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65  that the code ge
5e20: 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d  ts.** all alignm
5e30: 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73  ent restrictions
5e40: 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20   correct..**.** 
5e50: 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49 54  Except, if SQLIT
5e60: 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44  E_4_BYTE_ALIGNED
5e70: 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e  _MALLOC is defin
5e80: 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20  ed, then the.** 
5e90: 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f  underlying mallo
5ea0: 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  c() implementati
5eb0: 6f 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20  on might return 
5ec0: 75 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65  us 4-byte aligne
5ed0: 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20  d.** pointers.  
5ee0: 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e  In that case, on
5ef0: 6c 79 20 76 65 72 69 66 79 20 34 2d 62 79 74 65  ly verify 4-byte
5f00: 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23   alignment..*/.#
5f10: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42  ifdef SQLITE_4_B
5f20: 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c  YTE_ALIGNED_MALL
5f30: 4f 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48  OC.# define EIGH
5f40: 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54  T_BYTE_ALIGNMENT
5f50: 28 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29  (X)   ((((char*)
5f60: 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26  (X) - (char*)0)&
5f70: 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64  3)==0).#else.# d
5f80: 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45  efine EIGHT_BYTE
5f90: 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20  _ALIGNMENT(X)   
5fa0: 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20  ((((char*)(X) - 
5fb0: 28 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29  (char*)0)&7)==0)
5fc0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
5fd0: 69 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70  isable MMAP on p
5fe0: 6c 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69  latforms where i
5ff0: 74 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f  t is known to no
6000: 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65  t work.*/.#if de
6010: 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f  fined(__OpenBSD_
6020: 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f  _) || defined(__
6030: 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65  QNXNTO__).# unde
6040: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  f SQLITE_MAX_MMA
6050: 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20  P_SIZE.# define 
6060: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
6070: 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  SIZE 0.#endif../
6080: 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78  *.** Default max
6090: 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d  imum size of mem
60a0: 6f 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f  ory used by memo
60b0: 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e  ry-mapped I/O in
60c0: 20 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64   the VFS.*/.#ifd
60d0: 65 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69  ef __APPLE__.# i
60e0: 6e 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f  nclude <TargetCo
60f0: 6e 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 20  nditionals.h>.# 
6100: 69 66 20 54 41 52 47 45 54 5f 4f 53 5f 49 50 48  if TARGET_OS_IPH
6110: 4f 4e 45 0a 23 20 20 20 75 6e 64 65 66 20 53 51  ONE.#   undef SQ
6120: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
6130: 5a 45 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  ZE.#   define SQ
6140: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
6150: 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e  ZE 0.# endif.#en
6160: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
6170: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
6180: 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  .# if defined(__
6190: 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20  linux__) \.  || 
61a0: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20  defined(_WIN32) 
61b0: 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28  \.  || (defined(
61c0: 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65  __APPLE__) && de
61d0: 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29  fined(__MACH__))
61e0: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
61f0: 5f 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65  __sun) \.  || de
6200: 66 69 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f  fined(__FreeBSD_
6210: 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  _) \.  || define
6220: 64 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29  d(__DragonFly__)
6230: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
6240: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
6250: 20 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20   0x7fff0000  /* 
6260: 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20  2147418112 */.# 
6270: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
6280: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
6290: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
62a0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
62b0: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20  AX_MMAP_SIZE_xc 
62c0: 31 20 2f 2a 20 65 78 63 6c 75 64 65 20 66 72 6f  1 /* exclude fro
62d0: 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e  m ctime.c */.#en
62e0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  dif../*.** The d
62f0: 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45  efault MMAP_SIZE
6300: 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20   is zero on all 
6310: 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20  platforms.  Or, 
6320: 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72  even if a larger
6330: 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50  .** default MMAP
6340: 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66 69  _SIZE is specifi
6350: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
6360: 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68  me, make sure th
6370: 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f  at it does.** no
6380: 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61 78  t exceed the max
6390: 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a  imum mmap size..
63a0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
63b0: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
63c0: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
63d0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
63e0: 5f 53 49 5a 45 20 30 0a 23 20 64 65 66 69 6e 65  _SIZE 0.# define
63f0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
6400: 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 20  MMAP_SIZE_xc 1  
6410: 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20  /* Exclude from 
6420: 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69  ctime.c */.#endi
6430: 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46  f.#if SQLITE_DEF
6440: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53  AULT_MMAP_SIZE>S
6450: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
6460: 49 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  IZE.# undef SQLI
6470: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
6480: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
6490: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
64a0: 50 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41  P_SIZE SQLITE_MA
64b0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64  X_MMAP_SIZE.#end
64c0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f  if../*.** Only o
64d0: 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41  ne of SQLITE_ENA
64e0: 42 4c 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c  BLE_STAT3 or SQL
64f0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
6500: 20 63 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e   can be defined.
6510: 0a 2a 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20  .** Priority is 
6520: 67 69 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f  given to SQLITE_
6530: 45 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49  ENABLE_STAT4.  I
6540: 66 20 65 69 74 68 65 72 20 61 72 65 20 64 65 66  f either are def
6550: 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65  ined, also.** de
6560: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
6570: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
6580: 34 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  4.*/.#ifdef SQLI
6590: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a  TE_ENABLE_STAT4.
65a0: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
65b0: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65  NABLE_STAT3.# de
65c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
65d0: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
65e0: 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4 1.#elif SQLITE
65f0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20  _ENABLE_STAT3.# 
6600: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
6610: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
6620: 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49  AT4 1.#elif SQLI
6630: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
6640: 4f 52 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66  OR_STAT4.# undef
6650: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
6660: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65  TAT3_OR_STAT4.#e
6670: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45  ndif../*.** SELE
6680: 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20  CTTRACE_ENABLED 
6690: 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20 31  will be either 1
66a0: 20 6f 72 20 30 20 64 65 70 65 6e 64 69 6e 67 20   or 0 depending 
66b0: 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  on whether or no
66c0: 74 0a 2a 2a 20 74 68 65 20 53 65 6c 65 63 74 20  t.** the Select 
66d0: 71 75 65 72 79 20 67 65 6e 65 72 61 74 6f 72 20  query generator 
66e0: 74 72 61 63 69 6e 67 20 6c 6f 67 69 63 20 69 73  tracing logic is
66f0: 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23   turned on..*/.#
6700: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
6710: 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  E_DEBUG) || defi
6720: 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
6730: 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29 0a 23  E_SELECTTRACE).#
6740: 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52   define SELECTTR
6750: 41 43 45 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65  ACE_ENABLED 1.#e
6760: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 45 4c  lse.# define SEL
6770: 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
6780: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
6790: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
67a0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
67b0: 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
67c0: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75 73  to store the bus
67d0: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
67e0: 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65  lback for a give
67f0: 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e  n sqlite handle.
6800: 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69   .**.** The sqli
6810: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d  te.busyHandler m
6820: 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c  ember of the sql
6830: 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61  ite struct conta
6840: 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20  ins the busy.** 
6850: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65  callback for the
6860: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
6870: 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70 65  . Each pager ope
6880: 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c 69  ned via the sqli
6890: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20  te.** handle is 
68a0: 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72  passed a pointer
68b0: 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48   to sqlite.busyH
68c0: 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79  andler. The busy
68d0: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
68e0: 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c  back is currentl
68f0: 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66  y invoked only f
6900: 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72  rom within pager
6910: 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .c..*/.typedef s
6920: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
6930: 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73  r BusyHandler;.s
6940: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
6950: 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e  r {.  int (*xFun
6960: 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20  c)(void *,int); 
6970: 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c   /* The busy cal
6980: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
6990: 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  *pArg;          
69a0: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
69b0: 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62  rg to busy callb
69c0: 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75  ack */.  int nBu
69d0: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
69e0: 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74      /* Increment
69f0: 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75 73  ed with each bus
6a00: 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  y call */.};../*
6a10: 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  .** Name of the 
6a20: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
6a30: 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74  table.  The mast
6a40: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
6a50: 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61  e.** is a specia
6a60: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  l table that hol
6a70: 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64  ds the names and
6a80: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61   attributes of a
6a90: 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65  ll.** user table
6aa0: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a  s and indices..*
6ab0: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
6ac0: 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c  _NAME       "sql
6ad0: 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66  ite_master".#def
6ae0: 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f  ine TEMP_MASTER_
6af0: 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65  NAME  "sqlite_te
6b00: 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a  mp_master"../*.*
6b10: 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  * The root-page 
6b20: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
6b30: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f  tabase table..*/
6b40: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
6b50: 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a  ROOT       1../*
6b60: 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  .** The name of 
6b70: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
6b80: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
6b90: 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28  EMA_TABLE(x)  ((
6ba0: 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28  !OMIT_TEMPDB)&&(
6bb0: 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45  x==1)?TEMP_MASTE
6bc0: 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41  R_NAME:MASTER_NA
6bd0: 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e  ME)../*.** A con
6be0: 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74  venience macro t
6bf0: 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
6c00: 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  number of elemen
6c10: 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61  ts in.** an arra
6c20: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  y..*/.#define Ar
6c30: 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28  raySize(X)    ((
6c40: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
6c50: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f  izeof(X[0])))../
6c60: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69  *.** Determine i
6c70: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
6c80: 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  s a power of two
6c90: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f  .*/.#define IsPo
6ca0: 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58  werOfTwo(X) (((X
6cb0: 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a  )&((X)-1))==0)..
6cc0: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
6cd0: 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64  ing value as a d
6ce0: 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20  estructor means 
6cf0: 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62  to use sqlite3Db
6d00: 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73  Free()..** The s
6d10: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 72  qlite3DbFree() r
6d20: 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73 20  outine requires 
6d30: 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69  two parameters i
6d40: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a 2a  nstead of the .*
6d50: 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20  * one parameter 
6d60: 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73  that destructors
6d70: 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20   normally want. 
6d80: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69   So we have to i
6d90: 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68 69  ntroduce .** thi
6da0: 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68  s magic value th
6db0: 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77  at the code know
6dc0: 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66  s to handle diff
6dd0: 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a 2a  erently.  Any .*
6de0: 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77  * pointer will w
6df0: 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67  ork here as long
6e00: 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69 6e   as it is distin
6e10: 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53  ct from SQLITE_S
6e20: 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c  TATIC.** and SQL
6e30: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a  ITE_TRANSIENT..*
6e40: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
6e50: 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c  _DYNAMIC   ((sql
6e60: 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f  ite3_destructor_
6e70: 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c  type)sqlite3Mall
6e80: 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57  ocSize)../*.** W
6e90: 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  hen SQLITE_OMIT_
6ea0: 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20  WSD is defined, 
6eb0: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
6ec0: 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72  e target platfor
6ed0: 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75  m does.** not su
6ee0: 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53  pport Writable S
6ef0: 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44 29  tatic Data (WSD)
6f00: 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20   such as global 
6f10: 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69 61  and static varia
6f20: 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72  bles..** All var
6f30: 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68  iables must eith
6f40: 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61  er be on the sta
6f50: 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c  ck or dynamicall
6f60: 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d  y allocated from
6f70: 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57  .** the heap.  W
6f80: 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70  hen WSD is unsup
6f90: 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72 69  ported, the vari
6fa0: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
6fb0: 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74  s scattered.** t
6fc0: 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51  hroughout the SQ
6fd0: 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62  Lite code must b
6fe0: 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20  ecome constants 
6ff0: 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53 51  instead.  The SQ
7000: 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72  LITE_WSD.** macr
7010: 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68  o is used for th
7020: 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64  is purpose.  And
7030: 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65   instead of refe
7040: 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69  rencing the vari
7050: 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79  able.** directly
7060: 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e  , we use its con
7070: 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74  stant as a key t
7080: 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e  o lookup the run
7090: 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a  -time allocated.
70a0: 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20 68  ** buffer that h
70b0: 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61 62  olds real variab
70c0: 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e  le.  The constan
70d0: 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e  t is also the in
70e0: 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72  itializer.** for
70f0: 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c   the run-time al
7100: 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a  located buffer..
7110: 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75  **.** In the usu
7120: 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57 53  al case where WS
7130: 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20  D is supported, 
7140: 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61  the SQLITE_WSD a
7150: 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63  nd GLOBAL.** mac
7160: 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70  ros become no-op
7170: 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20  s and have zero 
7180: 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61  performance impa
7190: 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ct..*/.#ifdef SQ
71a0: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20  LITE_OMIT_WSD.  
71b0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
71c0: 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69  SD const.  #defi
71d0: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28  ne GLOBAL(t,v) (
71e0: 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64  *(t*)sqlite3_wsd
71f0: 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76  _find((void*)&(v
7200: 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20  ), sizeof(v))). 
7210: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
7220: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f  GlobalConfig GLO
7230: 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74  BAL(struct Sqlit
7240: 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65  e3Config, sqlite
7250: 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73  3Config).  int s
7260: 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28  qlite3_wsd_init(
7270: 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20  int N, int J);. 
7280: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77   void *sqlite3_w
7290: 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c  sd_find(void *K,
72a0: 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20   int L);.#else. 
72b0: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
72c0: 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20 47  WSD .  #define G
72d0: 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23  LOBAL(t,v) v.  #
72e0: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
72f0: 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74  obalConfig sqlit
7300: 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a  e3Config.#endif.
7310: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
7320: 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20  wing macros are 
7330: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
7340: 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
7350: 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b  gs and to.** mak
7360: 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75  e it clear to hu
7370: 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e  man readers when
7380: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
7390: 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65 72  meter is deliber
73a0: 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20 75  ately .** left u
73b0: 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68 65  nused within the
73c0: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
73d0: 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c  ion. This usuall
73e0: 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a  y happens when.*
73f0: 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  * a function is 
7400: 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e  called via a fun
7410: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46  ction pointer. F
7420: 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20 0a  or example the .
7430: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
7440: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72  n of an SQL aggr
7450: 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62  egate step callb
7460: 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20  ack may not use 
7470: 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  the.** parameter
7480: 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20   indicating the 
7490: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
74a0: 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  nts passed to th
74b0: 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20  e aggregate,.** 
74c0: 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74  if it knows that
74d0: 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65   this is enforce
74e0: 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a  d elsewhere..**.
74f0: 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69  ** When a functi
7500: 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  on parameter is 
7510: 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20  not used at all 
7520: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
7530: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a  of a function,.*
7540: 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c  * it is generall
7550: 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64  y named "NotUsed
7560: 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20  " or "NotUsed2" 
7570: 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65  to make things e
7580: 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20  ven clearer..** 
7590: 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d  However, these m
75a0: 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62  acros may also b
75b0: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
75c0: 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61  ss warnings rela
75d0: 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65  ted to.** parame
75e0: 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72  ters that may or
75f0: 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64   may not be used
7600: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f   depending on co
7610: 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  mpilation option
7620: 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c  s..** For exampl
7630: 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65  e those paramete
7640: 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20  rs only used in 
7650: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
7660: 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a  nts. In these.**
7670: 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61 6d   cases the param
7680: 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20  eters are named 
7690: 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61 6c  as per the usual
76a0: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f   conventions..*/
76b0: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
76c0: 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f  PARAMETER(x) (vo
76d0: 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55  id)(x).#define U
76e0: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32  NUSED_PARAMETER2
76f0: 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52  (x,y) UNUSED_PAR
7700: 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44  AMETER(x),UNUSED
7710: 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f  _PARAMETER(y)../
7720: 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66  *.** Forward ref
7730: 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63  erences to struc
7740: 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66  tures.*/.typedef
7750: 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20   struct AggInfo 
7760: 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  AggInfo;.typedef
7770: 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74   struct AuthCont
7780: 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b  ext AuthContext;
7790: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
77a0: 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f  AutoincInfo Auto
77b0: 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  incInfo;.typedef
77c0: 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20 42   struct Bitvec B
77d0: 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73  itvec;.typedef s
77e0: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f  truct CollSeq Co
77f0: 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73  llSeq;.typedef s
7800: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c  truct Column Col
7810: 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  umn;.typedef str
7820: 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64  uct Db Db;.typed
7830: 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d 61  ef struct Schema
7840: 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66   Schema;.typedef
7850: 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78 70   struct Expr Exp
7860: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
7870: 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c  t ExprList ExprL
7880: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
7890: 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78 70  uct ExprSpan Exp
78a0: 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20 73  rSpan;.typedef s
78b0: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
78c0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
78d0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
78e0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
78f0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
7900: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
7910: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
7920: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
7930: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
7940: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
7950: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
7960: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
7970: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7980: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
7990: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
79a0: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
79b0: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
79c0: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
79d0: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
79e0: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
79f0: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
7a00: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
7a10: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
7a20: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
7a30: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
7a40: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
7a50: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
7a60: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
7a70: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7a80: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
7a90: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 69 6e  edef struct Prin
7aa0: 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69 6e  tfArguments Prin
7ab0: 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79 70  tfArguments;.typ
7ac0: 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77 53  edef struct RowS
7ad0: 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64  et RowSet;.typed
7ae0: 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70 6f  ef struct Savepo
7af0: 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74  int Savepoint;.t
7b00: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
7b10: 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70  lect Select;.typ
7b20: 65 64 65 66 20 73 74 72 75 63 74 20 53 51 4c 69  edef struct SQLi
7b30: 74 65 54 68 72 65 61 64 20 53 51 4c 69 74 65 54  teThread SQLiteT
7b40: 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66 20 73  hread;.typedef s
7b50: 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74  truct SelectDest
7b60: 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79 70   SelectDest;.typ
7b70: 65 64 65 66 20 73 74 72 75 63 74 20 53 72 63 4c  edef struct SrcL
7b80: 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79 70  ist SrcList;.typ
7b90: 65 64 65 66 20 73 74 72 75 63 74 20 53 74 72 41  edef struct StrA
7ba0: 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a 74  ccum StrAccum;.t
7bb0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61  ypedef struct Ta
7bc0: 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65 64  ble Table;.typed
7bd0: 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 4c  ef struct TableL
7be0: 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74  ock TableLock;.t
7bf0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 6f  ypedef struct To
7c00: 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64  ken Token;.typed
7c10: 65 66 20 73 74 72 75 63 74 20 54 72 65 65 56 69  ef struct TreeVi
7c20: 65 77 20 54 72 65 65 56 69 65 77 3b 0a 74 79 70  ew TreeView;.typ
7c30: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
7c40: 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74 79 70  ger Trigger;.typ
7c50: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
7c60: 67 65 72 50 72 67 20 54 72 69 67 67 65 72 50 72  gerPrg TriggerPr
7c70: 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  g;.typedef struc
7c80: 74 20 54 72 69 67 67 65 72 53 74 65 70 20 54 72  t TriggerStep Tr
7c90: 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70 65 64  iggerStep;.typed
7ca0: 65 66 20 73 74 72 75 63 74 20 55 6e 70 61 63 6b  ef struct Unpack
7cb0: 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63 6b 65  edRecord Unpacke
7cc0: 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64 65 66  dRecord;.typedef
7cd0: 20 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 56   struct VTable V
7ce0: 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  Table;.typedef s
7cf0: 74 72 75 63 74 20 56 74 61 62 43 74 78 20 56 74  truct VtabCtx Vt
7d00: 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20 73  abCtx;.typedef s
7d10: 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61 6c  truct Walker Wal
7d20: 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ker;.typedef str
7d30: 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57 68  uct WhereInfo Wh
7d40: 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  ereInfo;.typedef
7d50: 20 73 74 72 75 63 74 20 57 69 74 68 20 57 69 74   struct With Wit
7d60: 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20  h;../*.** Defer 
7d70: 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68 20  sourcing vdbe.h 
7d80: 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74 69  and btree.h unti
7d90: 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38 22  l after the "u8"
7da0: 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73 79 48 61   and .** "BusyHa
7db0: 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66 73 2e  ndler" typedefs.
7dc0: 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72 65 71   vdbe.h also req
7dd0: 75 69 72 65 73 20 61 20 66 65 77 20 6f 66 20 74  uires a few of t
7de0: 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69  he opaque.** poi
7df0: 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e 65 2e  nter types (i.e.
7e00: 20 46 75 6e 63 44 65 66 29 20 64 65 66 69 6e 65   FuncDef) define
7e10: 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63  d above..*/.#inc
7e20: 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22 0a 23  lude "btree.h".#
7e30: 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68 22  include "vdbe.h"
7e40: 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67 65 72  .#include "pager
7e50: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 63  .h".#include "pc
7e60: 61 63 68 65 2e 68 22 0a 0a 23 69 6e 63 6c 75 64  ache.h"..#includ
7e70: 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64  e "os.h".#includ
7e80: 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a 0a 2f 2a  e "mutex.h".../*
7e90: 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73  .** Each databas
7ea0: 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63 63  e file to be acc
7eb0: 65 73 73 65 64 20 62 79 20 74 68 65 20 73 79 73  essed by the sys
7ec0: 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  tem is an instan
7ed0: 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f 6c  ce.** of the fol
7ee0: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
7ef0: 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f 72  .  There are nor
7f00: 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68 65  mally two of the
7f10: 73 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2a  se structures.**
7f20: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61   in the sqlite.a
7f30: 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44 62  Db[] array.  aDb
7f40: 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e 20  [0] is the main 
7f50: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
7f60: 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20 74  d.** aDb[1] is t
7f70: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
7f80: 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 65   used to hold te
7f90: 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20  mporary tables. 
7fa0: 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64   Additional.** d
7fb0: 61 74 61 62 61 73 65 73 20 6d 61 79 20 62 65 20  atabases may be 
7fc0: 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74 72  attached..*/.str
7fd0: 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72 20  uct Db {.  char 
7fe0: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
7ff0: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
8000: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 42 74  database */.  Bt
8010: 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20  ree *pBt;       
8020: 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65 65     /* The B*Tree
8030: 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 74   structure for t
8040: 68 69 73 20 64 61 74 61 62 61 73 65 20 66 69 6c  his database fil
8050: 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74 79  e */.  u8 safety
8060: 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48  _level;     /* H
8070: 6f 77 20 61 67 67 72 65 73 73 69 76 65 20 61 74  ow aggressive at
8080: 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74 6f   syncing data to
8090: 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63 68 65 6d   disk */.  Schem
80a0: 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
80b0: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 64 61  /* Pointer to da
80c0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28 70  tabase schema (p
80d0: 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64 29 20  ossibly shared) 
80e0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
80f0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
8100: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
8110: 75 72 65 20 73 74 6f 72 65 73 20 61 20 64 61 74  ure stores a dat
8120: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a  abase schema..**
8130: 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61 20  .** Most Schema 
8140: 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73 73 6f  objects are asso
8150: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 42 74  ciated with a Bt
8160: 72 65 65 2e 20 20 54 68 65 20 65 78 63 65 70 74  ree.  The except
8170: 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53 63  ion is.** the Sc
8180: 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54 45 4d  hema for the TEM
8190: 50 20 64 61 74 61 62 61 65 73 20 28 73 71 6c 69  P databaes (sqli
81a0: 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68 69 63  te3.aDb[1]) whic
81b0: 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e 64 69  h is free-standi
81c0: 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65 64  ng..** In shared
81d0: 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61 20 73   cache mode, a s
81e0: 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f 62 6a  ingle Schema obj
81f0: 65 63 74 20 63 61 6e 20 62 65 20 73 68 61 72 65  ect can be share
8200: 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a  d by multiple.**
8210: 20 42 74 72 65 65 73 20 74 68 61 74 20 72 65 66   Btrees that ref
8220: 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20 75  er to the same u
8230: 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68 61 72  nderlying BtShar
8240: 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 0a 2a  ed object..** .*
8250: 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  * Schema objects
8260: 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
8270: 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 77  ly deallocated w
8280: 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74 72  hen the last Btr
8290: 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65 72  ee that.** refer
82a0: 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64 65  ences them is de
82b0: 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20 54  stroyed.   The T
82c0: 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d 61  EMP Schema is ma
82d0: 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79 0a  nually freed by.
82e0: 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  ** sqlite3_close
82f0: 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65 61  ()..*.** A threa
8300: 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69 6e  d must be holdin
8310: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
8320: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 42   corresponding B
8330: 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a  tree in order.**
8340: 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65 6d   to access Schem
8350: 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69 73  a content.  This
8360: 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68   implies that th
8370: 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61 6c  e thread must al
8380: 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67  so be.** holding
8390: 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20   a mutex on the 
83a0: 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74 69  sqlite3 connecti
83b0: 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20  on pointer that 
83c0: 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e 0a  owns the Btree..
83d0: 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53 63  ** For a TEMP Sc
83e0: 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20 63  hema, only the c
83f0: 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20  onnection mutex 
8400: 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a  is required..*/.
8410: 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b 0a  struct Schema {.
8420: 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f 6f    int schema_coo
8430: 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62 61  kie;   /* Databa
8440: 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  se schema versio
8450: 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69  n number for thi
8460: 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  s file */.  int 
8470: 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20 20  iGeneration;    
8480: 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20 63   /* Generation c
8490: 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d 65  ounter.  Increme
84a0: 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20 63  nted with each c
84b0: 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68 20  hange */.  Hash 
84c0: 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20 20  tblHash;        
84d0: 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69 6e  /* All tables in
84e0: 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
84f0: 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68 3b  .  Hash idxHash;
8500: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 28          /* All (
8510: 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20 69  named) indices i
8520: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
8530: 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61 73  /.  Hash trigHas
8540: 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  h;       /* All 
8550: 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65 64  triggers indexed
8560: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
8570: 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20 20  sh fkeyHash;    
8580: 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69 67     /* All foreig
8590: 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72 65  n keys by refere
85a0: 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 20  nced table name 
85b0: 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65 71  */.  Table *pSeq
85c0: 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  Tab;      /* The
85d0: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
85e0: 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20 41   table used by A
85f0: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
8600: 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74    u8 file_format
8610: 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  ;      /* Schema
8620: 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20   format version 
8630: 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  for this file */
8640: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
8650: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
8660: 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62 79  encoding used by
8670: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
8680: 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46 6c  /.  u16 schemaFl
8690: 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67  ags;     /* Flag
86a0: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
86b0: 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f  h this schema */
86c0: 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69 7a  .  int cache_siz
86d0: 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  e;      /* Numbe
86e0: 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75 73  r of pages to us
86f0: 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20 2a  e in the cache *
8700: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  /.};../*.** Thes
8710: 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20  e macros can be 
8720: 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65  used to test, se
8730: 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73  t, or clear bits
8740: 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44 62 2e 70   in the .** Db.p
8750: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69  Schema->flags fi
8760: 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
8770: 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c  DbHasProperty(D,
8780: 49 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e  I,P)     (((D)->
8790: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
87a0: 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29  schemaFlags&(P))
87b0: 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44  ==(P)).#define D
87c0: 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28  bHasAnyProperty(
87d0: 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61  D,I,P)  (((D)->a
87e0: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
87f0: 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 21  chemaFlags&(P))!
8800: 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65  =0).#define DbSe
8810: 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  tProperty(D,I,P)
8820: 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d       (D)->aDb[I]
8830: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
8840: 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  Flags|=(P).#defi
8850: 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72  ne DbClearProper
8860: 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d  ty(D,I,P)   (D)-
8870: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
8880: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28  >schemaFlags&=~(
8890: 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  P)../*.** Allowe
88a0: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
88b0: 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   DB.pSchema->fla
88c0: 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  gs field..**.** 
88d0: 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  The DB_SchemaLoa
88e0: 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ded flag is set 
88f0: 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61  after the databa
8900: 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  se schema has be
8910: 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20  en.** read into 
8920: 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61  internal hash ta
8930: 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55  bles..**.** DB_U
8940: 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e  nresetViews mean
8950: 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f  s that one or mo
8960: 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f  re views have co
8970: 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a  lumn names that.
8980: 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c  ** have been fil
8990: 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65  led out.  If the
89a0: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c   schema changes,
89b0: 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61   these column na
89c0: 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61  mes might.** cha
89d0: 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20  nges and so the 
89e0: 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74  view will need t
89f0: 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23  o be reset..*/.#
8a00: 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61  define DB_Schema
8a10: 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31  Loaded    0x0001
8a20: 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20    /* The schema 
8a30: 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20  has been loaded 
8a40: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e  */.#define DB_Un
8a50: 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78  resetViews    0x
8a60: 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69  0002  /* Some vi
8a70: 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64  ews have defined
8a80: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f   column names */
8a90: 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74  .#define DB_Empt
8aa0: 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30  y           0x00
8ab0: 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20  04  /* The file 
8ac0: 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68  is empty (length
8ad0: 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a   0 bytes) */../*
8ae0: 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  .** The number o
8af0: 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64  f different kind
8b00: 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74  s of things that
8b10: 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a   can be limited.
8b20: 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c  ** using the sql
8b30: 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74  ite3_limit() int
8b40: 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69  erface..*/.#defi
8b50: 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49  ne SQLITE_N_LIMI
8b60: 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  T (SQLITE_LIMIT_
8b70: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2b 31  WORKER_THREADS+1
8b80: 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69  )../*.** Lookasi
8b90: 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73  de malloc is a s
8ba0: 65 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65  et of fixed-size
8bb0: 20 62 75 66 66 65 72 73 20 74 68 61 74 20 63 61   buffers that ca
8bc0: 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20  n be used.** to 
8bd0: 73 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72  satisfy small tr
8be0: 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61  ansient memory a
8bf0: 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73  llocation reques
8c00: 74 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a  ts for objects.*
8c10: 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  * associated wit
8c20: 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64  h a particular d
8c30: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
8c40: 6f 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a  on.  The use of.
8c50: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** lookaside mal
8c60: 6c 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20 73  loc provides a s
8c70: 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f  ignificant perfo
8c80: 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65  rmance enhanceme
8c90: 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30  nt.** (approx 10
8ca0: 25 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e  %) by avoiding n
8cb0: 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66  umerous malloc/f
8cc0: 72 65 65 20 72 65 71 75 65 73 74 73 20 77 68 69  ree requests whi
8cd0: 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51  le parsing.** SQ
8ce0: 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  L statements..**
8cf0: 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64  .** The Lookasid
8d00: 65 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  e structure hold
8d10: 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  s configuration 
8d20: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
8d30: 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69  t the.** lookasi
8d40: 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73  de malloc subsys
8d50: 74 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c  tem.  Each avail
8d60: 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  able memory allo
8d70: 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65  cation in.** the
8d80: 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79   lookaside subsy
8d90: 73 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f  stem is stored o
8da0: 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
8db0: 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  of LookasideSlot
8dc0: 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a  .** objects..**.
8dd0: 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ** Lookaside all
8de0: 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c  ocations are onl
8df0: 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62  y allowed for ob
8e00: 6a 65 63 74 73 20 74 68 61 74 20 61 72 65 20 61  jects that are a
8e10: 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74  ssociated.** wit
8e20: 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64  h a particular d
8e30: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
8e40: 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65  on.  Hence, sche
8e50: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63  ma information c
8e60: 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72  annot.** be stor
8e70: 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20  ed in lookaside 
8e80: 62 65 63 61 75 73 65 20 69 6e 20 73 68 61 72 65  because in share
8e90: 64 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65  d cache mode the
8ea0: 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   schema informat
8eb0: 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64  ion.** is shared
8ec0: 20 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74   by multiple dat
8ed0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
8ee0: 73 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77  s.  Therefore, w
8ef0: 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20  hile parsing.** 
8f00: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
8f10: 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64  on, the Lookasid
8f20: 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20  e.bEnabled flag 
8f30: 69 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68  is cleared so th
8f40: 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  at.** lookaside 
8f50: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
8f60: 6e 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73  not used to cons
8f70: 74 72 75 63 74 20 74 68 65 20 73 63 68 65 6d 61  truct the schema
8f80: 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72   objects..*/.str
8f90: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a  uct Lookaside {.
8fa0: 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20 20    u16 sz;       
8fb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
8fc0: 65 20 6f 66 20 65 61 63 68 20 62 75 66 66 65 72  e of each buffer
8fd0: 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75   in bytes */.  u
8fe0: 38 20 62 45 6e 61 62 6c 65 64 3b 20 20 20 20 20  8 bEnabled;     
8ff0: 20 20 20 20 20 20 20 2f 2a 20 46 61 6c 73 65 20         /* False 
9000: 74 6f 20 64 69 73 61 62 6c 65 20 6e 65 77 20 6c  to disable new l
9010: 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74  ookaside allocat
9020: 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61  ions */.  u8 bMa
9030: 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20  lloced;         
9040: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74    /* True if pSt
9050: 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  art obtained fro
9060: 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
9070: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74  () */.  int nOut
9080: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9090: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75 66  /* Number of buf
90a0: 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20 63  fers currently c
90b0: 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20  hecked out */.  
90c0: 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20 20  int mxOut;      
90d0: 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68 77          /* Highw
90e0: 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f  ater mark for nO
90f0: 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74  ut */.  int anSt
9100: 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20  at[3];          
9110: 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a 20  /* 0: hits.  1: 
9120: 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32 3a  size misses.  2:
9130: 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a   full misses */.
9140: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
9150: 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73  *pFree;   /* Lis
9160: 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62  t of available b
9170: 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64  uffers */.  void
9180: 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20   *pStart;       
9190: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
91a0: 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d  e of available m
91b0: 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20  emory space */. 
91c0: 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20   void *pEnd;    
91d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
91e0: 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20  t byte past end 
91f0: 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61  of available spa
9200: 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20  ce */.};.struct 
9210: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a  LookasideSlot {.
9220: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
9230: 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65  *pNext;    /* Ne
9240: 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65  xt buffer in the
9250: 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75   list of free bu
9260: 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ffers */.};../*.
9270: 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20  ** A hash table 
9280: 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  for function def
9290: 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  initions..**.** 
92a0: 48 61 73 68 20 65 61 63 68 20 46 75 6e 63 44 65  Hash each FuncDe
92b0: 66 20 73 74 72 75 63 74 75 72 65 20 69 6e 74 6f  f structure into
92c0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63   one of the Func
92d0: 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74  DefHash.a[] slot
92e0: 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73  s..** Collisions
92f0: 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e 63   are on the Func
9300: 44 65 66 2e 70 48 61 73 68 20 63 68 61 69 6e 2e  Def.pHash chain.
9310: 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44  .*/.struct FuncD
9320: 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63 44  efHash {.  FuncD
9330: 65 66 20 2a 61 5b 32 33 5d 3b 20 20 20 20 20 20  ef *a[23];      
9340: 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 66   /* Hash table f
9350: 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  or functions */.
9360: 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  };..#ifdef SQLIT
9370: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
9380: 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f  ATION./*.** Info
9390: 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e 20  rmation held in 
93a0: 74 68 65 20 22 73 71 6c 69 74 65 33 22 20 64 61  the "sqlite3" da
93b0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
93c0: 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73 65  n object and use
93d0: 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20 75  d.** to manage u
93e0: 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69  ser authenticati
93f0: 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  on..*/.typedef s
9400: 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73  truct sqlite3_us
9410: 65 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f 75  erauth sqlite3_u
9420: 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74 20  serauth;.struct 
9430: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
9440: 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76 65   {.  u8 authLeve
9450: 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l;              
9460: 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 75     /* Current au
9470: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65 76  thentication lev
9480: 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75 74  el */.  int nAut
9490: 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20  hPW;            
94a0: 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
94b0: 20 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e 20   the zAuthPW in 
94c0: 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72 20  bytes */.  char 
94d0: 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20 20  *zAuthPW;       
94e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73 73           /* Pass
94f0: 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75 74  word used to aut
9500: 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20 63  henticate */.  c
9510: 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b 20  har *zAuthUser; 
9520: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9530: 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20 74  User name used t
9540: 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a  o authenticate *
9550: 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  /.};../* Allowed
9560: 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69   values for sqli
9570: 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75 74  te3_userauth.aut
9580: 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69 6e  hLevel */.#defin
9590: 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20  e UAUTH_Unknown 
95a0: 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75 74      0     /* Aut
95b0: 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74 20  hentication not 
95c0: 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a 23  yet checked */.#
95d0: 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61 69  define UAUTH_Fai
95e0: 6c 20 20 20 20 20 20 20 20 31 20 20 20 20 20 2f  l        1     /
95f0: 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69 63  * User authentic
9600: 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f 0a  ation failed */.
9610: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 73  #define UAUTH_Us
9620: 65 72 20 20 20 20 20 20 20 20 32 20 20 20 20 20  er        2     
9630: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64  /* Authenticated
9640: 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73 65   as a normal use
9650: 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  r */.#define UAU
9660: 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20 33  TH_Admin       3
9670: 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69       /* Authenti
9680: 63 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d 69  cated as an admi
9690: 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a  nistrator */../*
96a0: 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64 20   Functions used 
96b0: 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75 74  only by user aut
96c0: 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69 63  horization logic
96d0: 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 55   */.int sqlite3U
96e0: 73 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f 6e  serAuthTable(con
96f0: 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
9700: 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 43 68  qlite3UserAuthCh
9710: 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65 33  eckLogin(sqlite3
9720: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 38  *,const char*,u8
9730: 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
9740: 55 73 65 72 41 75 74 68 49 6e 69 74 28 73 71 6c  UserAuthInit(sql
9750: 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
9760: 69 74 65 33 43 72 79 70 74 46 75 6e 63 28 73 71  ite3CryptFunc(sq
9770: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
9780: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
9790: 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  **);..#endif /* 
97a0: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
97b0: 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f  ENTICATION */../
97c0: 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f 72  *.** typedef for
97d0: 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69   the authorizati
97e0: 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63  on callback func
97f0: 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  tion..*/.#ifdef 
9800: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
9810: 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79 70  ENTICATION.  typ
9820: 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74  edef int (*sqlit
9830: 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c  e3_xauth)(void*,
9840: 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  int,const char*,
9850: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
9860: 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20  t char*,.       
9870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9880: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
9890: 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
98a0: 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  );.#else.  typed
98b0: 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33  ef int (*sqlite3
98c0: 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e  _xauth)(void*,in
98d0: 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  t,const char*,co
98e0: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
98f0: 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20  char*,.         
9900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9910: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
9920: 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  *);.#endif.../*.
9930: 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73 65  ** Each database
9940: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61   connection is a
9950: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
9960: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
9970: 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
9980: 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c   sqlite3 {.  sql
9990: 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 20  ite3_vfs *pVfs; 
99a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 53             /* OS
99b0: 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   Interface */.  
99c0: 73 74 72 75 63 74 20 56 64 62 65 20 2a 70 56 64  struct Vdbe *pVd
99d0: 62 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  be;           /*
99e0: 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20   List of active 
99f0: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 73  virtual machines
9a00: 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70   */.  CollSeq *p
9a10: 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20  DfltColl;       
9a20: 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75      /* The defau
9a30: 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  lt collating seq
9a40: 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a  uence (BINARY) *
9a50: 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
9a60: 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20  x *mutex;       
9a70: 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20    /* Connection 
9a80: 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61  mutex */.  Db *a
9a90: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
9aa0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20           /* All 
9ab0: 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e  backends */.  in
9ac0: 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20  t nDb;          
9ad0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
9ae0: 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64  umber of backend
9af0: 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75  s currently in u
9b00: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67  se */.  int flag
9b10: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
9b20: 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c 6c        /* Miscell
9b30: 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20 53 65  aneous flags. Se
9b40: 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34  e below */.  i64
9b50: 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20   lastRowid;     
9b60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f             /* RO
9b70: 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65  WID of most rece
9b80: 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65 20 61  nt insert (see a
9b90: 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73  bove) */.  i64 s
9ba0: 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  zMmap;          
9bb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
9bc0: 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65  ult mmap_size se
9bd0: 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73 69 67  tting */.  unsig
9be0: 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67  ned int openFlag
9bf0: 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67  s;       /* Flag
9c00: 73 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69  s passed to sqli
9c10: 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20  te3_vfs.xOpen() 
9c20: 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65  */.  int errCode
9c30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9c40: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
9c50: 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51  t error code (SQ
9c60: 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74  LITE_*) */.  int
9c70: 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20   errMask;       
9c80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20             /* & 
9c90: 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74  result codes wit
9ca0: 68 20 74 68 69 73 20 62 65 66 6f 72 65 20 72 65  h this before re
9cb0: 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75 31 36  turning */.  u16
9cc0: 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20 20   dbOptFlags;    
9cd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c             /* Fl
9ce0: 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69  ags to enable/di
9cf0: 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69  sable optimizati
9d00: 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ons */.  u8 enc;
9d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d20: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65         /* Text e
9d30: 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 75 38 20  ncoding */.  u8 
9d40: 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20  autoCommit;     
9d50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
9d60: 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c  e auto-commit fl
9d70: 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70  ag. */.  u8 temp
9d80: 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20  _store;         
9d90: 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c         /* 1: fil
9da0: 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64  e 2: memory 0: d
9db0: 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d  efault */.  u8 m
9dc0: 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20  allocFailed;    
9dd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
9de0: 65 20 69 66 20 77 65 20 68 61 76 65 20 73 65 65  e if we have see
9df0: 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  n a malloc failu
9e00: 72 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c  re */.  u8 dfltL
9e10: 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  ockMode;        
9e20: 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
9e30: 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f   locking-mode fo
9e40: 72 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a  r attached dbs *
9e50: 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20  /.  signed char 
9e60: 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20  nextAutovac;    
9e70: 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74    /* Autovac set
9e80: 74 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55  ting after VACUU
9e90: 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38  M if >=0 */.  u8
9ea0: 20 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20   suppressErr;   
9eb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
9ec0: 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f  o not issue erro
9ed0: 72 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72  r messages if tr
9ee0: 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f  ue */.  u8 vtabO
9ef0: 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20  nConflict;      
9f00: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
9f10: 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f  o return for s3_
9f20: 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74  vtab_on_conflict
9f30: 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61  () */.  u8 isTra
9f40: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
9f50: 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  t;    /* True if
9f60: 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73   the outermost s
9f70: 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53  avepoint is a TS
9f80: 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61   */.  int nextPa
9f90: 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20  gesize;         
9fa0: 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20      /* Pagesize 
9fb0: 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20  after VACUUM if 
9fc0: 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69  >0 */.  u32 magi
9fd0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
9fe0: 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e        /* Magic n
9ff0: 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63 74  umber for detect
a000: 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65 20   library misuse 
a010: 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65  */.  int nChange
a020: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a030: 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75     /* Value retu
a040: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
a050: 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69  changes() */.  i
a060: 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b  nt nTotalChange;
a070: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a080: 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  Value returned b
a090: 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f  y sqlite3_total_
a0a0: 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69  changes() */.  i
a0b0: 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  nt aLimit[SQLITE
a0c0: 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20  _N_LIMIT];   /* 
a0d0: 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20  Limits */.  int 
a0e0: 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20  nMaxSorterMmap; 
a0f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
a100: 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65 67  imum size of reg
a110: 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20 73  ions mapped by s
a120: 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75 63  orter */.  struc
a130: 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66  t sqlite3InitInf
a140: 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  o {      /* Info
a150: 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72  rmation used dur
a160: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ing initializati
a170: 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65  on */.    int ne
a180: 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20  wTnum;          
a190: 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67        /* Rootpag
a1a0: 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67  e of table being
a1b0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
a1c0: 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20      u8 iDb;     
a1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a1e0: 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65  /* Which db file
a1f0: 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61   is being initia
a200: 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20  lized */.    u8 
a210: 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  busy;           
a220: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45           /* TRUE
a230: 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   if currently in
a240: 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20  itializing */.  
a250: 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67    u8 orphanTrigg
a260: 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  er;           /*
a270: 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20   Last statement 
a280: 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50  is orphaned TEMP
a290: 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 20 20   trigger */.    
a2a0: 75 38 20 69 6d 70 6f 73 74 65 72 54 61 62 6c 65  u8 imposterTable
a2b0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42  ;           /* B
a2c0: 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f 73  uilding an impos
a2d0: 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20 7d  ter table */.  }
a2e0: 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64   init;.  int nVd
a2f0: 62 65 41 63 74 69 76 65 3b 20 20 20 20 20 20 20  beActive;       
a300: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
a310: 20 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e   of VDBEs curren
a320: 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20  tly running */. 
a330: 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20   int nVdbeRead; 
a340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a350: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
a360: 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65  ve VDBEs that re
a370: 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20  ad or write */. 
a380: 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b   int nVdbeWrite;
a390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a3a0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
a3b0: 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65  ve VDBEs that re
a3c0: 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a  ad and write */.
a3d0: 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b    int nVdbeExec;
a3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a3f0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
a400: 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62  ted calls to Vdb
a410: 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74  eExec() */.  int
a420: 20 6e 56 44 65 73 74 72 6f 79 3b 20 20 20 20 20   nVDestroy;     
a430: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
a440: 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 4f  mber of active O
a450: 50 5f 56 44 65 73 74 72 6f 79 20 6f 70 65 72 61  P_VDestroy opera
a460: 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  tions */.  int n
a470: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
a480: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
a490: 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74  er of loaded ext
a4a0: 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69  ensions */.  voi
a4b0: 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20  d **aExtension; 
a4c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
a4d0: 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69  ray of shared li
a4e0: 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f  brary handles */
a4f0: 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65  .  void (*xTrace
a500: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
a510: 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a 20  ar*);        /* 
a520: 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  Trace function *
a530: 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65  /.  void *pTrace
a540: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
a550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a560: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
a570: 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   trace function 
a580: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f  */.  void (*xPro
a590: 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73  file)(void*,cons
a5a0: 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f  t char*,u64);  /
a5b0: 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63  * Profiling func
a5c0: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
a5d0: 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20  pProfileArg;    
a5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a5f0: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
a600: 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74  to profile funct
a610: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
a620: 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20  CommitArg;      
a630: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
a640: 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69  gument to xCommi
a650: 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20  tCallback() */  
a660: 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69   .  int (*xCommi
a670: 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a  tCallback)(void*
a680: 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64  );    /* Invoked
a690: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
a6a0: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f  . */.  void *pRo
a6b0: 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20  llbackArg;      
a6c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
a6d0: 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63  ment to xRollbac
a6e0: 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20  kCallback() */  
a6f0: 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c   .  void (*xRoll
a700: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f  backCallback)(vo
a710: 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64  id*); /* Invoked
a720: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
a730: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70  . */.  void *pUp
a740: 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20  dateArg;.  void 
a750: 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  (*xUpdateCallbac
a760: 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  k)(void*,int, co
a770: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
a780: 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74  char*,sqlite_int
a790: 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  64);.#ifndef SQL
a7a0: 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69  ITE_OMIT_WAL.  i
a7b0: 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63  nt (*xWalCallbac
a7c0: 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74  k)(void *, sqlit
a7d0: 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
a7e0: 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64   *, int);.  void
a7f0: 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69   *pWalArg;.#endi
a800: 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  f.  void(*xCollN
a810: 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c  eeded)(void*,sql
a820: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
a830: 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  ep,const char*);
a840: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
a850: 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71  eded16)(void*,sq
a860: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
a870: 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29  Rep,const void*)
a880: 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e  ;.  void *pCollN
a890: 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69  eededArg;.  sqli
a8a0: 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b  te3_value *pErr;
a8b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73            /* Mos
a8c0: 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d  t recent error m
a8d0: 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f  essage */.  unio
a8e0: 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65  n {.    volatile
a8f0: 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74   int isInterrupt
a900: 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73  ed; /* True if s
a910: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
a920: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
a930: 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e   */.    double n
a940: 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20  otUsed1;        
a950: 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f      /* Spacer */
a960: 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61  .  } u1;.  Looka
a970: 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20  side lookaside; 
a980: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b           /* Look
a990: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e  aside malloc con
a9a0: 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69  figuration */.#i
a9b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
a9c0: 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
a9d0: 20 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68 20    sqlite3_xauth 
a9e0: 78 41 75 74 68 3b 20 20 20 20 20 20 20 20 20 20  xAuth;          
a9f0: 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f 72  /* Access author
aa00: 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  ization function
aa10: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 74   */.  void *pAut
aa20: 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  hArg;           
aa30: 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d      /* 1st argum
aa40: 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65 73  ent to the acces
aa50: 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e 20  s auth function 
aa60: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
aa70: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
aa80: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
aa90: 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73    int (*xProgres
aaa0: 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20  s)(void *);     
aab0: 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73 20  /* The progress 
aac0: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  callback */.  vo
aad0: 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72 67  id *pProgressArg
aae0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  ;           /* A
aaf0: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70  rgument to the p
ab00: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
ab10: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e   */.  unsigned n
ab20: 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20 20  ProgressOps;    
ab30: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
ab40: 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72 6f   opcodes for pro
ab50: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a  gress callback *
ab60: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
ab70: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
ab80: 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20  TUALTABLE.  int 
ab90: 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20  nVTrans;        
aba0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
abb0: 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20 61  ocated size of a
abc0: 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68  VTrans */.  Hash
abd0: 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20   aModule;       
abe0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f 70            /* pop
abf0: 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74 65  ulated by sqlite
ac00: 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  3_create_module(
ac10: 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20 2a  ) */.  VtabCtx *
ac20: 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20 20  pVtabCtx;       
ac30: 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20       /* Context 
ac40: 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62 20  for active vtab 
ac50: 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20 2a  connect/create *
ac60: 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56 54  /.  VTable **aVT
ac70: 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
ac80: 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62    /* Virtual tab
ac90: 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74 72  les with open tr
aca0: 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20  ansactions */.  
acb0: 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e  VTable *pDisconn
acc0: 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f  ect;    /* Disco
acd0: 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e  nnect these in n
ace0: 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70  ext sqlite3_prep
acf0: 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a  are() */.#endif.
ad00: 20 20 46 75 6e 63 44 65 66 48 61 73 68 20 61 46    FuncDefHash aF
ad10: 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
ad20: 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66  /* Hash table of
ad30: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63   connection func
ad40: 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20  tions */.  Hash 
ad50: 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20  aCollSeq;       
ad60: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20           /* All 
ad70: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
ad80: 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e  ces */.  BusyHan
ad90: 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72  dler busyHandler
ada0: 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63  ;      /* Busy c
adb0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20  allback */.  Db 
adc0: 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20  aDbStatic[2];   
add0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
ade0: 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74  atic space for t
adf0: 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63  he 2 default bac
ae00: 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70  kends */.  Savep
ae10: 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74  oint *pSavepoint
ae20: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
ae30: 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70   of active savep
ae40: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62  oints */.  int b
ae50: 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20  usyTimeout;     
ae60: 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79           /* Busy
ae70: 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74   handler timeout
ae80: 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69  , in msec */.  i
ae90: 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt nSavepoint;  
aea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
aeb0: 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72  Number of non-tr
aec0: 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
aed0: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  ints */.  int nS
aee0: 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20  tatement;       
aef0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
af00: 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74  r of nested stat
af10: 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f  ement-transactio
af20: 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ns  */.  i64 nDe
af30: 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
af40: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
af50: 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e  ferred constrain
af60: 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  ts this transact
af70: 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ion. */.  i64 nD
af80: 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20  eferredImmCons; 
af90: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
afa0: 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74  eferred immediat
afb0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
afc0: 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46  .  int *pnBytesF
afd0: 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  reed;           
afe0: 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c   /* If not NULL,
aff0: 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20   increment this 
b000: 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23  in DbFree() */.#
b010: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
b020: 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
b030: 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  Y.  /* The follo
b040: 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61  wing variables a
b050: 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64  re all protected
b060: 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d   by the STATIC_M
b070: 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74 65  ASTER .  ** mute
b080: 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65  x, not by sqlite
b090: 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72  3.mutex. They ar
b0a0: 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69  e used by code i
b0b0: 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20 2a  n notify.c. .  *
b0c0: 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55  *.  ** When X.pU
b0d0: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d  nlockConnection=
b0e0: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
b0f0: 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e 67  hat X is waiting
b100: 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75   for Y to.  ** u
b110: 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74  nlock so that it
b120: 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20   can proceed..  
b130: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
b140: 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69  BlockingConnecti
b150: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
b160: 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67  s that something
b170: 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20 20   that X tried.  
b180: 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72  ** tried to do r
b190: 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77  ecently failed w
b1a0: 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f  ith an SQLITE_LO
b1b0: 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20 74  CKED error due t
b1c0: 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c  o locks.  ** hel
b1d0: 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73  d by Y..  */.  s
b1e0: 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e  qlite3 *pBlockin
b1f0: 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20  gConnection; /* 
b200: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20  Connection that 
b210: 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f  caused SQLITE_LO
b220: 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65  CKED */.  sqlite
b230: 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63  3 *pUnlockConnec
b240: 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  tion;           
b250: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  /* Connection to
b260: 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63   watch for unloc
b270: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e  k */.  void *pUn
b280: 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  lockArg;        
b290: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b2a0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c  Argument to xUnl
b2b0: 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76  ockNotify */.  v
b2c0: 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74  oid (*xUnlockNot
b2d0: 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e  ify)(void **, in
b2e0: 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e  t);  /* Unlock n
b2f0: 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a  otify callback *
b300: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65  /.  sqlite3 *pNe
b310: 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20  xtBlocked;      
b320: 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73    /* Next in lis
b330: 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64  t of all blocked
b340: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a   connections */.
b350: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
b360: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
b370: 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74  TICATION.  sqlit
b380: 65 33 5f 75 73 65 72 61 75 74 68 20 61 75 74 68  e3_userauth auth
b390: 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72  ;        /* User
b3a0: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   authentication 
b3b0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23  information */.#
b3c0: 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
b3d0: 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f  A macro to disco
b3e0: 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67  ver the encoding
b3f0: 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a   of a database..
b400: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d  */.#define SCHEM
b410: 41 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d  A_ENC(db) ((db)-
b420: 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[0].pSchema-
b430: 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45 4e  >enc).#define EN
b440: 43 28 64 62 29 20 20 20 20 20 20 20 20 28 28 64  C(db)        ((d
b450: 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20  b)->enc)../*.** 
b460: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
b470: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 2e  for the sqlite3.
b480: 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  flags..*/.#defin
b490: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  e SQLITE_VdbeTra
b4a0: 63 65 20 20 20 20 20 20 30 78 30 30 30 30 30 30  ce      0x000000
b4b0: 30 31 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 74  01  /* True to t
b4c0: 72 61 63 65 20 56 44 42 45 20 65 78 65 63 75 74  race VDBE execut
b4d0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
b4e0: 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e  QLITE_InternChan
b4f0: 67 65 73 20 20 30 78 30 30 30 30 30 30 30 32 20  ges  0x00000002 
b500: 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20   /* Uncommitted 
b510: 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67  Hash table chang
b520: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
b530: 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20  LITE_FullFSync  
b540: 20 20 20 20 30 78 30 30 30 30 30 30 30 34 20 20      0x00000004  
b550: 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e  /* Use full fsyn
b560: 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e 64  c on the backend
b570: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b580: 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63  TE_CkptFullFSync
b590: 20 20 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a    0x00000008  /*
b5a0: 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20   Use full fsync 
b5b0: 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a  for checkpoint *
b5c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b5d0: 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20 20  _CacheSpill     
b5e0: 30 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20 4f  0x00000010  /* O
b5f0: 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61 67 65 72  K to spill pager
b600: 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e   cache */.#defin
b610: 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c  e SQLITE_FullCol
b620: 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30 30 30  Names   0x000000
b630: 32 30 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c  20  /* Show full
b640: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e   column names on
b650: 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69   SELECT */.#defi
b660: 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43  ne SQLITE_ShortC
b670: 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30 30  olNames  0x00000
b680: 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f  040  /* Show sho
b690: 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73  rt columns names
b6a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b6b0: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20 20  TE_CountRows    
b6c0: 20 20 30 78 30 30 30 30 30 30 38 30 20 20 2f 2a    0x00000080  /*
b6d0: 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61 6e   Count rows chan
b6e0: 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20 2a  ged by INSERT, *
b6f0: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
b700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b710: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
b720: 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
b730: 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f  TE and return */
b740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b760: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
b770: 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67 20  the count using 
b780: 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23  a callback. */.#
b790: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75  define SQLITE_Nu
b7a0: 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78 30  llCallback   0x0
b7b0: 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f  0000100  /* Invo
b7c0: 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  ke the callback 
b7d0: 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a 20  once if the */. 
b7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b800: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72 65           /*   re
b810: 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74  sult set is empt
b820: 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  y */.#define SQL
b830: 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20 20  ITE_SqlTrace    
b840: 20 20 20 30 78 30 30 30 30 30 32 30 30 20 20 2f     0x00000200  /
b850: 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20 53 51  * Debug print SQ
b860: 4c 20 61 73 20 69 74 20 65 78 65 63 75 74 65 73  L as it executes
b870: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b880: 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20  TE_VdbeListing  
b890: 20 20 30 78 30 30 30 30 30 34 30 30 20 20 2f 2a    0x00000400  /*
b8a0: 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73 20   Debug listings 
b8b0: 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61 6d 73  of VDBE programs
b8c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b8d0: 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20  TE_WriteSchema  
b8e0: 20 20 30 78 30 30 30 30 30 38 30 30 20 20 2f 2a    0x00000800  /*
b8f0: 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51   OK to update SQ
b900: 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23  LITE_MASTER */.#
b910: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
b920: 62 65 41 64 64 6f 70 54 72 61 63 65 20 30 78 30  beAddopTrace 0x0
b930: 30 30 30 31 30 30 30 20 20 2f 2a 20 54 72 61 63  0001000  /* Trac
b940: 65 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  e sqlite3VdbeAdd
b950: 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64  Op() calls */.#d
b960: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e  efine SQLITE_Ign
b970: 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78 30 30  oreChecks   0x00
b980: 30 30 32 30 30 30 20 20 2f 2a 20 44 6f 20 6e 6f  002000  /* Do no
b990: 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20  t enforce check 
b9a0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
b9b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
b9c0: 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20 30 78  adUncommitted 0x
b9d0: 30 30 30 34 30 30 30 20 20 2f 2a 20 46 6f 72 20  0004000  /* For 
b9e0: 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
b9f0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
ba00: 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d  ITE_LegacyFileFm
ba10: 74 20 20 30 78 30 30 30 30 38 30 30 30 20 20 2f  t  0x00008000  /
ba20: 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64 61 74  * Create new dat
ba30: 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61 74  abases in format
ba40: 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51   1 */.#define SQ
ba50: 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64  LITE_RecoveryMod
ba60: 65 20 20 20 30 78 30 30 30 31 30 30 30 30 20 20  e   0x00010000  
ba70: 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65 6d 61  /* Ignore schema
ba80: 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69   errors */.#defi
ba90: 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73  ne SQLITE_Revers
baa0: 65 4f 72 64 65 72 20 20 20 30 78 30 30 30 32 30  eOrder   0x00020
bab0: 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65 20  000  /* Reverse 
bac0: 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43 54  unordered SELECT
bad0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
bae0: 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73 20  ITE_RecTriggers 
baf0: 20 20 20 30 78 30 30 30 34 30 30 30 30 20 20 2f     0x00040000  /
bb00: 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73 69  * Enable recursi
bb10: 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  ve triggers */.#
bb20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f  define SQLITE_Fo
bb30: 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78 30  reignKeys    0x0
bb40: 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e 66 6f  0080000  /* Enfo
bb50: 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  rce foreign key 
bb60: 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a  constraints  */.
bb70: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
bb80: 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30 78  utoIndex      0x
bb90: 30 30 31 30 30 30 30 30 20 20 2f 2a 20 45 6e 61  00100000  /* Ena
bba0: 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69 6e  ble automatic in
bbb0: 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
bbc0: 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72 42 75   SQLITE_PreferBu
bbd0: 69 6c 74 69 6e 20 20 30 78 30 30 32 30 30 30 30  iltin  0x0020000
bbe0: 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63 65  0  /* Preference
bbf0: 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e   to built-in fun
bc00: 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  cs */.#define SQ
bc10: 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69  LITE_LoadExtensi
bc20: 6f 6e 20 20 30 78 30 30 34 30 30 30 30 30 20 20  on  0x00400000  
bc30: 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65  /* Enable load_e
bc40: 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66  xtension */.#def
bc50: 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c  ine SQLITE_Enabl
bc60: 65 54 72 69 67 67 65 72 20 20 30 78 30 30 38 30  eTrigger  0x0080
bc70: 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74 6f  0000  /* True to
bc80: 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72 73   enable triggers
bc90: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
bca0: 54 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20 20  TE_DeferFKs     
bcb0: 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f 2a    0x01000000  /*
bcc0: 20 44 65 66 65 72 20 61 6c 6c 20 46 4b 20 63 6f   Defer all FK co
bcd0: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
bce0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72  fine SQLITE_Quer
bcf0: 79 4f 6e 6c 79 20 20 20 20 20 20 30 78 30 32 30  yOnly      0x020
bd00: 30 30 30 30 30 20 20 2f 2a 20 44 69 73 61 62 6c  00000  /* Disabl
bd10: 65 20 64 61 74 61 62 61 73 65 20 63 68 61 6e 67  e database chang
bd20: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
bd30: 4c 49 54 45 5f 56 64 62 65 45 51 50 20 20 20 20  LITE_VdbeEQP    
bd40: 20 20 20 20 30 78 30 34 30 30 30 30 30 30 20 20      0x04000000  
bd50: 2f 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49 4e  /* Debug EXPLAIN
bd60: 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23   QUERY PLAN */.#
bd70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 61  define SQLITE_Va
bd80: 63 75 75 6d 20 20 20 20 20 20 20 20 20 30 78 30  cuum         0x0
bd90: 38 30 30 30 30 30 30 20 20 2f 2a 20 43 75 72 72  8000000  /* Curr
bda0: 65 6e 74 6c 79 20 69 6e 20 61 20 56 41 43 55 55  ently in a VACUU
bdb0: 4d 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  M */.#define SQL
bdc0: 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43 6b 20 20  ITE_CellSizeCk  
bdd0: 20 20 20 30 78 31 30 30 30 30 30 30 30 20 20 2f     0x10000000  /
bde0: 2a 20 43 68 65 63 6b 20 62 74 72 65 65 20 63 65  * Check btree ce
bdf0: 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c 6f 61 64  ll sizes on load
be00: 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73   */.../*.** Bits
be10: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e   of the sqlite3.
be20: 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64  dbOptFlags field
be30: 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 62   that are used b
be40: 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  y the.** sqlite3
be50: 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51  _test_control(SQ
be60: 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50  LITE_TESTCTRL_OP
be70: 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29  TIMIZATIONS,...)
be80: 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a   interface to.**
be90: 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73   selectively dis
bea0: 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74  able various opt
beb0: 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23  imizations..*/.#
bec0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75  define SQLITE_Qu
bed0: 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30  eryFlattener 0x0
bee0: 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66  001   /* Query f
bef0: 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65  lattening */.#de
bf00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75  fine SQLITE_Colu
bf10: 6d 6e 43 61 63 68 65 20 20 20 20 30 78 30 30 30  mnCache    0x000
bf20: 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61  2   /* Column ca
bf30: 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  che */.#define S
bf40: 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64  QLITE_GroupByOrd
bf50: 65 72 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a  er   0x0004   /*
bf60: 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f   GROUPBY cover o
bf70: 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65  f ORDERBY */.#de
bf80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74  fine SQLITE_Fact
bf90: 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30  orOutConst 0x000
bfa0: 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  8   /* Constant 
bfb0: 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20  factoring */./* 
bfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
bfd0: 6f 74 20 75 73 65 64 20 20 20 20 30 78 30 30 31  ot used    0x001
bfe0: 30 20 20 20 2f 2f 20 57 61 73 3a 20 53 51 4c 49  0   // Was: SQLI
bff0: 54 45 5f 49 64 78 52 65 61 6c 41 73 49 6e 74 20  TE_IdxRealAsInt 
c000: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c010: 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20  E_DistinctOpt   
c020: 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44 49 53   0x0020   /* DIS
c030: 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65  TINCT using inde
c040: 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  xes */.#define S
c050: 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63  QLITE_CoverIdxSc
c060: 61 6e 20 20 20 30 78 30 30 34 30 20 20 20 2f 2a  an   0x0040   /*
c070: 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20   Covering index 
c080: 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  scans */.#define
c090: 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49   SQLITE_OrderByI
c0a0: 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20 20 20  dxJoin 0x0080   
c0b0: 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a  /* ORDER BY of j
c0c0: 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a  oins via index *
c0d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c0e0: 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65 20 20  _SubqCoroutine  
c0f0: 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76 61 6c  0x0100   /* Eval
c100: 75 61 74 65 20 73 75 62 71 75 65 72 69 65 73 20  uate subqueries 
c110: 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a 2f  as coroutines */
c120: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c130: 54 72 61 6e 73 69 74 69 76 65 20 20 20 20 20 30  Transitive     0
c140: 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61 6e 73  x0200   /* Trans
c150: 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74  itive constraint
c160: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
c170: 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e  ITE_OmitNoopJoin
c180: 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20 4f     0x0400   /* O
c190: 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65  mit unused table
c1a0: 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64  s in joins */.#d
c1b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61  efine SQLITE_Sta
c1c0: 74 33 34 20 20 20 20 20 20 20 20 20 30 78 30 38  t34         0x08
c1d0: 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41 54  00   /* Use STAT
c1e0: 33 20 6f 72 20 53 54 41 54 34 20 64 61 74 61 20  3 or STAT4 data 
c1f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c200: 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20 20 20  E_AllOpts       
c210: 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c   0xffff   /* All
c220: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a   optimizations *
c230: 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  /../*.** Macros 
c240: 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68 65 74  for testing whet
c250: 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d  her or not optim
c260: 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65 6e 61  izations are ena
c270: 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64  bled or disabled
c280: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
c290: 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
c2a0: 5f 54 45 53 54 0a 23 64 65 66 69 6e 65 20 4f 70  _TEST.#define Op
c2b0: 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c  timizationDisabl
c2c0: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 28 28  ed(db, mask)  ((
c2d0: 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73  (db)->dbOptFlags
c2e0: 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64 65  &(mask))!=0).#de
c2f0: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
c300: 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  nEnabled(db, mas
c310: 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64 62 4f  k)   (((db)->dbO
c320: 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d  ptFlags&(mask))=
c330: 3d 30 29 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  =0).#else.#defin
c340: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69  e OptimizationDi
c350: 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  sabled(db, mask)
c360: 20 20 30 0a 23 64 65 66 69 6e 65 20 4f 70 74 69    0.#define Opti
c370: 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28  mizationEnabled(
c380: 64 62 2c 20 6d 61 73 6b 29 20 20 20 31 0a 23 65  db, mask)   1.#e
c390: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  ndif../*.** Retu
c3a0: 72 6e 20 74 72 75 65 20 69 66 20 69 74 20 4f 4b  rn true if it OK
c3b0: 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73 74   to factor const
c3c0: 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ant expressions 
c3d0: 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69 61 6c  into the initial
c3e0: 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e  ization.** code.
c3f0: 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73   The argument is
c400: 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63 74 20   a Parse object 
c410: 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67 65 6e  for the code gen
c420: 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69  erator..*/.#defi
c430: 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b  ne ConstFactorOk
c440: 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73  (P) ((P)->okCons
c450: 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20  tFactor)../*.** 
c460: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
c470: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d  for the sqlite.m
c480: 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54  agic field..** T
c490: 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f  he numbers are o
c4a0: 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f  btained at rando
c4b0: 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70  m and have no sp
c4c0: 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f  ecial meaning, o
c4d0: 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69  ther.** than bei
c4e0: 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  ng distinct from
c4f0: 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f   one another..*/
c500: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c510: 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30  MAGIC_OPEN     0
c520: 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61  xa029a697  /* Da
c530: 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a  tabase is open *
c540: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c550: 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20  _MAGIC_CLOSED   
c560: 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44  0x9f3c2d33  /* D
c570: 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65  atabase is close
c580: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
c590: 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20  ITE_MAGIC_SICK  
c5a0: 20 20 20 30 78 34 62 37 37 31 32 39 30 20 20 2f     0x4b771290  /
c5b0: 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69  * Error and awai
c5c0: 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64  ting close */.#d
c5d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
c5e0: 49 43 5f 42 55 53 59 20 20 20 20 20 30 78 66 30  IC_BUSY     0xf0
c5f0: 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62  3b7906  /* Datab
c600: 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  ase currently in
c610: 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20   use */.#define 
c620: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52  SQLITE_MAGIC_ERR
c630: 4f 52 20 20 20 20 30 78 62 35 33 35 37 39 33 30  OR    0xb5357930
c640: 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d    /* An SQLITE_M
c650: 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75  ISUSE error occu
c660: 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rred */.#define 
c670: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d  SQLITE_MAGIC_ZOM
c680: 42 49 45 20 20 20 30 78 36 34 63 66 66 63 37 66  BIE   0x64cffc7f
c690: 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20    /* Close with 
c6a0: 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63  last statement c
c6b0: 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  lose */../*.** E
c6c0: 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ach SQL function
c6d0: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
c6e0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
c6f0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
c700: 74 72 75 63 74 75 72 65 2e 20 20 41 20 70 6f 69  tructure.  A poi
c710: 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
c720: 75 63 74 75 72 65 20 69 73 20 73 74 6f 72 65 64  ucture is stored
c730: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61   in the sqlite.a
c740: 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20 74 61 62  Func.** hash tab
c750: 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c 74 69 70  le.  When multip
c760: 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76  le functions hav
c770: 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2c  e the same name,
c780: 20 74 68 65 20 68 61 73 68 20 74 61 62 6c 65 0a   the hash table.
c790: 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6c  ** points to a l
c7a0: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 74 68  inked list of th
c7b0: 65 73 65 20 73 74 72 75 63 74 75 72 65 73 2e 0a  ese structures..
c7c0: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
c7d0: 66 20 7b 0a 20 20 69 31 36 20 6e 41 72 67 3b 20  f {.  i16 nArg; 
c7e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c7f0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
c800: 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c  s.  -1 means unl
c810: 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31 36 20  imited */.  u16 
c820: 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20  funcFlags;      
c830: 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61   /* Some combina
c840: 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46  tion of SQLITE_F
c850: 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20  UNC_* */.  void 
c860: 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20 20 20  *pUserData;     
c870: 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70 61 72  /* User data par
c880: 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63  ameter */.  Func
c890: 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  Def *pNext;     
c8a0: 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f   /* Next functio
c8b0: 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65  n with same name
c8c0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 75   */.  void (*xFu
c8d0: 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  nc)(sqlite3_cont
c8e0: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
c8f0: 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 52 65  _value**); /* Re
c900: 67 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 2a  gular function *
c910: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70  /.  void (*xStep
c920: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
c930: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
c940: 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67 67 72  alue**); /* Aggr
c950: 65 67 61 74 65 20 73 74 65 70 20 2a 2f 0a 20 20  egate step */.  
c960: 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65  void (*xFinalize
c970: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
c980: 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  t*);            
c990: 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65      /* Aggregate
c9a0: 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20   finalizer */.  
c9b0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
c9c0: 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65       /* SQL name
c9d0: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
c9e0: 2e 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a  . */.  FuncDef *
c9f0: 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e  pHash;      /* N
ca00: 65 78 74 20 77 69 74 68 20 61 20 64 69 66 66 65  ext with a diffe
ca10: 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68  rent name but th
ca20: 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20  e same hash */. 
ca30: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
ca40: 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20  *pDestructor;   
ca50: 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75  /* Reference cou
ca60: 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20  nted destructor 
ca70: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a  function */.};..
ca80: 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63  /*.** This struc
ca90: 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65  ture encapsulate
caa0: 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f  s a user-functio
cab0: 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c  n destructor cal
cac0: 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e  lback (as.** con
cad0: 66 69 67 75 72 65 64 20 75 73 69 6e 67 20 63 72  figured using cr
cae0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32  eate_function_v2
caf0: 28 29 29 20 61 6e 64 20 61 20 72 65 66 65 72 65  ()) and a refere
cb00: 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65  nce counter. Whe
cb10: 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63  n.** create_func
cb20: 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c  tion_v2() is cal
cb30: 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  led to create a 
cb40: 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20  function with a 
cb50: 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61  destructor,.** a
cb60: 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f   single object o
cb70: 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61  f this type is a
cb80: 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65  llocated. FuncDe
cb90: 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73  structor.nRef is
cba0: 20 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68 65 20   set to .** the 
cbb0: 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44 65  number of FuncDe
cbc0: 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74 65  f objects create
cbd0: 64 20 28 65 69 74 68 65 72 20 31 20 6f 72 20 33  d (either 1 or 3
cbe0: 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  , depending on w
cbf0: 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74  hether.** or not
cc00: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 65   the specified e
cc10: 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49 54  ncoding is SQLIT
cc20: 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e 63  E_ANY). The Func
cc30: 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72 0a  Def.pDestructor.
cc40: 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61 63  ** member of eac
cc50: 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75 6e  h of the new Fun
cc60: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20  cDef objects is 
cc70: 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  set to point to 
cc80: 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a  the allocated.**
cc90: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e   FuncDestructor.
cca0: 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74 65  .**.** Thereafte
ccb0: 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74  r, when one of t
ccc0: 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  he FuncDef objec
ccd0: 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20 74  ts is deleted, t
cce0: 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20  he reference.** 
ccf0: 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62  count on this ob
cd00: 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d 65 6e  ject is decremen
cd10: 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65 61  ted. When it rea
cd20: 63 68 65 73 20 30 2c 20 74 68 65 20 64 65 73 74  ches 0, the dest
cd30: 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76  ructor.** is inv
cd40: 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75 6e  oked and the Fun
cd50: 63 44 65 73 74 72 75 63 74 6f 72 20 73 74 72 75  cDestructor stru
cd60: 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a  cture freed..*/.
cd70: 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72  struct FuncDestr
cd80: 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52  uctor {.  int nR
cd90: 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65  ef;.  void (*xDe
cda0: 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a  stroy)(void *);.
cdb0: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74    void *pUserDat
cdc0: 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  a;.};../*.** Pos
cdd0: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
cde0: 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20   FuncDef.flags. 
cdf0: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 5f   Note that the _
ce00: 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50 45  LENGTH and _TYPE
ce10: 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73  OF.** values mus
ce20: 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20  t correspond to 
ce30: 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
ce40: 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45   and OPFLAG_TYPE
ce50: 4f 46 41 52 47 2e 20 20 54 68 65 72 65 0a 2a 2a  OFARG.  There.**
ce60: 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73 74   are assert() st
ce70: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
ce80: 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20 74  code to verify t
ce90: 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  his..*/.#define 
cea0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d  SQLITE_FUNC_ENCM
ceb0: 41 53 4b 20 20 30 78 30 30 30 33 20 2f 2a 20 53  ASK  0x0003 /* S
cec0: 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49  QLITE_UTF8, SQLI
ced0: 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55 54  TE_UTF16BE or UT
cee0: 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65  F16LE */.#define
cef0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b   SQLITE_FUNC_LIK
cf00: 45 20 20 20 20 20 30 78 30 30 30 34 20 2f 2a 20  E     0x0004 /* 
cf10: 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68  Candidate for th
cf20: 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74  e LIKE optimizat
cf30: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
cf40: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20  QLITE_FUNC_CASE 
cf50: 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 43 61      0x0008 /* Ca
cf60: 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b  se-sensitive LIK
cf70: 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20  E-type function 
cf80: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
cf90: 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20  E_FUNC_EPHEM    
cfa0: 30 78 30 30 31 30 20 2f 2a 20 45 70 68 65 6d 65  0x0010 /* Epheme
cfb0: 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74  ral.  Delete wit
cfc0: 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e  h VDBE */.#defin
cfd0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  e SQLITE_FUNC_NE
cfe0: 45 44 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f 2a  EDCOLL 0x0020 /*
cff0: 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43   sqlite3GetFuncC
d000: 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62  ollSeq() might b
d010: 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66 69  e called*/.#defi
d020: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
d030: 45 4e 47 54 48 20 20 20 30 78 30 30 34 30 20 2f  ENGTH   0x0040 /
d040: 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74  * Built-in lengt
d050: 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  h() function */.
d060: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
d070: 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78 30  UNC_TYPEOF   0x0
d080: 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  080 /* Built-in 
d090: 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f  typeof() functio
d0a0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
d0b0: 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20  ITE_FUNC_COUNT  
d0c0: 20 20 30 78 30 31 30 30 20 2f 2a 20 42 75 69 6c    0x0100 /* Buil
d0d0: 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67  t-in count(*) ag
d0e0: 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69  gregate */.#defi
d0f0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
d100: 4f 41 4c 45 53 43 45 20 30 78 30 32 30 30 20 2f  OALESCE 0x0200 /
d110: 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65  * Built-in coale
d120: 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28  sce() or ifnull(
d130: 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ) */.#define SQL
d140: 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c  ITE_FUNC_UNLIKEL
d150: 59 20 30 78 30 34 30 30 20 2f 2a 20 42 75 69 6c  Y 0x0400 /* Buil
d160: 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20  t-in unlikely() 
d170: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
d180: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
d190: 43 4f 4e 53 54 41 4e 54 20 30 78 30 38 30 30 20  CONSTANT 0x0800 
d1a0: 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75  /* Constant inpu
d1b0: 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61  ts give a consta
d1c0: 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65  nt output */.#de
d1d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
d1e0: 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31 30 30 30  _MINMAX   0x1000
d1f0: 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69 6e   /* True for min
d200: 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67 67  () and max() agg
d210: 72 65 67 61 74 65 73 20 2a 2f 0a 23 64 65 66 69  regates */.#defi
d220: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53  ne SQLITE_FUNC_S
d230: 4c 4f 43 48 4e 47 20 20 30 78 32 30 30 30 20 2f  LOCHNG  0x2000 /
d240: 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67 65 22 2e  * "Slow Change".
d250: 20 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74 20   Value constant 
d260: 64 75 72 69 6e 67 20 61 0a 20 20 20 20 20 20 20  during a.       
d270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d280: 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
d290: 73 69 6e 67 6c 65 20 71 75 65 72 79 20 2d 20 6d  single query - m
d2a0: 69 67 68 74 20 63 68 61 6e 67 65 20 6f 76 65 72  ight change over
d2b0: 20 74 69 6d 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   time */../*.** 
d2c0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  The following th
d2d0: 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43  ree macros, FUNC
d2e0: 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43  TION(), LIKEFUNC
d2f0: 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54 45  () and AGGREGATE
d300: 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  () are.** used t
d310: 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e 69  o create the ini
d320: 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68  tializers for th
d330: 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  e FuncDef struct
d340: 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55  ures..**.**   FU
d350: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
d360: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
d370: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65  Func).**     Use
d380: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63  d to create a sc
d390: 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65  alar function de
d3a0: 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75  finition of a fu
d3b0: 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a  nction zName .**
d3c0: 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64       implemented
d3d0: 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78   by C function x
d3e0: 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74  Func that accept
d3f0: 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
d400: 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c  . The.**     val
d410: 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72  ue passed as iAr
d420: 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
d430: 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20  void*) and made 
d440: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20  available.**    
d450: 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74   as the user-dat
d460: 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
d470: 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20  data()) for the 
d480: 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a 2a  function. If .**
d490: 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e       argument bN
d4a0: 43 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20  C is true, then 
d4b0: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
d4c0: 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73  NEEDCOLL flag is
d4d0: 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46   set..**.**   VF
d4e0: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
d4f0: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
d500: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69  xFunc).**     Li
d510: 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65  ke FUNCTION exce
d520: 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20  pt it omits the 
d530: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
d540: 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a  TANT flag..**.**
d550: 20 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61     DFUNCTION(zNa
d560: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
d570: 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20  bNC, xFunc).**  
d580: 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e     Like FUNCTION
d590: 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73   except it omits
d5a0: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
d5b0: 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 20 61  _CONSTANT flag a
d5c0: 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64 73 20 74  nd.**     adds t
d5d0: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53  he SQLITE_FUNC_S
d5e0: 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20 55 73  LOCHNG flag.  Us
d5f0: 65 64 20 66 6f 72 20 64 61 74 65 20 26 20 74 69  ed for date & ti
d600: 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20  me functions.** 
d610: 20 20 20 20 61 6e 64 20 66 75 6e 63 74 69 6f 6e      and function
d620: 73 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f 76 65  s like sqlite_ve
d630: 72 73 69 6f 6e 28 29 20 74 68 61 74 20 63 61 6e  rsion() that can
d640: 20 63 68 61 6e 67 65 2c 20 62 75 74 20 6e 6f 74   change, but not
d650: 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20 20 61   during.**     a
d660: 20 73 69 6e 67 6c 65 20 71 75 65 72 79 2e 0a 2a   single query..*
d670: 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45  *.**   AGGREGATE
d680: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
d690: 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20  rg, bNC, xStep, 
d6a0: 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55  xFinal).**     U
d6b0: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e  sed to create an
d6c0: 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
d6d0: 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69  ion definition i
d6e0: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a  mplemented by.**
d6f0: 20 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74       the C funct
d700: 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78  ions xStep and x
d710: 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74  Final. The first
d720: 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73   four parameters
d730: 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65  .**     are inte
d740: 72 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73  rpreted in the s
d750: 61 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66  ame way as the f
d760: 69 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72  irst 4 parameter
d770: 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43  s to.**     FUNC
d780: 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20  TION()..**.**   
d790: 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20  LIKEFUNC(zName, 
d7a0: 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67  nArg, pArg, flag
d7b0: 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  s).**     Used t
d7c0: 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61  o create a scala
d7d0: 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r function defin
d7e0: 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74  ition of a funct
d7f0: 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20  ion zName .**   
d800: 20 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e    that accepts n
d810: 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e  Arg arguments an
d820: 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  d is implemented
d830: 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 20   by a call to C 
d840: 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e  .**     function
d850: 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d   likeFunc. Argum
d860: 65 6e 74 20 70 41 72 67 20 69 73 20 63 61 73 74  ent pArg is cast
d870: 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61   to a (void *) a
d880: 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61  nd made.**     a
d890: 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20  vailable as the 
d8a0: 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61  function user-da
d8b0: 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72  ta (sqlite3_user
d8c0: 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a  _data()). The.**
d8d0: 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61       FuncDef.fla
d8e0: 67 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  gs variable is s
d8f0: 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  et to the value 
d900: 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66 6c  passed as the fl
d910: 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d  ags.**     param
d920: 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  eter..*/.#define
d930: 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c   FUNCTION(zName,
d940: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
d950: 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
d960: 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
d970: 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
d980: 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
d990: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
d9a0: 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
d9b0: 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
d9c0: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23  , xFunc, 0, 0, #
d9d0: 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65  zName, 0, 0}.#de
d9e0: 66 69 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a  fine VFUNCTION(z
d9f0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
da00: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
da10: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
da20: 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
da30: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
da40: 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
da50: 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
da60: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23  , xFunc, 0, 0, #
da70: 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65  zName, 0, 0}.#de
da80: 66 69 6e 65 20 44 46 55 4e 43 54 49 4f 4e 28 7a  fine DFUNCTION(z
da90: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
daa0: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
dab0: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
dac0: 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c  FUNC_SLOCHNG|SQL
dad0: 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
dae0: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
daf0: 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  LL), \.   SQLITE
db00: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67  _INT_TO_PTR(iArg
db10: 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  ), 0, xFunc, 0, 
db20: 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d  0, #zName, 0, 0}
db30: 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f  .#define FUNCTIO
db40: 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  N2(zName, nArg, 
db50: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
db60: 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a  , extraFlags) \.
db70: 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46    {nArg,SQLITE_F
db80: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
db90: 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
dba0: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
dbb0: 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c  LL)|extraFlags,\
dbc0: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
dbd0: 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
dbe0: 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e  xFunc, 0, 0, #zN
dbf0: 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69  ame, 0, 0}.#defi
dc00: 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28  ne STR_FUNCTION(
dc10: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72  zName, nArg, pAr
dc20: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
dc30: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
dc40: 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51  _FUNC_SLOCHNG|SQ
dc50: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
dc60: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
dc70: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c  OLL), \.   pArg,
dc80: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
dc90: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
dca0: 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28  define LIKEFUNC(
dcb0: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
dcc0: 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  , flags) \.  {nA
dcd0: 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
dce0: 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
dcf0: 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20  UTF8|flags, \.  
dd00: 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c   (void *)arg, 0,
dd10: 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c   likeFunc, 0, 0,
dd20: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
dd30: 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45  define AGGREGATE
dd40: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
dd50: 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  g, nc, xStep, xF
dd60: 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  inal) \.  {nArg,
dd70: 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63   SQLITE_UTF8|(nc
dd80: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
dd90: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
dda0: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
ddb0: 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74 65 70  rg), 0, 0, xStep
ddc0: 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30  ,xFinal,#zName,0
ddd0: 2c 30 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52  ,0}.#define AGGR
dde0: 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41  EGATE2(zName, nA
ddf0: 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74  rg, arg, nc, xSt
de00: 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72  ep, xFinal, extr
de10: 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72  aFlags) \.  {nAr
de20: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
de30: 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  nc*SQLITE_FUNC_N
de40: 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c  EEDCOLL)|extraFl
de50: 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  ags, \.   SQLITE
de60: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29  _INT_TO_PTR(arg)
de70: 2c 20 30 2c 20 30 2c 20 78 53 74 65 70 2c 78 46  , 0, 0, xStep,xF
de80: 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d  inal,#zName,0,0}
de90: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72  ../*.** All curr
dea0: 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73 20 61  ent savepoints a
deb0: 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c  re stored in a l
dec0: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
ded0: 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65  ing at.** sqlite
dee0: 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20 54 68  3.pSavepoint. Th
def0: 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
df00: 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73 20 74  in the list is t
df10: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79  he most recently
df20: 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76 65 70  .** opened savep
df30: 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74 73  oint. Savepoints
df40: 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 74 68   are added to th
df50: 65 20 6c 69 73 74 20 62 79 20 74 68 65 20 76 64  e list by the vd
df60: 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69  be.** OP_Savepoi
df70: 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  nt instruction..
df80: 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65 70 6f  */.struct Savepo
df90: 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  int {.  char *zN
dfa0: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
dfb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
dfc0: 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e  avepoint name (n
dfd0: 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29 20 2a  ul-terminated) *
dfe0: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
dff0: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
e000: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
e010: 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 66 6b  r of deferred fk
e020: 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20   violations */. 
e030: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d   i64 nDeferredIm
e040: 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  mCons;          
e050: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
e060: 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d 20 66  f deferred imm f
e070: 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e  k. */.  Savepoin
e080: 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  t *pNext;       
e090: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
e0a0: 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20  arent savepoint 
e0b0: 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a  (if any) */.};..
e0c0: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
e0d0: 69 6e 67 20 61 72 65 20 75 73 65 64 20 61 73 20  ing are used as 
e0e0: 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d  the second param
e0f0: 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 53  eter to sqlite3S
e100: 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61  avepoint(),.** a
e110: 6e 64 20 61 73 20 74 68 65 20 50 31 20 61 72 67  nd as the P1 arg
e120: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f  ument to the OP_
e130: 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75  Savepoint instru
e140: 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ction..*/.#defin
e150: 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  e SAVEPOINT_BEGI
e160: 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65  N      0.#define
e170: 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41   SAVEPOINT_RELEA
e180: 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20  SE    1.#define 
e190: 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
e1a0: 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45  CK   2.../*.** E
e1b0: 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c  ach SQLite modul
e1c0: 65 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65  e (virtual table
e1d0: 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20   definition) is 
e1e0: 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a  defined by an.**
e1f0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
e200: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
e210: 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20  ture, stored in 
e220: 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64  the sqlite3.aMod
e230: 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c  ule.** hash tabl
e240: 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64  e..*/.struct Mod
e250: 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71  ule {.  const sq
e260: 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
e270: 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20  odule;       /* 
e280: 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72  Callback pointer
e290: 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  s */.  const cha
e2a0: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
e2b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
e2c0: 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63 72  ame passed to cr
e2d0: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
e2e0: 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20  .  void *pAux;  
e2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e300: 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20          /* pAux 
e310: 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65  passed to create
e320: 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76  _module() */.  v
e330: 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28  oid (*xDestroy)(
e340: 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20 20  void *);        
e350: 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65      /* Module de
e360: 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f  structor functio
e370: 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 45  n */.  Table *pE
e380: 70 6f 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  poTab;          
e390: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
e3a0: 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c 65 20 66  ponymous table f
e3b0: 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c 65 20 2a  or this module *
e3c0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f  /.};../*.** info
e3d0: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61  rmation about ea
e3e0: 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20  ch column of an 
e3f0: 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c  SQL table is hel
e400: 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65  d in an instance
e410: 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
e420: 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
e430: 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72   Column {.  char
e440: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20   *zName;     /* 
e450: 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  Name of this col
e460: 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  umn */.  Expr *p
e470: 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66  Dflt;     /* Def
e480: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68  ault value of th
e490: 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63  is column */.  c
e4a0: 68 61 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20 20  har *zDflt;     
e4b0: 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74  /* Original text
e4c0: 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74 20   of the default 
e4d0: 76 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72 20  value */.  char 
e4e0: 2a 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a 20 44  *zType;     /* D
e4f0: 61 74 61 20 74 79 70 65 20 66 6f 72 20 74 68 69  ata type for thi
e500: 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68  s column */.  ch
e510: 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f  ar *zColl;     /
e520: 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
e530: 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20  ence.  If NULL, 
e540: 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  use the default 
e550: 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b  */.  u8 notNull;
e560: 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20        /* An OE_ 
e570: 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e  code for handlin
e580: 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  g a NOT NULL con
e590: 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61  straint */.  cha
e5a0: 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a  r affinity;   /*
e5b0: 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49   One of the SQLI
e5c0: 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65  TE_AFF_... value
e5d0: 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b  s */.  u8 szEst;
e5e0: 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d          /* Estim
e5f0: 61 74 65 64 20 73 69 7a 65 20 6f 66 20 74 68 69  ated size of thi
e600: 73 20 63 6f 6c 75 6d 6e 2e 20 20 49 4e 54 3d 3d  s column.  INT==
e610: 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61  1 */.  u8 colFla
e620: 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65  gs;     /* Boole
e630: 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20  an properties.  
e640: 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66  See COLFLAG_ def
e650: 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b  ines below */.};
e660: 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  ../* Allowed val
e670: 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63  ues for Column.c
e680: 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66  olFlags:.*/.#def
e690: 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d  ine COLFLAG_PRIM
e6a0: 4b 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f  KEY  0x0001    /
e6b0: 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74  * Column is part
e6c0: 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20   of the primary 
e6d0: 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  key */.#define C
e6e0: 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20  OLFLAG_HIDDEN   
e6f0: 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68  0x0002    /* A h
e700: 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20  idden column in 
e710: 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
e720: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c  */../*.** A "Col
e730: 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22  lating Sequence"
e740: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
e750: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
e760: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
e770: 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70  tructure. Concep
e780: 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74  tually, a collat
e790: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e  ing sequence con
e7a0: 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20  sists of a name 
e7b0: 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69  and.** a compari
e7c0: 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74  son routine that
e7d0: 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64   defines the ord
e7e0: 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65  er of that seque
e7f0: 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f  nce..**.** If Co
e800: 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55  llSeq.xCmp is NU
e810: 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  LL, it means tha
e820: 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69  t the.** collati
e830: 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
e840: 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63  ndefined.  Indic
e850: 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75  es built on an u
e860: 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c  ndefined.** coll
e870: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d  ating sequence m
e880: 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f  ay not be read o
e890: 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74  r written..*/.st
e8a0: 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20  ruct CollSeq {. 
e8b0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
e8c0: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
e8d0: 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  f the collating 
e8e0: 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20  sequence, UTF-8 
e8f0: 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20  encoded */.  u8 
e900: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
e910: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
e920: 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78  ing handled by x
e930: 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  Cmp() */.  void 
e940: 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20  *pUser;         
e950: 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
e960: 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a  nt to xCmp() */.
e970: 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f    int (*xCmp)(vo
e980: 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76  id*,int, const v
e990: 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  oid*, int, const
e9a0: 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20   void*);.  void 
e9b0: 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20  (*xDel)(void*); 
e9c0: 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66   /* Destructor f
e9d0: 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a  or pUser */.};..
e9e0: 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64  /*.** A sort ord
e9f0: 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  er can be either
ea00: 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f   ASC or DESC..*/
ea10: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ea20: 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20  SO_ASC       0  
ea30: 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e  /* Sort in ascen
ea40: 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64  ding order */.#d
ea50: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
ea60: 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20  DESC      1  /* 
ea70: 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e  Sort in ascendin
ea80: 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69  g order */.#defi
ea90: 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44  ne SQLITE_SO_UND
eaa0: 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20  EFINED -1 /* No 
eab0: 73 6f 72 74 20 6f 72 64 65 72 20 73 70 65 63 69  sort order speci
eac0: 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43  fied */../*.** C
ead0: 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
eae0: 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73  ypes..**.** Thes
eaf0: 65 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d  e used to have m
eb00: 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b  nemonic name lik
eb10: 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45  e 'i' for SQLITE
eb20: 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64  _AFF_INTEGER and
eb30: 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49  .** 't' for SQLI
eb40: 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75  TE_AFF_TEXT.  Bu
eb50: 74 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20  t we can save a 
eb60: 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64  little space and
eb70: 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20   improve.** the 
eb80: 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62  speed a little b
eb90: 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20  y numbering the 
eba0: 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69  values consecuti
ebb0: 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42 75  vely.  .**.** Bu
ebc0: 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 73 74  t rather than st
ebd0: 61 72 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c  art with 0 or 1,
ebe0: 20 77 65 20 62 65 67 69 6e 20 77 69 74 68 20 27   we begin with '
ebf0: 41 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a  A'.  That way,.*
ec00: 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20  * when multiple 
ec10: 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 20 61  affinity types a
ec20: 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20  re concatenated 
ec30: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e  into a string an
ec40: 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65  d.** used as the
ec50: 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65   P4 operand, the
ec60: 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72  y will be more r
ec70: 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e  eadable..**.** N
ec80: 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68  ote also that th
ec90: 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20  e numeric types 
eca0: 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65  are grouped toge
ecb0: 74 68 65 72 20 73 6f 20 74 68 61 74 20 74 65 73  ther so that tes
ecc0: 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75  ting.** for a nu
ecd0: 6d 65 72 69 63 20 74 79 70 65 20 69 73 20 61 20  meric type is a 
ece0: 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f  single compariso
ecf0: 6e 2e 20 20 41 6e 64 20 74 68 65 20 42 4c 4f 42  n.  And the BLOB
ed00: 20 74 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a   type is first..
ed10: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ed20: 45 5f 41 46 46 5f 42 4c 4f 42 20 20 20 20 20 27  E_AFF_BLOB     '
ed30: 41 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  A'.#define SQLIT
ed40: 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20 27  E_AFF_TEXT     '
ed50: 42 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  B'.#define SQLIT
ed60: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27  E_AFF_NUMERIC  '
ed70: 43 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  C'.#define SQLIT
ed80: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27  E_AFF_INTEGER  '
ed90: 44 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  D'.#define SQLIT
eda0: 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27  E_AFF_REAL     '
edb0: 45 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  E'..#define sqli
edc0: 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69  te3IsNumericAffi
edd0: 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53  nity(X)  ((X)>=S
ede0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
edf0: 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  C)../*.** The SQ
ee00: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61  LITE_AFF_MASK va
ee10: 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74  lues masks off t
ee20: 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62  he significant b
ee30: 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66  its of an.** aff
ee40: 69 6e 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f  inity value. .*/
ee50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ee60: 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34  AFF_MASK     0x4
ee70: 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f  7../*.** Additio
ee80: 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74  nal bit values t
ee90: 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20  hat can be ORed 
eea0: 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79  with an affinity
eeb0: 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e   without.** chan
eec0: 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ging the affinit
eed0: 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  y..**.** The SQL
eee0: 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67  ITE_NOTNULL flag
eef0: 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f   is a combinatio
ef00: 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20  n of NULLEQ and 
ef10: 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49  JUMPIFNULL..** I
ef20: 74 20 63 61 75 73 65 73 20 61 6e 20 61 73 73 65  t causes an asse
ef30: 72 74 28 29 20 74 6f 20 66 69 72 65 20 69 66 20  rt() to fire if 
ef40: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74  either operand t
ef50: 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a  o a comparison.*
ef60: 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55  * operator is NU
ef70: 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65 64  LL.  It is added
ef80: 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70   to certain comp
ef90: 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73  arison operators
efa0: 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61   to.** prove tha
efb0: 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61  t the operands a
efc0: 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55  re always NOT NU
efd0: 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  LL..*/.#define S
efe0: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
eff0: 20 20 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70     0x10  /* jump
f000: 73 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  s if either oper
f010: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23  and is NULL */.#
f020: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54  define SQLITE_ST
f030: 4f 52 45 50 32 20 20 20 20 20 20 30 78 32 30 20  OREP2      0x20 
f040: 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
f050: 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68   in reg[P2] rath
f060: 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a  er than jump */.
f070: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
f080: 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38 30  ULLEQ       0x80
f090: 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a    /* NULL=NULL *
f0a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f0b0: 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78  _NOTNULL      0x
f0c0: 39 30 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68  90  /* Assert th
f0d0: 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  at operands are 
f0e0: 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f  never NULL */../
f0f0: 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f  *.** An object o
f100: 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 63  f this type is c
f110: 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  reated for each 
f120: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72  virtual table pr
f130: 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20  esent in.** the 
f140: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
f150: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64   .**.** If the d
f160: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
f170: 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74  s shared, then t
f180: 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74  here is one inst
f190: 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20  ance of this.** 
f1a0: 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 65 61  structure for ea
f1b0: 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
f1c0: 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a  ection (sqlite3*
f1d0: 29 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20  ) that uses the 
f1e0: 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61  shared.** schema
f1f0: 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73  . This is becaus
f200: 65 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  e each database 
f210: 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69  connection requi
f220: 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71  res its own uniq
f230: 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  ue.** instance o
f240: 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  f the sqlite3_vt
f250: 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20  ab* handle used 
f260: 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69  to access the vi
f270: 72 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20  rtual table .** 
f280: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20  implementation. 
f290: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
f2a0: 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65  ndles can not be
f2b0: 20 73 68 61 72 65 64 20 62 65 74 77 65 65 6e 20   shared between 
f2c0: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
f2d0: 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77  nections, even w
f2e0: 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20  hen the rest of 
f2f0: 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61  the in-memory da
f300: 74 61 62 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d  tabase .** schem
f310: 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73 20  a is shared, as 
f320: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
f330: 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20  on often stores 
f340: 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
f350: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
f360: 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20 76  e passed to it v
f370: 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28  ia the xConnect(
f380: 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d  ) or xCreate() m
f390: 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20  ethod.** during 
f3a0: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69  initialization i
f3b0: 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20  nternally. This 
f3c0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
f3d0: 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a  ion handle may.*
f3e0: 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20 62  * then be used b
f3f0: 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  y the virtual ta
f400: 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ble implementati
f410: 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65 61  on to access rea
f420: 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74  l tables .** wit
f430: 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hin the database
f440: 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20 61  . So that they a
f450: 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f 66  ppear as part of
f460: 20 74 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a   the callers .**
f470: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
f480: 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65 65  ese accesses nee
f490: 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61  d to be made via
f4a0: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
f4b0: 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  se .** connectio
f4c0: 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74  n as that used t
f4d0: 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70  o execute SQL op
f4e0: 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20  erations on the 
f4f0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a  virtual table..*
f500: 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20  *.** All VTable 
f510: 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72  objects that cor
f520: 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e  respond to a sin
f530: 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73  gle table in a s
f540: 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  hared.** databas
f550: 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69  e schema are ini
f560: 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e  tially stored in
f570: 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70   a linked-list p
f580: 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20  ointed to by.** 
f590: 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
f5a0: 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c  e member variabl
f5b0: 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  e of the corresp
f5c0: 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a  onding Table obj
f5d0: 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20  ect..** When an 
f5e0: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
f5f0: 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72  ) operation is r
f600: 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73  equired to acces
f610: 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  s the virtual.**
f620: 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63   table, it searc
f630: 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72  hes the list for
f640: 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74   the VTable that
f650: 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
f660: 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  the.** database 
f670: 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67  connection doing
f680: 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73   the preparing s
f690: 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20  o as to use the 
f6a0: 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74  correct.** sqlit
f6b0: 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
f6c0: 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20  in the compiled 
f6d0: 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  query..**.** Whe
f6e0: 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54  n an in-memory T
f6f0: 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64  able object is d
f700: 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d  eleted (for exam
f710: 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20  ple when the.** 
f720: 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20  schema is being 
f730: 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d  reloaded for som
f740: 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56  e reason), the V
f750: 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72  Table objects ar
f760: 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65  e not .** delete
f770: 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65  d and the sqlite
f780: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
f790: 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e  are not xDisconn
f7a0: 65 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65  ect()ed .** imme
f7b0: 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64  diately. Instead
f7c0: 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64  , they are moved
f7d0: 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e   from the Table.
f7e0: 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a  pVTable list to.
f7f0: 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65  ** another linke
f800: 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 62 79  d list headed by
f810: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69   the sqlite3.pDi
f820: 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20  sconnect member 
f830: 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73  of the.** corres
f840: 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20  ponding sqlite3 
f850: 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 79 20  structure. They 
f860: 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64  are then deleted
f870: 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a  /xDisconnected .
f880: 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73  ** next time a s
f890: 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70  tatement is prep
f8a0: 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64 20  ared using said 
f8b0: 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69  sqlite3*. This i
f8c0: 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f  s done.** to avo
f8d0: 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75  id deadlock issu
f8e0: 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c  es involving mul
f8f0: 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75  tiple sqlite3.mu
f900: 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20  tex mutexes..** 
f910: 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74  Refer to comment
f920: 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e  s above function
f930: 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
f940: 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a  ckList() for an.
f950: 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61  ** explanation a
f960: 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20 73  s to why it is s
f970: 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e  afe to add an en
f980: 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  try to an sqlite
f990: 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a  3.pDisconnect.**
f9a0: 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f   list without ho
f9b0: 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73  lding the corres
f9c0: 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e  ponding sqlite3.
f9d0: 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a  mutex mutex..**.
f9e0: 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f  ** The memory fo
f9f0: 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69  r objects of thi
fa00: 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79 73  s type is always
fa10: 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a   allocated by .*
fa20: 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  * sqlite3DbMallo
fa30: 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63  c(), using the c
fa40: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
fa50: 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c   stored in VTabl
fa60: 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68 65 20  e.db as .** the 
fa70: 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a  first argument..
fa80: 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65  */.struct VTable
fa90: 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
faa0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
fab0: 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * Database conne
fac0: 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64  ction associated
fad0: 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65   with this table
fae0: 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d   */.  Module *pM
faf0: 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  od;             
fb00: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f  /* Pointer to mo
fb10: 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
fb20: 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ion */.  sqlite3
fb30: 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20  _vtab *pVtab;   
fb40: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
fb50: 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a   vtab instance *
fb60: 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
fb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
fb80: 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74   Number of point
fb90: 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75  ers to this stru
fba0: 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43  cture */.  u8 bC
fbb0: 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20  onstraint;      
fbc0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
fbd0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20  constraints are 
fbe0: 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69  supported */.  i
fbf0: 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt iSavepoint;  
fc00: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74           /* Dept
fc10: 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49  h of the SAVEPOI
fc20: 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54  NT stack */.  VT
fc30: 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20  able *pNext;    
fc40: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
fc50: 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28  in linked list (
fc60: 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b  see above) */.};
fc70: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65  ../*.** The sche
fc80: 6d 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c 20  ma for each SQL 
fc90: 74 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20 69  table and view i
fca0: 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
fcb0: 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e   memory.** by an
fcc0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
fcd0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
fce0: 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
fcf0: 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a  Table {.  char *
fd00: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f  zName;         /
fd10: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  * Name of the ta
fd20: 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20  ble or view */. 
fd30: 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20   Column *aCol;  
fd40: 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61        /* Informa
fd50: 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
fd60: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
fd70: 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20  x *pIndex;      
fd80: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20   /* List of SQL 
fd90: 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20  indexes on this 
fda0: 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65  table. */.  Sele
fdb0: 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
fdc0: 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62   /* NULL for tab
fdd0: 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20  les.  Points to 
fde0: 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20  definition if a 
fdf0: 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20  view. */.  FKey 
fe00: 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20  *pFKey;         
fe10: 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f  /* Linked list o
fe20: 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65  f all foreign ke
fe30: 79 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65  ys in this table
fe40: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
fe50: 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74  Aff;       /* St
fe60: 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68  ring defining th
fe70: 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61  e affinity of ea
fe80: 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45  ch column */.  E
fe90: 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b  xprList *pCheck;
fea0: 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b      /* All CHECK
feb0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
fec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fed0: 20 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e 2e 20         /*   ... 
fee0: 61 6c 73 6f 20 75 73 65 64 20 61 73 20 63 6f 6c  also used as col
fef0: 75 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20 69 6e  umn name list in
ff00: 20 61 20 56 49 45 57 20 2a 2f 0a 20 20 69 6e 74   a VIEW */.  int
ff10: 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20   tnum;          
ff20: 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20    /* Root BTree 
ff30: 70 61 67 65 20 66 6f 72 20 74 68 69 73 20 74 61  page for this ta
ff40: 62 6c 65 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b  ble */.  i16 iPK
ff50: 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ey;           /*
ff60: 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65   If not negative
ff70: 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79  , use aCol[iPKey
ff80: 5d 20 61 73 20 74 68 65 20 72 6f 77 69 64 20 2a  ] as the rowid *
ff90: 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20  /.  i16 nCol;   
ffa0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
ffb0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
ffc0: 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
ffd0: 20 75 31 36 20 6e 52 65 66 3b 20 20 20 20 20 20   u16 nRef;      
ffe0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
fff0: 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  of pointers to t
10000 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 4c  his Table */.  L
10010 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74  ogEst nRowLogEst
10020 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64  ;   /* Estimated
10030 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d   rows in table -
10040 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
10050 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f  t1 table */.  Lo
10060 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20  gEst szTabRow;  
10070 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
10080 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62  size of each tab
10090 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20  le row in bytes 
100a0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
100b0 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54  _ENABLE_COSTMULT
100c0 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75  .  LogEst costMu
100d0 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20  lt;     /* Cost 
100e0 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75  multiplier for u
100f0 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20  sing this table 
10100 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 74  */.#endif.  u8 t
10110 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  abFlags;        
10120 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a   /* Mask of TF_*
10130 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20   values */.  u8 
10140 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20  keyConf;        
10150 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20    /* What to do 
10160 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75  in case of uniqu
10170 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f  eness conflict o
10180 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64  n iPKey */.#ifnd
10190 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
101a0 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20  LTERTABLE.  int 
101b0 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20  addColOffset;   
101c0 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52   /* Offset in CR
101d0 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20  EATE TABLE stmt 
101e0 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c  to add a new col
101f0 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  umn */.#endif.#i
10200 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
10210 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
10220 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b   int nModuleArg;
10230 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
10240 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  of arguments to 
10250 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20  the module */.  
10260 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41  char **azModuleA
10270 72 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c  rg;  /* 0: modul
10280 65 20 31 3a 20 73 63 68 65 6d 61 20 32 3a 20 76  e 1: schema 2: v
10290 74 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61  tab name 3...: a
102a0 72 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  rgs */.  VTable 
102b0 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a  *pVTable;     /*
102c0 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20   List of VTable 
102d0 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64  objects. */.#end
102e0 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  if.  Trigger *pT
102f0 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73  rigger;   /* Lis
10300 74 20 6f 66 20 74 72 69 67 67 65 72 73 20 73 74  t of triggers st
10310 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20  ored in pSchema 
10320 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
10330 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68  hema;     /* Sch
10340 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ema that contain
10350 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  s this table */.
10360 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f    Table *pNextZo
10370 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  mbie;  /* Next o
10380 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d  n the Parse.pZom
10390 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d  bieTab list */.}
103a0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
103b0 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c   values for Tabl
103c0 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a  e.tabFlags..**.*
103d0 2a 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61  * TF_OOOHidden a
103e0 70 70 6c 69 65 73 20 74 6f 20 76 69 72 74 75 61  pplies to virtua
103f0 6c 20 74 61 62 6c 65 73 20 74 68 61 74 20 68 61  l tables that ha
10400 76 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  ve hidden column
10410 73 20 74 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f  s that are.** fo
10420 6c 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69  llowed by non-hi
10430 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45  dden columns.  E
10440 78 61 6d 70 6c 65 3a 20 20 22 43 52 45 41 54 45  xample:  "CREATE
10450 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78   VIRTUAL TABLE x
10460 20 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28   USING.** vtab1(
10470 61 20 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20  a HIDDEN, b);". 
10480 20 53 69 6e 63 65 20 22 62 22 20 69 73 20 61 20   Since "b" is a 
10490 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d  non-hidden colum
104a0 6e 20 62 75 74 20 22 61 22 20 69 73 20 68 69 64  n but "a" is hid
104b0 64 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f  den,.** the TF_O
104c0 4f 4f 48 69 64 64 65 6e 20 61 74 74 72 69 62 75  OOHidden attribu
104d0 74 65 20 77 6f 75 6c 64 20 61 70 70 6c 79 20 69  te would apply i
104e0 6e 20 74 68 69 73 20 63 61 73 65 2e 20 20 53 75  n this case.  Su
104f0 63 68 20 74 61 62 6c 65 73 20 72 65 71 75 69 72  ch tables requir
10500 65 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68 61 6e  e.** special han
10510 64 6c 69 6e 67 20 64 75 72 69 6e 67 20 49 4e 53  dling during INS
10520 45 52 54 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a  ERT processing..
10530 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65  */.#define TF_Re
10540 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78  adonly        0x
10550 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e  01    /* Read-on
10560 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20  ly system table 
10570 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70  */.#define TF_Ep
10580 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78  hemeral       0x
10590 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65  02    /* An ephe
105a0 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23  meral table */.#
105b0 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69  define TF_HasPri
105c0 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20 20  maryKey   0x04  
105d0 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61    /* Table has a
105e0 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a   primary key */.
105f0 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69  #define TF_Autoi
10600 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38 20  ncrement   0x08 
10610 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72     /* Integer pr
10620 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75 74  imary key is aut
10630 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64  oincrement */.#d
10640 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61 6c  efine TF_Virtual
10650 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20 20           0x10   
10660 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61 6c   /* Is a virtual
10670 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
10680 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69  e TF_WithoutRowi
10690 64 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20  d    0x20    /* 
106a0 4e 6f 20 72 6f 77 69 64 2e 20 20 50 52 49 4d 41  No rowid.  PRIMA
106b0 52 59 20 4b 45 59 20 69 73 20 74 68 65 20 6b 65  RY KEY is the ke
106c0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  y */.#define TF_
106d0 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 20 20  NoVisibleRowid  
106e0 30 78 34 30 20 20 20 20 2f 2a 20 4e 6f 20 75 73  0x40    /* No us
106f0 65 72 2d 76 69 73 69 62 6c 65 20 22 72 6f 77 69  er-visible "rowi
10700 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65  d" column */.#de
10710 66 69 6e 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65  fine TF_OOOHidde
10720 6e 20 20 20 20 20 20 20 30 78 38 30 20 20 20 20  n       0x80    
10730 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64 65 72 20  /* Out-of-Order 
10740 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a  hidden columns *
10750 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74  /.../*.** Test t
10760 6f 20 73 65 65 20 77 68 65 74 68 65 72 20 6f 72  o see whether or
10770 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73 20   not a table is 
10780 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
10790 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e    This is.** don
107a0 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f 20  e as a macro so 
107b0 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20  that it will be 
107c0 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77 68  optimized out wh
107d0 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  en virtual.** ta
107e0 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20 6f  ble support is o
107f0 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
10800 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65  build..*/.#ifnde
10810 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
10820 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65  RTUALTABLE.#  de
10830 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58  fine IsVirtual(X
10840 29 20 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61  )      (((X)->ta
10850 62 46 6c 61 67 73 20 26 20 54 46 5f 56 69 72 74  bFlags & TF_Virt
10860 75 61 6c 29 21 3d 30 29 0a 23 20 20 64 65 66 69  ual)!=0).#  defi
10870 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ne IsHiddenColum
10880 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c 46  n(X) (((X)->colF
10890 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48  lags & COLFLAG_H
108a0 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c 73 65  IDDEN)!=0).#else
108b0 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72  .#  define IsVir
108c0 74 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23  tual(X)      0.#
108d0 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
108e0 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e  nColumn(X) 0.#en
108f0 64 69 66 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65  dif../* Does the
10900 20 74 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f   table have a ro
10910 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48  wid */.#define H
10920 61 73 52 6f 77 69 64 28 58 29 20 20 20 20 20 28  asRowid(X)     (
10930 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26  ((X)->tabFlags &
10940 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64   TF_WithoutRowid
10950 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20 56 69  )==0).#define Vi
10960 73 69 62 6c 65 52 6f 77 69 64 28 58 29 20 28 28  sibleRowid(X) ((
10970 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20  (X)->tabFlags & 
10980 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69  TF_NoVisibleRowi
10990 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61  d)==0)../*.** Ea
109a0 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ch foreign key c
109b0 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20  onstraint is an 
109c0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
109d0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
109e0 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72  ure..**.** A for
109f0 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f  eign key is asso
10a00 63 69 61 74 65 64 20 77 69 74 68 20 74 77 6f 20  ciated with two 
10a10 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72  tables.  The "fr
10a20 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20  om" table is.** 
10a30 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 63  the table that c
10a40 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46 45  ontains the REFE
10a50 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68  RENCES clause th
10a60 61 74 20 63 72 65 61 74 65 73 20 74 68 65 20 66  at creates the f
10a70 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20  oreign.** key.  
10a80 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69  The "to" table i
10a90 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  s the table that
10aa0 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65   is named in the
10ab0 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
10ac0 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20  se..** Consider 
10ad0 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a  this example:.**
10ae0 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54  .**     CREATE T
10af0 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20  ABLE ex1(.**    
10b00 20 20 20 61 20 49 4e 54 45 47 45 52 20 50 52 49     a INTEGER PRI
10b10 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20  MARY KEY,.**    
10b20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e     b INTEGER CON
10b30 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45  STRAINT fk1 REFE
10b40 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a  RENCES ex2(x).**
10b50 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f       );.**.** Fo
10b60 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66  r foreign key "f
10b70 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61  k1", the from-ta
10b80 62 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e 64  ble is "ex1" and
10b90 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
10ba0 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76   "ex2"..** Equiv
10bb0 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a  alent names:.**.
10bc0 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c  **     from-tabl
10bd0 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65  e == child-table
10be0 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62  .**       to-tab
10bf0 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62  le == parent-tab
10c00 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45  le.**.** Each RE
10c10 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
10c20 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73  generates an ins
10c30 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
10c40 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
10c50 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74 74  .** which is att
10c60 61 63 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f  ached to the fro
10c70 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f  m-table.  The to
10c80 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20  -table need not 
10c90 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68  exist when.** th
10ca0 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20  e from-table is 
10cb0 63 72 65 61 74 65 64 2e 20 20 54 68 65 20 65 78  created.  The ex
10cc0 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74  istence of the t
10cd0 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63  o-table is not c
10ce0 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  hecked..**.** Th
10cf0 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61  e list of all pa
10d00 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20  rents for child 
10d10 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20  Table X is held 
10d20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a  at X.pFKey..**.*
10d30 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  * A list of all 
10d40 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74  children for a t
10d50 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68  able named Z (wh
10d60 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76  ich might not ev
10d70 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20  en exist).** is 
10d80 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66  held in Schema.f
10d90 6b 65 79 48 61 73 68 20 77 69 74 68 20 61 20 68  keyHash with a h
10da0 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f  ash key of Z..*/
10db0 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20  .struct FKey {. 
10dc0 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20   Table *pFrom;  
10dd0 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74     /* Table cont
10de0 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52  aining the REFER
10df0 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b  ENCES clause (ak
10e00 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46  a: Child) */.  F
10e10 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20  Key *pNextFrom; 
10e20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69   /* Next FKey wi
10e30 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70  th the same in p
10e40 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e  From. Next paren
10e50 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20  t of pFrom */.  
10e60 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20  char *zTo;      
10e70 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62    /* Name of tab
10e80 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65 79 20  le that the key 
10e90 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20  points to (aka: 
10ea0 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65  Parent) */.  FKe
10eb0 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f  y *pNextTo;    /
10ec0 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68 65 20  * Next with the 
10ed0 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63  same zTo. Next c
10ee0 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a  hild of zTo. */.
10ef0 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b    FKey *pPrevTo;
10f00 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20      /* Previous 
10f10 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54  with the same zT
10f20 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b  o */.  int nCol;
10f30 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
10f40 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
10f50 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f   this key */.  /
10f60 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31  * EV: R-30323-21
10f70 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65  917 */.  u8 isDe
10f80 66 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a  ferred;       /*
10f90 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61   True if constra
10fa0 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20  int checking is 
10fb0 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f  deferred till CO
10fc0 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63  MMIT */.  u8 aAc
10fd0 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20  tion[2];        
10fe0 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64  /* ON DELETE and
10ff0 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f   ON UPDATE actio
11000 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  ns, respectively
11010 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61   */.  Trigger *a
11020 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54  pTrigger[2];/* T
11030 72 69 67 67 65 72 73 20 66 6f 72 20 61 41 63 74  riggers for aAct
11040 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f  ion[] actions */
11050 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61  .  struct sColMa
11060 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70  p {      /* Mapp
11070 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ing of columns i
11080 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d  n pFrom to colum
11090 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20  ns in zTo */.   
110a0 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20   int iFrom;     
110b0 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
110c0 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72  of column in pFr
110d0 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  om */.    char *
110e0 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  zCol;           
110f0 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d  /* Name of colum
11100 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55  n in zTo.  If NU
11110 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b  LL use PRIMARY K
11120 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31  EY */.  } aCol[1
11130 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ];            /*
11140 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   One entry for e
11150 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75  ach of nCol colu
11160 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  mns */.};../*.**
11170 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73   SQLite supports
11180 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20   many different 
11190 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20  ways to resolve 
111a0 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  a constraint.** 
111b0 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b  error.  ROLLBACK
111c0 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
111d0 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61  s that a constra
111e0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a  int violation.**
111f0 20 63 61 75 73 65 73 20 74 68 65 20 6f 70 65 72   causes the oper
11200 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73  ation in process
11210 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72   to fail and for
11220 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
11230 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62  nsaction.** to b
11240 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  e rolled back.  
11250 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67  ABORT processing
11260 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61   means the opera
11270 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a  tion in process.
11280 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79  ** fails and any
11290 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66   prior changes f
112a0 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65  rom that one ope
112b0 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65  ration are backe
112c0 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68  d out,.** but th
112d0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
112e0 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b   not rolled back
112f0 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69  .  FAIL processi
11300 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a  ng means that.**
11310 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
11320 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73  n progress stops
11330 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20   and returns an 
11340 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74  error code.  But
11350 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65   prior.** change
11360 73 20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d  s due to the sam
11370 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20  e operation are 
11380 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61  not backed out a
11390 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a  nd no rollback.*
113a0 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52  * occurs.  IGNOR
113b0 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  E means that the
113c0 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20   particular row 
113d0 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20  that caused the 
113e0 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
113f0 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72  ror is not inser
11400 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20  ted or updated. 
11410 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74   Processing cont
11420 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72  inues and no err
11430 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65  or.** is returne
11440 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e  d.  REPLACE mean
11450 73 20 74 68 61 74 20 70 72 65 65 78 69 73 74 69  s that preexisti
11460 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f 77 73  ng database rows
11470 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20   that caused.** 
11480 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  a UNIQUE constra
11490 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72  int violation ar
114a0 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61  e removed so tha
114b0 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74  t the new insert
114c0 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61   or.** update ca
114d0 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63  n proceed.  Proc
114e0 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73  essing continues
114f0 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73   and no error is
11500 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a   reported..**.**
11510 20 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55   RESTRICT, SETNU
11520 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20  LL, and CASCADE 
11530 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e  actions apply on
11540 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65  ly to foreign ke
11550 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20  ys..** RESTRICT 
11560 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 41  is the same as A
11570 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41  BORT for IMMEDIA
11580 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  TE foreign keys 
11590 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20  and the.** same 
115a0 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20  as ROLLBACK for 
115b0 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20  DEFERRED keys.  
115c0 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68  SETNULL means th
115d0 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a  at the foreign.*
115e0 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20  * key is set to 
115f0 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d  NULL.  CASCADE m
11600 65 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45  eans that a DELE
11610 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20  TE or UPDATE of 
11620 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65  the.** reference
11630 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70  d table row is p
11640 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74  ropagated into t
11650 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64  he row that hold
11660 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e  s the.** foreign
11670 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 65   key..** .** The
11680 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f   following symbo
11690 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20 75  lic values are u
116a0 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68  sed to record wh
116b0 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61  ich type.** of a
116c0 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a  ction to take..*
116d0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e  /.#define OE_Non
116e0 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65  e     0   /* The
116f0 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61  re is no constra
11700 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a  int to check */.
11710 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62  #define OE_Rollb
11720 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20  ack 1   /* Fail 
11730 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e  the operation an
11740 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74  d rollback the t
11750 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64  ransaction */.#d
11760 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20  efine OE_Abort  
11770 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75    2   /* Back ou
11780 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f  t changes but do
11790 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61   no rollback tra
117a0 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
117b0 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20  ine OE_Fail     
117c0 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20  3   /* Stop the 
117d0 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65  operation but le
117e0 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68  ave all prior ch
117f0 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
11800 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20   OE_Ignore   4  
11810 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65   /* Ignore the e
11820 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20  rror. Do not do 
11830 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50  the INSERT or UP
11840 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
11850 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20  OE_Replace  5   
11860 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74 69  /* Delete existi
11870 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20  ng record, then 
11880 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  do INSERT or UPD
11890 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  ATE */..#define 
118a0 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20 20 20  OE_Restrict 6   
118b0 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20  /* OE_Abort for 
118c0 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f  IMMEDIATE, OE_Ro
118d0 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52  llback for DEFER
118e0 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  RED */.#define O
118f0 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f  E_SetNull  7   /
11900 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67  * Set the foreig
11910 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e  n key value to N
11920 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ULL */.#define O
11930 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f  E_SetDflt  8   /
11940 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67  * Set the foreig
11950 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69  n key value to i
11960 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64  ts default */.#d
11970 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65  efine OE_Cascade
11980 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65    9   /* Cascade
11990 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a   the changes */.
119a0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61  .#define OE_Defa
119b0 75 6c 74 20 20 31 30 20 20 2f 2a 20 44 6f 20 77  ult  10  /* Do w
119c0 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66 61  hatever the defa
119d0 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f  ult action is */
119e0 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  .../*.** An inst
119f0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
11a00 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
11a10 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65  is passed as the
11a20 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
11a30 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62  nt to sqlite3Vdb
11a40 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20  eKeyCompare and 
11a50 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72  is used to contr
11a60 6f 6c 20 74 68 65 20 0a 2a 2a 20 63 6f 6d 70 61  ol the .** compa
11a70 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f  rison of the two
11a80 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a   index keys..**.
11a90 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f  ** Note that aSo
11aa0 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43  rtOrder[] and aC
11ab0 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c  oll[] have nFiel
11ac0 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72  d+1 slots.  Ther
11ad0 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20  e.** are nField 
11ae0 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f  slots for the co
11af0 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65  lumns of an inde
11b00 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61  x then one extra
11b10 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65   slot.** for the
11b20 20 72 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e   rowid at the en
11b30 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79  d..*/.struct Key
11b40 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65  Info {.  u32 nRe
11b50 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
11b60 4e 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65  Number of refere
11b70 6e 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79  nces to this Key
11b80 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  Info object */. 
11b90 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
11ba0 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
11bb0 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74  oding - one of t
11bc0 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76  he SQLITE_UTF* v
11bd0 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  alues */.  u16 n
11be0 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f  Field;         /
11bf0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20  * Number of key 
11c00 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69  columns in the i
11c10 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 58  ndex */.  u16 nX
11c20 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a  Field;        /*
11c30 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
11c40 6e 73 20 62 65 79 6f 6e 64 20 74 68 65 20 6b 65  ns beyond the ke
11c50 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73  y columns */.  s
11c60 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
11c70 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
11c80 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
11c90 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
11ca0 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f  r;     /* Sort o
11cb0 72 64 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f  rder for each co
11cc0 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53  lumn. */.  CollS
11cd0 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f  eq *aColl[1];  /
11ce0 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
11cf0 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74 65  ence for each te
11d00 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f  rm of the key */
11d10 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
11d20 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
11d30 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
11d40 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74  e holds informat
11d50 69 6f 6e 20 61 62 6f 75 74 20 61 0a 2a 2a 20 73  ion about a.** s
11d60 69 6e 67 6c 65 20 69 6e 64 65 78 20 72 65 63 6f  ingle index reco
11d70 72 64 20 74 68 61 74 20 68 61 73 20 61 6c 72 65  rd that has alre
11d80 61 64 79 20 62 65 65 6e 20 70 61 72 73 65 64 20  ady been parsed 
11d90 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64  out into individ
11da0 75 61 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a  ual.** values..*
11db0 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73  *.** A record is
11dc0 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20   an object that 
11dd0 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  contains one or 
11de0 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64  more fields of d
11df0 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20  ata..** Records 
11e00 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  are used to stor
11e10 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
11e20 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64   a table row and
11e30 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65   to store.** the
11e40 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78   key of an index
11e50 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69  .  A blob encodi
11e60 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69  ng of a record i
11e70 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20  s created by.** 
11e80 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  the OP_MakeRecor
11e90 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20  d opcode of the 
11ea0 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61  VDBE and is disa
11eb0 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a  ssembled by the.
11ec0 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  ** OP_Column opc
11ed0 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ode..**.** This 
11ee0 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
11ef0 61 20 72 65 63 6f 72 64 20 74 68 61 74 20 68 61  a record that ha
11f00 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 64  s already been d
11f10 69 73 61 73 73 65 6d 62 6c 65 64 0a 2a 2a 20 69  isassembled.** i
11f20 6e 74 6f 20 69 74 73 20 63 6f 6e 73 74 69 74 75  nto its constitu
11f30 65 6e 74 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a 2a  ent fields..**.*
11f40 2a 20 54 68 65 20 72 31 20 61 6e 64 20 72 32 20  * The r1 and r2 
11f50 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 73  member variables
11f60 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 62   are only used b
11f70 79 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 64 20  y the optimized 
11f80 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 66 75  comparison.** fu
11f90 6e 63 74 69 6f 6e 73 20 76 64 62 65 52 65 63 6f  nctions vdbeReco
11fa0 72 64 43 6f 6d 70 61 72 65 49 6e 74 28 29 20 61  rdCompareInt() a
11fb0 6e 64 20 76 64 62 65 52 65 63 6f 72 64 43 6f 6d  nd vdbeRecordCom
11fc0 70 61 72 65 53 74 72 69 6e 67 28 29 2e 0a 2a 2f  pareString()..*/
11fd0 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64  .struct Unpacked
11fe0 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e  Record {.  KeyIn
11ff0 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f  fo *pKeyInfo;  /
12000 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20  * Collation and 
12010 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72  sort-order infor
12020 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 31 36 20  mation */.  u16 
12030 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
12040 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
12050 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20  ries in apMem[] 
12060 2a 2f 0a 20 20 69 38 20 64 65 66 61 75 6c 74 5f  */.  i8 default_
12070 72 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70  rc;      /* Comp
12080 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 69 66  arison result if
12090 20 6b 65 79 73 20 61 72 65 20 65 71 75 61 6c 20   keys are equal 
120a0 2a 2f 0a 20 20 75 38 20 65 72 72 43 6f 64 65 3b  */.  u8 errCode;
120b0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f           /* Erro
120c0 72 20 64 65 74 65 63 74 65 64 20 62 79 20 78 52  r detected by xR
120d0 65 63 6f 72 64 43 6f 6d 70 61 72 65 20 28 43 4f  ecordCompare (CO
120e0 52 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20  RRUPT or NOMEM) 
120f0 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20  */.  Mem *aMem; 
12100 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
12110 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72 31 3b 20  es */.  int r1; 
12120 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
12130 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69  alue to return i
12140 66 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f  f (lhs > rhs) */
12150 0a 20 20 69 6e 74 20 72 32 3b 20 20 20 20 20 20  .  int r2;      
12160 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
12170 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 72 68  to return if (rh
12180 73 20 3c 20 6c 68 73 29 20 2a 2f 0a 7d 3b 0a 0a  s < lhs) */.};..
12190 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
121a0 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73 65  index is represe
121b0 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62  nted in memory b
121c0 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  y an.** instance
121d0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
121e0 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
121f0 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  ** The columns o
12200 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
12210 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78   are to be index
12220 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65 64  ed are described
12230 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c  .** by the aiCol
12240 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74  umn[] field of t
12250 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
12260 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70  For example, sup
12270 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20  pose.** we have 
12280 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61  the following ta
12290 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a  ble and index:.*
122a0 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  *.**     CREATE 
122b0 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74  TABLE Ex1(c1 int
122c0 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78  , c2 int, c3 tex
122d0 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  t);.**     CREAT
122e0 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45  E INDEX Ex2 ON E
122f0 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a  x1(c3,c1);.**.**
12300 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74   In the Table st
12310 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69  ructure describi
12320 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20  ng Ex1, nCol==3 
12330 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72  because there ar
12340 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d  e.** three colum
12350 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
12360 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73    In the Index s
12370 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
12380 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c  ing.** Ex2, nCol
12390 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f  umn==2 since 2 o
123a0 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20  f the 3 columns 
123b0 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65 78  of Ex1 are index
123c0 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  ed..** The value
123d0 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20   of aiColumn is 
123e0 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d  {2, 0}.  aiColum
123f0 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20  n[0]==2 because 
12400 74 68 65 20 0a 2a 2a 20 66 69 72 73 74 20 63 6f  the .** first co
12410 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78  lumn to be index
12420 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20 69  ed (c3) has an i
12430 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31  ndex of 2 in Ex1
12440 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20  .aCol[]..** The 
12450 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f  second column to
12460 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31 29   be indexed (c1)
12470 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
12480 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f   0 in.** Ex1.aCo
12490 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61  l[], hence Ex2.a
124a0 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a  iColumn[1]==0..*
124b0 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f  *.** The Index.o
124c0 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74  nError field det
124d0 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20  ermines whether 
124e0 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78  or not the index
124f0 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75  ed columns.** mu
12500 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64  st be unique and
12510 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74   what to do if t
12520 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68  hey are not.  Wh
12530 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  en Index.onError
12540 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20  =OE_None,.** it 
12550 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f  means this is no
12560 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  t a unique index
12570 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74 20  .  Otherwise it 
12580 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  is a unique inde
12590 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c  x.** and the val
125a0 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72  ue of Index.onEr
125b0 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68 65  ror indicate the
125c0 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20   which conflict 
125d0 72 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20 61  resolution .** a
125e0 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c  lgorithm to empl
125f0 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61  oy whenever an a
12600 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74  ttempt is made t
12610 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75  o insert a non-u
12620 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74  nique.** element
12630 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61  ..**.** While pa
12640 72 73 69 6e 67 20 61 20 43 52 45 41 54 45 20 54  rsing a CREATE T
12650 41 42 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49  ABLE or CREATE I
12660 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69  NDEX statement i
12670 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65  n order to.** ge
12680 6e 65 72 61 74 65 20 56 44 42 45 20 63 6f 64 65  nerate VDBE code
12690 20 28 61 73 20 6f 70 70 6f 73 65 64 20 74 6f 20   (as opposed to 
126a0 70 61 72 73 69 6e 67 20 6f 6e 65 20 72 65 61 64  parsing one read
126b0 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f   from an sqlite_
126c0 6d 61 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20  master.** table 
126d0 61 73 20 70 61 72 74 20 6f 66 20 70 61 72 73 69  as part of parsi
126e0 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64  ng an existing d
126f0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 29 2c  atabase schema),
12700 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 73 74 61   transient insta
12710 6e 63 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20  nces.** of this 
12720 73 74 72 75 63 74 75 72 65 20 6d 61 79 20 62 65  structure may be
12730 20 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68 69   created. In thi
12740 73 20 63 61 73 65 20 74 68 65 20 49 6e 64 65 78  s case the Index
12750 2e 74 6e 75 6d 20 76 61 72 69 61 62 6c 65 20 69  .tnum variable i
12760 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f  s.** used to sto
12770 72 65 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  re the address o
12780 66 20 61 20 56 44 42 45 20 69 6e 73 74 72 75 63  f a VDBE instruc
12790 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61  tion, not a data
127a0 62 61 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d  base page.** num
127b0 62 65 72 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d  ber (it cannot -
127c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70 61   the database pa
127d0 67 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61  ge is not alloca
127e0 74 65 64 20 75 6e 74 69 6c 20 74 68 65 20 56 44  ted until the VD
127f0 42 45 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73  BE.** program is
12800 20 65 78 65 63 75 74 65 64 29 2e 20 53 65 65 20   executed). See 
12810 63 6f 6e 76 65 72 74 54 6f 57 69 74 68 6f 75 74  convertToWithout
12820 52 6f 77 69 64 54 61 62 6c 65 28 29 20 66 6f 72  RowidTable() for
12830 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72   details..*/.str
12840 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68  uct Index {.  ch
12850 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
12860 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
12870 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  f this index */.
12880 20 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b    i16 *aiColumn;
12890 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
128a0 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  ich columns are 
128b0 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64  used by this ind
128c0 65 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f  ex.  1st is 0 */
128d0 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77  .  LogEst *aiRow
128e0 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46  LogEst;     /* F
128f0 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74  rom ANALYZE: Est
12900 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20  . rows selected 
12910 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  by each column *
12920 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c  /.  Table *pTabl
12930 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
12940 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65  The SQL table be
12950 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20  ing indexed */. 
12960 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
12970 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72            /* Str
12980 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65  ing defining the
12990 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63   affinity of eac
129a0 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e  h column */.  In
129b0 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  dex *pNext;     
129c0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
129d0 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61  xt index associa
129e0 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d  ted with the sam
129f0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68  e table */.  Sch
12a00 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
12a10 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
12a20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20  containing this 
12a30 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61  index */.  u8 *a
12a40 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  SortOrder;      
12a50 20 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20      /* for each 
12a60 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45  column: True==DE
12a70 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a  SC, False==ASC *
12a80 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c  /.  char **azCol
12a90 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
12aa0 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69  Array of collati
12ab0 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65  on sequence name
12ac0 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20  s for index */. 
12ad0 20 45 78 70 72 20 2a 70 50 61 72 74 49 64 78 57   Expr *pPartIdxW
12ae0 68 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45  here;     /* WHE
12af0 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61  RE clause for pa
12b00 72 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f  rtial indices */
12b10 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 61 43 6f  .  ExprList *aCo
12b20 6c 45 78 70 72 3b 20 20 20 20 20 20 2f 2a 20 43  lExpr;      /* C
12b30 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e  olumn expression
12b40 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  s */.  int tnum;
12b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b60 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61  /* DB Page conta
12b70 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68  ining root of th
12b80 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f  is index */.  Lo
12b90 67 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20  gEst szIdxRow;  
12ba0 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
12bb0 74 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20  ted average row 
12bc0 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f  size in bytes */
12bd0 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20  .  u16 nKeyCol; 
12be0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
12bf0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
12c00 20 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79   forming the key
12c10 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d   */.  u16 nColum
12c20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
12c30 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
12c40 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68  mns stored in th
12c50 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20  e index */.  u8 
12c60 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20  onError;        
12c70 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72        /* OE_Abor
12c80 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45  t, OE_Ignore, OE
12c90 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f  _Replace, or OE_
12ca0 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  None */.  unsign
12cb0 65 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20  ed idxType:2;   
12cc0 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c     /* 1==UNIQUE,
12cd0 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c   2==PRIMARY KEY,
12ce0 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58   0==CREATE INDEX
12cf0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62   */.  unsigned b
12d00 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f  Unordered:1;   /
12d10 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78  * Use this index
12d20 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75   for == or IN qu
12d30 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20  eries only */.  
12d40 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74  unsigned uniqNot
12d50 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65  Null:1;  /* True
12d60 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e   if UNIQUE and N
12d70 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20  OT NULL for all 
12d80 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73  columns */.  uns
12d90 69 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a  igned isResized:
12da0 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  1;    /* True if
12db0 20 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65   resizeIndexObje
12dc0 63 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61  ct() has been ca
12dd0 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  lled */.  unsign
12de0 65 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b  ed isCovering:1;
12df0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
12e00 69 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67  is is a covering
12e10 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69   index */.  unsi
12e20 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a  gned noSkipScan:
12e30 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74  1;   /* Do not t
12e40 72 79 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73  ry to use skip-s
12e50 63 61 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 23  can if true */.#
12e60 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
12e70 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
12e80 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  T4.  int nSample
12e90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
12ea0 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   Number of eleme
12eb0 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d  nts in aSample[]
12ec0 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c   */.  int nSampl
12ed0 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f  eCol;          /
12ee0 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53  * Size of IndexS
12ef0 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64  ample.anEq[] and
12f00 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77   so on */.  tRow
12f10 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20  cnt *aAvgEq;    
12f20 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20       /* Average 
12f30 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b  nEq values for k
12f40 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70  eys not in aSamp
12f50 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d  le */.  IndexSam
12f60 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20  ple *aSample;   
12f70 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74   /* Samples of t
12f80 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79  he left-most key
12f90 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
12fa0 69 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f  iRowEst;       /
12fb0 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69  * Non-logarithmi
12fc0 63 20 73 74 61 74 31 20 64 61 74 61 20 66 6f 72  c stat1 data for
12fd0 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
12fe0 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74   tRowcnt nRowEst
12ff0 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e  0;        /* Non
13000 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d  -logarithmic num
13010 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
13020 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64  he index */.#end
13030 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  if.};../*.** All
13040 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
13050 49 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f  Index.idxType.*/
13060 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
13070 49 44 58 54 59 50 45 5f 41 50 50 44 45 46 20 20  IDXTYPE_APPDEF  
13080 20 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74      0   /* Creat
13090 65 64 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  ed using CREATE 
130a0 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65  INDEX */.#define
130b0 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
130c0 55 4e 49 51 55 45 20 20 20 20 20 20 31 20 20 20  UNIQUE      1   
130d0 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20  /* Implements a 
130e0 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
130f0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
13100 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d  ITE_IDXTYPE_PRIM
13110 41 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49  ARYKEY  2   /* I
13120 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
13130 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20  Y for the table 
13140 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72  */../* Return tr
13150 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73  ue if index X is
13160 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69   a PRIMARY KEY i
13170 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
13180 49 73 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65  IsPrimaryKeyInde
13190 78 28 58 29 20 20 28 28 58 29 2d 3e 69 64 78 54  x(X)  ((X)->idxT
131a0 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54  ype==SQLITE_IDXT
131b0 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a  YPE_PRIMARYKEY).
131c0 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  ./* Return true 
131d0 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20  if index X is a 
131e0 55 4e 49 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a  UNIQUE index */.
131f0 23 64 65 66 69 6e 65 20 49 73 55 6e 69 71 75 65  #define IsUnique
13200 49 6e 64 65 78 28 58 29 20 20 20 20 20 20 28 28  Index(X)      ((
13210 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f  X)->onError!=OE_
13220 4e 6f 6e 65 29 0a 0a 2f 2a 20 54 68 65 20 49 6e  None)../* The In
13230 64 65 78 2e 61 69 43 6f 6c 75 6d 6e 5b 5d 20 76  dex.aiColumn[] v
13240 61 6c 75 65 73 20 61 72 65 20 6e 6f 72 6d 61 6c  alues are normal
13250 6c 79 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65  ly positive inte
13260 67 65 72 2e 20 20 42 75 74 0a 2a 2a 20 74 68 65  ger.  But.** the
13270 72 65 20 61 72 65 20 73 6f 6d 65 20 6e 65 67 61  re are some nega
13280 74 69 76 65 20 76 61 6c 75 65 73 20 74 68 61 74  tive values that
13290 20 68 61 76 65 20 73 70 65 63 69 61 6c 20 6d 65   have special me
132a0 61 6e 69 6e 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e  aning:.*/.#defin
132b0 65 20 58 4e 5f 52 4f 57 49 44 20 20 20 20 20 28  e XN_ROWID     (
132c0 2d 31 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78  -1)     /* Index
132d0 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65  ed column is the
132e0 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e   rowid */.#defin
132f0 65 20 58 4e 5f 45 58 50 52 20 20 20 20 20 20 28  e XN_EXPR      (
13300 2d 32 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78  -2)     /* Index
13310 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20  ed column is an 
13320 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 0a 2f  expression */../
13330 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65  *.** Each sample
13340 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73   stored in the s
13350 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c  qlite_stat3 tabl
13360 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  e is represented
13370 20 69 6e 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75   in memory .** u
13380 73 69 6e 67 20 61 20 73 74 72 75 63 74 75 72 65  sing a structure
13390 20 6f 66 20 74 68 69 73 20 74 79 70 65 2e 20 20   of this type.  
133a0 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  See documentatio
133b0 6e 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20  n at the top of 
133c0 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63  the.** analyze.c
133d0 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72   source file for
133e0 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
133f0 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
13400 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b  ct IndexSample {
13410 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20 20 20 20  .  void *p;     
13420 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
13430 74 6f 20 73 61 6d 70 6c 65 64 20 72 65 63 6f 72  to sampled recor
13440 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20  d */.  int n;   
13450 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
13460 20 6f 66 20 72 65 63 6f 72 64 20 69 6e 20 62 79   of record in by
13470 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  tes */.  tRowcnt
13480 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73   *anEq;    /* Es
13490 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  t. number of row
134a0 73 20 77 68 65 72 65 20 74 68 65 20 6b 65 79 20  s where the key 
134b0 65 71 75 61 6c 73 20 74 68 69 73 20 73 61 6d 70  equals this samp
134c0 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  le */.  tRowcnt 
134d0 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74  *anLt;    /* Est
134e0 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  . number of rows
134f0 20 77 68 65 72 65 20 6b 65 79 20 69 73 20 6c 65   where key is le
13500 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d  ss than this sam
13510 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  ple */.  tRowcnt
13520 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73   *anDLt;   /* Es
13530 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 73  t. number of dis
13540 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73 73 20  tinct keys less 
13550 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65  than this sample
13560 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61   */.};../*.** Ea
13570 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20  ch token coming 
13580 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72  out of the lexer
13590 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
135a0 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63  of.** this struc
135b0 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72  ture.  Tokens ar
135c0 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70  e also used as p
135d0 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73  art of an expres
135e0 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  sion..**.** Note
135f0 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74   if Token.z==0 t
13600 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e  hen Token.dyn an
13610 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e  d Token.n are un
13620 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d  defined and.** m
13630 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f  ay contain rando
13640 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f  m values.  Do no
13650 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73 75 6d  t make any assum
13660 70 74 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b  ptions about Tok
13670 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f  en.dyn.** and To
13680 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e  ken.n when Token
13690 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74  .z==0..*/.struct
136a0 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74   Token {.  const
136b0 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a   char *z;     /*
136c0 20 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b   Text of the tok
136d0 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65  en.  Not NULL-te
136e0 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75  rminated! */.  u
136f0 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20  nsigned int n;  
13700 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
13710 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 69  haracters in thi
13720 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f  s token */.};../
13730 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
13740 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
13750 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f  re contains info
13760 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74  rmation needed t
13770 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f  o generate.** co
13780 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20  de for a SELECT 
13790 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67  that contains ag
137a0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
137b0 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72  s..**.** If Expr
137c0 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55  .op==TK_AGG_COLU
137d0 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e  MN or TK_AGG_FUN
137e0 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e  CTION then Expr.
137f0 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a  pAggInfo is a.**
13800 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
13810 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65   structure.  The
13820 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69   Expr.iColumn fi
13830 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65 78  eld is the index
13840 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61   in.** AggInfo.a
13850 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f  Col[] or AggInfo
13860 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f  .aFunc[] of info
13870 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74  rmation needed t
13880 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f  o generate.** co
13890 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65  de for that node
138a0 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e  ..**.** AggInfo.
138b0 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67  pGroupBy and Agg
138c0 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72  Info.aFunc.pExpr
138d0 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73   point to fields
138e0 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f   within the.** o
138f0 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73  riginal Select s
13900 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65  tructure that de
13910 73 63 72 69 62 65 73 20 74 68 65 20 53 45 4c 45  scribes the SELE
13920 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  CT statement.  T
13930 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64  hese.** fields d
13940 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65  o not need to be
13950 20 66 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c   freed when deal
13960 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67 67  locating the Agg
13970 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a  Info structure..
13980 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66  */.struct AggInf
13990 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d  o {.  u8 directM
139a0 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ode;          /*
139b0 20 44 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e   Direct renderin
139c0 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b  g mode means tak
139d0 65 20 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a  e data directly.
139e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139f0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f            ** fro
13a00 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20  m source tables 
13a10 72 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d  rather than from
13a20 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f   accumulators */
13a30 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67  .  u8 useSorting
13a40 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e  Idx;       /* In
13a50 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65   direct mode, re
13a60 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74  ference the sort
13a70 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65 72  ing index rather
13a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13a90 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68             ** th
13aa0 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  an the source ta
13ab0 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72  ble */.  int sor
13ac0 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20  tingIdx;        
13ad0 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65   /* Cursor numbe
13ae0 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67  r of the sorting
13af0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
13b00 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20  sortingIdxPTab; 
13b10 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
13b20 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74  mber of pseudo-t
13b30 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  able */.  int nS
13b40 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20  ortingColumn;   
13b50 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
13b60 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f  olumns in the so
13b70 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
13b80 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65   int mnReg, mxRe
13b90 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67  g;       /* Rang
13ba0 65 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61  e of registers a
13bb0 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f  llocated for aCo
13bc0 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20  l and aFunc */. 
13bd0 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75   ExprList *pGrou
13be0 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  pBy;     /* The 
13bf0 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20  group by clause 
13c00 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49  */.  struct AggI
13c10 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20  nfo_col {    /* 
13c20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  For each column 
13c30 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74  used in source t
13c40 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62  ables */.    Tab
13c50 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
13c60 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20        /* Source 
13c70 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
13c80 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
13c90 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20        /* Cursor 
13ca0 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f  number of the so
13cb0 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
13cc0 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20    int iColumn;  
13cd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
13ce0 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68  lumn number with
13cf0 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  in the source ta
13d00 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
13d10 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20  SorterColumn;   
13d20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75      /* Column nu
13d30 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74  mber in the sort
13d40 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20  ing index */.   
13d50 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20   int iMem;      
13d60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
13d70 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
13d80 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75  t acts as accumu
13d90 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70  lator */.    Exp
13da0 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
13db0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69        /* The ori
13dc0 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e  ginal expression
13dd0 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20   */.  } *aCol;. 
13de0 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20   int nColumn;   
13df0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13e00 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69  er of used entri
13e10 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a  es in aCol[] */.
13e20 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74    int nAccumulat
13e30 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  or;       /* Num
13e40 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74  ber of columns t
13e50 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68  hat show through
13e60 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a   to the output..
13e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e80 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64            ** Add
13e90 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20  itional columns 
13ea0 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73  are used only as
13eb0 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20   parameters to. 
13ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ed0 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72           ** aggr
13ee0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
13ef0 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49  */.  struct AggI
13f00 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20  nfo_func {   /* 
13f10 46 6f 72 20 65 61 63 68 20 61 67 67 72 65 67 61  For each aggrega
13f20 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  te function */. 
13f30 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
13f40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
13f50 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69  xpression encodi
13f60 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  ng the function 
13f70 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a  */.    FuncDef *
13f80 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20  pFunc;          
13f90 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61 74 65  /* The aggregate
13fa0 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d   function implem
13fb0 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  entation */.    
13fc0 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20  int iMem;       
13fd0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
13fe0 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
13ff0 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c   acts as accumul
14000 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ator */.    int 
14010 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20  iDistinct;      
14020 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61       /* Ephemera
14030 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20  l table used to 
14040 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54  enforce DISTINCT
14050 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a   */.  } *aFunc;.
14060 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20    int nFunc;    
14070 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
14080 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
14090 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a  n aFunc[] */.};.
140a0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74  ./*.** The datat
140b0 79 70 65 20 79 6e 56 61 72 20 69 73 20 61 20 73  ype ynVar is a s
140c0 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65  igned integer, e
140d0 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20  ither 16-bit or 
140e0 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c  32-bit..** Usual
140f0 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69 74 73  ly it is 16-bits
14100 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49 54 45  .  But if SQLITE
14110 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
14120 4d 42 45 52 20 69 73 20 67 72 65 61 74 65 72 0a  MBER is greater.
14130 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77 65  ** than 32767 we
14140 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74   have to make it
14150 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74   32-bit.  16-bit
14160 20 69 73 20 70 72 65 66 65 72 72 65 64 20 62 65   is preferred be
14170 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73  cause.** it uses
14180 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20   less memory in 
14190 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c  the Expr object,
141a0 20 77 68 69 63 68 20 69 73 20 61 20 62 69 67 20   which is a big 
141b0 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69  memory user.** i
141c0 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c  n systems with l
141d0 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65 64 20  ots of prepared 
141e0 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64  statements.  And
141f0 20 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e   few application
14200 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74  s.** need more t
14210 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20  han about 10 or 
14220 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42  20 variables.  B
14230 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20  ut some extreme 
14240 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f  users want.** to
14250 20 68 61 76 65 20 70 72 65 70 61 72 65 64 20 73   have prepared s
14260 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f  tatements with o
14270 76 65 72 20 33 32 37 36 37 20 76 61 72 69 61 62  ver 32767 variab
14280 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65  les, and for the
14290 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20  m.** the option 
142a0 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74  is available (at
142b0 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a   compile-time)..
142c0 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
142d0 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
142e0 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66  R<=32767.typedef
142f0 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73   i16 ynVar;.#els
14300 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e  e.typedef int yn
14310 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  Var;.#endif../*.
14320 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20  ** Each node of 
14330 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  an expression in
14340 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
14350 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  is an instance.*
14360 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
14370 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ure..**.** Expr.
14380 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65  op is the opcode
14390 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20 70 61  . The integer pa
143a0 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73  rser token codes
143b0 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61   are reused.** a
143c0 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20  s opcodes here. 
143d0 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
143e0 20 70 61 72 73 65 72 20 64 65 66 69 6e 65 73 20   parser defines 
143f0 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69  TK_GE to be an i
14400 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72  nteger.** code r
14410 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
14420 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54  ">=" operator. T
14430 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72  his same integer
14440 20 63 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a   code is reused.
14450 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20  ** to represent 
14460 74 68 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e  the greater-than
14470 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65  -or-equal-to ope
14480 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70  rator in the exp
14490 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e  ression.** tree.
144a0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78  .**.** If the ex
144b0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
144c0 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49  QL literal (TK_I
144d0 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54  NTEGER, TK_FLOAT
144e0 2c 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a 20 6f  , TK_BLOB, .** o
144f0 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68  r TK_STRING), th
14500 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
14510 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78 74 20  ntains the text 
14520 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72  of the SQL liter
14530 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78  al. If.** the ex
14540 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61  pression is a va
14550 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41  riable (TK_VARIA
14560 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  BLE), then Expr.
14570 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
14580 68 65 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20  he .** variable 
14590 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69  name. Finally, i
145a0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
145b0 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   is an SQL funct
145c0 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e  ion (TK_FUNCTION
145d0 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e  ),.** then Expr.
145e0 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
145f0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
14600 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45  unction..**.** E
14610 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45  xpr.pRight and E
14620 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68  xpr.pLeft are th
14630 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74  e left and right
14640 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20   subexpressions 
14650 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f  of a.** binary o
14660 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20  perator. Either 
14670 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e  or both may be N
14680 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ULL..**.** Expr.
14690 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73  x.pList is a lis
146a0 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69  t of arguments i
146b0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
146c0 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74   is an SQL funct
146d0 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65  ion,.** a CASE e
146e0 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20  xpression or an 
146f0 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  IN expression of
14700 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e   the form "<lhs>
14710 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e   IN (<y>, <z>...
14720 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53  )"..** Expr.x.pS
14730 65 6c 65 63 74 20 69 73 20 75 73 65 64 20 69 66  elect is used if
14740 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
14750 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20  is a sub-select 
14760 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
14770 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20   of.** the form 
14780 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43  "<lhs> IN (SELEC
14790 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20  T ...)". If the 
147a0 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74  EP_xIsSelect bit
147b0 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a   is set in the.*
147c0 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  * Expr.flags mas
147d0 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70  k, then Expr.x.p
147e0 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e  Select is valid.
147f0 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70 72   Otherwise, Expr
14800 2e 78 2e 70 4c 69 73 74 20 69 73 20 0a 2a 2a 20  .x.pList is .** 
14810 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  valid..**.** An 
14820 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68  expression of th
14830 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e  e form ID or ID.
14840 49 44 20 72 65 66 65 72 73 20 74 6f 20 61 20 63  ID refers to a c
14850 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65  olumn in a table
14860 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78  ..** For such ex
14870 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e  pressions, Expr.
14880 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f  op is set to TK_
14890 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e  COLUMN and Expr.
148a0 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65  iTable is.** the
148b0 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20   integer cursor 
148c0 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45  number of a VDBE
148d0 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67   cursor pointing
148e0 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61   to that table a
148f0 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75  nd.** Expr.iColu
14900 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e  mn is the column
14910 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20   number for the 
14920 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e  specific column.
14930 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72    If the.** expr
14940 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61  ession is used a
14950 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  s a result in an
14960 20 61 67 67 72 65 67 61 74 65 20 53 45 4c 45 43   aggregate SELEC
14970 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76  T, then the.** v
14980 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f  alue is also sto
14990 72 65 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e  red in the Expr.
149a0 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  iAgg column in t
149b0 68 65 20 61 67 67 72 65 67 61 74 65 20 73 6f 20  he aggregate so 
149c0 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62  that.** it can b
149d0 65 20 61 63 63 65 73 73 65 64 20 61 66 74 65 72  e accessed after
149e0 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20   all aggregates 
149f0 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a  are computed..**
14a00 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
14a10 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f  ssion is an unbo
14a20 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72  und variable mar
14a30 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20  ker (a question 
14a40 6d 61 72 6b 20 0a 2a 2a 20 63 68 61 72 61 63 74  mark .** charact
14a50 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72  er '?' in the or
14a60 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e  iginal SQL) then
14a70 20 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65   the Expr.iTable
14a80 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78   holds the index
14a90 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20   .** number for 
14aa0 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a  that variable..*
14ab0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
14ac0 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71  ession is a subq
14ad0 75 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69  uery then Expr.i
14ae0 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20  Column holds an 
14af0 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73  integer.** regis
14b00 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61  ter number conta
14b10 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74  ining the result
14b20 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72 79   of the subquery
14b30 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62  .  If the.** sub
14b40 71 75 65 72 79 20 67 69 76 65 73 20 61 20 63 6f  query gives a co
14b50 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74  nstant result, t
14b60 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31  hen iTable is -1
14b70 2e 20 20 49 66 20 74 68 65 20 73 75 62 71 75 65  .  If the subque
14b80 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69  ry.** gives a di
14b90 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61  fferent answer a
14ba0 74 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65  t different time
14bb0 73 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65  s during stateme
14bc0 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a  nt processing.**
14bd0 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20   then iTable is 
14be0 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61  the address of a
14bf0 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74   subroutine that
14c00 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75   computes the su
14c10 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66  bquery..**.** If
14c20 20 74 68 65 20 45 78 70 72 20 69 73 20 6f 66 20   the Expr is of 
14c30 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20  type OP_Column, 
14c40 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 74  and the table it
14c50 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72   is selecting fr
14c60 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20  om.** is a disk 
14c70 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c  table or the "ol
14c80 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c  d.*" pseudo-tabl
14c90 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69  e, then pTab poi
14ca0 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f  nts to the.** co
14cb0 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c  rresponding tabl
14cc0 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a  e definition..**
14cd0 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e  .** ALLOCATION N
14ce0 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72  OTES:.**.** Expr
14cf0 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65   objects can use
14d00 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79   a lot of memory
14d10 20 73 70 61 63 65 20 69 6e 20 64 61 74 61 62 61   space in databa
14d20 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a  se schema.  To.*
14d30 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65  * help reduce me
14d40 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74  mory requirement
14d50 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20  s, sometimes an 
14d60 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c  Expr object will
14d70 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64   be.** truncated
14d80 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65  .  And to reduce
14d90 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d   the number of m
14da0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
14db0 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20  s, sometimes.** 
14dc0 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72  two or more Expr
14dd0 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65   objects will be
14de0 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e   stored in a sin
14df0 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  gle memory alloc
14e00 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68  ation,.** togeth
14e10 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f  er with Expr.zTo
14e20 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a  ken strings..**.
14e30 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64  ** If the EP_Red
14e40 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65  uced and EP_Toke
14e50 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20  nOnly flags are 
14e60 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45  set when.** an E
14e70 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72  xpr object is tr
14e80 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45  uncated.  When E
14e90 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74  P_Reduced is set
14ea0 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68  , then all.** th
14eb0 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a  e child Expr obj
14ec0 65 63 74 73 20 69 6e 20 74 68 65 20 45 78 70 72  ects in the Expr
14ed0 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e  .pLeft and Expr.
14ee0 70 52 69 67 68 74 20 73 75 62 74 72 65 65 73 0a  pRight subtrees.
14ef0 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64  ** are contained
14f00 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65   within the same
14f10 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
14f20 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76  on.  Note, howev
14f30 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  er, that.** the 
14f40 73 75 62 74 72 65 65 73 20 69 6e 20 45 78 70 72  subtrees in Expr
14f50 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72  .x.pList or Expr
14f60 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61  .x.pSelect are a
14f70 6c 77 61 79 73 20 73 65 70 61 72 61 74 65 6c 79  lways separately
14f80 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72  .** allocated, r
14f90 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
14fa0 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52  ther or not EP_R
14fb0 65 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a  educed is set..*
14fc0 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a  /.struct Expr {.
14fd0 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
14fe0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72           /* Oper
14ff0 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20  ation performed 
15000 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a  by this node */.
15010 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
15020 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
15030 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20  affinity of the 
15040 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e  column or 0 if n
15050 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  ot a column */. 
15060 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20   u32 flags;     
15070 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f          /* Vario
15080 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20  us flags.  EP_* 
15090 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75  See below */.  u
150a0 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20  nion {.    char 
150b0 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20  *zToken;        
150c0 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65    /* Token value
150d0 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65  . Zero terminate
150e0 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20 2a  d and dequoted *
150f0 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75 65  /.    int iValue
15100 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
15110 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74  Non-negative int
15120 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 45 50  eger value if EP
15130 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d  _IntValue */.  }
15140 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   u;..  /* If the
15150 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
15160 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  ag is set in the
15170 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
15180 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73  , then no.  ** s
15190 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  pace is allocate
151a0 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73  d for the fields
151b0 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e   below this poin
151c0 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f  t. An attempt to
151d0 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65  .  ** access the
151e0 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e  m will result in
151f0 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d   a segfault or m
15200 61 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a 20 20 2a  alfunction. .  *
15210 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15220 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15230 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15240 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15250 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70  ****/..  Expr *p
15260 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20 20 20  Left;           
15270 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20  /* Left subnode 
15280 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68  */.  Expr *pRigh
15290 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  t;          /* R
152a0 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a  ight subnode */.
152b0 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78    union {.    Ex
152c0 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20  prList *pList;  
152d0 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45     /* op = IN, E
152e0 58 49 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43  XISTS, SELECT, C
152f0 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42  ASE, FUNCTION, B
15300 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65  ETWEEN */.    Se
15310 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
15320 20 20 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65     /* EP_xIsSele
15330 63 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20  ct and op = IN, 
15340 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a  EXISTS, SELECT *
15350 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49  /.  } x;..  /* I
15360 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  f the EP_Reduced
15370 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
15380 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
15390 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
153a0 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
153b0 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
153c0 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
153d0 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
153e0 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
153f0 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
15400 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
15410 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20  r malfunction.. 
15420 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
15430 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15440 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15450 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15460 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c  ******/..#if SQL
15470 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
15480 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67  TH>0.  int nHeig
15490 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ht;           /*
154a0 20 48 65 69 67 68 74 20 6f 66 20 74 68 65 20 74   Height of the t
154b0 72 65 65 20 68 65 61 64 65 64 20 62 79 20 74 68  ree headed by th
154c0 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69  is node */.#endi
154d0 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20  f.  int iTable; 
154e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
154f0 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20  _COLUMN: cursor 
15500 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20  number of table 
15510 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20  holding column. 
15520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15530 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45          ** TK_RE
15540 47 49 53 54 45 52 3a 20 72 65 67 69 73 74 65 72  GISTER: register
15550 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20   number.        
15560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15570 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20   ** TK_TRIGGER: 
15580 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f  1 -> new, 0 -> o
15590 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ld.             
155a0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45              ** E
155b0 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34  P_Unlikely:  134
155c0 32 31 37 37 32 38 20 74 69 6d 65 73 20 6c 69 6b  217728 times lik
155d0 65 6c 69 68 6f 6f 64 20 2a 2f 0a 20 20 79 6e 56  elihood */.  ynV
155e0 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  ar iColumn;     
155f0 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      /* TK_COLUMN
15600 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20  : column index. 
15610 20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20   -1 for rowid.. 
15620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15630 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41          ** TK_VA
15640 52 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65  RIABLE: variable
15650 20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20   number (always 
15660 3e 3d 20 31 29 2e 20 2a 2f 0a 20 20 69 31 36 20  >= 1). */.  i16 
15670 69 41 67 67 3b 20 20 20 20 20 20 20 20 20 20 20  iAgg;           
15680 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72     /* Which entr
15690 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61  y in pAggInfo->a
156a0 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63  Col[] or ->aFunc
156b0 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67  [] */.  i16 iRig
156c0 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f  htJoinTable;   /
156d0 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e  * If EP_FromJoin
156e0 2c 20 74 68 65 20 72 69 67 68 74 20 74 61 62 6c  , the right tabl
156f0 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f  e of the join */
15700 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20  .  u8 op2;      
15710 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
15720 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69 6e  REGISTER: origin
15730 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70 72  al value of Expr
15740 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20 20  .op.            
15750 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
15760 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76  TK_COLUMN: the v
15770 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20 4f  alue of p5 for O
15780 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20  P_Column.       
15790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157a0 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43    ** TK_AGG_FUNC
157b0 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65  TION: nesting de
157c0 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f  pth */.  AggInfo
157d0 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20 20   *pAggInfo;     
157e0 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41 47  /* Used by TK_AG
157f0 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f  G_COLUMN and TK_
15800 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a  AGG_FUNCTION */.
15810 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
15820 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
15830 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20  e for TK_COLUMN 
15840 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a  expressions. */.
15850 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
15860 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20  llowing are the 
15870 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73  meanings of bits
15880 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
15890 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
158a0 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e  fine EP_FromJoin
158b0 20 20 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72    0x000001 /* Or
158c0 69 67 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55  iginates in ON/U
158d0 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 6f  SING clause of o
158e0 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  uter join */.#de
158f0 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20  fine EP_Agg     
15900 20 20 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f    0x000002 /* Co
15910 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
15920 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  re aggregate fun
15930 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
15940 65 20 45 50 5f 52 65 73 6f 6c 76 65 64 20 20 30  e EP_Resolved  0
15950 78 30 30 30 30 30 34 20 2f 2a 20 49 44 73 20 68  x000004 /* IDs h
15960 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65  ave been resolve
15970 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a  d to COLUMNs */.
15980 23 64 65 66 69 6e 65 20 45 50 5f 45 72 72 6f 72  #define EP_Error
15990 20 20 20 20 20 30 78 30 30 30 30 30 38 20 2f 2a       0x000008 /*
159a0 20 45 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74   Expression cont
159b0 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
159c0 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69   errors */.#defi
159d0 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20  ne EP_Distinct  
159e0 30 78 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72  0x000010 /* Aggr
159f0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77  egate function w
15a00 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79  ith DISTINCT key
15a10 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
15a20 45 50 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30  EP_VarSelect 0x0
15a30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74  00020 /* pSelect
15a40 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20   is correlated, 
15a50 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a  not constant */.
15a60 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75  #define EP_DblQu
15a70 6f 74 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a  oted 0x000040 /*
15a80 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69   token.z was ori
15a90 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22  ginally in "..."
15aa0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49   */.#define EP_I
15ab0 6e 66 69 78 46 75 6e 63 20 30 78 30 30 30 30 38  nfixFunc 0x00008
15ac0 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e  0 /* True for an
15ad0 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a   infix function:
15ae0 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63   LIKE, GLOB, etc
15af0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
15b00 6f 6c 6c 61 74 65 20 20 20 30 78 30 30 30 31 30  ollate   0x00010
15b10 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69  0 /* Tree contai
15b20 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20  ns a TK_COLLATE 
15b30 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66  operator */.#def
15b40 69 6e 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20  ine EP_Generic  
15b50 20 30 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e   0x000200 /* Ign
15b60 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61  ore COLLATE or a
15b70 66 66 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20  ffinity on this 
15b80 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tree */.#define 
15b90 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30  EP_IntValue  0x0
15ba0 30 30 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72  00400 /* Integer
15bb0 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64   value contained
15bc0 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a   in u.iValue */.
15bd0 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65  #define EP_xIsSe
15be0 6c 65 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a  lect 0x000800 /*
15bf0 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61   x.pSelect is va
15c00 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65 20 78  lid (otherwise x
15c10 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64  .pList is) */.#d
15c20 65 66 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20  efine EP_Skip   
15c30 20 20 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43     0x001000 /* C
15c40 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55  OLLATE, AS, or U
15c50 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69  NLIKELY */.#defi
15c60 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20 20 20  ne EP_Reduced   
15c70 30 78 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72  0x002000 /* Expr
15c80 20 73 74 72 75 63 74 20 45 58 50 52 5f 52 45 44   struct EXPR_RED
15c90 55 43 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f  UCEDSIZE bytes o
15ca0 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  nly */.#define E
15cb0 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30  P_TokenOnly 0x00
15cc0 34 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72  4000 /* Expr str
15cd0 75 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e  uct EXPR_TOKENON
15ce0 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  LYSIZE bytes onl
15cf0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
15d00 53 74 61 74 69 63 20 20 20 20 30 78 30 30 38 30  Static    0x0080
15d10 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65  00 /* Held in me
15d20 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65  mory not obtaine
15d30 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20  d from malloc() 
15d40 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65  */.#define EP_Me
15d50 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30  mToken  0x010000
15d60 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69   /* Need to sqli
15d70 74 65 33 44 62 46 72 65 65 28 29 20 45 78 70 72  te3DbFree() Expr
15d80 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69  .zToken */.#defi
15d90 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20  ne EP_NoReduce  
15da0 30 78 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e  0x020000 /* Cann
15db0 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44 55 43  ot EXPRDUP_REDUC
15dc0 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23  E this Expr */.#
15dd0 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65  define EP_Unlike
15de0 6c 79 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20  ly  0x040000 /* 
15df0 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69  unlikely() or li
15e00 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74  kelihood() funct
15e10 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ion */.#define E
15e20 50 5f 43 6f 6e 73 74 46 75 6e 63 20 30 78 30 38  P_ConstFunc 0x08
15e30 30 30 30 30 20 2f 2a 20 41 20 53 51 4c 49 54 45  0000 /* A SQLITE
15e40 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6f  _FUNC_CONSTANT o
15e50 72 20 5f 53 4c 4f 43 48 4e 47 20 66 75 6e 63 74  r _SLOCHNG funct
15e60 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ion */.#define E
15e70 50 5f 43 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30  P_CanBeNull 0x10
15e80 30 30 30 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e  0000 /* Can be n
15e90 75 6c 6c 20 64 65 73 70 69 74 65 20 4e 4f 54 20  ull despite NOT 
15ea0 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20  NULL constraint 
15eb0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75  */.#define EP_Su
15ec0 62 71 75 65 72 79 20 20 30 78 32 30 30 30 30 30  bquery  0x200000
15ed0 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e   /* Tree contain
15ee0 73 20 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70  s a TK_SELECT op
15ef0 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  erator */.#defin
15f00 65 20 45 50 5f 41 6c 69 61 73 20 20 20 20 20 30  e EP_Alias     0
15f10 78 34 30 30 30 30 30 20 2f 2a 20 49 73 20 61 6e  x400000 /* Is an
15f20 20 61 6c 69 61 73 20 66 6f 72 20 61 20 72 65 73   alias for a res
15f30 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 20 2a  ult set column *
15f40 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 62 69 6e 61  /../*.** Combina
15f50 74 69 6f 6e 73 20 6f 66 20 74 77 6f 20 6f 72 20  tions of two or 
15f60 6d 6f 72 65 20 45 50 5f 2a 20 66 6c 61 67 73 0a  more EP_* flags.
15f70 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 50 72  */.#define EP_Pr
15f80 6f 70 61 67 61 74 65 20 28 45 50 5f 43 6f 6c 6c  opagate (EP_Coll
15f90 61 74 65 7c 45 50 5f 53 75 62 71 75 65 72 79 29  ate|EP_Subquery)
15fa0 20 2f 2a 20 50 72 6f 70 61 67 61 74 65 20 74 68   /* Propagate th
15fb0 65 73 65 20 62 69 74 73 20 75 70 20 74 72 65 65  ese bits up tree
15fc0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65   */../*.** These
15fd0 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75   macros can be u
15fe0 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74  sed to test, set
15ff0 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20  , or clear bits 
16000 69 6e 20 74 68 65 20 0a 2a 2a 20 45 78 70 72 2e  in the .** Expr.
16010 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
16020 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 50  #define ExprHasP
16030 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20  roperty(E,P)    
16040 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50   (((E)->flags&(P
16050 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45  ))!=0).#define E
16060 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74  xprHasAllPropert
16070 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66  y(E,P)  (((E)->f
16080 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a  lags&(P))==(P)).
16090 23 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 50  #define ExprSetP
160a0 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20  roperty(E,P)    
160b0 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29   (E)->flags|=(P)
160c0 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65  .#define ExprCle
160d0 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  arProperty(E,P) 
160e0 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28    (E)->flags&=~(
160f0 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53  P)../* The ExprS
16100 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 29 20  etVVAProperty() 
16110 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f  macro is used fo
16120 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20  r Verification, 
16130 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61  Validation,.** a
16140 6e 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e  nd Accreditation
16150 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73   only.  It works
16160 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f   like ExprSetPro
16170 70 65 72 74 79 28 29 20 64 75 72 69 6e 67 20 56  perty() during V
16180 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20  VA.** processes 
16190 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66  but is a no-op f
161a0 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a  or delivery..*/.
161b0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
161c0 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70  BUG.# define Exp
161d0 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
161e0 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73  E,P)  (E)->flags
161f0 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65  |=(P).#else.# de
16200 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50  fine ExprSetVVAP
16210 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e  roperty(E,P).#en
16220 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f  dif../*.** Macro
16230 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  s to determine t
16240 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
16250 65 73 20 72 65 71 75 69 72 65 64 20 62 79 20 61  es required by a
16260 20 6e 6f 72 6d 61 6c 20 45 78 70 72 20 0a 2a 2a   normal Expr .**
16270 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72   struct, an Expr
16280 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65   struct with the
16290 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67   EP_Reduced flag
162a0 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61   set in Expr.fla
162b0 67 73 20 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78  gs .** and an Ex
162c0 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74  pr struct with t
162d0 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  he EP_TokenOnly 
162e0 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65  flag set..*/.#de
162f0 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49  fine EXPR_FULLSI
16300 5a 45 20 20 20 20 20 20 20 20 20 20 20 73 69 7a  ZE           siz
16310 65 6f 66 28 45 78 70 72 29 20 20 20 20 20 20 20  eof(Expr)       
16320 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65      /* Full size
16330 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52   */.#define EXPR
16340 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20 20 20  _REDUCEDSIZE    
16350 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70      offsetof(Exp
16360 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f  r,iTable)  /* Co
16370 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f  mmon features */
16380 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f  .#define EXPR_TO
16390 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20  KENONLYSIZE     
163a0 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70   offsetof(Expr,p
163b0 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72  Left)   /* Fewer
163c0 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a   features */../*
163d0 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64  .** Flags passed
163e0 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45   to the sqlite3E
163f0 78 70 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f  xprDup() functio
16400 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61 64 65  n. See the heade
16410 72 20 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62  r comment .** ab
16420 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70 72 44  ove sqlite3ExprD
16430 75 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73  up() for details
16440 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  ..*/.#define EXP
16450 52 44 55 50 5f 52 45 44 55 43 45 20 20 20 20 20  RDUP_REDUCE     
16460 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55      0x0001  /* U
16470 73 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65  sed reduced-size
16480 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a   Expr nodes */..
16490 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20  /*.** A list of 
164a0 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61  expressions.  Ea
164b0 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61  ch expression ma
164c0 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76  y optionally hav
164d0 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e  e a.** name.  An
164e0 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69   expr/name combi
164f0 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73  nation can be us
16500 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61  ed in several wa
16510 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74  ys, such.** as t
16520 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72  he list of "expr
16530 20 41 53 20 49 44 22 20 66 69 65 6c 64 73 20 66   AS ID" fields f
16540 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45  ollowing a "SELE
16550 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a  CT" or in the.**
16560 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65   list of "ID = e
16570 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e  xpr" items in an
16580 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74   UPDATE.  A list
16590 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
165a0 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75  can.** also be u
165b0 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75 6d  sed as the argum
165c0 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f  ent to a functio
165d0 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65  n, in which case
165e0 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20   the a.zName.** 
165f0 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65  field is not use
16600 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61  d..**.** By defa
16610 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70  ult the Expr.zSp
16620 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61  an field holds a
16630 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20   human-readable 
16640 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a  description of.*
16650 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
16660 20 74 68 61 74 20 69 73 20 75 73 65 64 20 69 6e   that is used in
16670 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20   the generation 
16680 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  of error message
16690 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20  s and.** column 
166a0 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73  labels.  In this
166b0 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61   case, Expr.zSpa
166c0 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74  n is typically t
166d0 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20  he text of a.** 
166e0 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f  column expressio
166f0 6e 20 61 73 20 69 74 20 65 78 69 73 74 73 20 69  n as it exists i
16700 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  n a SELECT state
16710 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20  ment.  However, 
16720 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49  if.** the bSpanI
16730 73 54 61 62 20 66 6c 61 67 20 69 73 20 73 65 74  sTab flag is set
16740 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20  , then zSpan is 
16750 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65  overloaded to me
16760 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f  an the name.** o
16770 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c  f the result col
16780 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a  umn in the form:
16790 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e   DATABASE.TABLE.
167a0 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61  COLUMN.  This la
167b0 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75  ter.** form is u
167c0 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73  sed for name res
167d0 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73  olution with nes
167e0 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73  ted FROM clauses
167f0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
16800 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78  List {.  int nEx
16810 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pr;             
16820 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70  /* Number of exp
16830 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20  ressions on the 
16840 6c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74  list */.  struct
16850 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b   ExprList_item {
16860 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70   /* For each exp
16870 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c  ression in the l
16880 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ist */.    Expr 
16890 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
168a0 20 20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f     /* The list o
168b0 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  f expressions */
168c0 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
168d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
168e0 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64  Token associated
168f0 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65   with this expre
16900 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61  ssion */.    cha
16910 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20  r *zSpan;       
16920 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
16930 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70   text of the exp
16940 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75  ression */.    u
16950 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  8 sortOrder;    
16960 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20         /* 1 for 
16970 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53  DESC or 0 for AS
16980 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  C */.    unsigne
16990 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20  d done :1;      
169a0 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e   /* A flag to in
169b0 64 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63  dicate when proc
169c0 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68  essing is finish
169d0 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  ed */.    unsign
169e0 65 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31  ed bSpanIsTab :1
169f0 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73  ; /* zSpan holds
16a00 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e   DB.TABLE.COLUMN
16a10 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
16a20 20 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20   reusable :1;   
16a30 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72  /* Constant expr
16a40 65 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62  ession is reusab
16a50 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20  le */.    union 
16a60 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74 20 7b  {.      struct {
16a70 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 4f 72  .        u16 iOr
16a80 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f  derByCol;      /
16a90 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20  * For ORDER BY, 
16aa0 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  column number in
16ab0 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20   result set */. 
16ac0 20 20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61         u16 iAlia
16ad0 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
16ae0 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65  Index into Parse
16af0 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e  .aAlias[] for zN
16b00 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78  ame */.      } x
16b10 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e  ;.      int iCon
16b20 73 74 45 78 70 72 52 65 67 3b 20 20 20 20 20 20  stExprReg;      
16b30 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20 77  /* Register in w
16b40 68 69 63 68 20 45 78 70 72 20 76 61 6c 75 65 20  hich Expr value 
16b50 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20  is cached */.   
16b60 20 7d 20 75 3b 0a 20 20 7d 20 2a 61 3b 20 20 20   } u;.  } *a;   
16b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
16b80 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72 20  * Alloc a power 
16b90 6f 66 20 74 77 6f 20 67 72 65 61 74 65 72 20 6f  of two greater o
16ba0 72 20 65 71 75 61 6c 20 74 6f 20 6e 45 78 70 72  r equal to nExpr
16bb0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
16bc0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
16bd0 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  s structure is u
16be0 73 65 64 20 62 79 20 74 68 65 20 70 61 72 73 65  sed by the parse
16bf0 72 20 74 6f 20 72 65 63 6f 72 64 20 62 6f 74 68  r to record both
16c00 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 20 74 72  .** the parse tr
16c10 65 65 20 66 6f 72 20 61 6e 20 65 78 70 72 65 73  ee for an expres
16c20 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 70 61  sion and the spa
16c30 6e 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20  n of input text 
16c40 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65 73  for an.** expres
16c50 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  sion..*/.struct 
16c60 45 78 70 72 53 70 61 6e 20 7b 0a 20 20 45 78 70  ExprSpan {.  Exp
16c70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
16c80 20 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65 73     /* The expres
16c90 73 69 6f 6e 20 70 61 72 73 65 20 74 72 65 65 20  sion parse tree 
16ca0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
16cb0 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20 46 69  *zStart;   /* Fi
16cc0 72 73 74 20 63 68 61 72 61 63 74 65 72 20 6f 66  rst character of
16cd0 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 20   input text */. 
16ce0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e   const char *zEn
16cf0 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63 68  d;     /* One ch
16d00 61 72 61 63 74 65 72 20 70 61 73 74 20 74 68 65  aracter past the
16d10 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 20 74 65   end of input te
16d20 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  xt */.};../*.** 
16d30 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
16d40 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63 61  his structure ca
16d50 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20  n hold a simple 
16d60 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66 69  list of identifi
16d70 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20  ers,.** such as 
16d80 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63 22  the list "a,b,c"
16d90 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   in the followin
16da0 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a  g statements:.**
16db0 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54 20  .**      INSERT 
16dc0 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56 41  INTO t(a,b,c) VA
16dd0 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20  LUES ...;.**    
16de0 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69    CREATE INDEX i
16df0 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a  dx ON t(a,b,c);.
16e00 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  **      CREATE T
16e10 52 49 47 47 45 52 20 74 72 69 67 20 42 45 46 4f  RIGGER trig BEFO
16e20 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28 61  RE UPDATE ON t(a
16e30 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a  ,b,c) ...;.**.**
16e40 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69 64   The IdList.a.id
16e50 78 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  x field is used 
16e60 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74 20  when the IdList 
16e70 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c  represents the l
16e80 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e  ist of.** column
16e90 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20 74   names after a t
16ea0 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20  able name in an 
16eb0 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
16ec0 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74 65 6d  .  In the statem
16ed0 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e  ent.**.**     IN
16ee0 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c  SERT INTO t(a,b,
16ef0 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  c) ....**.** If 
16f00 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68 20  "a" is the k-th 
16f10 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20  column of table 
16f20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73 74  "t", then IdList
16f30 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f  .a[0].idx==k..*/
16f40 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 7b  .struct IdList {
16f50 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69 73 74  .  struct IdList
16f60 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72  _item {.    char
16f70 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a   *zName;      /*
16f80 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64 65   Name of the ide
16f90 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20 69  ntifier */.    i
16fa0 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20 20  nt idx;         
16fb0 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d   /* Index in som
16fc0 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f  e Table.aCol[] o
16fd0 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64  f a column named
16fe0 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61   zName */.  } *a
16ff0 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20 20  ;.  int nId;    
17000 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17010 66 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e  f identifiers on
17020 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
17030 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61  ./*.** The bitma
17040 73 6b 20 64 61 74 61 74 79 70 65 20 64 65 66 69  sk datatype defi
17050 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65  ned below is use
17060 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70  d for various op
17070 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a  timizations..**.
17080 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73  ** Changing this
17090 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74   from a 64-bit t
170a0 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70 65 20  o a 32-bit type 
170b0 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65  limits the numbe
170c0 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69  r of.** tables i
170d0 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69  n a join to 32 i
170e0 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42  nstead of 64.  B
170f0 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63  ut it also reduc
17100 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f  es the size.** o
17110 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 62 79  f the library by
17120 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78   738 bytes on ix
17130 38 36 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75  86..*/.typedef u
17140 36 34 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a  64 Bitmask;../*.
17150 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** The number of
17160 20 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d 61   bits in a Bitma
17170 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e 73  sk.  "BMS" means
17180 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e   "BitMask Size".
17190 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53 20  .*/.#define BMS 
171a0 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 42   ((int)(sizeof(B
171b0 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a  itmask)*8))../*.
171c0 2a 2a 20 41 20 62 69 74 20 69 6e 20 61 20 42 69  ** A bit in a Bi
171d0 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65  tmask.*/.#define
171e0 20 4d 41 53 4b 42 49 54 28 6e 29 20 20 20 28 28   MASKBIT(n)   ((
171f0 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29  (Bitmask)1)<<(n)
17200 29 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49  ).#define MASKBI
17210 54 33 32 28 6e 29 20 28 28 28 75 6e 73 69 67 6e  T32(n) (((unsign
17220 65 64 20 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a  ed int)1)<<(n)).
17230 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
17240 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 64  wing structure d
17250 65 73 63 72 69 62 65 73 20 74 68 65 20 46 52 4f  escribes the FRO
17260 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  M clause of a SE
17270 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
17280 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72  ** Each table or
17290 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65   subquery in the
172a0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20   FROM clause is 
172b0 61 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65  a separate eleme
172c0 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63  nt of.** the Src
172d0 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a  List.a[] array..
172e0 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61  **.** With the a
172f0 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69  ddition of multi
17300 70 6c 65 20 64 61 74 61 62 61 73 65 20 73 75 70  ple database sup
17310 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  port, the follow
17320 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  ing structure.**
17330 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65   can also be use
17340 64 20 74 6f 20 64 65 73 63 72 69 62 65 20 61 20  d to describe a 
17350 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65  particular table
17360 20 73 75 63 68 20 61 73 20 74 68 65 20 74 61 62   such as the tab
17370 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f  le that.** is mo
17380 64 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53  dified by an INS
17390 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20  ERT, DELETE, or 
173a0 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
173b0 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53  .  In standard S
173c0 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61  QL,.** such a ta
173d0 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73 69  ble must be a si
173e0 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20  mple name: ID.  
173f0 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74  But in SQLite, t
17400 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20  he table can.** 
17410 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69 65  now be identifie
17420 64 20 62 79 20 61 20 64 61 74 61 62 61 73 65 20  d by a database 
17430 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65  name, a dot, the
17440 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  n the table name
17450 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54  : ID.ID..**.** T
17460 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72  he jointype star
17470 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74  ts out showing t
17480 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74  he join type bet
17490 77 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74  ween the current
174a0 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68   table.** and th
174b0 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20  e next table on 
174c0 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70  the list.  The p
174d0 61 72 73 65 72 20 62 75 69 6c 64 73 20 74 68 65  arser builds the
174e0 20 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a   list this way..
174f0 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53 72  ** But sqlite3Sr
17500 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
17510 70 65 28 29 20 6c 61 74 65 72 20 73 68 69 66 74  pe() later shift
17520 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20  s the jointypes 
17530 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20  so that each.** 
17540 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73 73  jointype express
17550 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77  es the join betw
17560 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e  een the table an
17570 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74  d the previous t
17580 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74  able..**.** In t
17590 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64  he colUsed field
175a0 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72  , the high-order
175b0 20 62 69 74 20 28 62 69 74 20 36 33 29 20 69 73   bit (bit 63) is
175c0 20 73 65 74 20 69 66 20 74 68 65 20 74 61 62 6c   set if the tabl
175d0 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f  e.** contains mo
175e0 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d  re than 63 colum
175f0 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68  ns and the 64-th
17600 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e   or later column
17610 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72   is used..*/.str
17620 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20  uct SrcList {.  
17630 69 6e 74 20 6e 53 72 63 3b 20 20 20 20 20 20 20  int nSrc;       
17640 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61   /* Number of ta
17650 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69  bles or subqueri
17660 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  es in the FROM c
17670 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e  lause */.  u32 n
17680 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e  Alloc;      /* N
17690 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
176a0 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b   allocated in a[
176b0 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72  ] below */.  str
176c0 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
176d0 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70   {.    Schema *p
176e0 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65  Schema;  /* Sche
176f0 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68 69 73  ma to which this
17700 20 69 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a   item is fixed *
17710 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74  /.    char *zDat
17720 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20  abase;  /* Name 
17730 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64  of database hold
17740 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ing this table *
17750 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
17760 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
17770 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  of the table */.
17780 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73      char *zAlias
17790 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22  ;     /* The "B"
177a0 20 70 61 72 74 20 6f 66 20 61 20 22 41 20 41 53   part of a "A AS
177b0 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61   B" phrase.  zNa
177c0 6d 65 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f  me is the "A" */
177d0 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
177e0 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c  ;      /* An SQL
177f0 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e   table correspon
17800 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f  ding to zName */
17810 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
17820 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45  lect;  /* A SELE
17830 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65  CT statement use
17840 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20  d in place of a 
17850 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  table name */.  
17860 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75    int addrFillSu
17870 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f  b;  /* Address o
17880 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20  f subroutine to 
17890 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62 71 75  manifest a subqu
178a0 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72  ery */.    int r
178b0 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20  egReturn;    /* 
178c0 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
178d0 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20   return address 
178e0 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a  of addrFillSub *
178f0 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 73  /.    int regRes
17900 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67 69 73  ult;    /* Regis
17910 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 72 65 73  ters holding res
17920 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75  ults of a co-rou
17930 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73 74 72 75  tine */.    stru
17940 63 74 20 7b 0a 20 20 20 20 20 20 75 38 20 6a 6f  ct {.      u8 jo
17950 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20  intype;      /* 
17960 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74  Type of join bet
17970 77 65 65 6e 20 74 68 69 73 20 61 62 6c 65 20 61  ween this able a
17980 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  nd the previous 
17990 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
179a0 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b  d notIndexed :1;
179b0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
179c0 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20 49 4e  here is a NOT IN
179d0 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a  DEXED clause */.
179e0 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69        unsigned i
179f0 73 49 6e 64 65 78 65 64 42 79 20 3a 31 3b 20 20  sIndexedBy :1;  
17a00 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72   /* True if ther
17a10 65 20 69 73 20 61 6e 20 49 4e 44 45 58 45 44 20  e is an INDEXED 
17a20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  BY clause */.   
17a30 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 54 61     unsigned isTa
17a40 62 46 75 6e 63 20 3a 31 3b 20 20 20 20 20 2f 2a  bFunc :1;     /*
17a50 20 54 72 75 65 20 69 66 20 74 61 62 6c 65 2d 76   True if table-v
17a60 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 73  alued-function s
17a70 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20 20 20 75  yntax */.      u
17a80 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c  nsigned isCorrel
17a90 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75  ated :1;  /* Tru
17aa0 65 20 69 66 20 73 75 62 2d 71 75 65 72 79 20 69  e if sub-query i
17ab0 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a  s correlated */.
17ac0 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76        unsigned v
17ad0 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20  iaCoroutine :1; 
17ae0 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20   /* Implemented 
17af0 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20  as a co-routine 
17b00 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
17b10 64 20 69 73 52 65 63 75 72 73 69 76 65 20 3a 31  d isRecursive :1
17b20 3b 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  ;   /* True for 
17b30 72 65 63 75 72 73 69 76 65 20 72 65 66 65 72 65  recursive refere
17b40 6e 63 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a 20  nce in WITH */. 
17b50 20 20 20 7d 20 66 67 3b 0a 23 69 66 6e 64 65 66     } fg;.#ifndef
17b60 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
17b70 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c  LAIN.    u8 iSel
17b80 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66  ectId;     /* If
17b90 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65   pSelect!=0, the
17ba0 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73   id of the sub-s
17bb0 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a  elect in EQP */.
17bc0 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69  #endif.    int i
17bd0 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20  Cursor;      /* 
17be0 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
17bf0 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61  number used to a
17c00 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65  ccess this table
17c10 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f   */.    Expr *pO
17c20 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  n;        /* The
17c30 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20   ON clause of a 
17c40 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69  join */.    IdLi
17c50 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a  st *pUsing;   /*
17c60 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73   The USING claus
17c70 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
17c80 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73     Bitmask colUs
17c90 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31  ed;  /* Bit N (1
17ca0 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75  <<N) set if colu
17cb0 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20  mn N of pTab is 
17cc0 75 73 65 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f  used */.    unio
17cd0 6e 20 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a  n {.      char *
17ce0 7a 49 6e 64 65 78 65 64 42 79 3b 20 20 20 20 2f  zIndexedBy;    /
17cf0 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f  * Identifier fro
17d00 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a  m "INDEXED BY <z
17d10 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a  Index>" clause *
17d20 2f 0a 20 20 20 20 20 20 45 78 70 72 4c 69 73 74  /.      ExprList
17d30 20 2a 70 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20   *pFuncArg;  /* 
17d40 41 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 61 62  Arguments to tab
17d50 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69  le-valued-functi
17d60 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a  on */.    } u1;.
17d70 20 20 20 20 49 6e 64 65 78 20 2a 70 49 42 49 6e      Index *pIBIn
17d80 64 65 78 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73  dex;  /* Index s
17d90 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73 70  tructure corresp
17da0 6f 6e 64 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e  onding to u1.zIn
17db0 64 65 78 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61  dexedBy */.  } a
17dc0 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
17dd0 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f   /* One entry fo
17de0 72 20 65 61 63 68 20 69 64 65 6e 74 69 66 69 65  r each identifie
17df0 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  r on the list */
17e00 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69  .};../*.** Permi
17e10 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74  tted values of t
17e20 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69  he SrcList.a.joi
17e30 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23  ntype field.*/.#
17e40 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20  define JT_INNER 
17e50 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a      0x0001    /*
17e60 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e   Any kind of inn
17e70 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e  er or cross join
17e80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43   */.#define JT_C
17e90 52 4f 53 53 20 20 20 20 20 30 78 30 30 30 32 20  ROSS     0x0002 
17ea0 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75     /* Explicit u
17eb0 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20  se of the CROSS 
17ec0 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
17ed0 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20  ne JT_NATURAL   
17ee0 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75  0x0004    /* Tru
17ef0 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c  e for a "natural
17f00 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  " join */.#defin
17f10 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30  e JT_LEFT      0
17f20 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74  x0008    /* Left
17f30 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
17f40 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20  define JT_RIGHT 
17f50 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a      0x0010    /*
17f60 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69   Right outer joi
17f70 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
17f80 4f 55 54 45 52 20 20 20 20 20 30 78 30 30 32 30  OUTER     0x0020
17f90 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45      /* The "OUTE
17fa0 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72  R" keyword is pr
17fb0 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esent */.#define
17fc0 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78   JT_ERROR     0x
17fd0 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f  0040    /* unkno
17fe0 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65  wn or unsupporte
17ff0 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a  d join type */..
18000 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70  ./*.** Flags app
18010 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68 65  ropriate for the
18020 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61   wctrlFlags para
18030 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33  meter of sqlite3
18040 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20  WhereBegin().** 
18050 61 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e 66  and the WhereInf
18060 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d  o.wctrlFlags mem
18070 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ber..*/.#define 
18080 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f  WHERE_ORDERBY_NO
18090 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a  RMAL   0x0000 /*
180a0 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e   No-op */.#defin
180b0 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
180c0 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30 31 20  MIN      0x0001 
180d0 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63  /* ORDER BY proc
180e0 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29  essing for min()
180f0 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
18100 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d   WHERE_ORDERBY_M
18110 41 58 20 20 20 20 20 20 30 78 30 30 30 32 20 2f  AX      0x0002 /
18120 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65  * ORDER BY proce
18130 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20  ssing for max() 
18140 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
18150 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45  WHERE_ONEPASS_DE
18160 53 49 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a  SIRED  0x0004 /*
18170 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d   Want to do one-
18180 70 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45  pass UPDATE/DELE
18190 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  TE */.#define WH
181a0 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f  ERE_DUPLICATES_O
181b0 4b 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 4f  K    0x0008 /* O
181c0 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f  k to return a ro
181d0 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65  w more than once
181e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
181f0 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53  E_OMIT_OPEN_CLOS
18200 45 20 20 30 78 30 30 31 30 20 2f 2a 20 54 61 62  E  0x0010 /* Tab
18210 6c 65 20 63 75 72 73 6f 72 73 20 61 72 65 20 61  le cursors are a
18220 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f 0a 23  lready open */.#
18230 64 65 66 69 6e 65 20 57 48 45 52 45 5f 46 4f 52  define WHERE_FOR
18240 43 45 5f 54 41 42 4c 45 20 20 20 20 20 20 30 78  CE_TABLE      0x
18250 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 75  0020 /* Do not u
18260 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79  se an index-only
18270 20 73 65 61 72 63 68 20 2a 2f 0a 23 64 65 66 69   search */.#defi
18280 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54 41 42 4c  ne WHERE_ONETABL
18290 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30 34 30  E_ONLY    0x0040
182a0 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20 74 68   /* Only code th
182b0 65 20 31 73 74 20 74 61 62 6c 65 20 69 6e 20 70  e 1st table in p
182c0 54 61 62 4c 69 73 74 20 2a 2f 0a 23 64 65 66 69  TabList */.#defi
182d0 6e 65 20 57 48 45 52 45 5f 4e 4f 5f 41 55 54 4f  ne WHERE_NO_AUTO
182e0 49 4e 44 45 58 20 20 20 20 20 30 78 30 30 38 30  INDEX     0x0080
182f0 20 2f 2a 20 44 69 73 61 6c 6c 6f 77 20 61 75 74   /* Disallow aut
18300 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a  omatic indexes *
18310 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
18320 47 52 4f 55 50 42 59 20 20 20 20 20 20 20 20 20  GROUPBY         
18330 20 30 78 30 31 30 30 20 2f 2a 20 70 4f 72 64 65   0x0100 /* pOrde
18340 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rBy is really a 
18350 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66  GROUP BY */.#def
18360 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
18370 43 54 42 59 20 20 20 20 20 20 20 30 78 30 32 30  CTBY       0x020
18380 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73  0 /* pOrderby is
18390 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e   really a DISTIN
183a0 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65  CT clause */.#de
183b0 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f  fine WHERE_WANT_
183c0 44 49 53 54 49 4e 43 54 20 20 20 20 30 78 30 34  DISTINCT    0x04
183d0 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74  00 /* All output
183e0 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69 73   needs to be dis
183f0 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65  tinct */.#define
18400 20 57 48 45 52 45 5f 53 4f 52 54 42 59 47 52 4f   WHERE_SORTBYGRO
18410 55 50 20 20 20 20 20 20 30 78 30 38 30 30 20 2f  UP      0x0800 /
18420 2a 20 53 75 70 70 6f 72 74 20 73 71 6c 69 74 65  * Support sqlite
18430 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 29  3WhereIsSorted()
18440 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
18450 45 5f 52 45 4f 50 45 4e 5f 49 44 58 20 20 20 20  E_REOPEN_IDX    
18460 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72 79     0x1000 /* Try
18470 20 74 6f 20 75 73 65 20 4f 50 5f 52 65 6f 70 65   to use OP_Reope
18480 6e 49 64 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nIdx */.#define 
18490 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 4d 55  WHERE_ONEPASS_MU
184a0 4c 54 49 52 4f 57 20 30 78 32 30 30 30 20 2f 2a  LTIROW 0x2000 /*
184b0 20 4f 4e 45 50 41 53 53 20 69 73 20 6f 6b 20 77   ONEPASS is ok w
184c0 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  ith multiple row
184d0 73 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  s */../* Allowed
184e0 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66   return values f
184f0 72 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65  rom sqlite3Where
18500 49 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a  IsDistinct().*/.
18510 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
18520 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20  STINCT_NOOP     
18530 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20   0  /* DISTINCT 
18540 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64  keyword not used
18550 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
18560 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55  E_DISTINCT_UNIQU
18570 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75  E    1  /* No du
18580 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66  plicates */.#def
18590 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
185a0 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20  CT_ORDERED   2  
185b0 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65  /* All duplicate
185c0 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a  s are adjacent *
185d0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
185e0 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52  DISTINCT_UNORDER
185f0 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61  ED 3  /* Duplica
18600 74 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65  tes are scattere
18610 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61  d */../*.** A Na
18620 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65  meContext define
18630 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77  s a context in w
18640 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20  hich to resolve 
18650 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e  table and column
18660 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20  .** names.  The 
18670 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73  context consists
18680 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61   of a list of ta
18690 62 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69  bles (the pSrcLi
186a0 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a  st) field and.**
186b0 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64   a list of named
186c0 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c   expression (pEL
186d0 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64  ist).  The named
186e0 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
186f0 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e   may.** be NULL.
18700 20 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65    The pSrc corre
18710 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52  sponds to the FR
18720 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  OM clause of a S
18730 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74  ELECT or.** to t
18740 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f  he table being o
18750 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e  perated on by IN
18760 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72  SERT, UPDATE, or
18770 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a   DELETE.  The.**
18780 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f   pEList correspo
18790 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c  nds to the resul
187a0 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43  t set of a SELEC
187b0 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f  T and is NULL fo
187c0 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65  r.** other state
187d0 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d  ments..**.** Nam
187e0 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65  eContexts can be
187f0 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72   nested.  When r
18800 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20  esolving names, 
18810 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a  the inner-most .
18820 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65  ** context is se
18830 61 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49  arched first.  I
18840 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f  f no match is fo
18850 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75  und, the next ou
18860 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69  ter.** context i
18870 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74  s checked.  If t
18880 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f  here is still no
18890 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74   match, the next
188a0 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63   context.** is c
188b0 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72  hecked.  This pr
188c0 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20  ocess continues 
188d0 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d  until either a m
188e0 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a  atch is found.**
188f0 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73   or all contexts
18900 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65   are check.  Whe
18910 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  n a match is fou
18920 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d  nd, the nRef mem
18930 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f  ber of.** the co
18940 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67  ntext containing
18950 20 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e   the match is in
18960 63 72 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a  cremented. .**.*
18970 2a 20 45 61 63 68 20 73 75 62 71 75 65 72 79 20  * Each subquery 
18980 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43  gets a new NameC
18990 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65  ontext.  The pNe
189a0 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20  xt field points 
189b0 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f  to the.** NameCo
189c0 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70 61 72  ntext in the par
189d0 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75 73  ent query.  Thus
189e0 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20   the process of 
189f0 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20  scanning the.** 
18a00 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74  NameContext list
18a10 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
18a20 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67  searching throug
18a30 68 20 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f  h successively o
18a40 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69  uter.** subqueri
18a50 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61  es looking for a
18a60 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63   match..*/.struc
18a70 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a  t NameContext {.
18a80 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
18a90 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61         /* The pa
18aa0 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73  rser */.  SrcLis
18ab0 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f  t *pSrcList;   /
18ac0 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61  * One or more ta
18ad0 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65 73  bles used to res
18ae0 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20  olve names */.  
18af0 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74  ExprList *pEList
18b00 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c  ;    /* Optional
18b10 20 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d   list of result-
18b20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  set columns */. 
18b30 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
18b40 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  fo;   /* Informa
18b50 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65  tion about aggre
18b60 67 61 74 65 73 20 61 74 20 74 68 69 73 20 6c 65  gates at this le
18b70 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e  vel */.  NameCon
18b80 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a  text *pNext;  /*
18b90 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65   Next outer name
18ba0 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20   context.  NULL 
18bb0 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f  for outermost */
18bc0 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20  .  int nRef;    
18bd0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
18be0 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c  r of names resol
18bf0 76 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74  ved by this cont
18c00 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ext */.  int nEr
18c10 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
18c20 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
18c30 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68  s encountered wh
18c40 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61  ile resolving na
18c50 6d 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46  mes */.  u16 ncF
18c60 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a  lags;         /*
18c70 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43   Zero or more NC
18c80 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64  _* flags defined
18c90 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   below */.};../*
18ca0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
18cb0 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43  es for the NameC
18cc0 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20  ontext, ncFlags 
18cd0 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  field..**.** Not
18ce0 65 3a 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67  e:  NC_MinMaxAgg
18cf0 20 6d 75 73 74 20 68 61 76 65 20 74 68 65 20 73   must have the s
18d00 61 6d 65 20 76 61 6c 75 65 20 61 73 20 53 46 5f  ame value as SF_
18d10 4d 69 6e 4d 61 78 41 67 67 20 61 6e 64 0a 2a 2a  MinMaxAgg and.**
18d20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e   SQLITE_FUNC_MIN
18d30 4d 41 58 2e 0a 2a 2a 20 0a 2a 2f 0a 23 64 65 66  MAX..** .*/.#def
18d40 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20  ine NC_AllowAgg 
18d50 20 30 78 30 30 30 31 20 20 2f 2a 20 41 67 67 72   0x0001  /* Aggr
18d60 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
18d70 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65  are allowed here
18d80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48   */.#define NC_H
18d90 61 73 41 67 67 20 20 20 20 30 78 30 30 30 32 20  asAgg    0x0002 
18da0 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
18db0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
18dc0 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66  ons seen */.#def
18dd0 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20  ine NC_IsCheck  
18de0 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65   0x0004  /* True
18df0 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61   if resolving na
18e00 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63  mes in a CHECK c
18e10 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
18e20 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e  fine NC_InAggFun
18e30 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75  c 0x0008  /* Tru
18e40 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61  e if analyzing a
18e50 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61  rguments to an a
18e60 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  gg func */.#defi
18e70 6e 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20  ne NC_PartIdx   
18e80 30 78 30 30 31 30 20 20 2f 2a 20 54 72 75 65 20  0x0010  /* True 
18e90 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70  if resolving a p
18ea0 61 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45  artial index WHE
18eb0 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  RE */.#define NC
18ec0 5f 49 64 78 45 78 70 72 20 20 20 30 78 30 30 32  _IdxExpr   0x002
18ed0 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65  0  /* True if re
18ee0 73 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20  solving columns 
18ef0 6f 66 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  of CREATE INDEX 
18f00 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69  */.#define NC_Mi
18f10 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30 20 20  nMaxAgg 0x1000  
18f20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65  /* min/max aggre
18f30 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65  gates seen.  See
18f40 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 0a   note above */..
18f50 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
18f60 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
18f70 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
18f80 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d  tains all inform
18f90 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20  ation.** needed 
18fa0 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65  to generate code
18fb0 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45   for a single SE
18fc0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
18fd0 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20  **.** nLimit is 
18fe0 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65  set to -1 if the
18ff0 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63  re is no LIMIT c
19000 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20  lause.  nOffset 
19010 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20  is set to 0..** 
19020 49 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49  If there is a LI
19030 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20  MIT clause, the 
19040 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d  parser sets nLim
19050 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  it to the value 
19060 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20  of the.** limit 
19070 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74  and nOffset to t
19080 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
19090 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20  offset (or 0 if 
190a0 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20  there is not.** 
190b0 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61  offset).  But la
190c0 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61  ter on, nLimit a
190d0 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d  nd nOffset becom
190e0 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63  e the memory loc
190f0 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65  ations.** in the
19100 20 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72   VDBE that recor
19110 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20  d the limit and 
19120 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e  offset counters.
19130 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45  .**.** addrOpenE
19140 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f  phm[] entries co
19150 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73  ntain the addres
19160 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65  s of OP_OpenEphe
19170 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a  meral opcodes..*
19180 2a 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65  * These addresse
19190 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64  s must be stored
191a0 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20   so that we can 
191b0 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c  go back and fill
191c0 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45   in.** the P4_KE
191d0 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72  YINFO and P2 par
191e0 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20  ameters later.  
191f0 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49  Neither the KeyI
19200 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e  nfo nor.** the n
19210 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
19220 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f   in P2 can be co
19230 6d 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61  mputed at the sa
19240 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68  me time.** as th
19250 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e  e OP_OpenEphm in
19260 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64  struction is cod
19270 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a  ed because not.*
19280 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61  * enough informa
19290 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63  tion about the c
192a0 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73  ompound query is
192b0 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70   known at that p
192c0 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79  oint..** The Key
192d0 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
192e0 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d  nTran[0] and [1]
192f0 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74   contains collat
19300 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a  ing sequences.**
19310 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20   for the result 
19320 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  set.  The KeyInf
19330 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70  o for addrOpenEp
19340 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63  hm[2] contains c
19350 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75  ollating.** sequ
19360 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52  ences for the OR
19370 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
19380 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  /.struct Select 
19390 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  {.  ExprList *pE
193a0 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68  List;      /* Th
193b0 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20  e fields of the 
193c0 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f  result */.  u8 o
193d0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
193e0 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b     /* One of: TK
193f0 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b  _UNION TK_ALL TK
19400 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58  _INTERSECT TK_EX
19410 43 45 50 54 20 2a 2f 0a 20 20 75 31 36 20 73 65  CEPT */.  u16 se
19420 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  lFlags;         
19430 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a   /* Various SF_*
19440 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74   values */.  int
19450 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74   iLimit, iOffset
19460 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65  ;   /* Memory re
19470 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20  gisters holding 
19480 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63  LIMIT & OFFSET c
19490 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20 53  ounters */.#if S
194a0 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
194b0 45 44 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e 61  ED.  char zSelNa
194c0 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53  me[12];     /* S
194d0 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20  ymbolic name of 
194e0 74 68 69 73 20 53 45 4c 45 43 54 20 75 73 65 20  this SELECT use 
194f0 66 6f 72 20 64 65 62 75 67 67 69 6e 67 20 2a 2f  for debugging */
19500 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 61 64  .#endif.  int ad
19510 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20  drOpenEphm[2];  
19520 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   /* OP_OpenEphem
19530 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64   opcodes related
19540 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20   to this select 
19550 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65 63 74  */.  u64 nSelect
19560 52 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a 20 45  Row;        /* E
19570 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20  stimated number 
19580 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a  of result rows *
19590 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
195a0 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  c;         /* Th
195b0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
195c0 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b  .  Expr *pWhere;
195d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
195e0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f   WHERE clause */
195f0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
19600 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  oupBy;    /* The
19610 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
19620 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76   */.  Expr *pHav
19630 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ing;         /* 
19640 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  The HAVING claus
19650 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
19660 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a  *pOrderBy;    /*
19670 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
19680 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ause */.  Select
19690 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20   *pPrior;       
196a0 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74   /* Prior select
196b0 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73   in a compound s
196c0 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20  elect statement 
196d0 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65  */.  Select *pNe
196e0 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  xt;         /* N
196f0 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68  ext select to th
19700 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70  e left in a comp
19710 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ound */.  Expr *
19720 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20  pLimit;         
19730 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73   /* LIMIT expres
19740 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73  sion. NULL means
19750 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20   not used. */.  
19760 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20  Expr *pOffset;  
19770 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54         /* OFFSET
19780 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c   expression. NUL
19790 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64  L means not used
197a0 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69  . */.  With *pWi
197b0 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  th;           /*
197c0 20 57 49 54 48 20 63 6c 61 75 73 65 20 61 74 74   WITH clause att
197d0 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 73 65  ached to this se
197e0 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a  lect. Or NULL. *
197f0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
19800 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53  wed values for S
19810 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20  elect.selFlags. 
19820 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78   The "SF" prefix
19830 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22   stands for.** "
19840 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f  Select Flag"..*/
19850 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74  .#define SF_Dist
19860 69 6e 63 74 20 20 20 20 20 20 20 20 30 78 30 30  inct        0x00
19870 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68  01  /* Output sh
19880 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54  ould be DISTINCT
19890 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41   */.#define SF_A
198a0 6c 6c 20 20 20 20 20 20 20 20 20 20 20 20 20 30  ll             0
198b0 78 30 30 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64  x0002  /* Includ
198c0 65 73 20 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f  es the ALL keywo
198d0 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  rd */.#define SF
198e0 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20  _Resolved       
198f0 20 30 78 30 30 30 34 20 20 2f 2a 20 49 64 65 6e   0x0004  /* Iden
19900 74 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65  tifiers have bee
19910 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64  n resolved */.#d
19920 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61  efine SF_Aggrega
19930 74 65 20 20 20 20 20 20 20 30 78 30 30 30 38 20  te       0x0008 
19940 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67   /* Contains agg
19950 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
19960 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55   */.#define SF_U
19970 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30  sesEphemeral   0
19980 78 30 30 31 30 20 20 2f 2a 20 55 73 65 73 20 74  x0010  /* Uses t
19990 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  he OpenEphemeral
199a0 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69   opcode */.#defi
199b0 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20  ne SF_Expanded  
199c0 20 20 20 20 20 20 30 78 30 30 32 30 20 20 2f 2a        0x0020  /*
199d0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
199e0 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e  pand() called on
199f0 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65   this */.#define
19a00 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20   SF_HasTypeInfo 
19a10 20 20 20 20 30 78 30 30 34 30 20 20 2f 2a 20 46      0x0040  /* F
19a20 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20 68  ROM subqueries h
19a30 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61  ave Table metada
19a40 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ta */.#define SF
19a50 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20  _Compound       
19a60 20 30 78 30 30 38 30 20 20 2f 2a 20 50 61 72 74   0x0080  /* Part
19a70 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71   of a compound q
19a80 75 65 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  uery */.#define 
19a90 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20  SF_Values       
19aa0 20 20 20 30 78 30 31 30 30 20 20 2f 2a 20 53 79     0x0100  /* Sy
19ab0 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56  nthesized from V
19ac0 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a  ALUES clause */.
19ad0 23 64 65 66 69 6e 65 20 53 46 5f 4d 75 6c 74 69  #define SF_Multi
19ae0 56 61 6c 75 65 20 20 20 20 20 20 30 78 30 32 30  Value      0x020
19af0 30 20 20 2f 2a 20 53 69 6e 67 6c 65 20 56 41 4c  0  /* Single VAL
19b00 55 45 53 20 74 65 72 6d 20 77 69 74 68 20 6d 75  UES term with mu
19b10 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23  ltiple rows */.#
19b20 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64  define SF_Nested
19b30 46 72 6f 6d 20 20 20 20 20 20 30 78 30 34 30 30  From      0x0400
19b40 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70    /* Part of a p
19b50 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f  arenthesized FRO
19b60 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  M clause */.#def
19b70 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76  ine SF_MaybeConv
19b80 65 72 74 20 20 20 20 30 78 30 38 30 30 20 20 2f  ert    0x0800  /
19b90 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f  * Need convertCo
19ba0 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
19bb0 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66  bquery() */.#def
19bc0 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67  ine SF_MinMaxAgg
19bd0 20 20 20 20 20 20 20 30 78 31 30 30 30 20 20 2f         0x1000  /
19be0 2a 20 41 67 67 72 65 67 61 74 65 20 63 6f 6e 74  * Aggregate cont
19bf0 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20  aining min() or 
19c00 6d 61 78 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  max() */.#define
19c10 20 53 46 5f 52 65 63 75 72 73 69 76 65 20 20 20   SF_Recursive   
19c20 20 20 20 20 30 78 32 30 30 30 20 20 2f 2a 20 54      0x2000  /* T
19c30 68 65 20 72 65 63 75 72 73 69 76 65 20 70 61 72  he recursive par
19c40 74 20 6f 66 20 61 20 72 65 63 75 72 73 69 76 65  t of a recursive
19c50 20 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20   CTE */.#define 
19c60 53 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20  SF_Converted    
19c70 20 20 20 30 78 34 30 30 30 20 20 2f 2a 20 42 79     0x4000  /* By
19c80 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64   convertCompound
19c90 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79  SelectToSubquery
19ca0 28 29 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68  () */.../*.** Th
19cb0 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53  e results of a S
19cc0 45 4c 45 43 54 20 63 61 6e 20 62 65 20 64 69 73  ELECT can be dis
19cd0 74 72 69 62 75 74 65 64 20 69 6e 20 73 65 76 65  tributed in seve
19ce0 72 61 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66  ral ways, as def
19cf0 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f  ined.** by one o
19d00 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
19d10 6d 61 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52  macros.  The "SR
19d20 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20  T" prefix means 
19d30 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a  "SELECT Result.*
19d40 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20  * Type"..**.**  
19d50 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20     SRT_Union    
19d60 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
19d70 20 61 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74   as a key in a t
19d80 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 0a  emporary index .
19d90 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19da0 20 20 20 20 20 20 20 69 64 65 6e 74 69 66 69 65         identifie
19db0 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53 44 50  d by pDest->iSDP
19dc0 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  arm..**.**     S
19dd0 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 52  RT_Except      R
19de0 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20 66 72  emove results fr
19df0 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  om the temporary
19e00 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e 69 53   index pDest->iS
19e10 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  DParm..**.**    
19e20 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20   SRT_Exists     
19e30 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20 6d 65   Store a 1 in me
19e40 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73 74 2d  mory cell pDest-
19e50 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68 65 20  >iSDParm if the 
19e60 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20  result.**       
19e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
19e80 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a  t is not empty..
19e90 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
19ea0 73 63 61 72 64 20 20 20 20 20 54 68 72 6f 77 20  scard     Throw 
19eb0 74 68 65 20 72 65 73 75 6c 74 73 20 61 77 61 79  the results away
19ec0 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64 20  .  This is used 
19ed0 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20  by SELECT.**    
19ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ef0 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
19f00 69 6e 20 74 72 69 67 67 65 72 73 20 77 68 6f 73  in triggers whos
19f10 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69  e only purpose i
19f20 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
19f30 20 20 20 20 20 20 20 20 20 74 68 65 20 73 69 64           the sid
19f40 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66 75 6e  e-effects of fun
19f50 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c  ctions..**.** Al
19f60 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61  l of the above a
19f70 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e 6f 72  re free to ignor
19f80 65 20 74 68 65 69 72 20 4f 52 44 45 52 20 42 59  e their ORDER BY
19f90 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65 20 74   clause. Those t
19fa0 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75  hat.** follow mu
19fb0 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44  st honor the ORD
19fc0 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a  ER BY clause..**
19fd0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75 74 70  .**     SRT_Outp
19fe0 75 74 20 20 20 20 20 20 47 65 6e 65 72 61 74 65  ut      Generate
19ff0 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74   a row of output
1a000 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 52   (using the OP_R
1a010 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20  esultRow.**     
1a020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a030 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61 63 68  opcode) for each
1a040 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65 73 75   row in the resu
1a050 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  lt set..**.**   
1a060 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20    SRT_Mem       
1a070 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20    Only valid if 
1a080 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 20  the result is a 
1a090 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a  single column..*
1a0a0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1a0b0 20 20 20 20 20 20 53 74 6f 72 65 20 74 68 65 20        Store the 
1a0c0 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20  first column of 
1a0d0 74 68 65 20 66 69 72 73 74 20 72 65 73 75 6c 74  the first result
1a0e0 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20   row.**         
1a0f0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 20 72              in r
1a100 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69  egister pDest->i
1a110 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62 61 6e  SDParm then aban
1a120 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a 20  don the rest.** 
1a130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a140 20 20 20 20 6f 66 20 74 68 65 20 71 75 65 72 79      of the query
1a150 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e 61 74  .  This destinat
1a160 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d  ion implies "LIM
1a170 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  IT 1"..**.**    
1a180 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20   SRT_Set        
1a190 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74   The result must
1a1a0 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c   be a single col
1a1b0 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61 63 68  umn.  Store each
1a1c0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1a1d0 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66 20 72          row of r
1a1e0 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b 65 79  esult as the key
1a1f0 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73 74 2d   in table pDest-
1a200 3e 69 53 44 50 61 72 6d 2e 20 0a 2a 2a 20 20 20  >iSDParm. .**   
1a210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a220 20 20 41 70 70 6c 79 20 74 68 65 20 61 66 66 69    Apply the affi
1a230 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66 53  nity pDest->affS
1a240 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72 69  dst before stori
1a250 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ng.**           
1a260 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
1a270 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70 6c  s.  Used to impl
1a280 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45 43  ement "IN (SELEC
1a290 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20  T ...)"..**.**  
1a2a0 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20     SRT_EphemTab 
1a2b0 20 20 20 43 72 65 61 74 65 20 61 6e 20 74 65 6d     Create an tem
1a2c0 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
1a2d0 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64 20  st->iSDParm and 
1a2e0 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20  store.**        
1a2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1a300 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20 54   result there. T
1a310 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66  he cursor is lef
1a320 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20  t open after.** 
1a330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a340 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20 20      returning.  
1a350 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54  This is like SRT
1a360 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20 74 68  _Table except th
1a370 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  at.**           
1a380 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 64            this d
1a390 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73 20  estination uses 
1a3a0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
1a3b0 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20 20   to create.**   
1a3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3d0 20 20 74 68 65 20 74 61 62 6c 65 20 66 69 72 73    the table firs
1a3e0 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
1a3f0 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65 6e  _Coroutine   Gen
1a400 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74 69  erate a co-routi
1a410 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e 73 20  ne that returns 
1a420 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20  a new row of.** 
1a430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a440 20 20 20 20 72 65 73 75 6c 74 73 20 65 61 63 68      results each
1a450 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76 6f   time it is invo
1a460 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79 20  ked.  The entry 
1a470 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20  point.**        
1a480 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20               of 
1a490 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69  the co-routine i
1a4a0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
1a4b0 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50  ster pDest->iSDP
1a4c0 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  arm.**          
1a4d0 20 20 20 20 20 20 20 20 20 20 20 61 6e 64 20 74             and t
1a4e0 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73  he result row is
1a4f0 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73 74   stored in pDest
1a500 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65 72  ->nDest register
1a510 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
1a520 20 20 20 20 20 20 20 20 20 73 74 61 72 74 69 6e           startin
1a530 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69 53  g with pDest->iS
1a540 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  dst..**.**     S
1a550 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 53  RT_Table       S
1a560 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1a570 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
1a580 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1a590 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f 20  **     SRT_Fifo 
1a5a0 20 20 20 20 20 20 20 54 68 69 73 20 69 73 20 6c         This is l
1a5b0 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62  ike SRT_EphemTab
1a5c0 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
1a5d0 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20   table.**       
1a5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73                is
1a5f0 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72 65   assumed to alre
1a600 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53 52  ady be open.  SR
1a610 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20  T_Fifo has.**   
1a620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a630 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c    the additional
1a640 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65 69   property of bei
1a650 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72  ng able to ignor
1a660 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1a670 20 20 20 20 20 20 20 20 20 74 68 65 20 4f 52 44           the ORD
1a680 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a  ER BY clause..**
1a690 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74  .**     SRT_Dist
1a6a0 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72 65  Fifo    Store re
1a6b0 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70 6f  sults in a tempo
1a6c0 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
1a6d0 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
1a6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6f0 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20 74    But also use t
1a700 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
1a710 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20  Dest->iSDParm+1 
1a720 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  as.**           
1a730 20 20 20 20 20 20 20 20 20 20 61 20 72 65 63 6f            a reco
1a740 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20  rd of all prior 
1a750 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f  results and igno
1a760 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74 65  re any duplicate
1a770 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1a780 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20 4e          rows.  N
1a790 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69 73  ame means:  "Dis
1a7a0 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a  tinct Fifo"..**.
1a7b0 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75 65  **     SRT_Queue
1a7c0 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
1a7d0 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79  ults in priority
1a7e0 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53   queue pDest->iS
1a7f0 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a  DParm (really.**
1a800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a810 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e 20       an index). 
1a820 20 41 70 70 65 6e 64 20 61 20 73 65 71 75 65 6e   Append a sequen
1a830 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68 61  ce number so tha
1a840 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a  t all entries.**
1a850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a860 20 20 20 20 20 61 72 65 20 64 69 73 74 69 6e 63       are distinc
1a870 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
1a880 5f 44 69 73 74 51 75 65 75 65 20 20 20 53 74 6f  _DistQueue   Sto
1a890 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72  re results in pr
1a8a0 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65  iority queue pDe
1a8b0 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79  st->iSDParm only
1a8c0 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   if.**          
1a8d0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73             the s
1a8e0 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20 6e  ame record has n
1a8f0 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65 64  ever been stored
1a900 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a   before.  The.**
1a910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a920 20 20 20 20 20 69 6e 64 65 78 20 61 74 20 70 44       index at pD
1a930 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68  est->iSDParm+1 h
1a940 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73 74  old all prior st
1a950 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ores..*/.#define
1a960 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20   SRT_Union      
1a970 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    1  /* Store re
1a980 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20  sult as keys in 
1a990 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  an index */.#def
1a9a0 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20  ine SRT_Except  
1a9b0 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76       2  /* Remov
1a9c0 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20  e result from a 
1a9d0 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23  UNION index */.#
1a9e0 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74  define SRT_Exist
1a9f0 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74  s       3  /* St
1aa00 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73  ore 1 if the res
1aa10 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  ult is not empty
1aa20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1aa30 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20  Discard      4  
1aa40 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74  /* Do not save t
1aa50 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68  he results anywh
1aa60 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ere */.#define S
1aa70 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 20  RT_Fifo         
1aa80 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  5  /* Store resu
1aa90 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20  lt as data with 
1aaa0 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77  an automatic row
1aab0 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  id */.#define SR
1aac0 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20 36  T_DistFifo     6
1aad0 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69    /* Like SRT_Fi
1aae0 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72  fo, but unique r
1aaf0 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23  esults only */.#
1ab00 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75 65  define SRT_Queue
1ab10 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74          7  /* St
1ab20 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  ore result in an
1ab30 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e   queue */.#defin
1ab40 65 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20  e SRT_DistQueue 
1ab50 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52     8  /* Like SR
1ab60 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e 69  T_Queue, but uni
1ab70 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79  que results only
1ab80 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45   */../* The ORDE
1ab90 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 69  R BY clause is i
1aba0 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f  gnored for all o
1abb0 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23  f the above */.#
1abc0 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65  define Ignorable
1abd0 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e  Orderby(X) ((X->
1abe0 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 74  eDest)<=SRT_Dist
1abf0 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65 20  Queue)..#define 
1ac00 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
1ac10 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61   9  /* Output ea
1ac20 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  ch row of result
1ac30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1ac40 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30 20 20  Mem         10  
1ac50 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1ac60 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  in a memory cell
1ac70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1ac80 53 65 74 20 20 20 20 20 20 20 20 20 31 31 20 20  Set         11  
1ac90 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73  /* Store results
1aca0 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
1acb0 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
1acc0 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20  SRT_EphemTab    
1acd0 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72  12  /* Create tr
1ace0 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20  ansient tab and 
1acf0 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54  store like SRT_T
1ad00 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
1ad10 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20  SRT_Coroutine   
1ad20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20  13  /* Generate 
1ad30 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  a single row of 
1ad40 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e  result */.#defin
1ad50 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20  e SRT_Table     
1ad60 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20 72    14  /* Store r
1ad70 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69  esult as data wi
1ad80 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20  th an automatic 
1ad90 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  rowid */../*.** 
1ada0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
1adb0 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72  his object descr
1adc0 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70 75  ibes where to pu
1add0 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  t of the results
1ade0 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20   of.** a SELECT 
1adf0 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74  statement..*/.st
1ae00 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20  ruct SelectDest 
1ae10 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20 20  {.  u8 eDest;   
1ae20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20           /* How 
1ae30 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68  to dispose of th
1ae40 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f  e results.  On o
1ae50 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a  f SRT_* above. *
1ae60 2f 0a 20 20 63 68 61 72 20 61 66 66 53 64 73 74  /.  char affSdst
1ae70 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 66 66 69  ;        /* Affi
1ae80 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e 20 65  nity used when e
1ae90 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f  Dest==SRT_Set */
1aea0 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20  .  int iSDParm; 
1aeb0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72          /* A par
1aec0 61 6d 65 74 65 72 20 75 73 65 64 20 62 79 20 74  ameter used by t
1aed0 68 65 20 65 44 65 73 74 20 64 69 73 70 6f 73 61  he eDest disposa
1aee0 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e  l method */.  in
1aef0 74 20 69 53 64 73 74 3b 20 20 20 20 20 20 20 20  t iSdst;        
1af00 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73     /* Base regis
1af10 74 65 72 20 77 68 65 72 65 20 72 65 73 75 6c 74  ter where result
1af20 73 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f  s are written */
1af30 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20  .  int nSdst;   
1af40 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1af50 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61  r of registers a
1af60 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 45 78  llocated */.  Ex
1af70 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79  prList *pOrderBy
1af80 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e  ;  /* Key column
1af90 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65 20  s for SRT_Queue 
1afa0 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65 75  and SRT_DistQueu
1afb0 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44  e */.};../*.** D
1afc0 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72  uring code gener
1afd0 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65  ation of stateme
1afe0 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65  nts that do inse
1aff0 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43  rts into AUTOINC
1b000 52 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62 6c 65  REMENT .** table
1b010 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  s, the following
1b020 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
1b030 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
1b040 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e  Table.u.autoInc.
1b050 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20  p.** pointer of 
1b060 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65  each autoincreme
1b070 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f  nt table to reco
1b080 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66  rd some side inf
1b090 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a  ormation that.**
1b0a0 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
1b0b0 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68  tor needs.  We h
1b0c0 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d  ave to keep per-
1b0d0 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d  table autoincrem
1b0e0 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ent.** informati
1b0f0 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72  on in case inser
1b100 74 73 20 61 72 65 20 64 6f 77 6e 20 77 69 74 68  ts are down with
1b110 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72  in triggers.  Tr
1b120 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a  iggers do not.**
1b130 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69   normally coordi
1b140 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76  nate their activ
1b150 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f  ities, but we do
1b160 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e   need to coordin
1b170 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69  ate the.** loadi
1b180 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66  ng and saving of
1b190 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69   autoincrement i
1b1a0 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
1b1b0 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66  truct AutoincInf
1b1c0 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  o {.  AutoincInf
1b1d0 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e  o *pNext;   /* N
1b1e0 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69  ext info block i
1b1f0 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d  n a list of them
1b200 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20   all */.  Table 
1b210 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
1b220 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e  /* Table this in
1b230 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20  fo block refers 
1b240 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b  to */.  int iDb;
1b250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b260 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65   Index in sqlite
1b270 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62  3.aDb[] of datab
1b280 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62  ase holding pTab
1b290 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72   */.  int regCtr
1b2a0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ;           /* M
1b2b0 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68  emory register h
1b2c0 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64  olding the rowid
1b2d0 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a   counter */.};..
1b2e0 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68  /*.** Size of th
1b2f0 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a  e column cache.*
1b300 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1b310 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65  _N_COLCACHE.# de
1b320 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f  fine SQLITE_N_CO
1b330 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66  LCACHE 10.#endif
1b340 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74  ../*.** At least
1b350 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66   one instance of
1b360 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1b370 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61  tructure is crea
1b380 74 65 64 20 66 6f 72 20 65 61 63 68 20 0a 2a 2a  ted for each .**
1b390 20 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61   trigger that ma
1b3a0 79 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65  y be fired while
1b3b0 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45   parsing an INSE
1b3c0 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45  RT, UPDATE or DE
1b3d0 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  LETE.** statemen
1b3e0 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65  t. All such obje
1b3f0 63 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  cts are stored i
1b400 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  n the linked lis
1b410 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50  t headed at.** P
1b420 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1b430 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63   and deleted onc
1b440 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70  e statement comp
1b450 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e  ilation has been
1b460 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a  .** completed..*
1b470 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d  *.** A Vdbe sub-
1b480 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70  program that imp
1b490 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79  lements the body
1b4a0 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65   and WHEN clause
1b4b0 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54   of trigger.** T
1b4c0 72 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67  riggerPrg.pTrigg
1b4d0 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64  er, assuming a d
1b4e0 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1b4f0 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20  CT clause of.** 
1b500 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e  TriggerPrg.orcon
1b510 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  f, is stored in 
1b520 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70  the TriggerPrg.p
1b530 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65  Program variable
1b540 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70  ..** The Parse.p
1b550 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
1b560 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74  never contains t
1b570 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20  wo entries with 
1b580 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75  the same.** valu
1b590 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69  es for both pTri
1b5a0 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e  gger and orconf.
1b5b0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67  .**.** The Trigg
1b5c0 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30  erPrg.aColmask[0
1b5d0 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  ] variable is se
1b5e0 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f  t to a mask of o
1b5f0 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20  ld.* columns.** 
1b600 61 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74  accessed (or set
1b610 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65   to 0 for trigge
1b620 72 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65  rs fired as a re
1b630 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 20 0a  sult of INSERT .
1b640 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20  ** statements). 
1b650 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54  Similarly, the T
1b660 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61  riggerPrg.aColma
1b670 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69  sk[1] variable i
1b680 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61  s set to.** a ma
1b690 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
1b6a0 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20  mns used by the 
1b6b0 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75  program..*/.stru
1b6c0 63 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a  ct TriggerPrg {.
1b6d0 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
1b6e0 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69  ger;      /* Tri
1b6f0 67 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61  gger this progra
1b700 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d  m was coded from
1b710 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67   */.  TriggerPrg
1b720 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a   *pNext;      /*
1b730 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50   Next entry in P
1b740 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1b750 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72   list */.  SubPr
1b760 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b  ogram *pProgram;
1b770 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d     /* Program im
1b780 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67  plementing pTrig
1b790 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20  ger/orconf */.  
1b7a0 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20  int orconf;     
1b7b0 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1b7c0 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70  lt ON CONFLICT p
1b7d0 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61  olicy */.  u32 a
1b7e0 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20  Colmask[2];     
1b7f0 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f     /* Masks of o
1b800 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75  ld.*, new.* colu
1b810 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a  mns accessed */.
1b820 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44  };../*.** The yD
1b830 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66  bMask datatype f
1b840 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f  or the bitmask o
1b850 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  f all attached d
1b860 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66  atabases..*/.#if
1b870 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41   SQLITE_MAX_ATTA
1b880 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65  CHED>30.  typede
1b890 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  f unsigned char 
1b8a0 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f  yDbMask[(SQLITE_
1b8b0 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f  MAX_ATTACHED+9)/
1b8c0 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  8];.# define DbM
1b8d0 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20  askTest(M,I)    
1b8e0 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c  (((M)[(I)/8]&(1<
1b8f0 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23  <((I)&7)))!=0).#
1b900 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65   define DbMaskZe
1b910 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65  ro(M)      memse
1b920 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d  t((M),0,sizeof(M
1b930 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
1b940 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28  skSet(M,I)     (
1b950 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28  M)[(I)/8]|=(1<<(
1b960 28 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65  (I)&7)).# define
1b970 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d   DbMaskAllZero(M
1b980 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73  )   sqlite3DbMas
1b990 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65  kAllZero(M).# de
1b9a0 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65  fine DbMaskNonZe
1b9b0 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33  ro(M)   (sqlite3
1b9c0 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1b9d0 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70  ==0).#else.  typ
1b9e0 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e  edef unsigned in
1b9f0 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66  t yDbMask;.# def
1ba00 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d  ine DbMaskTest(M
1ba10 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28 28 28  ,I)    (((M)&(((
1ba20 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29  yDbMask)1)<<(I))
1ba30 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44  )!=0).# define D
1ba40 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20  bMaskZero(M)    
1ba50 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65    (M)=0.# define
1ba60 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20   DbMaskSet(M,I) 
1ba70 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d      (M)|=(((yDbM
1ba80 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64  ask)1)<<(I)).# d
1ba90 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a  efine DbMaskAllZ
1baa0 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a  ero(M)   (M)==0.
1bab0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e  # define DbMaskN
1bac0 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21  onZero(M)   (M)!
1bad0 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  =0.#endif../*.**
1bae0 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63   An SQL parser c
1baf0 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20  ontext.  A copy 
1bb00 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
1bb10 65 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f  e is passed thro
1bb20 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65  ugh.** the parse
1bb30 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20  r and down into 
1bb40 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61  all the parser a
1bb50 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e  ction routine in
1bb60 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72   order to.** car
1bb70 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d  ry around inform
1bb80 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c  ation that is gl
1bb90 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69  obal to the enti
1bba0 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20  re parse..**.** 
1bbb0 54 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73  The structure is
1bbc0 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77   divided into tw
1bbd0 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74  o parts.  When t
1bbe0 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f  he parser and co
1bbf0 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63  de.** generate c
1bc00 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72  all themselves r
1bc10 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20  ecursively, the 
1bc20 66 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68  first part of th
1bc30 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69  e structure.** i
1bc40 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74  s constant but t
1bc50 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69  he second part i
1bc60 73 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62  s reset at the b
1bc70 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64  eginning and end
1bc80 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75   of.** each recu
1bc90 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rsion..**.** The
1bca0 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20   nTableLock and 
1bcb0 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61  aTableLock varia
1bcc0 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73  bles are only us
1bcd0 65 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64  ed if the shared
1bce0 2d 63 61 63 68 65 20 0a 2a 2a 20 66 65 61 74 75  -cache .** featu
1bcf0 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69  re is enabled (i
1bd00 66 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e  f sqlite3Tsd()->
1bd10 75 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73  useSharedData is
1bd20 20 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65   true). They are
1bd30 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72  .** used to stor
1bd40 65 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62  e the set of tab
1bd50 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65  le-locks require
1bd60 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65  d by the stateme
1bd70 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70  nt being.** comp
1bd80 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73  iled. Function s
1bd90 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
1bda0 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64  ) is used to add
1bdb0 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a   entries to the.
1bdc0 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75  ** list..*/.stru
1bdd0 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c  ct Parse {.  sql
1bde0 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
1bdf0 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61    /* The main da
1be00 74 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65  tabase structure
1be10 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72   */.  char *zErr
1be20 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e  Msg;       /* An
1be30 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a   error message *
1be40 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b  /.  Vdbe *pVdbe;
1be50 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65           /* An e
1be60 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74  ngine for execut
1be70 69 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74  ing database byt
1be80 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72  ecode */.  int r
1be90 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
1bea0 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66  /* Return code f
1beb0 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f  rom execution */
1bec0 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65  .  u8 colNamesSe
1bed0 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20  t;      /* TRUE 
1bee0 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e  after OP_ColumnN
1bef0 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73  ame has been iss
1bf00 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a  ued to pVdbe */.
1bf10 20 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61    u8 checkSchema
1bf20 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73  ;      /* Causes
1bf30 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63   schema cookie c
1bf40 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72  heck after an er
1bf50 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74  ror */.  u8 nest
1bf60 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
1bf70 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
1bf80 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70  d calls to the p
1bf90 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72  arser/code gener
1bfa0 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65  ator */.  u8 nTe
1bfb0 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f  mpReg;         /
1bfc0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70  * Number of temp
1bfd0 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20  orary registers 
1bfe0 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f  in aTempReg[] */
1bff0 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69  .  u8 isMultiWri
1c000 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20  te;     /* True 
1c010 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  if statement may
1c020 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d   modify/insert m
1c030 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
1c040 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20    u8 mayAbort;  
1c050 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
1c060 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
1c070 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65  throw an ABORT e
1c080 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  xception */.  u8
1c090 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20   hasCompound;   
1c0a0 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e     /* Need to in
1c0b0 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70  voke convertComp
1c0c0 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
1c0d0 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f  uery() */.  u8 o
1c0e0 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20  kConstFactor;   
1c0f0 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72   /* OK to factor
1c100 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a   out constants *
1c110 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67  /.  int aTempReg
1c120 5b 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64  [8];     /* Hold
1c130 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d  ing area for tem
1c140 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73  porary registers
1c150 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65   */.  int nRange
1c160 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69  Reg;       /* Si
1c170 7a 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72  ze of the tempor
1c180 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f  ary register blo
1c190 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e  ck */.  int iRan
1c1a0 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20  geReg;       /* 
1c1b0 46 69 72 73 74 20 72 65 67 69 73 74 65 72 20 69  First register i
1c1c0 6e 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  n temporary regi
1c1d0 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20  ster block */.  
1c1e0 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
1c1f0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1c200 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f  f errors seen */
1c210 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20  .  int nTab;    
1c220 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1c230 72 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20  r of previously 
1c240 61 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63  allocated VDBE c
1c250 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20  ursors */.  int 
1c260 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  nMem;           
1c270 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65   /* Number of me
1c280 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20  mory cells used 
1c290 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1c2a0 6e 53 65 74 3b 20 20 20 20 20 20 20 20 20 20 20  nSet;           
1c2b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 65   /* Number of se
1c2c0 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ts used so far *
1c2d0 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20 20  /.  int nOnce;  
1c2e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1c2f0 65 72 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69 6e  er of OP_Once in
1c300 73 74 72 75 63 74 69 6f 6e 73 20 73 6f 20 66 61  structions so fa
1c310 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c  r */.  int nOpAl
1c320 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  loc;        /* N
1c330 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61  umber of slots a
1c340 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62  llocated for Vdb
1c350 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  e.aOp[] */.  int
1c360 20 69 46 69 78 65 64 4f 70 3b 20 20 20 20 20 20   iFixedOp;      
1c370 20 20 2f 2a 20 4e 65 76 65 72 20 62 61 63 6b 20    /* Never back 
1c380 6f 75 74 20 6f 70 63 6f 64 65 73 20 69 46 69 78  out opcodes iFix
1c390 65 64 4f 70 2d 31 20 6f 72 20 65 61 72 6c 69 65  edOp-1 or earlie
1c3a0 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61 73  r */.  int ckBas
1c3b0 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42  e;          /* B
1c3c0 61 73 65 20 72 65 67 69 73 74 65 72 20 6f 66 20  ase register of 
1c3d0 64 61 74 61 20 64 75 72 69 6e 67 20 63 68 65 63  data during chec
1c3e0 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  k constraints */
1c3f0 0a 20 20 69 6e 74 20 69 53 65 6c 66 54 61 62 3b  .  int iSelfTab;
1c400 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
1c410 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 77 68 6f   of an index who
1c420 73 65 20 65 78 70 72 73 20 61 72 65 20 62 65 69  se exprs are bei
1c430 6e 67 20 63 6f 64 65 64 20 2a 2f 0a 20 20 69 6e  ng coded */.  in
1c440 74 20 69 43 61 63 68 65 4c 65 76 65 6c 3b 20 20  t iCacheLevel;  
1c450 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76     /* ColCache v
1c460 61 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c 43 61  alid when aColCa
1c470 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43  che[].iLevel<=iC
1c480 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69  acheLevel */.  i
1c490 6e 74 20 69 43 61 63 68 65 43 6e 74 3b 20 20 20  nt iCacheCnt;   
1c4a0 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75      /* Counter u
1c4b0 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20  sed to generate 
1c4c0 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20  aColCache[].lru 
1c4d0 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20  values */.  int 
1c4e0 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20  nLabel;         
1c4f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61   /* Number of la
1c500 62 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20 69  bels used */.  i
1c510 6e 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20  nt *aLabel;     
1c520 20 20 20 20 2f 2a 20 53 70 61 63 65 20 74 6f 20      /* Space to 
1c530 68 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c 73 20  hold the labels 
1c540 2a 2f 0a 20 20 73 74 72 75 63 74 20 79 43 6f 6c  */.  struct yCol
1c550 43 61 63 68 65 20 7b 0a 20 20 20 20 69 6e 74 20  Cache {.    int 
1c560 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
1c570 20 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f    /* Table curso
1c580 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  r number */.    
1c590 69 31 36 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  i16 iColumn;    
1c5a0 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63        /* Table c
1c5b0 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a  olumn number */.
1c5c0 20 20 20 20 75 38 20 74 65 6d 70 52 65 67 3b 20      u8 tempReg; 
1c5d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 52 65            /* iRe
1c5e0 67 20 69 73 20 61 20 74 65 6d 70 20 72 65 67 69  g is a temp regi
1c5f0 73 74 65 72 20 74 68 61 74 20 6e 65 65 64 73 20  ster that needs 
1c600 74 6f 20 62 65 20 66 72 65 65 64 20 2a 2f 0a 20  to be freed */. 
1c610 20 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20     int iLevel;  
1c620 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 73 74           /* Nest
1c630 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20  ing level */.   
1c640 20 69 6e 74 20 69 52 65 67 3b 20 20 20 20 20 20   int iReg;      
1c650 20 20 20 20 20 20 20 2f 2a 20 52 65 67 20 77 69         /* Reg wi
1c660 74 68 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  th value of this
1c670 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73   column. 0 means
1c680 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e   none. */.    in
1c690 74 20 6c 72 75 3b 20 20 20 20 20 20 20 20 20 20  t lru;          
1c6a0 20 20 20 20 2f 2a 20 4c 65 61 73 74 20 72 65 63      /* Least rec
1c6b0 65 6e 74 6c 79 20 75 73 65 64 20 65 6e 74 72 79  ently used entry
1c6c0 20 68 61 73 20 74 68 65 20 73 6d 61 6c 6c 65 73   has the smalles
1c6d0 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61  t value */.  } a
1c6e0 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54 45 5f  ColCache[SQLITE_
1c6f0 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a  N_COLCACHE];  /*
1c700 20 4f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f   One for each co
1c710 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e 74 72 79  lumn cache entry
1c720 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1c730 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f  pConstExpr;/* Co
1c740 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
1c750 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f  ns */.  Token co
1c760 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20  nstraintName;/* 
1c770 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73  Name of the cons
1c780 74 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79  traint currently
1c790 20 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f   being parsed */
1c7a0 0a 20 20 79 44 62 4d 61 73 6b 20 77 72 69 74 65  .  yDbMask write
1c7b0 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74  Mask;   /* Start
1c7c0 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61 63   a write transac
1c7d0 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64 61  tion on these da
1c7e0 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 79 44 62  tabases */.  yDb
1c7f0 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b  Mask cookieMask;
1c800 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20    /* Bitmask of 
1c810 73 63 68 65 6d 61 20 76 65 72 69 66 69 65 64 20  schema verified 
1c820 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 69  databases */.  i
1c830 6e 74 20 63 6f 6f 6b 69 65 56 61 6c 75 65 5b 53  nt cookieValue[S
1c840 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
1c850 45 44 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c 75 65  ED+2];  /* Value
1c860 73 20 6f 66 20 63 6f 6f 6b 69 65 73 20 74 6f 20  s of cookies to 
1c870 76 65 72 69 66 79 20 2a 2f 0a 20 20 69 6e 74 20  verify */.  int 
1c880 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20 20  regRowid;       
1c890 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
1c8a0 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43 52  ding rowid of CR
1c8b0 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72 79  EATE TABLE entry
1c8c0 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f   */.  int regRoo
1c8d0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  t;         /* Re
1c8e0 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72  gister holding r
1c8f0 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
1c900 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73 20  for new objects 
1c910 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72 67  */.  int nMaxArg
1c920 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78  ;         /* Max
1c930 20 61 72 67 73 20 70 61 73 73 65 64 20 74 6f 20   args passed to 
1c940 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 62 79  user function by
1c950 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a   sub-program */.
1c960 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f  #if SELECTTRACE_
1c970 45 4e 41 42 4c 45 44 0a 20 20 69 6e 74 20 6e 53  ENABLED.  int nS
1c980 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 2f  elect;         /
1c990 2a 20 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c 45  * Number of SELE
1c9a0 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 73 65  CT statements se
1c9b0 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 6c  en */.  int nSel
1c9c0 65 63 74 49 6e 64 65 6e 74 3b 20 20 20 2f 2a 20  ectIndent;   /* 
1c9d0 48 6f 77 20 66 61 72 20 74 6f 20 69 6e 64 65 6e  How far to inden
1c9e0 74 20 53 45 4c 45 43 54 54 52 41 43 45 28 29 20  t SELECTTRACE() 
1c9f0 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66  output */.#endif
1ca00 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1ca10 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
1ca20 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f  E.  int nTableLo
1ca30 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ck;        /* Nu
1ca40 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e  mber of locks in
1ca50 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20   aTableLock */. 
1ca60 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62   TableLock *aTab
1ca70 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69  leLock; /* Requi
1ca80 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20  red table locks 
1ca90 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65  for shared-cache
1caa0 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a   mode */.#endif.
1cab0 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70    AutoincInfo *p
1cac0 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d  Ainc;  /* Inform
1cad0 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f  ation about AUTO
1cae0 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65  INCREMENT counte
1caf0 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f  rs */..  /* Info
1cb00 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 77 68 69  rmation used whi
1cb10 6c 65 20 63 6f 64 69 6e 67 20 74 72 69 67 67 65  le coding trigge
1cb20 72 20 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20  r programs. */. 
1cb30 20 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65   Parse *pTopleve
1cb40 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73  l;    /* Parse s
1cb50 74 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69  tructure for mai
1cb60 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55  n program (or NU
1cb70 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  LL) */.  Table *
1cb80 70 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a  pTriggerTab;  /*
1cb90 20 54 61 62 6c 65 20 74 72 69 67 67 65 72 73 20   Table triggers 
1cba0 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20  are being coded 
1cbb0 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64  for */.  int add
1cbc0 72 43 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a  rCrTab;       /*
1cbd0 20 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43   Address of OP_C
1cbe0 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64  reateTable opcod
1cbf0 65 20 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c  e on CREATE TABL
1cc00 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65 72  E */.  u32 nQuer
1cc10 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45  yLoop;      /* E
1cc20 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65  st number of ite
1cc30 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71 75 65  rations of a que
1cc40 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20  ry (10*log2(N)) 
1cc50 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b  */.  u32 oldmask
1cc60 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
1cc70 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d  k of old.* colum
1cc80 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f  ns referenced */
1cc90 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20  .  u32 newmask; 
1cca0 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
1ccb0 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73  of new.* columns
1ccc0 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20   referenced */. 
1ccd0 20 75 38 20 65 54 72 69 67 67 65 72 4f 70 3b 20   u8 eTriggerOp; 
1cce0 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41        /* TK_UPDA
1ccf0 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72  TE, TK_INSERT or
1cd00 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20   TK_DELETE */.  
1cd10 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20  u8 eOrconf;     
1cd20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
1cd30 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69  ON CONFLICT poli
1cd40 63 79 20 66 6f 72 20 74 72 69 67 67 65 72 20 73  cy for trigger s
1cd50 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64 69 73  teps */.  u8 dis
1cd60 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20 20 2f  ableTriggers;  /
1cd70 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61 62 6c  * True to disabl
1cd80 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20  e triggers */.. 
1cd90 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   /**************
1cda0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1cdb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1cdc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1cdd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20  **********.  ** 
1cde0 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61 6e  Above is constan
1cdf0 74 20 62 65 74 77 65 65 6e 20 72 65 63 75 72 73  t between recurs
1ce00 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73 20  ions.  Below is 
1ce10 72 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e 64  reset before and
1ce20 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63 68   after.  ** each
1ce30 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54 68 65   recursion.  The
1ce40 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77 65 65   boundary betwee
1ce50 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65 67 69  n these two regi
1ce60 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ons is determine
1ce70 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66  d.  ** using off
1ce80 73 65 74 6f 66 28 50 61 72 73 65 2c 6e 56 61 72  setof(Parse,nVar
1ce90 29 20 73 6f 20 74 68 65 20 6e 56 61 72 20 66 69  ) so the nVar fi
1cea0 65 6c 64 20 6d 75 73 74 20 62 65 20 74 68 65 20  eld must be the 
1ceb0 66 69 72 73 74 20 66 69 65 6c 64 0a 20 20 2a 2a  first field.  **
1cec0 20 69 6e 20 74 68 65 20 72 65 63 75 72 73 69 76   in the recursiv
1ced0 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a  e region..  ****
1cee0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1cef0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1cf00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1cf10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1cf20 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e 74 20 6e 56 61  ****/..  int nVa
1cf30 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
1cf40 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1cf50 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73 65  '?' variables se
1cf60 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f  en in the SQL so
1cf70 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 7a   far */.  int nz
1cf80 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Var;            
1cf90 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1cfa0 20 61 76 61 69 6c 61 62 6c 65 20 73 6c 6f 74 73   available slots
1cfb0 20 69 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20   in azVar[] */. 
1cfc0 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64 65 72   u8 iPkSortOrder
1cfd0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 53  ;          /* AS
1cfe0 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20 49 4e  C or DESC for IN
1cff0 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
1d000 59 20 2a 2f 0a 20 20 75 38 20 62 46 72 65 65 57  Y */.  u8 bFreeW
1d010 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  ith;            
1d020 20 2f 2a 20 54 72 75 65 20 69 66 20 70 57 69 74   /* True if pWit
1d030 68 20 73 68 6f 75 6c 64 20 62 65 20 66 72 65 65  h should be free
1d040 64 20 77 69 74 68 20 70 61 72 73 65 72 20 2a 2f  d with parser */
1d050 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20  .  u8 explain;  
1d060 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d070 54 72 75 65 20 69 66 20 74 68 65 20 45 58 50 4c  True if the EXPL
1d080 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e  AIN flag is foun
1d090 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a  d on the query *
1d0a0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1d0b0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
1d0c0 4c 45 0a 20 20 75 38 20 64 65 63 6c 61 72 65 56  LE.  u8 declareV
1d0d0 74 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f  tab;           /
1d0e0 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69 64 65  * True if inside
1d0f0 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
1d100 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74  _vtab() */.  int
1d110 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20   nVtabLock;     
1d120 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1d130 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c   of virtual tabl
1d140 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65  es to lock */.#e
1d150 6e 64 69 66 0a 20 20 69 6e 74 20 6e 41 6c 69 61  ndif.  int nAlia
1d160 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
1d170 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 6c   /* Number of al
1d180 69 61 73 65 64 20 72 65 73 75 6c 74 20 73 65 74  iased result set
1d190 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e   columns */.  in
1d1a0 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20  t nHeight;      
1d1b0 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65          /* Expre
1d1c0 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67 68  ssion tree heigh
1d1d0 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75 62  t of current sub
1d1e0 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64  -select */.#ifnd
1d1f0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45  ef SQLITE_OMIT_E
1d200 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69 53 65  XPLAIN.  int iSe
1d210 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 20  lectId;         
1d220 20 20 20 2f 2a 20 49 44 20 6f 66 20 63 75 72 72     /* ID of curr
1d230 65 6e 74 20 73 65 6c 65 63 74 20 66 6f 72 20 45  ent select for E
1d240 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f  XPLAIN output */
1d250 0a 20 20 69 6e 74 20 69 4e 65 78 74 53 65 6c 65  .  int iNextSele
1d260 63 74 49 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  ctId;        /* 
1d270 4e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73  Next available s
1d280 65 6c 65 63 74 20 49 44 20 66 6f 72 20 45 58 50  elect ID for EXP
1d290 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23  LAIN output */.#
1d2a0 65 6e 64 69 66 0a 20 20 63 68 61 72 20 2a 2a 61  endif.  char **a
1d2b0 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20  zVar;           
1d2c0 20 20 2f 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f    /* Pointers to
1d2d0 20 6e 61 6d 65 73 20 6f 66 20 70 61 72 61 6d 65   names of parame
1d2e0 74 65 72 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a  ters */.  Vdbe *
1d2f0 70 52 65 70 72 65 70 61 72 65 3b 20 20 20 20 20  pReprepare;     
1d300 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20      /* VM being 
1d310 72 65 70 72 65 70 61 72 65 64 20 28 73 71 6c 69  reprepared (sqli
1d320 74 65 33 52 65 70 72 65 70 61 72 65 28 29 29 20  te3Reprepare()) 
1d330 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
1d340 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20 20 20 2f  *zTail;        /
1d350 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70  * All SQL text p
1d360 61 73 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d  ast the last sem
1d370 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f  icolon parsed */
1d380 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61  .  Table *pNewTa
1d390 62 6c 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ble;         /* 
1d3a0 41 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6f  A table being co
1d3b0 6e 73 74 72 75 63 74 65 64 20 62 79 20 43 52 45  nstructed by CRE
1d3c0 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54  ATE TABLE */.  T
1d3d0 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69 67  rigger *pNewTrig
1d3e0 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69 67  ger;     /* Trig
1d3f0 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74 72  ger under constr
1d400 75 63 74 20 62 79 20 61 20 43 52 45 41 54 45 20  uct by a CREATE 
1d410 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e  TRIGGER */.  con
1d420 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f  st char *zAuthCo
1d430 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36 74  ntext; /* The 6t
1d440 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 64  h parameter to d
1d450 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61 63  b->xAuth callbac
1d460 6b 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e  ks */.  Token sN
1d470 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20  ameToken;       
1d480 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20    /* Token with 
1d490 75 6e 71 75 61 6c 69 66 69 65 64 20 73 63 68 65  unqualified sche
1d4a0 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a  ma object name *
1d4b0 2f 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54  /.  Token sLastT
1d4c0 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  oken;         /*
1d4d0 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20   The last token 
1d4e0 70 61 72 73 65 64 20 2a 2f 0a 23 69 66 6e 64 65  parsed */.#ifnde
1d4f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
1d500 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b  RTUALTABLE.  Tok
1d510 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20 20  en sArg;        
1d520 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65         /* Comple
1d530 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f 64  te text of a mod
1d540 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ule argument */.
1d550 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61 62    Table **apVtab
1d560 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50  Lock;       /* P
1d570 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75 61  ointer to virtua
1d580 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e 67  l tables needing
1d590 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64   locking */.#end
1d5a0 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d  if.  Table *pZom
1d5b0 62 69 65 54 61 62 3b 20 20 20 20 20 20 20 20 2f  bieTab;        /
1d5c0 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65 20  * List of Table 
1d5d0 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65 74  objects to delet
1d5e0 65 20 61 66 74 65 72 20 63 6f 64 65 20 67 65 6e  e after code gen
1d5f0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67   */.  TriggerPrg
1d600 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20 20   *pTriggerPrg;  
1d610 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f  /* Linked list o
1d620 66 20 63 6f 64 65 64 20 74 72 69 67 67 65 72 73  f coded triggers
1d630 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74   */.  With *pWit
1d640 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
1d650 2f 2a 20 43 75 72 72 65 6e 74 20 57 49 54 48 20  /* Current WITH 
1d660 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20  clause, or NULL 
1d670 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  */.};../*.** Ret
1d680 75 72 6e 20 74 72 75 65 20 69 66 20 63 75 72 72  urn true if curr
1d690 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20  ently inside an 
1d6a0 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
1d6b0 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a  vtab() call..*/.
1d6c0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
1d6d0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
1d6e0 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43    #define IN_DEC
1d6f0 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73  LARE_VTAB 0.#els
1d700 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44  e.  #define IN_D
1d710 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61  ECLARE_VTAB (pPa
1d720 72 73 65 2d 3e 64 65 63 6c 61 72 65 56 74 61 62  rse->declareVtab
1d730 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
1d740 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
1d750 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
1d760 75 63 74 75 72 65 20 63 61 6e 20 62 65 20 64 65  ucture can be de
1d770 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63  clared on a stac
1d780 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f  k and used.** to
1d790 20 73 61 76 65 20 74 68 65 20 50 61 72 73 65 2e   save the Parse.
1d7a0 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c  zAuthContext val
1d7b0 75 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ue so that it ca
1d7c0 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61  n be restored la
1d7d0 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ter..*/.struct A
1d7e0 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63  uthContext {.  c
1d7f0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68  onst char *zAuth
1d800 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75  Context;   /* Pu
1d810 74 20 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41  t saved Parse.zA
1d820 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20  uthContext here 
1d830 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72  */.  Parse *pPar
1d840 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  se;             
1d850 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20 73 74   /* The Parse st
1d860 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f  ructure */.};../
1d870 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c  *.** Bitfield fl
1d880 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65  ags for P5 value
1d890 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f   in various opco
1d8a0 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  des..*/.#define 
1d8b0 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20  OPFLAG_NCHANGE  
1d8c0 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
1d8d0 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62  Set to update db
1d8e0 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 23 64 65  ->nChange */.#de
1d8f0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48 45  fine OPFLAG_EPHE
1d900 4d 20 20 20 20 20 20 20 20 20 30 78 30 31 20 20  M         0x01  
1d910 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20    /* OP_Column: 
1d920 45 70 68 65 6d 65 72 61 6c 20 6f 75 74 70 75 74  Ephemeral output
1d930 20 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e   is ok */.#defin
1d940 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  e OPFLAG_LASTROW
1d950 49 44 20 20 20 20 20 30 78 30 32 20 20 20 20 2f  ID     0x02    /
1d960 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20  * Set to update 
1d970 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f  db->lastRowid */
1d980 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1d990 49 53 55 50 44 41 54 45 20 20 20 20 20 20 30 78  ISUPDATE      0x
1d9a0 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50  04    /* This OP
1d9b0 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71  _Insert is an sq
1d9c0 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  l UPDATE */.#def
1d9d0 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e  ine OPFLAG_APPEN
1d9e0 44 20 20 20 20 20 20 20 20 30 78 30 38 20 20 20  D        0x08   
1d9f0 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65   /* This is like
1da00 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65  ly to be an appe
1da10 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  nd */.#define OP
1da20 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
1da30 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72  LT 0x10    /* Tr
1da40 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65  y to avoid a see
1da50 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74  k in BtreeInsert
1da60 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  () */.#define OP
1da70 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20  FLAG_LENGTHARG  
1da80 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50     0x40    /* OP
1da90 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65  _Column only use
1daa0 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a  d for length() *
1dab0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1dac0 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 20 30  _TYPEOFARG     0
1dad0 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x80    /* OP_Col
1dae0 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f  umn only used fo
1daf0 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64  r typeof() */.#d
1db00 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c  efine OPFLAG_BUL
1db10 4b 43 53 52 20 20 20 20 20 20 20 30 78 30 31 20  KCSR       0x01 
1db20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20     /* OP_Open** 
1db30 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c  used to open bul
1db40 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66  k cursor */.#def
1db50 69 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  ine OPFLAG_SEEKE
1db60 51 20 20 20 20 20 20 20 20 30 78 30 32 20 20 20  Q        0x02   
1db70 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75   /* OP_Open** cu
1db80 72 73 6f 72 20 75 73 65 73 20 45 51 20 73 65 65  rsor uses EQ see
1db90 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  k only */.#defin
1dba0 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47  e OPFLAG_P2ISREG
1dbb0 20 20 20 20 20 20 20 30 78 30 34 20 20 20 20 2f         0x04    /
1dbc0 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a  * P2 to OP_Open*
1dbd0 2a 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  * is a register 
1dbe0 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e  number */.#defin
1dbf0 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
1dc00 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
1dc10 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73  * OP_Compare: us
1dc20 65 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f  e the permutatio
1dc30 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68  n */../*. * Each
1dc40 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e 74   trigger present
1dc50 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
1dc60 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65   schema is store
1dc70 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  d as an instance
1dc80 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72   of. * struct Tr
1dc90 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f  igger. . *. * Po
1dca0 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e  inters to instan
1dcb0 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72  ces of struct Tr
1dcc0 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64  igger are stored
1dcd0 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a   in two ways.. *
1dce0 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67   1. In the "trig
1dcf0 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65  Hash" hash table
1dd00 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71   (part of the sq
1dd10 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72  lite3* that repr
1dd20 65 73 65 6e 74 73 20 74 68 65 20 0a 20 2a 20 20  esents the . *  
1dd30 20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69    database). Thi
1dd40 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72  s allows Trigger
1dd50 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62   structures to b
1dd60 65 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e  e retrieved by n
1dd70 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74  ame.. * 2. All t
1dd80 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74  riggers associat
1dd90 65 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  ed with a single
1dda0 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69   table form a li
1ddb0 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67  nked list, using
1ddc0 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74   the. *    pNext
1ddd0 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63   member of struc
1dde0 74 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69  t Trigger. A poi
1ddf0 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73  nter to the firs
1de00 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  t element of the
1de10 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69  . *    linked li
1de20 73 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  st is stored as 
1de30 74 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d  the "pTrigger" m
1de40 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73  ember of the ass
1de50 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74  ociated. *    st
1de60 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20  ruct Table.. *. 
1de70 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74  * The "step_list
1de80 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20  " member points 
1de90 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
1dea0 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64  ment of a linked
1deb0 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e   list. * contain
1dec0 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74  ing the SQL stat
1ded0 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64  ements specified
1dee0 20 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20   as the trigger 
1def0 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72  program.. */.str
1df00 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20  uct Trigger {.  
1df10 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
1df20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
1df30 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67  ame of the trigg
1df40 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20  er              
1df50 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63            */.  c
1df60 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20  har *table;     
1df70 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61         /* The ta
1df80 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77  ble or view to w
1df90 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
1dfa0 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38   applies */.  u8
1dfb0 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
1dfc0 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
1dfd0 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50  TK_DELETE, TK_UP
1dfe0 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20  DATE, TK_INSERT 
1dff0 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20          */.  u8 
1e000 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20  tr_tm;          
1e010 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
1e020 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54  RIGGER_BEFORE, T
1e030 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a  RIGGER_AFTER */.
1e040 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20    Expr *pWhen;  
1e050 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1e060 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20   WHEN clause of 
1e070 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28  the expression (
1e080 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a  may be NULL) */.
1e090 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d    IdList *pColum
1e0a0 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20  ns;       /* If 
1e0b0 74 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54  this is an UPDAT
1e0c0 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73  E OF <column-lis
1e0d0 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20  t> trigger,.    
1e0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0f0 20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f           the <co
1e100 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74  lumn-list> is st
1e110 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53  ored here */.  S
1e120 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
1e130 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61         /* Schema
1e140 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
1e150 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68  trigger */.  Sch
1e160 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b  ema *pTabSchema;
1e170 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
1e180 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61  ontaining the ta
1e190 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ble */.  Trigger
1e1a0 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b  Step *step_list;
1e1b0 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66   /* Link list of
1e1c0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
1e1d0 20 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20   steps          
1e1e0 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20     */.  Trigger 
1e1f0 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
1e200 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20  /* Next trigger 
1e210 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1e220 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a  the table */.};.
1e230 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72  ./*.** A trigger
1e240 20 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46   is either a BEF
1e250 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20  ORE or an AFTER 
1e260 74 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f  trigger.  The fo
1e270 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74  llowing constant
1e280 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77  s.** determine w
1e290 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20  hich. .**.** If 
1e2a0 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70  there are multip
1e2b0 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75  le triggers, you
1e2c0 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42   might of some B
1e2d0 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41  EFORE and some A
1e2e0 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74  FTER..** In that
1e2f0 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73   cases, the cons
1e300 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20  tants below can 
1e310 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72  be ORed together
1e320 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49  ..*/.#define TRI
1e330 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23  GGER_BEFORE  1.#
1e340 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41  define TRIGGER_A
1e350 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20  FTER   2../*. * 
1e360 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73  An instance of s
1e370 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
1e380 70 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  p is used to sto
1e390 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20  re a single SQL 
1e3a0 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61  statement. * tha
1e3b0 74 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61  t is a part of a
1e3c0 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
1e3d0 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63  . . *. * Instanc
1e3e0 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  es of struct Tri
1e3f0 67 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f  ggerStep are sto
1e400 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20  red in a singly 
1e410 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e  linked list (lin
1e420 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65  ked. * using the
1e430 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29   "pNext" member)
1e440 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74   referenced by t
1e450 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d  he "step_list" m
1e460 65 6d 62 65 72 20 6f 66 20 74 68 65 20 0a 20 2a  ember of the . *
1e470 20 61 73 73 6f 63 69 61 74 65 64 20 73 74 72 75   associated stru
1e480 63 74 20 54 72 69 67 67 65 72 20 69 6e 73 74 61  ct Trigger insta
1e490 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74 20 65  nce. The first e
1e4a0 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69  lement of the li
1e4b0 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20  nked list is. * 
1e4c0 74 68 65 20 66 69 72 73 74 20 73 74 65 70 20 6f  the first step o
1e4d0 66 20 74 68 65 20 74 72 69 67 67 65 72 2d 70 72  f the trigger-pr
1e4e0 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68  ogram.. * . * Th
1e4f0 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e  e "op" member in
1e500 64 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20  dicates whether 
1e510 74 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54  this is a "DELET
1e520 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55  E", "INSERT", "U
1e530 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45  PDATE" or. * "SE
1e540 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e  LECT" statement.
1e550 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   The meanings of
1e560 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65   the other membe
1e570 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  rs is determined
1e580 20 62 79 20 74 68 65 20 0a 20 2a 20 76 61 6c 75   by the . * valu
1e590 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c  e of "op" as fol
1e5a0 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20  lows:. *. * (op 
1e5b0 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a  == TK_INSERT). *
1e5c0 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74   orconf    -> st
1e5d0 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46  ores the ON CONF
1e5e0 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20  LICT algorithm. 
1e5f0 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49  * pSelect   -> I
1e600 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
1e610 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c  ERT INTO ... SEL
1e620 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e  ECT ... statemen
1e630 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20  t, then. *      
1e640 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f          this sto
1e650 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  res a pointer to
1e660 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
1e670 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65  ement. Otherwise
1e680 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72 67 65   NULL.. * zTarge
1e690 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20  t   -> Dequoted 
1e6a0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
1e6b0 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f  e to insert into
1e6c0 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d  .. * pExprList -
1e6d0 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
1e6e0 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
1e6f0 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65  VALUES ... state
1e700 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20  ment, then. *   
1e710 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
1e720 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74 6f  stores values to
1e730 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f 74   be inserted. Ot
1e740 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
1e750 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49 66   pIdList   -> If
1e760 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
1e770 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f  RT INTO ... (<co
1e780 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c  lumn-names>) VAL
1e790 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20 20 20 20  UES ... . *     
1e7a0 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65           stateme
1e7b0 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74  nt, then this st
1e7c0 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d  ores the column-
1e7d0 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20  names to be. *  
1e7e0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 65              inse
1e7f0 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a  rted into.. *. *
1e800 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54   (op == TK_DELET
1e810 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20  E). * zTarget   
1e820 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65  -> Dequoted name
1e830 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
1e840 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a   delete from.. *
1e850 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68   pWhere    -> Th
1e860 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f  e WHERE clause o
1e870 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61  f the DELETE sta
1e880 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73  tement if one is
1e890 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20   specified.. *  
1e8a0 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65              Othe
1e8b0 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a  rwise NULL.. * .
1e8c0 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44   * (op == TK_UPD
1e8d0 41 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20  ATE). * zTarget 
1e8e0 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61    -> Dequoted na
1e8f0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
1e900 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20 70 57  to update.. * pW
1e910 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57  here    -> The W
1e920 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74  HERE clause of t
1e930 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
1e940 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70  ent if one is sp
1e950 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20  ecified.. *     
1e960 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69           Otherwi
1e970 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70  se NULL.. * pExp
1e980 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20  rList -> A list 
1e990 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74  of the columns t
1e9a0 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65  o update and the
1e9b0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20   expressions to 
1e9c0 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20  update. *       
1e9d0 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20         them to. 
1e9e0 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61 74  See sqlite3Updat
1e9f0 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  e() documentatio
1ea00 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a  n of "pChanges".
1ea10 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1ea20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a  argument.. * . *
1ea30 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
1ea40 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20  Step {.  u8 op; 
1ea50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ea60 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
1ea70 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
1ea80 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45  _INSERT, TK_SELE
1ea90 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e  CT */.  u8 orcon
1eaa0 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
1eab0 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e  OE_Rollback etc.
1eac0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
1ead0 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68  Trig;      /* Th
1eae0 65 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74  e trigger that t
1eaf0 68 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61  his step is a pa
1eb00 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63  rt of */.  Selec
1eb10 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
1eb20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  /* SELECT statem
1eb30 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e  ent or RHS of IN
1eb40 53 45 52 54 20 49 4e 54 4f 20 53 45 4c 45 43 54  SERT INTO SELECT
1eb50 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a   ... */.  char *
1eb60 7a 54 61 72 67 65 74 3b 20 20 20 20 20 20 20 2f  zTarget;       /
1eb70 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66  * Target table f
1eb80 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54  or DELETE, UPDAT
1eb90 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45  E, INSERT */.  E
1eba0 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20  xpr *pWhere;    
1ebb0 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45      /* The WHERE
1ebc0 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45   clause for DELE
1ebd0 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65  TE or UPDATE ste
1ebe0 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ps */.  ExprList
1ebf0 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20   *pExprList; /* 
1ec00 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55  SET clause for U
1ec10 50 44 41 54 45 2e 20 2a 2f 0a 20 20 49 64 4c 69  PDATE. */.  IdLi
1ec20 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20  st *pIdList;    
1ec30 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73   /* Column names
1ec40 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20   for INSERT */. 
1ec50 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e   TriggerStep *pN
1ec60 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e  ext;  /* Next in
1ec70 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a   the link-list *
1ec80 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
1ec90 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74  *pLast;  /* Last
1eca0 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b   element in link
1ecb0 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72  -list. Valid for
1ecc0 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a   1st elem only *
1ecd0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
1ece0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1ecf0 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66  ure contains inf
1ed00 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79  ormation used by
1ed10 20 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e   the sqliteFix..
1ed20 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73  ..** routines as
1ed30 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70   they walk the p
1ed40 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b  arse tree to mak
1ed50 65 20 64 61 74 61 62 61 73 65 20 72 65 66 65 72  e database refer
1ed60 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69  ences.** explici
1ed70 74 2e 20 20 0a 2a 2f 0a 74 79 70 65 64 65 66 20  t.  .*/.typedef 
1ed80 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20 44  struct DbFixer D
1ed90 62 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44  bFixer;.struct D
1eda0 62 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65  bFixer {.  Parse
1edb0 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f   *pParse;      /
1edc0 2a 20 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f  * The parsing co
1edd0 6e 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65  ntext.  Error me
1ede0 73 73 61 67 65 73 20 77 72 69 74 74 65 6e 20 68  ssages written h
1edf0 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ere */.  Schema 
1ee00 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20  *pSchema;    /* 
1ee10 46 69 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69  Fix items to thi
1ee20 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e  s schema */.  in
1ee30 74 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20  t bVarOnly;     
1ee40 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76    /* Check for v
1ee50 61 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63  ariable referenc
1ee60 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e  es only */.  con
1ee70 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20  st char *zDb;   
1ee80 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c   /* Make sure al
1ee90 6c 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f  l objects are co
1eea0 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20  ntained in this 
1eeb0 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f  database */.  co
1eec0 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b  nst char *zType;
1eed0 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65    /* Type of the
1eee0 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65   container - use
1eef0 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73  d for error mess
1ef00 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ages */.  const 
1ef10 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a  Token *pName; /*
1ef20 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e   Name of the con
1ef30 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
1ef40 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
1ef50 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
1ef60 20 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20 74   objected used t
1ef70 6f 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65  o accumulate the
1ef80 20 74 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e   text of a strin
1ef90 67 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f  g where we.** do
1efa0 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79   not necessarily
1efb0 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68   know how big th
1efc0 65 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65  e string will be
1efd0 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a   in the end..*/.
1efe0 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20  struct StrAccum 
1eff0 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
1f000 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69           /* Opti
1f010 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f  onal database fo
1f020 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61  r lookaside.  Ca
1f030 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63  n be NULL */.  c
1f040 68 61 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20  har *zBase;     
1f050 20 20 20 20 2f 2a 20 41 20 62 61 73 65 20 61 6c      /* A base al
1f060 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66  location.  Not f
1f070 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20  rom malloc. */. 
1f080 20 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20   char *zText;   
1f090 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72        /* The str
1f0a0 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f  ing collected so
1f0b0 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e   far */.  int  n
1f0c0 43 68 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Char;          /
1f0d0 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  * Length of the 
1f0e0 73 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f  string so far */
1f0f0 0a 20 20 69 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20  .  int  nAlloc; 
1f100 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e          /* Amoun
1f110 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63  t of space alloc
1f120 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f  ated in zText */
1f130 0a 20 20 69 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b  .  int  mxAlloc;
1f140 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
1f150 75 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63  um allowed alloc
1f160 61 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f  ation.  0 for no
1f170 20 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f   malloc usage */
1f180 0a 20 20 75 38 20 20 20 61 63 63 45 72 72 6f 72  .  u8   accError
1f190 3b 20 20 20 20 20 20 20 2f 2a 20 53 54 52 41 43  ;       /* STRAC
1f1a0 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54 52  CUM_NOMEM or STR
1f1b0 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a  ACCUM_TOOBIG */.
1f1c0 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43  };.#define STRAC
1f1d0 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23 64  CUM_NOMEM   1.#d
1f1e0 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 54  efine STRACCUM_T
1f1f0 4f 4f 42 49 47 20 20 32 0a 0a 2f 2a 0a 2a 2a 20  OOBIG  2../*.** 
1f200 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  A pointer to thi
1f210 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  s structure is u
1f220 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61  sed to communica
1f230 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  te information.*
1f240 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e  * from sqlite3In
1f250 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53  it and OP_ParseS
1f260 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73  chema into the s
1f270 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
1f280 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  ck..*/.typedef s
1f290 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65  truct {.  sqlite
1f2a0 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a  3 *db;        /*
1f2b0 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65   The database be
1f2c0 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
1f2d0 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72  */.  char **pzEr
1f2e0 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f  rMsg;    /* Erro
1f2f0 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64  r message stored
1f300 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69   here */.  int i
1f310 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Db;            /
1f320 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74  * 0 for main dat
1f330 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45  abase.  1 for TE
1f340 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41  MP, 2.. for ATTA
1f350 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63  CHed */.  int rc
1f360 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1f370 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f   Result code sto
1f380 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e  red here */.} In
1f390 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53  itData;../*.** S
1f3a0 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
1f3b0 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69  ing global confi
1f3c0 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f  guration data fo
1f3d0 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62  r the SQLite lib
1f3e0 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  rary..**.** This
1f3f0 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20   structure also 
1f400 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74  contains some st
1f410 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ate information.
1f420 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74  .*/.struct Sqlit
1f430 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74  e3Config {.  int
1f440 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20   bMemstat;      
1f450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f460 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
1f470 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a   memory status *
1f480 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74  /.  int bCoreMut
1f490 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
1f4a0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1f4b0 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74   enable core mut
1f4c0 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62  exing */.  int b
1f4d0 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20  FullMutex;      
1f4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f4f0 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66  True to enable f
1f500 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a  ull mutexing */.
1f510 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20    int bOpenUri; 
1f520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f530 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69      /* True to i
1f540 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d  nterpret filenam
1f550 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20  es as URIs */.  
1f560 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20 20  int bUseCis;    
1f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f580 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e    /* Use coverin
1f590 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75  g indices for fu
1f5a0 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e  ll-scans */.  in
1f5b0 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20  t mxStrlen;     
1f5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5d0 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e  /* Maximum strin
1f5e0 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e  g length */.  in
1f5f0 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b 20  t neverCorrupt; 
1f600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f610 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 61  /* Database is a
1f620 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65  lways well-forme
1f630 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f  d */.  int szLoo
1f640 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20  kaside;         
1f650 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
1f660 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75  ult lookaside bu
1f670 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69  ffer size */.  i
1f680 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20  nt nLookaside;  
1f690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6a0 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b   /* Default look
1f6b0 61 73 69 64 65 20 62 75 66 66 65 72 20 63 6f 75  aside buffer cou
1f6c0 6e 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  nt */.  sqlite3_
1f6d0 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20  mem_methods m;  
1f6e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77            /* Low
1f6f0 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c  -level memory al
1f700 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61  location interfa
1f710 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ce */.  sqlite3_
1f720 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75  mutex_methods mu
1f730 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77  tex;      /* Low
1f740 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74  -level mutex int
1f750 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69  erface */.  sqli
1f760 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f  te3_pcache_metho
1f770 64 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a  ds2 pcache2;  /*
1f780 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d   Low-level page-
1f790 63 61 63 68 65 20 69 6e 74 65 72 66 61 63 65 20  cache interface 
1f7a0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70  */.  void *pHeap
1f7b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f7c0 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73         /* Heap s
1f7d0 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a  torage space */.
1f7e0 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20    int nHeap;    
1f7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f800 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70      /* Size of p
1f810 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Heap[] */.  int 
1f820 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20  mnReq, mxReq;   
1f830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f840 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61   Min and max hea
1f850 70 20 72 65 71 75 65 73 74 73 20 73 69 7a 65 73  p requests sizes
1f860 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e   */.  sqlite3_in
1f870 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20  t64 szMmap;     
1f880 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28          /* mmap(
1f890 29 20 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e  ) space per open
1f8a0 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74   file */.  sqlit
1f8b0 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b  e3_int64 mxMmap;
1f8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f8d0 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f  Maximum value fo
1f8e0 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f  r szMmap */.  vo
1f8f0 69 64 20 2a 70 53 63 72 61 74 63 68 3b 20 20 20  id *pScratch;   
1f900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f910 2f 2a 20 53 63 72 61 74 63 68 20 6d 65 6d 6f 72  /* Scratch memor
1f920 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72  y */.  int szScr
1f930 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20  atch;           
1f940 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
1f950 20 6f 66 20 65 61 63 68 20 73 63 72 61 74 63 68   of each scratch
1f960 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74   buffer */.  int
1f970 20 6e 53 63 72 61 74 63 68 3b 20 20 20 20 20 20   nScratch;      
1f980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f990 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 63 72 61  * Number of scra
1f9a0 74 63 68 20 62 75 66 66 65 72 73 20 2a 2f 0a 20  tch buffers */. 
1f9b0 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20   void *pPage;   
1f9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9d0 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65     /* Page cache
1f9e0 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74   memory */.  int
1f9f0 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20   szPage;        
1fa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1fa10 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70  * Size of each p
1fa20 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a  age in pPage[] *
1fa30 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20  /.  int nPage;  
1fa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa50 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1fa60 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67  of pages in pPag
1fa70 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50  e[] */.  int mxP
1fa80 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20  arserStack;     
1fa90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61             /* ma
1faa0 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74  ximum depth of t
1fab0 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20  he parser stack 
1fac0 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43  */.  int sharedC
1fad0 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20  acheEnabled;    
1fae0 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69         /* true i
1faf0 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  f shared-cache m
1fb00 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20  ode enabled */. 
1fb10 20 75 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20   u32 szPma;     
1fb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb30 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f     /* Maximum So
1fb40 72 74 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f  rter PMA size */
1fb50 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20  .  /* The above 
1fb60 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c  might be initial
1fb70 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f  ized to non-zero
1fb80 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
1fb90 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a   need to always.
1fba0 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62    ** initially b
1fbb0 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e  e zero, however.
1fbc0 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74   */.  int isInit
1fbd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1fbe0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1fbf0 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61  after initializa
1fc00 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65  tion has finishe
1fc10 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f  d */.  int inPro
1fc20 67 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20  gress;          
1fc30 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1fc40 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a   while initializ
1fc50 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73  ation in progres
1fc60 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74  s */.  int isMut
1fc70 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  exInit;         
1fc80 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1fc90 20 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61   after mutexes a
1fca0 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  re initialized *
1fcb0 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63  /.  int isMalloc
1fcc0 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
1fcd0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
1fce0 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e  ter malloc is in
1fcf0 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
1fd00 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b  nt isPCacheInit;
1fd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
1fd30 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c  alloc is initial
1fd40 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ized */.  int nR
1fd50 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  efInitMutex;    
1fd60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1fd70 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f  umber of users o
1fd80 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a  f pInitMutex */.
1fd90 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
1fda0 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  *pInitMutex;    
1fdb0 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65      /* Mutex use
1fdc0 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69  d by sqlite3_ini
1fdd0 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76  tialize() */.  v
1fde0 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64  oid (*xLog)(void
1fdf0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
1fe00 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20  *); /* Function 
1fe10 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20  for logging */. 
1fe20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20   void *pLogArg; 
1fe30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe40 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
1fe50 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28  rgument to xLog(
1fe60 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ) */.#ifdef SQLI
1fe70 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47  TE_ENABLE_SQLLOG
1fe80 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67  .  void(*xSqllog
1fe90 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
1fea0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e  ,const char*, in
1feb0 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c  t);.  void *pSql
1fec0 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23  logArg;.#endif.#
1fed0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42  ifdef SQLITE_VDB
1fee0 45 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20  E_COVERAGE.  /* 
1fef0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61  The following ca
1ff00 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e  llback (if not N
1ff10 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20  ULL) is invoked 
1ff20 6f 6e 20 65 76 65 72 79 20 56 44 42 45 20 62 72  on every VDBE br
1ff30 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74  anch.  ** operat
1ff40 69 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61  ion.  Set the ca
1ff50 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c  llback using SQL
1ff60 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42  ITE_TESTCTRL_VDB
1ff70 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f  E_COVERAGE..  */
1ff80 0a 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42  .  void (*xVdbeB
1ff90 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74  ranch)(void*,int
1ffa0 20 69 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68   iSrcLine,u8 eTh
1ffb0 69 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20  is,u8 eMx);  /* 
1ffc0 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  Callback */.  vo
1ffd0 69 64 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41  id *pVdbeBranchA
1ffe0 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
1fff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20000 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61          /* 1st a
20010 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69  rgument */.#endi
20020 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
20030 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
20040 53 54 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74  ST.  int (*xTest
20050 43 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20  Callback)(int); 
20060 20 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65         /* Invoke
20070 64 20 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c  d by sqlite3Faul
20080 74 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66  tSim() */.#endif
20090 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d  .  int bLocaltim
200a0 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20  eFault;         
200b0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
200c0 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29  fail localtime()
200d0 20 63 61 6c 6c 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   calls */.};../*
200e0 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69  .** This macro i
200f0 73 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66  s used inside of
20100 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
20110 65 6e 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65  ents to indicate
20120 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73   that.** the ass
20130 65 72 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ert is only vali
20140 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d  d on a well-form
20150 65 64 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e  ed database.  In
20160 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20  stead of:.**.** 
20170 20 20 20 20 61 73 73 65 72 74 28 20 58 20 29 3b      assert( X );
20180 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65  .**.** One write
20190 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  s:.**.**     ass
201a0 65 72 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50  ert( X || CORRUP
201b0 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f  T_DB );.**.** CO
201c0 52 52 55 50 54 5f 44 42 20 69 73 20 74 72 75 65  RRUPT_DB is true
201d0 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f   during normal o
201e0 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55  peration.  CORRU
201f0 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69  PT_DB does not i
20200 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20  ndicate.** that 
20210 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
20220 64 65 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75  definitely corru
20230 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74  pt, only that it
20240 20 6d 69 67 68 74 20 62 65 20 63 6f 72 72 75 70   might be corrup
20250 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74  t..** For most t
20260 65 73 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55  est cases, CORRU
20270 50 54 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20  PT_DB is set to 
20280 66 61 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70  false using a sp
20290 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33  ecial.** sqlite3
202a0 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e  _test_control().
202b0 20 20 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61    This enables a
202c0 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
202d0 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74  ts to prove.** t
202e0 68 69 6e 67 73 20 74 68 61 74 20 61 72 65 20 61  hings that are a
202f0 6c 77 61 79 73 20 74 72 75 65 20 66 6f 72 20 77  lways true for w
20300 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62  ell-formed datab
20310 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ases..*/.#define
20320 20 43 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71   CORRUPT_DB  (sq
20330 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65  lite3Config.neve
20340 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a  rCorrupt==0)../*
20350 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e  .** Context poin
20360 74 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20  ter passed down 
20370 74 68 72 6f 75 67 68 20 74 68 65 20 74 72 65 65  through the tree
20380 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74  -walk..*/.struct
20390 20 57 61 6c 6b 65 72 20 7b 0a 20 20 69 6e 74 20   Walker {.  int 
203a0 28 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29  (*xExprCallback)
203b0 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29  (Walker*, Expr*)
203c0 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63  ;     /* Callbac
203d0 6b 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e  k for expression
203e0 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65  s */.  int (*xSe
203f0 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61  lectCallback)(Wa
20400 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20  lker*,Select*); 
20410 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72   /* Callback for
20420 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f   SELECTs */.  vo
20430 69 64 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c  id (*xSelectCall
20440 62 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53  back2)(Walker*,S
20450 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e  elect*);/* Secon
20460 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53  d callback for S
20470 45 4c 45 43 54 73 20 2a 2f 0a 20 20 50 61 72 73  ELECTs */.  Pars
20480 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
20490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
204a0 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20        /* Parser 
204b0 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69  context.  */.  i
204c0 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20  nt walkerDepth; 
204d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
204e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
204f0 65 72 20 6f 66 20 73 75 62 71 75 65 72 69 65 73  er of subqueries
20500 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b 20   */.  u8 eCode; 
20510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20530 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65  /* A small proce
20540 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20  ssing code */.  
20550 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20  union {         
20560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20570 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74            /* Ext
20580 72 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c  ra data for call
20590 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65  back */.    Name
205a0 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20  Context *pNC;   
205b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205c0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67         /* Naming
205d0 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20   context */.    
205e0 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
205f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20600 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
20610 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69  counter */.    i
20620 6e 74 20 69 43 75 72 3b 20 20 20 20 20 20 20 20  nt iCur;        
20630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20640 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63            /* A c
20650 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ursor number */.
20660 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72      SrcList *pSr
20670 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20  cList;          
20680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20690 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  * FROM clause */
206a0 0a 20 20 20 20 73 74 72 75 63 74 20 53 72 63 43  .    struct SrcC
206b0 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b  ount *pSrcCount;
206c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206d0 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75  /* Counting colu
206e0 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f  mn references */
206f0 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46  .  } u;.};../* F
20700 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61 74 69  orward declarati
20710 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ons */.int sqlit
20720 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65  e3WalkExpr(Walke
20730 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  r*, Expr*);.int 
20740 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c  sqlite3WalkExprL
20750 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  ist(Walker*, Exp
20760 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
20770 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57  ite3WalkSelect(W
20780 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
20790 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
207a0 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b  kSelectExpr(Walk
207b0 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
207c0 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
207d0 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a  lectFrom(Walker*
207e0 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a  , Select*);../*.
207f0 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66  ** Return code f
20800 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72  rom the parse-tr
20810 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69  ee walking primi
20820 74 69 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a  tives and their.
20830 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f  ** callbacks..*/
20840 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e  .#define WRC_Con
20850 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20  tinue    0   /* 
20860 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e  Continue down in
20870 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23  to children */.#
20880 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65  define WRC_Prune
20890 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d         1   /* Om
208a0 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20  it children but 
208b0 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67  continue walking
208c0 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65   siblings */.#de
208d0 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20  fine WRC_Abort  
208e0 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e       2   /* Aban
208f0 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c  don the tree wal
20900 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  k */../*.** An i
20910 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
20920 73 74 72 75 63 74 75 72 65 20 72 65 70 72 65 73  structure repres
20930 65 6e 74 73 20 61 20 73 65 74 20 6f 66 20 6f 6e  ents a set of on
20940 65 20 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a  e or more CTEs.*
20950 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  * (common table 
20960 65 78 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65  expressions) cre
20970 61 74 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65  ated by a single
20980 20 57 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f   WITH clause..*/
20990 0a 73 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20  .struct With {. 
209a0 20 69 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20   int nCte;      
209b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209c0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54   /* Number of CT
209d0 45 73 20 69 6e 20 74 68 65 20 57 49 54 48 20 63  Es in the WITH c
209e0 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69 74 68 20  lause */.  With 
209f0 2a 70 4f 75 74 65 72 3b 20 20 20 20 20 20 20 20  *pOuter;        
20a00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
20a10 6e 74 61 69 6e 69 6e 67 20 57 49 54 48 20 63 6c  ntaining WITH cl
20a20 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ause, or NULL */
20a30 0a 20 20 73 74 72 75 63 74 20 43 74 65 20 7b 20  .  struct Cte { 
20a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a50 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 43     /* For each C
20a60 54 45 20 69 6e 20 74 68 65 20 57 49 54 48 20 63  TE in the WITH c
20a70 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20  lause.... */.   
20a80 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
20a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20aa0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
20ab0 20 43 54 45 20 2a 2f 0a 20 20 20 20 45 78 70 72   CTE */.    Expr
20ac0 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20  List *pCols;    
20ad0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
20ae0 69 73 74 20 6f 66 20 65 78 70 6c 69 63 69 74 20  ist of explicit 
20af0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72  column names, or
20b00 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c   NULL */.    Sel
20b10 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
20b20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20b30 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  The definition o
20b40 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20  f this CTE */.  
20b50 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43    const char *zC
20b60 74 65 45 72 72 3b 20 20 20 20 20 20 20 20 20 20  teErr;          
20b70 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61    /* Error messa
20b80 67 65 20 66 6f 72 20 63 69 72 63 75 6c 61 72 20  ge for circular 
20b90 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20  references */.  
20ba0 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64  } a[1];.};..#ifd
20bb0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
20bc0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
20bd0 65 20 6f 66 20 74 68 65 20 54 72 65 65 56 69 65  e of the TreeVie
20be0 77 20 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64  w object is used
20bf0 20 66 6f 72 20 70 72 69 6e 74 69 6e 67 20 74 68   for printing th
20c00 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
20c10 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
20c20 6f 6e 20 73 71 6c 69 74 65 33 44 65 62 75 67 50  on sqlite3DebugP
20c30 72 69 6e 74 66 28 29 20 75 73 69 6e 67 20 61 20  rintf() using a 
20c40 74 72 65 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a  tree-like view..
20c50 2a 2f 0a 73 74 72 75 63 74 20 54 72 65 65 56 69  */.struct TreeVi
20c60 65 77 20 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65  ew {.  int iLeve
20c70 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  l;             /
20c80 2a 20 57 68 69 63 68 20 6c 65 76 65 6c 20 6f 66  * Which level of
20c90 20 74 68 65 20 74 72 65 65 20 77 65 20 61 72 65   the tree we are
20ca0 20 6f 6e 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69   on */.  u8  bLi
20cb0 6e 65 5b 31 30 30 5d 3b 20 20 20 20 20 20 20 20  ne[100];        
20cc0 20 2f 2a 20 44 72 61 77 20 76 65 72 74 69 63 61   /* Draw vertica
20cd0 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66  l in column i if
20ce0 20 62 4c 69 6e 65 5b 69 5d 20 69 73 20 74 72 75   bLine[i] is tru
20cf0 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f  e */.};.#endif /
20d00 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a  * SQLITE_DEBUG *
20d10 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e  /../*.** Assumin
20d20 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20  g zIn points to 
20d30 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
20d40 66 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63  f a UTF-8 charac
20d50 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20  ter,.** advance 
20d60 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  zIn to point to 
20d70 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
20d80 66 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38  f the next UTF-8
20d90 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23   character..*/.#
20da0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b  define SQLITE_SK
20db0 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20  IP_UTF8(zIn) {  
20dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20dd0 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a        \.  if( (*
20de0 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29  (zIn++))>=0xc0 )
20df0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
20e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
20e10 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49  .    while( (*zI
20e20 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20  n & 0xc0)==0x80 
20e30 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20  ){ zIn++; }     
20e40 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20          \.  }   
20e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e80 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   \.}../*.** The 
20e90 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61  SQLITE_*_BKPT ma
20ea0 63 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74  cros are substit
20eb0 75 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72  utes for the err
20ec0 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a  or codes with.**
20ed0 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62   the same name b
20ee0 75 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f  ut without the _
20ef0 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68  BKPT suffix.  Th
20f00 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b  ese macros invok
20f10 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68  e.** routines th
20f20 61 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69  at report the li
20f30 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69  ne-number on whi
20f40 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69  ch the error ori
20f50 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67  ginated.** using
20f60 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20   sqlite3_log(). 
20f70 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c   The routines al
20f80 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e  so provide a con
20f90 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a  venient place.**
20fa0 20 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67   to set a debugg
20fb0 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a  er breakpoint..*
20fc0 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72  /.int sqlite3Cor
20fd0 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a  ruptError(int);.
20fe0 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73  int sqlite3Misus
20ff0 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  eError(int);.int
21000 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
21010 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66  Error(int);.#def
21020 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ine SQLITE_CORRU
21030 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  PT_BKPT sqlite3C
21040 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49  orruptError(__LI
21050 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
21060 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
21070 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
21080 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
21090 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e  efine SQLITE_CAN
210a0 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74  TOPEN_BKPT sqlit
210b0 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
210c0 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a  __LINE__).../*.*
210d0 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79  * FTS4 is really
210e0 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f   an extension fo
210f0 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20 65  r FTS3.  It is e
21100 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  nabled using the
21110 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  .** SQLITE_ENABL
21120 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42  E_FTS3 macro.  B
21130 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66  ut to avoid conf
21140 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61  usion we also ca
21150 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  ll.** the SQLITE
21160 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63  _ENABLE_FTS4 mac
21170 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61  ro to serve as a
21180 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49  n alias for SQLI
21190 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a  TE_ENABLE_FTS3..
211a0 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
211b0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
211c0 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  4) && !defined(S
211d0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
211e0 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  3).# define SQLI
211f0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 31  TE_ENABLE_FTS3 1
21200 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
21210 68 65 20 63 74 79 70 65 2e 68 20 68 65 61 64 65  he ctype.h heade
21220 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20  r is needed for 
21230 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d  non-ASCII system
21240 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a  s.  It is also.*
21250 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54 53 33  * needed by FTS3
21260 20 77 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e   when FTS3 is in
21270 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d  cluded in the am
21280 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23  algamation..*/.#
21290 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
212a0 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20  TE_ASCII) || \. 
212b0 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49     (defined(SQLI
212c0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20  TE_ENABLE_FTS3) 
212d0 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
212e0 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29  E_AMALGAMATION))
212f0 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70  .# include <ctyp
21300 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  e.h>.#endif../*.
21310 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
21320 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68   macros mimic th
21330 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61  e standard libra
21340 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75  ry functions tou
21350 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61  pper(),.** isspa
21360 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c  ce(), isalnum(),
21370 20 69 73 64 69 67 69 74 28 29 20 61 6e 64 20 69   isdigit() and i
21380 73 78 64 69 67 69 74 28 29 2c 20 72 65 73 70 65  sxdigit(), respe
21390 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20  ctively. The.** 
213a0 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20  sqlite versions 
213b0 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53  only work for AS
213c0 43 49 49 20 63 68 61 72 61 63 74 65 72 73 2c 20  CII characters, 
213d0 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f  regardless of lo
213e0 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  cale..*/.#ifdef 
213f0 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64  SQLITE_ASCII.# d
21400 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75  efine sqlite3Tou
21410 70 70 65 72 28 78 29 20 20 28 28 78 29 26 7e 28  pper(x)  ((x)&~(
21420 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
21430 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
21440 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66  x)]&0x20)).# def
21450 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61  ine sqlite3Isspa
21460 63 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  ce(x)   (sqlite3
21470 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
21480 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
21490 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  1).# define sqli
214a0 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20  te3Isalnum(x)   
214b0 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
214c0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
214d0 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66  (x)]&0x06).# def
214e0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70  ine sqlite3Isalp
214f0 68 61 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  ha(x)   (sqlite3
21500 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
21510 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
21520 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  2).# define sqli
21530 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20  te3Isdigit(x)   
21540 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
21550 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
21560 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66  (x)]&0x04).# def
21570 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69  ine sqlite3Isxdi
21580 67 69 74 28 78 29 20 20 28 73 71 6c 69 74 65 33  git(x)  (sqlite3
21590 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
215a0 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
215b0 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  8).# define sqli
215c0 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20  te3Tolower(x)   
215d0 28 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c  (sqlite3UpperToL
215e0 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63  ower[(unsigned c
215f0 68 61 72 29 28 78 29 5d 29 0a 23 65 6c 73 65 0a  har)(x)]).#else.
21600 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
21610 54 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f 75  Toupper(x)   tou
21620 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63  pper((unsigned c
21630 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
21640 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65  e sqlite3Isspace
21650 28 78 29 20 20 20 69 73 73 70 61 63 65 28 28 75  (x)   isspace((u
21660 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
21670 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
21680 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69  e3Isalnum(x)   i
21690 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64  salnum((unsigned
216a0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
216b0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70  ine sqlite3Isalp
216c0 68 61 28 78 29 20 20 20 69 73 61 6c 70 68 61 28  ha(x)   isalpha(
216d0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
216e0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
216f0 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20  ite3Isdigit(x)  
21700 20 69 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e   isdigit((unsign
21710 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
21720 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78  efine sqlite3Isx
21730 64 69 67 69 74 28 78 29 20 20 69 73 78 64 69 67  digit(x)  isxdig
21740 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  it((unsigned cha
21750 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
21760 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78  sqlite3Tolower(x
21770 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73  )   tolower((uns
21780 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
21790 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
217a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49  QLITE_OMIT_COMPI
217b0 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 69  LEOPTION_DIAGS.i
217c0 6e 74 20 73 71 6c 69 74 65 33 49 73 49 64 43 68  nt sqlite3IsIdCh
217d0 61 72 28 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a  ar(u8);.#endif..
217e0 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66  /*.** Internal f
217f0 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70  unction prototyp
21800 65 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71  es.*/.#define sq
21810 6c 69 74 65 33 53 74 72 49 43 6d 70 20 73 71 6c  lite3StrICmp sql
21820 69 74 65 33 5f 73 74 72 69 63 6d 70 0a 69 6e 74  ite3_stricmp.int
21830 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
21840 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  (const char*);.#
21850 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
21860 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73  rNICmp sqlite3_s
21870 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c  trnicmp..int sql
21880 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76  ite3MallocInit(v
21890 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
218a0 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64  e3MallocEnd(void
218b0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
218c0 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69  Malloc(u64);.voi
218d0 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
218e0 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20  Zero(u64);.void 
218f0 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  *sqlite3DbMalloc
21900 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75  Zero(sqlite3*, u
21910 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
21920 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71  e3DbMallocRaw(sq
21930 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68  lite3*, u64);.ch
21940 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72  ar *sqlite3DbStr
21950 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  Dup(sqlite3*,con
21960 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20  st char*);.char 
21970 2a 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75  *sqlite3DbStrNDu
21980 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  p(sqlite3*,const
21990 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 76 6f   char*, u64);.vo
219a0 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c  id *sqlite3Reall
219b0 6f 63 28 76 6f 69 64 2a 2c 20 75 36 34 29 3b 0a  oc(void*, u64);.
219c0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52  void *sqlite3DbR
219d0 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c  eallocOrFree(sql
219e0 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20  ite3 *, void *, 
219f0 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
21a00 74 65 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c  te3DbRealloc(sql
21a10 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20  ite3 *, void *, 
21a20 75 36 34 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u64);.void sqlit
21a30 65 33 44 62 46 72 65 65 28 73 71 6c 69 74 65 33  e3DbFree(sqlite3
21a40 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73  *, void*);.int s
21a50 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65  qlite3MallocSize
21a60 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c  (void*);.int sql
21a70 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65  ite3DbMallocSize
21a80 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
21a90 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
21aa0 53 63 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e  ScratchMalloc(in
21ab0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21ac0 53 63 72 61 74 63 68 46 72 65 65 28 76 6f 69 64  ScratchFree(void
21ad0 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  *);.void *sqlite
21ae0 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29  3PageMalloc(int)
21af0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
21b00 67 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76  geFree(void*);.v
21b10 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65  oid sqlite3MemSe
21b20 74 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a  tDefault(void);.
21b30 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
21b40 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
21b50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 6e  .void sqlite3Ben
21b60 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76  ignMallocHooks(v
21b70 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c 20 76  oid (*)(void), v
21b80 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a  oid (*)(void));.
21b90 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
21ba0 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c  e3HeapNearlyFull
21bb0 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f  (void);../*.** O
21bc0 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 61  n systems with a
21bd0 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61 63 65  mple stack space
21be0 20 61 6e 64 20 74 68 61 74 20 73 75 70 70 6f 72   and that suppor
21bf0 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65  t alloca(), make
21c00 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63  .** use of alloc
21c10 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20 73 70  a() to obtain sp
21c20 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20 61 75  ace for large au
21c30 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74 73 2e  tomatic objects.
21c40 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a    By default,.**
21c50 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 72   obtain space fr
21c60 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a  om malloc()..**.
21c70 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28 29 20  ** The alloca() 
21c80 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20 72 65  routine never re
21c90 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69  turns NULL.  Thi
21ca0 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63 6f 64  s will cause cod
21cb0 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61 74 20  e paths.** that 
21cc0 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69 74 65  deal with sqlite
21cd0 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61  3StackAlloc() fa
21ce0 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75 6e 72  ilures to be unr
21cf0 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66  eachable..*/.#if
21d00 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 41  def SQLITE_USE_A
21d10 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65 20 73  LLOCA.# define s
21d20 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
21d30 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63  Raw(D,N)   alloc
21d40 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  a(N).# define sq
21d50 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a  lite3StackAllocZ
21d60 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74  ero(D,N)  memset
21d70 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e  (alloca(N), 0, N
21d80 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
21d90 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29  e3StackFree(D,P)
21da0 20 20 20 20 20 20 20 0a 23 65 6c 73 65 0a 23 20         .#else.# 
21db0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
21dc0 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  ackAllocRaw(D,N)
21dd0 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c     sqlite3DbMall
21de0 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66  ocRaw(D,N).# def
21df0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
21e00 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
21e10 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
21e20 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  ero(D,N).# defin
21e30 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
21e40 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 73 71  ee(D,P)       sq
21e50 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c 50 29  lite3DbFree(D,P)
21e60 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
21e70 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
21e80 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69  MSYS3.const sqli
21e90 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
21ea0 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65  *sqlite3MemGetMe
21eb0 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e  msys3(void);.#en
21ec0 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
21ed0 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35  E_ENABLE_MEMSYS5
21ee0 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d  .const sqlite3_m
21ef0 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69  em_methods *sqli
21f00 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35  te3MemGetMemsys5
21f10 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a  (void);.#endif..
21f20 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
21f30 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c  MUTEX_OMIT.  sql
21f40 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
21f50 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65  ds const *sqlite
21f60 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f  3DefaultMutex(vo
21f70 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  id);.  sqlite3_m
21f80 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e  utex_methods con
21f90 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d  st *sqlite3NoopM
21fa0 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71  utex(void);.  sq
21fb0 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c  lite3_mutex *sql
21fc0 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69  ite3MutexAlloc(i
21fd0 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
21fe0 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64  e3MutexInit(void
21ff0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
22000 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a  MutexEnd(void);.
22010 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
22020 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58  ned(SQLITE_MUTEX
22030 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e  _OMIT) && !defin
22040 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ed(SQLITE_MUTEX_
22050 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73 71 6c  NOOP).  void sql
22060 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65  ite3MemoryBarrie
22070 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23  r(void);.#else.#
22080 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
22090 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29 0a 23  emoryBarrier().#
220a0 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69  endif..sqlite3_i
220b0 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 61 74  nt64 sqlite3Stat
220c0 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f  usValue(int);.vo
220d0 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
220e0 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  Up(int, int);.vo
220f0 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
22100 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  Down(int, int);.
22110 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
22120 75 73 53 65 74 28 69 6e 74 2c 20 69 6e 74 29 3b  usSet(int, int);
22130 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f 20 6d  ../* Access to m
22140 75 74 65 78 65 73 20 75 73 65 64 20 62 79 20 73  utexes used by s
22150 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28 29 20  qlite3_status() 
22160 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  */.sqlite3_mutex
22170 20 2a 73 71 6c 69 74 65 33 50 63 61 63 68 65 31   *sqlite3Pcache1
22180 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c  Mutex(void);.sql
22190 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69  ite3_mutex *sqli
221a0 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76  te3MallocMutex(v
221b0 6f 69 64 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  oid);..#ifndef S
221c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
221d0 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20  ING_POINT.  int 
221e0 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75  sqlite3IsNaN(dou
221f0 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ble);.#else.# de
22200 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61  fine sqlite3IsNa
22210 4e 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a  N(X)  0.#endif..
22220 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
22230 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
22240 6e 67 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  ng structure hol
22250 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ds information a
22260 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63  bout SQL.** func
22270 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73 20  tions arguments 
22280 74 68 61 74 20 61 72 65 20 74 68 65 20 70 61 72  that are the par
22290 61 6d 65 74 65 72 73 20 74 6f 20 74 68 65 20 70  ameters to the p
222a0 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e  rintf() function
222b0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72 69 6e  ..*/.struct Prin
222c0 74 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20  tfArguments {.  
222d0 69 6e 74 20 6e 41 72 67 3b 20 20 20 20 20 20 20  int nArg;       
222e0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74 61           /* Tota
222f0 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  l number of argu
22300 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  ments */.  int n
22310 55 73 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  Used;           
22320 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
22330 20 61 72 67 75 6d 65 6e 74 73 20 75 73 65 64 20   arguments used 
22340 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69  so far */.  sqli
22350 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72  te3_value **apAr
22360 67 3b 20 20 20 2f 2a 20 54 68 65 20 61 72 67 75  g;   /* The argu
22370 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d  ment values */.}
22380 3b 0a 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  ;..#define SQLIT
22390 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41  E_PRINTF_INTERNA
223a0 4c 20 30 78 30 31 0a 23 64 65 66 69 6e 65 20 53  L 0x01.#define S
223b0 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c  QLITE_PRINTF_SQL
223c0 46 55 4e 43 20 20 30 78 30 32 0a 76 6f 69 64 20  FUNC  0x02.void 
223d0 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28  sqlite3VXPrintf(
223e0 53 74 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c 20  StrAccum*, u32, 
223f0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f  const char*, va_
22400 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  list);.void sqli
22410 74 65 33 58 50 72 69 6e 74 66 28 53 74 72 41 63  te3XPrintf(StrAc
22420 63 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74  cum*, u32, const
22430 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68   char*, ...);.ch
22440 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e  ar *sqlite3MPrin
22450 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  tf(sqlite3*,cons
22460 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63  t char*, ...);.c
22470 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72  har *sqlite3VMPr
22480 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f  intf(sqlite3*,co
22490 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69  nst char*, va_li
224a0 73 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64  st);.#if defined
224b0 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c  (SQLITE_DEBUG) |
224c0 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
224d0 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a  _HAVE_OS_TRACE).
224e0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
224f0 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20  bugPrintf(const 
22500 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e  char*, ...);.#en
22510 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
22520 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76  SQLITE_TEST).  v
22530 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74  oid *sqlite3Test
22540 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20  TextToPtr(const 
22550 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
22560 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
22570 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64  TE_DEBUG).  void
22580 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
22590 45 78 70 72 28 54 72 65 65 56 69 65 77 2a 2c 20  Expr(TreeView*, 
225a0 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75 38 29  const Expr*, u8)
225b0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
225c0 54 72 65 65 56 69 65 77 45 78 70 72 4c 69 73 74  TreeViewExprList
225d0 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
225e0 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 75 38 2c  t ExprList*, u8,
225f0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
22600 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
22610 65 56 69 65 77 53 65 6c 65 63 74 28 54 72 65 65  eViewSelect(Tree
22620 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c  View*, const Sel
22630 65 63 74 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69  ect*, u8);.#endi
22640 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  f...void sqlite3
22650 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a  SetString(char *
22660 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  *, sqlite3*, con
22670 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
22680 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
22690 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
226a0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73  ar*, ...);.int s
226b0 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68  qlite3Dequote(ch
226c0 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
226d0 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e  3KeywordCode(con
226e0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
226f0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
22700 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61  ite3RunParser(Pa
22710 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
22720 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69  *, char **);.voi
22730 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43  d sqlite3FinishC
22740 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69  oding(Parse*);.i
22750 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
22760 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f  pReg(Parse*);.vo
22770 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
22780 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c  eTempReg(Parse*,
22790 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
227a0 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61  3GetTempRange(Pa
227b0 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
227c0 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
227d0 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
227e0 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
227f0 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65  lite3ClearTempRe
22800 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a  gCache(Parse*);.
22810 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
22820 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c  rAlloc(sqlite3*,
22830 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  int,const Token*
22840 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
22850 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33  ite3Expr(sqlite3
22860 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
22870 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22880 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65  ExprAttachSubtre
22890 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  es(sqlite3*,Expr
228a0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a  *,Expr*,Expr*);.
228b0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78  Expr *sqlite3PEx
228c0 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  pr(Parse*, int, 
228d0 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f  Expr*, Expr*, co
228e0 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70  nst Token*);.Exp
228f0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e  r *sqlite3ExprAn
22900 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  d(sqlite3*,Expr*
22910 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  , Expr*);.Expr *
22920 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74  sqlite3ExprFunct
22930 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ion(Parse*,ExprL
22940 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ist*, Token*);.v
22950 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
22960 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50  ssignVarNumber(P
22970 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
22980 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44  oid sqlite3ExprD
22990 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
229a0 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74  Expr*);.ExprList
229b0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
229c0 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45  tAppend(Parse*,E
229d0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b  xprList*,Expr*);
229e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
229f0 72 4c 69 73 74 53 65 74 53 6f 72 74 4f 72 64 65  rListSetSortOrde
22a00 72 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29  r(ExprList*,int)
22a10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
22a20 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61  prListSetName(Pa
22a30 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54  rse*,ExprList*,T
22a40 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  oken*,int);.void
22a50 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
22a60 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45  SetSpan(Parse*,E
22a70 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61  xprList*,ExprSpa
22a80 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
22a90 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28  3ExprListDelete(
22aa0 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69  sqlite3*, ExprLi
22ab0 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  st*);.u32 sqlite
22ac0 33 45 78 70 72 4c 69 73 74 46 6c 61 67 73 28 63  3ExprListFlags(c
22ad0 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 29 3b  onst ExprList*);
22ae0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74  .int sqlite3Init
22af0 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a  (sqlite3*, char*
22b00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
22b10 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64  nitCallback(void
22b20 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20  *, int, char**, 
22b30 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  char**);.void sq
22b40 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61 72 73  lite3Pragma(Pars
22b50 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
22b60 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Token*,int);.vo
22b70 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 41  id sqlite3ResetA
22b80 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65  llSchemasOfConne
22b90 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b  ction(sqlite3*);
22ba0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
22bb0 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69  etOneSchema(sqli
22bc0 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
22bd0 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44  sqlite3CollapseD
22be0 61 74 61 62 61 73 65 41 72 72 61 79 28 73 71 6c  atabaseArray(sql
22bf0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
22c00 69 74 65 33 42 65 67 69 6e 50 61 72 73 65 28 50  ite3BeginParse(P
22c10 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  arse*,int);.void
22c20 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e   sqlite3CommitIn
22c30 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71  ternalChanges(sq
22c40 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
22c50 6c 69 74 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d  lite3DeleteColum
22c60 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c  nNames(sqlite3*,
22c70 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Table*);.int sql
22c80 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45  ite3ColumnsFromE
22c90 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 45  xprList(Parse*,E
22ca0 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43 6f  xprList*,i16*,Co
22cb0 6c 75 6d 6e 2a 2a 29 3b 0a 54 61 62 6c 65 20 2a  lumn**);.Table *
22cc0 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74  sqlite3ResultSet
22cd0 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  OfSelect(Parse*,
22ce0 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73  Select*);.void s
22cf0 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72  qlite3OpenMaster
22d00 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69  Table(Parse *, i
22d10 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  nt);.Index *sqli
22d20 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64  te3PrimaryKeyInd
22d30 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20  ex(Table*);.i16 
22d40 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49  sqlite3ColumnOfI
22d50 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31 36  ndex(Index*, i16
22d60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
22d70 74 61 72 74 54 61 62 6c 65 28 50 61 72 73 65 2a  tartTable(Parse*
22d80 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
22d90 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b  nt,int,int,int);
22da0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
22db0 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f  Column(Parse*,To
22dc0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
22dd0 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61  te3AddNotNull(Pa
22de0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
22df0 20 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61   sqlite3AddPrima
22e00 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78  ryKey(Parse*, Ex
22e10 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
22e20 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
22e30 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e  lite3AddCheckCon
22e40 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
22e50 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
22e60 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 54 79 70  ite3AddColumnTyp
22e70 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29  e(Parse*,Token*)
22e80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
22e90 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50 61  dDefaultValue(Pa
22ea0 72 73 65 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b  rse*,ExprSpan*);
22eb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
22ec0 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72 73  CollateType(Pars
22ed0 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  e*, Token*);.voi
22ee0 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62 6c  d sqlite3EndTabl
22ef0 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  e(Parse*,Token*,
22f00 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74  Token*,u8,Select
22f10 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50  *);.int sqlite3P
22f20 61 72 73 65 55 72 69 28 63 6f 6e 73 74 20 63 68  arseUri(const ch
22f30 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
22f40 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20  unsigned int*,. 
22f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f60 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a     sqlite3_vfs**
22f70 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29  ,char**,char **)
22f80 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69 74 65 33  ;.Btree *sqlite3
22f90 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 73 71  DbNameToBtree(sq
22fa0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
22fb0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
22fc0 43 6f 64 65 4f 6e 63 65 28 50 61 72 73 65 20 2a  CodeOnce(Parse *
22fd0 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
22fe0 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
22ff0 45 53 54 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  EST.# define sql
23000 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58 29 20  ite3FaultSim(X) 
23010 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a  SQLITE_OK.#else.
23020 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 61 75    int sqlite3Fau
23030 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64  ltSim(int);.#end
23040 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69  if..Bitvec *sqli
23050 74 65 33 42 69 74 76 65 63 43 72 65 61 74 65 28  te3BitvecCreate(
23060 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
23070 33 42 69 74 76 65 63 54 65 73 74 28 42 69 74 76  3BitvecTest(Bitv
23080 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73  ec*, u32);.int s
23090 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74  qlite3BitvecTest
230a0 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c  NotNull(Bitvec*,
230b0 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74   u32);.int sqlit
230c0 65 33 42 69 74 76 65 63 53 65 74 28 42 69 74 76  e3BitvecSet(Bitv
230d0 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20  ec*, u32);.void 
230e0 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65  sqlite3BitvecCle
230f0 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c  ar(Bitvec*, u32,
23100 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71   void*);.void sq
23110 6c 69 74 65 33 42 69 74 76 65 63 44 65 73 74 72  lite3BitvecDestr
23120 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32  oy(Bitvec*);.u32
23130 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 69   sqlite3BitvecSi
23140 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 23 69 66  ze(Bitvec*);.#if
23150 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
23160 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 69 6e  _BUILTIN_TEST.in
23170 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42  t sqlite3BitvecB
23180 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69  uiltinTest(int,i
23190 6e 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f  nt*);.#endif..Ro
231a0 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77  wSet *sqlite3Row
231b0 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  SetInit(sqlite3*
231c0 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65  , void*, unsigne
231d0 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  d int);.void sql
231e0 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28  ite3RowSetClear(
231f0 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73  RowSet*);.void s
23200 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
23210 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29  rt(RowSet*, i64)
23220 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
23230 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c  SetTest(RowSet*,
23240 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34   int iBatch, i64
23250 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
23260 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a  wSetNext(RowSet*
23270 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73  , i64*);..void s
23280 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77  qlite3CreateView
23290 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
232a0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70  oken*,Token*,Exp
232b0 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 69  rList*,Select*,i
232c0 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64  nt,int);..#if !d
232d0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
232e0 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66  IT_VIEW) || !def
232f0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
23300 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20  _VIRTUALTABLE). 
23310 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77   int sqlite3View
23320 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50  GetColumnNames(P
23330 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23  arse*,Table*);.#
23340 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
23350 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
23360 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23  mnNames(A,B) 0.#
23370 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54  endif..#if SQLIT
23380 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33  E_MAX_ATTACHED>3
23390 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44  0.  int sqlite3D
233a0 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62  bMaskAllZero(yDb
233b0 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  Mask);.#endif.vo
233c0 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61  id sqlite3DropTa
233d0 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
233e0 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
233f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
23400 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  eDropTable(Parse
23410 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
23420 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
23430 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71  e3DeleteTable(sq
23440 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b  lite3*, Table*);
23450 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
23460 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
23470 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  NT.  void sqlite
23480 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65  3AutoincrementBe
23490 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  gin(Parse *pPars
234a0 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  e);.  void sqlit
234b0 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45  e3AutoincrementE
234c0 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  nd(Parse *pParse
234d0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
234e0 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  e sqlite3Autoinc
234f0 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23  rementBegin(X).#
23500 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
23510 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
23520 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  X).#endif.void s
23530 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61 72  qlite3Insert(Par
23540 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53  se*, SrcList*, S
23550 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c  elect*, IdList*,
23560 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   int);.void *sql
23570 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74  ite3ArrayAllocat
23580 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a  e(sqlite3*,void*
23590 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b  ,int,int*,int*);
235a0 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  .IdList *sqlite3
235b0 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c  IdListAppend(sql
235c0 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20  ite3*, IdList*, 
235d0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
235e0 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28  ite3IdListIndex(
235f0 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  IdList*,const ch
23600 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  ar*);.SrcList *s
23610 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c  qlite3SrcListEnl
23620 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  arge(sqlite3*, S
23630 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  rcList*, int, in
23640 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  t);.SrcList *sql
23650 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e  ite3SrcListAppen
23660 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  d(sqlite3*, SrcL
23670 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
23680 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a  ken*);.SrcList *
23690 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70  sqlite3SrcListAp
236a0 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72  pendFromTerm(Par
236b0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
236c0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20  oken*, Token*,. 
236d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236f0 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c       Token*, Sel
23700 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c  ect*, Expr*, IdL
23710 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
23720 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65  te3SrcListIndexe
23730 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63  dBy(Parse *, Src
23740 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29  List *, Token *)
23750 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
23760 63 4c 69 73 74 46 75 6e 63 41 72 67 73 28 50 61  cListFuncArgs(Pa
23770 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
23780 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
23790 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79  sqlite3IndexedBy
237a0 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20  Lookup(Parse *, 
237b0 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
237c0 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  tem *);.void sql
237d0 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74  ite3SrcListShift
237e0 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74  JoinType(SrcList
237f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23800 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72  SrcListAssignCur
23810 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63  sors(Parse*, Src
23820 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
23830 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65  ite3IdListDelete
23840 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73  (sqlite3*, IdLis
23850 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
23860 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73  3SrcListDelete(s
23870 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
23880 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  *);.Index *sqlit
23890 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f  e3AllocateIndexO
238a0 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c 69  bject(sqlite3*,i
238b0 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a  16,int,char**);.
238c0 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 43 72  Index *sqlite3Cr
238d0 65 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a  eateIndex(Parse*
238e0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53  ,Token*,Token*,S
238f0 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  rcList*,ExprList
23900 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20  *,int,Token*,.  
23910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23920 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69          Expr*, i
23930 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
23940 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78 28  qlite3DropIndex(
23950 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
23960 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
23970 74 65 33 53 65 6c 65 63 74 28 50 61 72 73 65 2a  te3Select(Parse*
23980 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63  , Select*, Selec
23990 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20  tDest*);.Select 
239a0 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e 65  *sqlite3SelectNe
239b0 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  w(Parse*,ExprLis
239c0 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  t*,SrcList*,Expr
239d0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20  *,ExprList*,.   
239e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239f0 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70 72        Expr*,Expr
23a00 4c 69 73 74 2a 2c 75 31 36 2c 45 78 70 72 2a 2c  List*,u16,Expr*,
23a10 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
23a20 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65  ite3SelectDelete
23a30 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63  (sqlite3*, Selec
23a40 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  t*);.Table *sqli
23a50 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70  te3SrcListLookup
23a60 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
23a70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
23a80 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a  sReadOnly(Parse*
23a90 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
23aa0 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e  void sqlite3Open
23ab0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e  Table(Parse*, in
23ac0 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c  t iCur, int iDb,
23ad0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23   Table*, int);.#
23ae0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
23af0 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
23b00 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26  DELETE_LIMIT) &&
23b10 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
23b20 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a  _OMIT_SUBQUERY).
23b30 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d  Expr *sqlite3Lim
23b40 69 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c 53  itWhere(Parse*,S
23b50 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
23b60 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  prList*,Expr*,Ex
23b70 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64  pr*,char*);.#end
23b80 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  if.void sqlite3D
23b90 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a  eleteFrom(Parse*
23ba0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
23bb0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23bc0 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53  Update(Parse*, S
23bd0 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  rcList*, ExprLis
23be0 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  t*, Expr*, int);
23bf0 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69  .WhereInfo *sqli
23c00 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 50 61  te3WhereBegin(Pa
23c10 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  rse*,SrcList*,Ex
23c20 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  pr*,ExprList*,Ex
23c30 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29  prList*,u16,int)
23c40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68  ;.void sqlite3Wh
23c50 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f  ereEnd(WhereInfo
23c60 2a 29 3b 0a 75 36 34 20 73 71 6c 69 74 65 33 57  *);.u64 sqlite3W
23c70 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75  hereOutputRowCou
23c80 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  nt(WhereInfo*);.
23c90 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
23ca0 49 73 44 69 73 74 69 6e 63 74 28 57 68 65 72 65  IsDistinct(Where
23cb0 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
23cc0 74 65 33 57 68 65 72 65 49 73 4f 72 64 65 72 65  te3WhereIsOrdere
23cd0 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  d(WhereInfo*);.i
23ce0 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
23cf0 73 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e 66  sSorted(WhereInf
23d00 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
23d10 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62  WhereContinueLab
23d20 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  el(WhereInfo*);.
23d30 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
23d40 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72 65  BreakLabel(Where
23d50 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
23d60 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73  te3WhereOkOnePas
23d70 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e  s(WhereInfo*, in
23d80 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f 4e 45  t*);.#define ONE
23d90 50 41 53 53 5f 4f 46 46 20 20 20 20 20 20 30 20  PASS_OFF      0 
23da0 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 6f 66         /* Use of
23db0 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61 6c 6c   ONEPASS not all
23dc0 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owed */.#define 
23dd0 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45 20 20  ONEPASS_SINGLE  
23de0 20 31 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45   1        /* ONE
23df0 50 41 53 53 20 76 61 6c 69 64 20 66 6f 72 20 61  PASS valid for a
23e00 20 73 69 6e 67 6c 65 20 72 6f 77 20 75 70 64 61   single row upda
23e10 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e  te */.#define ON
23e20 45 50 41 53 53 5f 4d 55 4c 54 49 20 20 20 20 32  EPASS_MULTI    2
23e30 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41          /* ONEPA
23e40 53 53 20 69 73 20 76 61 6c 69 64 20 66 6f 72 20  SS is valid for 
23e50 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
23e60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
23e70 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78 43 6f  rCodeLoadIndexCo
23e80 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49 6e 64  lumn(Parse*, Ind
23e90 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  ex*, int, int, i
23ea0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
23eb0 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
23ec0 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  n(Parse*, Table*
23ed0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c  , int, int, int,
23ee0 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
23ef0 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
23f00 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a  umnOfTable(Vdbe*
23f10 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
23f20 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
23f30 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f  qlite3ExprCodeMo
23f40 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  ve(Parse*, int, 
23f50 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
23f60 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
23f70 53 74 6f 72 65 28 50 61 72 73 65 2a 2c 20 69 6e  Store(Parse*, in
23f80 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
23f90 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
23fa0 63 68 65 50 75 73 68 28 50 61 72 73 65 2a 29 3b  chePush(Parse*);
23fb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
23fc0 72 43 61 63 68 65 50 6f 70 28 50 61 72 73 65 2a  rCachePop(Parse*
23fd0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
23fe0 78 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50  xprCacheRemove(P
23ff0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
24000 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
24010 70 72 43 61 63 68 65 43 6c 65 61 72 28 50 61 72  prCacheClear(Par
24020 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
24030 65 33 45 78 70 72 43 61 63 68 65 41 66 66 69 6e  e3ExprCacheAffin
24040 69 74 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a  ityChange(Parse*
24050 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
24060 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
24070 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
24080 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
24090 74 65 33 45 78 70 72 43 6f 64 65 46 61 63 74 6f  te3ExprCodeFacto
240a0 72 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 45 78  rable(Parse*, Ex
240b0 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
240c0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41  sqlite3ExprCodeA
240d0 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 45 78  tInit(Parse*, Ex
240e0 70 72 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69  pr*, int, u8);.i
240f0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
24100 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45  deTemp(Parse*, E
24110 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  xpr*, int*);.int
24120 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
24130 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45  Target(Parse*, E
24140 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
24150 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
24160 41 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c  AndCache(Parse*,
24170 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
24180 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
24190 65 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a  eExprList(Parse*
241a0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
241b0 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66  , int, u8);.#def
241c0 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
241d0 44 55 50 20 20 20 20 20 20 30 78 30 31 20 20 2f  DUP      0x01  /
241e0 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c  * Deep, not shal
241f0 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64  low copies */.#d
24200 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45  efine SQLITE_ECE
24210 4c 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32 20  L_FACTOR   0x02 
24220 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63   /* Factor out c
24230 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f  onstant terms */
24240 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
24250 45 43 45 4c 5f 52 45 46 20 20 20 20 20 20 30 78  ECEL_REF      0x
24260 30 34 20 20 2f 2a 20 55 73 65 20 45 78 70 72 4c  04  /* Use ExprL
24270 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79  ist.u.x.iOrderBy
24280 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  Col */.void sqli
24290 74 65 33 45 78 70 72 49 66 54 72 75 65 28 50 61  te3ExprIfTrue(Pa
242a0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
242b0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
242c0 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 28  ite3ExprIfFalse(
242d0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
242e0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
242f0 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73  qlite3ExprIfFals
24300 65 44 75 70 28 50 61 72 73 65 2a 2c 20 45 78 70  eDup(Parse*, Exp
24310 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54  r*, int, int);.T
24320 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e  able *sqlite3Fin
24330 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  dTable(sqlite3*,
24340 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
24350 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65  st char*);.Table
24360 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54   *sqlite3LocateT
24370 61 62 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74 20  able(Parse*,int 
24380 69 73 56 69 65 77 2c 63 6f 6e 73 74 20 63 68 61  isView,const cha
24390 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
243a0 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
243b0 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28  LocateTableItem(
243c0 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65  Parse*,int isVie
243d0 77 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  w,struct SrcList
243e0 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20  _item *);.Index 
243f0 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65  *sqlite3FindInde
24400 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  x(sqlite3*,const
24410 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
24420 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
24430 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
24440 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  eTable(sqlite3*,
24450 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
24460 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
24470 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64  linkAndDeleteInd
24480 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  ex(sqlite3*,int,
24490 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
244a0 69 64 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d  id sqlite3Vacuum
244b0 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71  (Parse*);.int sq
244c0 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63  lite3RunVacuum(c
244d0 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29  har**, sqlite3*)
244e0 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e  ;.char *sqlite3N
244f0 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c  ameFromToken(sql
24500 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  ite3*, Token*);.
24510 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
24520 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c 20 45 78  ompare(Expr*, Ex
24530 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
24540 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f  qlite3ExprListCo
24550 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c  mpare(ExprList*,
24560 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29   ExprList*, int)
24570 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
24580 72 49 6d 70 6c 69 65 73 45 78 70 72 28 45 78 70  rImpliesExpr(Exp
24590 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  r*, Expr*, int);
245a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
245b0 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74  rAnalyzeAggregat
245c0 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
245d0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
245e0 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65  lite3ExprAnalyze
245f0 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74  AggList(NameCont
24600 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b  ext*,ExprList*);
24610 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e 63  .int sqlite3Func
24620 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63 28  tionUsesThisSrc(
24630 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29  Expr*, SrcList*)
24640 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47  ;.Vdbe *sqlite3G
24650 65 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a  etVdbe(Parse*);.
24660 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
24670 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
24680 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e  .void sqlite3Prn
24690 67 53 61 76 65 53 74 61 74 65 28 76 6f 69 64 29  gSaveState(void)
246a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
246b0 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65 28 76  ngRestoreState(v
246c0 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  oid);.#endif.voi
246d0 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63  d sqlite3Rollbac
246e0 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e  kAll(sqlite3*,in
246f0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
24700 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
24710 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
24720 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56  oid sqlite3CodeV
24730 65 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61  erifyNamedSchema
24740 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
24750 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20  har *zDb);.void 
24760 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e  sqlite3BeginTran
24770 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20  saction(Parse*, 
24780 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
24790 65 33 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74  e3CommitTransact
247a0 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ion(Parse*);.voi
247b0 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63  d sqlite3Rollbac
247c0 6b 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  kTransaction(Par
247d0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
247e0 65 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73  e3Savepoint(Pars
247f0 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29  e*, int, Token*)
24800 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c  ;.void sqlite3Cl
24810 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71  oseSavepoints(sq
24820 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73  lite3 *);.void s
24830 71 6c 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78  qlite3LeaveMutex
24840 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73  AndCloseZombie(s
24850 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
24860 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
24870 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  ant(Expr*);.int 
24880 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
24890 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70  stantNotJoin(Exp
248a0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
248b0 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72  ExprIsConstantOr
248c0 46 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 2c 20  Function(Expr*, 
248d0 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
248e0 45 78 70 72 49 73 54 61 62 6c 65 43 6f 6e 73 74  ExprIsTableConst
248f0 61 6e 74 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a  ant(Expr*,int);.
24900 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
24910 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20  sInteger(Expr*, 
24920 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
24930 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28  e3ExprCanBeNull(
24940 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e  const Expr*);.in
24950 74 20 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65  t sqlite3ExprNee
24960 64 73 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e  dsNoAffinityChan
24970 67 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20  ge(const Expr*, 
24980 63 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  char);.int sqlit
24990 65 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20  e3IsRowid(const 
249a0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
249b0 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44  ite3GenerateRowD
249c0 65 6c 65 74 65 28 0a 20 20 20 20 50 61 72 73 65  elete(.    Parse
249d0 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72  *,Table*,Trigger
249e0 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31  *,int,int,int,i1
249f0 36 2c 75 38 2c 75 38 2c 75 38 2c 69 6e 74 29 3b  6,u8,u8,u8,int);
24a00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
24a10 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c  erateRowIndexDel
24a20 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ete(Parse*, Tabl
24a30 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
24a40 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  t*, int);.int sq
24a50 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64  lite3GenerateInd
24a60 65 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e  exKey(Parse*, In
24a70 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  dex*, int, int, 
24a80 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a  int, int*,Index*
24a90 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
24aa0 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64  te3ResolvePartId
24ab0 78 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e  xLabel(Parse*,in
24ac0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
24ad0 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69  GenerateConstrai
24ae0 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c  ntChecks(Parse*,
24af0 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c  Table*,int*,int,
24b00 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20  int,int,int,.   
24b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b30 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a    u8,u8,int,int*
24b40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
24b50 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e  ompleteInsertion
24b60 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69  (Parse*,Table*,i
24b70 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c  nt,int,int,int*,
24b80 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e  int,int,int);.in
24b90 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62  t sqlite3OpenTab
24ba0 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 50 61 72  leAndIndices(Par
24bb0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
24bc0 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a  , int, u8*, int*
24bd0 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71  , int*);.void sq
24be0 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f  lite3BeginWriteO
24bf0 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c  peration(Parse*,
24c00 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
24c10 20 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69   sqlite3MultiWri
24c20 74 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  te(Parse*);.void
24c30 20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74   sqlite3MayAbort
24c40 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
24c50 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72  qlite3HaltConstr
24c60 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
24c70 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38  , int, char*, i8
24c80 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
24c90 74 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61  te3UniqueConstra
24ca0 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
24cb0 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73   Index*);.void s
24cc0 71 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74  qlite3RowidConst
24cd0 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  raint(Parse*, in
24ce0 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72  t, Table*);.Expr
24cf0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75 70   *sqlite3ExprDup
24d00 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
24d10 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a  int);.ExprList *
24d20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44  sqlite3ExprListD
24d30 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  up(sqlite3*,Expr
24d40 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c  List*,int);.SrcL
24d50 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
24d60 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
24d70 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49  SrcList*,int);.I
24d80 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64  dList *sqlite3Id
24d90 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
24da0 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63  ,IdList*);.Selec
24db0 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74  t *sqlite3Select
24dc0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c  Dup(sqlite3*,Sel
24dd0 65 63 74 2a 2c 69 6e 74 29 3b 0a 23 69 66 20 53  ect*,int);.#if S
24de0 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
24df0 45 44 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  ED.void sqlite3S
24e00 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 53 65 6c  electSetName(Sel
24e10 65 63 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ect*,const char*
24e20 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
24e30 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53  e sqlite3SelectS
24e40 65 74 4e 61 6d 65 28 41 2c 42 29 0a 23 65 6e 64  etName(A,B).#end
24e50 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  if.void sqlite3F
24e60 75 6e 63 44 65 66 49 6e 73 65 72 74 28 46 75 6e  uncDefInsert(Fun
24e70 63 44 65 66 48 61 73 68 2a 2c 20 46 75 6e 63 44  cDefHash*, FuncD
24e80 65 66 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73  ef*);.FuncDef *s
24e90 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69  qlite3FindFuncti
24ea0 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  on(sqlite3*,cons
24eb0 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c  t char*,int,int,
24ec0 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  u8,u8);.void sql
24ed0 69 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c  ite3RegisterBuil
24ee0 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c  tinFunctions(sql
24ef0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
24f00 69 74 65 33 52 65 67 69 73 74 65 72 44 61 74 65  ite3RegisterDate
24f10 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f  TimeFunctions(vo
24f20 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
24f30 33 52 65 67 69 73 74 65 72 47 6c 6f 62 61 6c 46  3RegisterGlobalF
24f40 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
24f50 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
24f60 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33  yCheckOk(sqlite3
24f70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
24f80 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72  afetyCheckSickOr
24f90 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  Ok(sqlite3*);.vo
24fa0 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65  id sqlite3Change
24fb0 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69  Cookie(Parse*, i
24fc0 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e  nt);..#if !defin
24fd0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
24fe0 49 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64  IEW) && !defined
24ff0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
25000 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74  GGER).void sqlit
25010 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65  e3MaterializeVie
25020 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  w(Parse*, Table*
25030 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23  , Expr*, int);.#
25040 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
25050 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
25060 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ER.  void sqlite
25070 33 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61  3BeginTrigger(Pa
25080 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b  rse*, Token*,Tok
25090 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69  en*,int,int,IdLi
250a0 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20  st*,SrcList*,.  
250b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250c0 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69           Expr*,i
250d0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
250e0 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72   sqlite3FinishTr
250f0 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
25100 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65  iggerStep*, Toke
25110 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  n*);.  void sqli
25120 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50  te3DropTrigger(P
25130 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
25140 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
25150 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
25160 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  Ptr(Parse*, Trig
25170 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  ger*);.  Trigger
25180 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
25190 73 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20  sExist(Parse *, 
251a0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Table*, int, Exp
251b0 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61  rList*, int *pMa
251c0 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  sk);.  Trigger *
251d0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69  sqlite3TriggerLi
251e0 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
251f0 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  e *);.  void sql
25200 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
25210 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
25220 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  er *, int, ExprL
25230 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65  ist*, int, Table
25240 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   *,.            
25250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25260 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
25270 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
25280 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
25290 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67  ct(Parse *, Trig
252a0 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20  ger *, Table *, 
252b0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
252c0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65    void sqliteVie
252d0 77 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a  wTriggers(Parse*
252e0 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c  , Table*, Expr*,
252f0 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29   int, ExprList*)
25300 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
25310 44 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65  DeleteTriggerSte
25320 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  p(sqlite3*, Trig
25330 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69  gerStep*);.  Tri
25340 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
25350 33 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74  3TriggerSelectSt
25360 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65  ep(sqlite3*,Sele
25370 63 74 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ct*);.  TriggerS
25380 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
25390 67 65 72 49 6e 73 65 72 74 53 74 65 70 28 73 71  gerInsertStep(sq
253a0 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49  lite3*,Token*, I
253b0 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  dList*,.        
253c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253e0 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54  Select*,u8);.  T
253f0 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
25400 74 65 33 54 72 69 67 67 65 72 55 70 64 61 74 65  te3TriggerUpdate
25410 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f  Step(sqlite3*,To
25420 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  ken*,ExprList*, 
25430 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72  Expr*, u8);.  Tr
25440 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
25450 65 33 54 72 69 67 67 65 72 44 65 6c 65 74 65 53  e3TriggerDeleteS
25460 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
25470 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76  en*, Expr*);.  v
25480 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
25490 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
254a0 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
254b0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
254c0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
254d0 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  er(sqlite3*,int,
254e0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
254f0 75 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67  u32 sqlite3Trigg
25500 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a  erColmask(Parse*
25510 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69  ,Trigger*,ExprLi
25520 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c  st*,int,int,Tabl
25530 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e  e*,int);.# defin
25540 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f  e sqlite3ParseTo
25550 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e  plevel(p) ((p)->
25560 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d  pToplevel ? (p)-
25570 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29  >pToplevel : (p)
25580 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
25590 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20  e3IsToplevel(p) 
255a0 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d  ((p)->pToplevel=
255b0 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  =0).#else.# defi
255c0 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
255d0 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c  rsExist(B,C,D,E,
255e0 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  F) 0.# define sq
255f0 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
25600 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  er(A,B).# define
25610 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
25620 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65  gerPtr(A,B).# de
25630 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69  fine sqlite3Unli
25640 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
25650 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69  er(A,B,C).# defi
25660 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  ne sqlite3CodeRo
25670 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44  wTrigger(A,B,C,D
25680 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65  ,E,F,G,H,I).# de
25690 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65  fine sqlite3Code
256a0 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74  RowTriggerDirect
256b0 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20  (A,B,C,D,E,F).# 
256c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
256d0 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20  iggerList(X, Y) 
256e0 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  0.# define sqlit
256f0 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28  e3ParseToplevel(
25700 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71  p) p.# define sq
25710 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28  lite3IsToplevel(
25720 70 29 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71  p) 1.# define sq
25730 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d  lite3TriggerColm
25740 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c  ask(A,B,C,D,E,F,
25750 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74  G) 0.#endif..int
25760 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65   sqlite3JoinType
25770 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
25780 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
25790 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ;.void sqlite3Cr
257a0 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50  eateForeignKey(P
257b0 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
257c0 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69  , Token*, ExprLi
257d0 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  st*, int);.void 
257e0 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65  sqlite3DeferFore
257f0 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69  ignKey(Parse*, i
25800 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  nt);.#ifndef SQL
25810 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49  ITE_OMIT_AUTHORI
25820 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ZATION.  void sq
25830 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 50 61  lite3AuthRead(Pa
25840 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d  rse*,Expr*,Schem
25850 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20  a*,SrcList*);.  
25860 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 43  int sqlite3AuthC
25870 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c  heck(Parse*,int,
25880 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
25890 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
258a0 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
258b0 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
258c0 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41  xtPush(Parse*, A
258d0 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e  uthContext*, con
258e0 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
258f0 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  d sqlite3AuthCon
25900 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74  textPop(AuthCont
25910 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ext*);.  int sql
25920 69 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28  ite3AuthReadCol(
25930 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
25940 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ar *, const char
25950 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a   *, int);.#else.
25960 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25970 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64  AuthRead(a,b,c,d
25980 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
25990 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c  e3AuthCheck(a,b,
259a0 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45  c,d,e)    SQLITE
259b0 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  _OK.# define sql
259c0 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
259d0 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66  ush(a,b,c).# def
259e0 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
259f0 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28 28  ontextPop(a)  ((
25a00 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66  void)(a)).#endif
25a10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74  .void sqlite3Att
25a20 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
25a30 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  *, Expr*, Expr*)
25a40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
25a50 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70  tach(Parse*, Exp
25a60 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
25a70 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65 72  3FixInit(DbFixer
25a80 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  *, Parse*, int, 
25a90 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
25aa0 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  st Token*);.int 
25ab0 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73  sqlite3FixSrcLis
25ac0 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c  t(DbFixer*, SrcL
25ad0 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
25ae0 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46 69  e3FixSelect(DbFi
25af0 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  xer*, Select*);.
25b00 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78  int sqlite3FixEx
25b10 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70  pr(DbFixer*, Exp
25b20 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
25b30 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46 69  FixExprList(DbFi
25b40 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  xer*, ExprList*)
25b50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
25b60 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46 69  TriggerStep(DbFi
25b70 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65  xer*, TriggerSte
25b80 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  p*);.int sqlite3
25b90 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20  AtoF(const char 
25ba0 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74  *z, double*, int
25bb0 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
25bc0 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74  e3GetInt32(const
25bd0 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a   char *, int*);.
25be0 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28  int sqlite3Atoi(
25bf0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
25c00 74 20 73 71 6c 69 74 65 33 55 74 66 31 36 42 79  t sqlite3Utf16By
25c10 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64  teLen(const void
25c20 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68   *pData, int nCh
25c30 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ar);.int sqlite3
25c40 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73  Utf8CharLen(cons
25c50 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69  t char *pData, i
25c60 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73  nt nByte);.u32 s
25c70 71 6c 69 74 65 33 55 74 66 38 52 65 61 64 28 63  qlite3Utf8Read(c
25c80 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45  onst u8**);.LogE
25c90 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  st sqlite3LogEst
25ca0 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71  (u64);.LogEst sq
25cb0 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28 4c  lite3LogEstAdd(L
25cc0 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23  ogEst,LogEst);.#
25cd0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
25ce0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
25cf0 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
25d00 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64  gEstFromDouble(d
25d10 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 75  ouble);.#endif.u
25d20 36 34 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  64 sqlite3LogEst
25d30 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 0a  ToInt(LogEst);..
25d40 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74  /*.** Routines t
25d50 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65  o read and write
25d60 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68   variable-length
25d70 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73   integers.  Thes
25d80 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20  e used to.** be 
25d90 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c  defined locally,
25da0 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20   but now we use 
25db0 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69  the varint routi
25dc0 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e  nes in the util.
25dd0 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e  c.** file..*/.in
25de0 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69  t sqlite3PutVari
25df0 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  nt(unsigned char
25e00 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c 69  *, u64);.u8 sqli
25e10 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e  te3GetVarint(con
25e20 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
25e30 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73   *, u64 *);.u8 s
25e40 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
25e50 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  2(const unsigned
25e60 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b   char *, u32 *);
25e70 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69  .int sqlite3Vari
25e80 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f  ntLen(u64 v);../
25e90 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20  *.** The common 
25ea0 63 61 73 65 20 69 73 20 66 6f 72 20 61 20 76 61  case is for a va
25eb0 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69 6e  rint to be a sin
25ec0 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79 20  gle byte.  They 
25ed0 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63  following.** mac
25ee0 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20 63  ros handle the c
25ef0 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68 6f  ommon case witho
25f00 75 74 20 61 20 70 72 6f 63 65 64 75 72 65 20 63  ut a procedure c
25f10 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63 61  all, but then ca
25f20 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65 64  ll.** the proced
25f30 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20 76  ure for larger v
25f40 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69  arints..*/.#defi
25f50 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28 41  ne getVarint32(A
25f60 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a  ,B)  \.  (u8)((*
25f70 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28  (A)<(u8)0x80)?((
25f80 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a  B)=(u32)*(A)),1:
25f90 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
25fa0 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28  32((A),(u32 *)&(
25fb0 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74  B))).#define put
25fc0 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c  Varint32(A,B)  \
25fd0 0a 20 20 28 75 38 29 28 28 28 75 33 32 29 28 42  .  (u8)(((u32)(B
25fe0 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28  )<(u32)0x80)?(*(
25ff0 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61  A)=(unsigned cha
26000 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c  r)(B)),1:\.  sql
26010 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 28 41  ite3PutVarint((A
26020 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  ),(B))).#define 
26030 67 65 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c  getVarint    sql
26040 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64  ite3GetVarint.#d
26050 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20  efine putVarint 
26060 20 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72     sqlite3PutVar
26070 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72  int...const char
26080 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66   *sqlite3IndexAf
26090 66 69 6e 69 74 79 53 74 72 28 73 71 6c 69 74 65  finityStr(sqlite
260a0 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  3*, Index*);.voi
260b0 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66  d sqlite3TableAf
260c0 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54 61  finity(Vdbe*, Ta
260d0 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72  ble*, int);.char
260e0 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41   sqlite3CompareA
260f0 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45  ffinity(Expr *pE
26100 78 70 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b  xpr, char aff2);
26110 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65  .int sqlite3Inde
26120 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72  xAffinityOk(Expr
26130 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69 64   *pExpr, char id
26140 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61  x_affinity);.cha
26150 72 20 73 71 6c 69 74 65 33 45 78 70 72 41 66 66  r sqlite3ExprAff
26160 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70  inity(Expr *pExp
26170 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  r);.int sqlite3A
26180 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72  toi64(const char
26190 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38  *, i64*, int, u8
261a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65  );.int sqlite3De
261b0 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73  cOrHexToI64(cons
261c0 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a  t char*, i64*);.
261d0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
261e0 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33  rWithMsg(sqlite3
261f0 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
26200 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  ar*,...);.void s
26210 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69  qlite3Error(sqli
26220 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
26230 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f  *sqlite3HexToBlo
26240 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73  b(sqlite3*, cons
26250 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e  t char *z, int n
26260 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78  );.u8 sqlite3Hex
26270 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e  ToInt(int h);.in
26280 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74  t sqlite3TwoPart
26290 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f  Name(Parse *, To
262a0 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20  ken *, Token *, 
262b0 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20  Token **);..#if 
262c0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4e  defined(SQLITE_N
262d0 45 45 44 5f 45 52 52 5f 4e 41 4d 45 29 0a 63 6f  EED_ERR_NAME).co
262e0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
262f0 33 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23  3ErrName(int);.#
26300 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61  endif..const cha
26310 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72  r *sqlite3ErrStr
26320 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
26330 65 33 52 65 61 64 53 63 68 65 6d 61 28 50 61 72  e3ReadSchema(Par
26340 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c  se *pParse);.Col
26350 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e  lSeq *sqlite3Fin
26360 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33  dCollSeq(sqlite3
26370 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20  *,u8 enc, const 
26380 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c  char*,int);.Coll
26390 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  Seq *sqlite3Loca
263a0 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  teCollSeq(Parse 
263b0 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
263c0 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c  har*zName);.Coll
263d0 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72  Seq *sqlite3Expr
263e0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
263f0 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78  Parse, Expr *pEx
26400 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  pr);.Expr *sqlit
26410 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65  e3ExprAddCollate
26420 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61  Token(Parse *pPa
26430 72 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73  rse, Expr*, cons
26440 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a  t Token*, int);.
26450 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
26460 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e  rAddCollateStrin
26470 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63  g(Parse*,Expr*,c
26480 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70  onst char*);.Exp
26490 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b  r *sqlite3ExprSk
264a0 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29  ipCollate(Expr*)
264b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65  ;.int sqlite3Che
264c0 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  ckCollSeq(Parse 
264d0 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69  *, CollSeq *);.i
264e0 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f  nt sqlite3CheckO
264f0 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20  bjectName(Parse 
26500 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
26510 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  ;.void sqlite3Vd
26520 62 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c  beSetChanges(sql
26530 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e  ite3 *, int);.in
26540 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36  t sqlite3AddInt6
26550 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
26560 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34   sqlite3SubInt64
26570 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
26580 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28  sqlite3MulInt64(
26590 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
265a0 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69  qlite3AbsInt32(i
265b0 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nt);.#ifdef SQLI
265c0 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41  TE_ENABLE_8_3_NA
265d0 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  MES.void sqlite3
265e0 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73  FileSuffix3(cons
265f0 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b  t char*, char*);
26600 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
26610 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69  sqlite3FileSuffi
26620 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75  x3(X,Y).#endif.u
26630 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  8 sqlite3GetBool
26640 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ean(const char *
26650 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f  z,u8);..const vo
26660 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65  id *sqlite3Value
26670 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c  Text(sqlite3_val
26680 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  ue*, u8);.int sq
26690 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28  lite3ValueBytes(
266a0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
266b0 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
266c0 33 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c  3ValueSetStr(sql
266d0 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74  ite3_value*, int
266e0 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75  , const void *,u
266f0 38 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  8, .            
26700 20 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64              void
26710 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69  (*)(void*));.voi
26720 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65  d sqlite3ValueSe
26730 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61  tNull(sqlite3_va
26740 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  lue*);.void sqli
26750 74 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c  te3ValueFree(sql
26760 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71  ite3_value*);.sq
26770 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c  lite3_value *sql
26780 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c  ite3ValueNew(sql
26790 69 74 65 33 20 2a 29 3b 0a 63 68 61 72 20 2a 73  ite3 *);.char *s
267a0 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28 73  qlite3Utf16to8(s
267b0 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
267c0 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  void*, int, u8);
267d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75  .int sqlite3Valu
267e0 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65  eFromExpr(sqlite
267f0 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c  3 *, Expr *, u8,
26800 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c   u8, sqlite3_val
26810 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ue **);.void sql
26820 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66  ite3ValueApplyAf
26830 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76  finity(sqlite3_v
26840 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b  alue *, u8, u8);
26850 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
26860 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74  AMALGAMATION.ext
26870 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
26880 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f  ed char sqlite3O
26890 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b  pcodeProperty[];
268a0 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
268b0 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
268c0 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  te3UpperToLower[
268d0 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
268e0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
268f0 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b  lite3CtypeMap[];
26900 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f  .extern const To
26910 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e 74 54 6f  ken sqlite3IntTo
26920 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53  kens[];.extern S
26930 51 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63 74  QLITE_WSD struct
26940 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73   Sqlite3Config s
26950 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78  qlite3Config;.ex
26960 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20  tern SQLITE_WSD 
26970 46 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69  FuncDefHash sqli
26980 74 65 33 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f  te3GlobalFunctio
26990 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ns;.#ifndef SQLI
269a0 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65  TE_OMIT_WSD.exte
269b0 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65  rn int sqlite3Pe
269c0 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69  ndingByte;.#endi
269d0 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  f.#endif.void sq
269e0 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76  lite3RootPageMov
269f0 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ed(sqlite3*, int
26a00 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
26a10 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78  d sqlite3Reindex
26a20 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
26a30 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
26a40 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74  qlite3AlterFunct
26a50 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ions(void);.void
26a60 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e   sqlite3AlterRen
26a70 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ameTable(Parse*,
26a80 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
26a90 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
26aa0 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e  etToken(const un
26ab0 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69  signed char *, i
26ac0 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  nt *);.void sqli
26ad0 74 65 33 4e 65 73 74 65 64 50 61 72 73 65 28 50  te3NestedParse(P
26ae0 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
26af0 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  r*, ...);.void s
26b00 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
26b10 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73  aredStatements(s
26b20 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
26b30 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65  lite3CodeSubsele
26b40 63 74 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72  ct(Parse *, Expr
26b50 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76   *, int, int);.v
26b60 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
26b70 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65  tPrep(Parse*, Se
26b80 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65  lect*, NameConte
26b90 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  xt*);.void sqlit
26ba0 65 33 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d  e3SelectWrongNum
26bb0 54 65 72 6d 73 45 72 72 6f 72 28 50 61 72 73 65  TermsError(Parse
26bc0 20 2a 70 50 61 72 73 65 2c 20 53 65 6c 65 63 74   *pParse, Select
26bd0 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   *p);.int sqlite
26be0 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63  3MatchSpanName(c
26bf0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
26c00 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
26c10 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
26c20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
26c30 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28  esolveExprNames(
26c40 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
26c50 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
26c60 33 52 65 73 6f 6c 76 65 45 78 70 72 4c 69 73 74  3ResolveExprList
26c70 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  Names(NameContex
26c80 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  t*, ExprList*);.
26c90 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
26ca0 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50  lveSelectNames(P
26cb0 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
26cc0 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76  NameContext*);.v
26cd0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
26ce0 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28  veSelfReference(
26cf0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
26d00 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  t,Expr*,ExprList
26d10 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
26d20 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70  esolveOrderGroup
26d30 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  By(Parse*, Selec
26d40 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  t*, ExprList*, c
26d50 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
26d60 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44  d sqlite3ColumnD
26d70 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54  efault(Vdbe *, T
26d80 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  able *, int, int
26d90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
26da0 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c  lterFinishAddCol
26db0 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  umn(Parse *, Tok
26dc0 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  en *);.void sqli
26dd0 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64  te3AlterBeginAdd
26de0 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
26df0 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c  SrcList *);.Coll
26e00 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43  Seq *sqlite3GetC
26e10 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75  ollSeq(Parse*, u
26e20 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f  8, CollSeq *, co
26e30 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72  nst char*);.char
26e40 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79   sqlite3Affinity
26e50 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  Type(const char*
26e60 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  , u8*);.void sql
26e70 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73  ite3Analyze(Pars
26e80 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
26e90 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
26ea0 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65  InvokeBusyHandle
26eb0 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b  r(BusyHandler*);
26ec0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
26ed0 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b  Db(sqlite3*, Tok
26ee0 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
26ef0 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69  3FindDbName(sqli
26f00 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
26f10 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r *);.int sqlite
26f20 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71  3AnalysisLoad(sq
26f30 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b  lite3*,int iDB);
26f40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
26f50 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28  eteIndexSamples(
26f60 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29  sqlite3*,Index*)
26f70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
26f80 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65  faultRowEst(Inde
26f90 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
26fa0 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e  3RegisterLikeFun
26fb0 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c  ctions(sqlite3*,
26fc0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
26fd0 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e  e3IsLikeFunction
26fe0 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
26ff0 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69  int*,char*);.voi
27000 64 20 73 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d  d sqlite3Minimum
27010 46 69 6c 65 46 6f 72 6d 61 74 28 50 61 72 73 65  FileFormat(Parse
27020 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
27030 69 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  id sqlite3Schema
27040 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53  Clear(void *);.S
27050 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63  chema *sqlite3Sc
27060 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20  hemaGet(sqlite3 
27070 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74  *, Btree *);.int
27080 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f   sqlite3SchemaTo
27090 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64  Index(sqlite3 *d
270a0 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65  b, Schema *);.Ke
270b0 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
270c0 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74  yInfoAlloc(sqlit
270d0 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f  e3*,int,int);.vo
270e0 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  id sqlite3KeyInf
270f0 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29  oUnref(KeyInfo*)
27100 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
27110 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65 79  e3KeyInfoRef(Key
27120 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20  Info*);.KeyInfo 
27130 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f  *sqlite3KeyInfoO
27140 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 49  fIndex(Parse*, I
27150 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65 66 20 53  ndex*);.#ifdef S
27160 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20  QLITE_DEBUG.int 
27170 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73  sqlite3KeyInfoIs
27180 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66  Writeable(KeyInf
27190 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  o*);.#endif.int 
271a0 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e  sqlite3CreateFun
271b0 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  c(sqlite3 *, con
271c0 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20  st char *, int, 
271d0 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20  int, void *, .  
271e0 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
271f0 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
27200 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
27210 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
27220 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
27230 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
27240 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c  *), void (*)(sql
27250 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a  ite3_context*),.
27260 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72    FuncDestructor
27270 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b   *pDestructor.);
27280 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45  .int sqlite3ApiE
27290 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  xit(sqlite3 *db,
272a0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
272b0 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61  e3OpenTempDataba
272c0 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f  se(Parse *);..vo
272d0 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
272e0 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a  umInit(StrAccum*
272f0 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72  , sqlite3*, char
27300 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
27310 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
27320 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63 75  umAppend(StrAccu
27330 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  m*,const char*,i
27340 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
27350 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 41  3StrAccumAppendA
27360 6c 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e  ll(StrAccum*,con
27370 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
27380 73 71 6c 69 74 65 33 41 70 70 65 6e 64 43 68 61  sqlite3AppendCha
27390 72 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74 2c  r(StrAccum*,int,
273a0 63 68 61 72 29 3b 0a 63 68 61 72 20 2a 73 71 6c  char);.char *sql
273b0 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69  ite3StrAccumFini
273c0 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76  sh(StrAccum*);.v
273d0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
273e0 63 75 6d 52 65 73 65 74 28 53 74 72 41 63 63 75  cumReset(StrAccu
273f0 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  m*);.void sqlite
27400 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28  3SelectDestInit(
27410 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c  SelectDest*,int,
27420 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
27430 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45  te3CreateColumnE
27440 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53  xpr(sqlite3 *, S
27450 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69  rcList *, int, i
27460 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74  nt);..void sqlit
27470 65 33 42 61 63 6b 75 70 52 65 73 74 61 72 74 28  e3BackupRestart(
27480 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a  sqlite3_backup *
27490 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
274a0 61 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69  ackupUpdate(sqli
274b0 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67  te3_backup *, Pg
274c0 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b  no, const u8 *);
274d0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
274e0 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
274f0 53 54 41 54 34 0a 76 6f 69 64 20 73 71 6c 69 74  STAT4.void sqlit
27500 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f  e3AnalyzeFunctio
27510 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71  ns(void);.int sq
27520 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 53  lite3Stat4ProbeS
27530 65 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 49  etValue(Parse*,I
27540 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65  ndex*,UnpackedRe
27550 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 75 38 2c  cord**,Expr*,u8,
27560 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  int,int*);.int s
27570 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c 75 65  qlite3Stat4Value
27580 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65 2a 2c  FromExpr(Parse*,
27590 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69   Expr*, u8, sqli
275a0 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f  te3_value**);.vo
275b0 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 34 50  id sqlite3Stat4P
275c0 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b 65  robeFree(Unpacke
275d0 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73  dRecord*);.int s
275e0 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c 75 6d  qlite3Stat4Colum
275f0 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73  n(sqlite3*, cons
27600 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e  t void*, int, in
27610 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  t, sqlite3_value
27620 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  **);.#endif../*.
27630 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
27640 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65   to the LEMON-ge
27650 6e 65 72 61 74 65 64 20 70 61 72 73 65 72 0a 2a  nerated parser.*
27660 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50  /.void *sqlite3P
27670 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a  arserAlloc(void*
27680 28 2a 29 28 75 36 34 29 29 3b 0a 76 6f 69 64 20  (*)(u64));.void 
27690 73 71 6c 69 74 65 33 50 61 72 73 65 72 46 72 65  sqlite3ParserFre
276a0 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29  e(void*, void(*)
276b0 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73  (void*));.void s
276c0 71 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f 69  qlite3Parser(voi
276d0 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20  d*, int, Token, 
276e0 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20  Parse*);.#ifdef 
276f0 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44  YYTRACKMAXSTACKD
27700 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74  EPTH.  int sqlit
27710 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65 61  e3ParserStackPea
27720 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66  k(void*);.#endif
27730 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75  ..void sqlite3Au
27740 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73  toLoadExtensions
27750 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e  (sqlite3*);.#ifn
27760 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
27770 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20  LOAD_EXTENSION. 
27780 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f   void sqlite3Clo
27790 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c  seExtensions(sql
277a0 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  ite3*);.#else.# 
277b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c  define sqlite3Cl
277c0 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29  oseExtensions(X)
277d0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
277e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
277f0 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64  RED_CACHE.  void
27800 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
27810 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20  k(Parse *, int, 
27820 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63  int, u8, const c
27830 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  har *);.#else.  
27840 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54  #define sqlite3T
27850 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79  ableLock(v,w,x,y
27860 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  ,z).#endif..#ifd
27870 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
27880 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38   int sqlite3Utf8
27890 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61  To8(unsigned cha
278a0 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
278b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
278c0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20  VIRTUALTABLE.#  
278d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
278e0 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65  abClear(Y).#  de
278f0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
27900 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45  Sync(X,Y) SQLITE
27910 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71  _OK.#  define sq
27920 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63  lite3VtabRollbac
27930 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  k(X).#  define s
27940 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74  qlite3VtabCommit
27950 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
27960 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28  lite3VtabInSync(
27970 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20  db) 0.#  define 
27980 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28  sqlite3VtabLock(
27990 58 29 20 0a 23 20 20 64 65 66 69 6e 65 20 73 71  X) .#  define sq
279a0 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
279b0 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
279c0 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
279d0 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  st(X).#  define 
279e0 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
279f0 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51  oint(X, Y, Z) SQ
27a00 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e  LITE_OK.#  defin
27a10 65 20 73 71 6c 69 74 65 33 47 65 74 56 54 61 62  e sqlite3GetVTab
27a20 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c  le(X,Y)  ((VTabl
27a30 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76  e*)0).#else.   v
27a40 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 43  oid sqlite3VtabC
27a50 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62  lear(sqlite3 *db
27a60 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f  , Table*);.   vo
27a70 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 44 69  id sqlite3VtabDi
27a80 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33  sconnect(sqlite3
27a90 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b   *db, Table *p);
27aa0 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
27ab0 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20  tabSync(sqlite3 
27ac0 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20  *db, Vdbe*);.   
27ad0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52  int sqlite3VtabR
27ae0 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20  ollback(sqlite3 
27af0 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  *db);.   int sql
27b00 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73  ite3VtabCommit(s
27b10 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20  qlite3 *db);.   
27b20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
27b30 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a  Lock(VTable *);.
27b40 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
27b50 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65  tabUnlock(VTable
27b60 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c   *);.   void sql
27b70 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
27b80 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20  st(sqlite3*);.  
27b90 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
27ba0 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65  Savepoint(sqlite
27bb0 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  3 *, int, int);.
27bc0 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
27bd0 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
27be0 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76  Vdbe*, sqlite3_v
27bf0 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65  tab*);.   VTable
27c00 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62   *sqlite3GetVTab
27c10 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62  le(sqlite3*, Tab
27c20 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65 20  le*);.#  define 
27c30 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e  sqlite3VtabInSyn
27c40 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54  c(db) ((db)->nVT
27c50 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e  rans>0 && (db)->
27c60 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64  aVTrans==0).#end
27c70 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  if.int sqlite3Vt
27c80 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65  abEponymousTable
27c90 49 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75  Init(Parse*,Modu
27ca0 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
27cb0 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54  e3VtabEponymousT
27cc0 61 62 6c 65 43 6c 65 61 72 28 73 71 6c 69 74 65  ableClear(sqlite
27cd0 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69  3*,Module*);.voi
27ce0 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b  d sqlite3VtabMak
27cf0 65 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a  eWritable(Parse*
27d00 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  ,Table*);.void s
27d10 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50  qlite3VtabBeginP
27d20 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
27d30 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
27d40 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  en*, int);.void 
27d50 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73  sqlite3VtabFinis
27d60 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  hParse(Parse*, T
27d70 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
27d80 69 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28  ite3VtabArgInit(
27d90 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
27da0 6c 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65  lite3VtabArgExte
27db0 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  nd(Parse*, Token
27dc0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
27dd0 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71  tabCallCreate(sq
27de0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
27df0 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20  st char *, char 
27e00 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
27e10 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28  VtabCallConnect(
27e20 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
27e30 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
27e40 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69  CallDestroy(sqli
27e50 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
27e60 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
27e70 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73  lite3VtabBegin(s
27e80 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65  qlite3 *, VTable
27e90 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71   *);.FuncDef *sq
27ea0 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61  lite3VtabOverloa
27eb0 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
27ec0 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e  3 *,FuncDef*, in
27ed0 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a  t nArg, Expr*);.
27ee0 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61  void sqlite3Inva
27ef0 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  lidFunction(sqli
27f00 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
27f10 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
27f20 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  );.sqlite3_int64
27f30 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72   sqlite3StmtCurr
27f40 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f  entTime(sqlite3_
27f50 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73  context*);.int s
27f60 71 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65  qlite3VdbeParame
27f70 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20  terIndex(Vdbe*, 
27f80 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
27f90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72  );.int sqlite3Tr
27fa0 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73  ansferBindings(s
27fb0 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73  qlite3_stmt *, s
27fc0 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a  qlite3_stmt *);.
27fd0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
27fe0 65 72 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b  erReset(Parse*);
27ff0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72  .int sqlite3Repr
28000 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f  epare(Vdbe*);.vo
28010 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
28020 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61  stCheckLength(Pa
28030 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
28040 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43   const char*);.C
28050 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42  ollSeq *sqlite3B
28060 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c  inaryCompareColl
28070 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70  Seq(Parse *, Exp
28080 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e  r *, Expr *);.in
28090 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d  t sqlite3TempInM
280a0 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69  emory(const sqli
280b0 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61  te3*);.const cha
280c0 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  r *sqlite3Journa
280d0 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a  lModename(int);.
280e0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
280f0 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71  MIT_WAL.  int sq
28100 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28  lite3Checkpoint(
28110 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69  sqlite3*, int, i
28120 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  nt, int*, int*);
28130 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61  .  int sqlite3Wa
28140 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69  lDefaultHook(voi
28150 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
28160 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65  t char*,int);.#e
28170 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
28180 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57  ITE_OMIT_CTE.  W
28190 69 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68  ith *sqlite3With
281a0 41 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a  Add(Parse*,With*
281b0 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
281c0 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f  *,Select*);.  vo
281d0 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 44 65  id sqlite3WithDe
281e0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69  lete(sqlite3*,Wi
281f0 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  th*);.  void sql
28200 69 74 65 33 57 69 74 68 50 75 73 68 28 50 61 72  ite3WithPush(Par
28210 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b  se*, With*, u8);
28220 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73  .#else.#define s
28230 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 78  qlite3WithPush(x
28240 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71  ,y,z).#define sq
28250 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28  lite3WithDelete(
28260 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  x,y).#endif../* 
28270 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72  Declarations for
28280 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b   functions in fk
28290 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65  ey.c. All of the
282a0 73 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20  se are replaced 
282b0 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72  by.** no-op macr
282c0 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49  os if OMIT_FOREI
282d0 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65  GN_KEY is define
282e0 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  d. In this case 
282f0 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  no foreign.** ke
28300 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  y functionality 
28310 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66  is available. If
28320 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73   OMIT_TRIGGER is
28330 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20   defined but.** 
28340 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
28350 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f   is not, only so
28360 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
28370 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e  ons are no-oped.
28380 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65   In.** this case
28390 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72   foreign keys ar
283a0 65 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f  e parsed, but no
283b0 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61   other functiona
283c0 6c 69 74 79 20 69 73 20 0a 2a 2a 20 70 72 6f 76  lity is .** prov
283d0 69 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e  ided (enforcemen
283e0 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69  t of FK constrai
283f0 6e 74 73 20 72 65 71 75 69 72 65 73 20 74 68 65  nts requires the
28400 20 74 72 69 67 67 65 72 73 20 73 75 62 2d 73 79   triggers sub-sy
28410 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64  stem)..*/.#if !d
28420 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
28430 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20  IT_FOREIGN_KEY) 
28440 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
28450 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29  TE_OMIT_TRIGGER)
28460 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
28470 6b 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54  kCheck(Parse*, T
28480 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
28490 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76   int*, int);.  v
284a0 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f  oid sqlite3FkDro
284b0 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  pTable(Parse*, S
284c0 72 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a  rcList *, Table*
284d0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
284e0 33 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65  3FkActions(Parse
284f0 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c  *, Table*, ExprL
28500 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c  ist*, int, int*,
28510 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c   int);.  int sql
28520 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 50  ite3FkRequired(P
28530 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
28540 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32  nt*, int);.  u32
28550 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73   sqlite3FkOldmas
28560 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  k(Parse*, Table*
28570 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74  );.  FKey *sqlit
28580 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54  e3FkReferences(T
28590 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20  able *);.#else. 
285a0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
285b0 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c  FkActions(a,b,c,
285c0 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65  d,e,f).  #define
285d0 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28   sqlite3FkCheck(
285e0 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23  a,b,c,d,e,f).  #
285f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
28600 44 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29  DropTable(a,b,c)
28610 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
28620 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29  e3FkOldmask(a,b)
28630 20 20 20 20 20 20 20 20 20 30 0a 20 20 23 64 65           0.  #de
28640 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65  fine sqlite3FkRe
28650 71 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20  quired(a,b,c,d) 
28660 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e     0.#endif.#ifn
28670 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
28680 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f  FOREIGN_KEY.  vo
28690 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65  id sqlite3FkDele
286a0 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61  te(sqlite3 *, Ta
286b0 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ble*);.  int sql
286c0 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
286d0 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  x(Parse*,Table*,
286e0 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e  FKey*,Index**,in
286f0 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  t**);.#else.  #d
28700 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
28710 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65  elete(a,b).  #de
28720 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f  fine sqlite3FkLo
28730 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c  cateIndex(a,b,c,
28740 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  d,e).#endif.../*
28750 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61  .** Available fa
28760 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20  ult injectors.  
28770 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72  Should be number
28780 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ed beginning wit
28790 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  h 0..*/.#define 
287a0 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45  SQLITE_FAULTINJE
287b0 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  CTOR_MALLOC     
287c0 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  0.#define SQLITE
287d0 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43  _FAULTINJECTOR_C
287e0 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a  OUNT      1../*.
287f0 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
28800 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20   to the code in 
28810 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72  fault.c used for
28820 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65   identifying "be
28830 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20  nign".** malloc 
28840 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69  failures. This i
28850 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69  s only present i
28860 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
28870 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73  ILTIN_TEST.** is
28880 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f   not defined..*/
28890 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
288a0 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
288b0 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
288c0 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
288d0 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20  c(void);.  void 
288e0 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
288f0 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65  Malloc(void);.#e
28900 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
28910 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
28920 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69  Malloc().  #defi
28930 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  ne sqlite3EndBen
28940 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64  ignMalloc().#end
28950 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  if../*.** Allowe
28960 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20  d return values 
28970 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e 64  from sqlite3Find
28980 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65  InIndex().*/.#de
28990 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f  fine IN_INDEX_RO
289a0 57 49 44 20 20 20 20 20 20 20 20 31 20 20 20 2f  WID        1   /
289b0 2a 20 53 65 61 72 63 68 20 74 68 65 20 72 6f 77  * Search the row
289c0 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  id of the table 
289d0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
289e0 44 45 58 5f 45 50 48 20 20 20 20 20 20 20 20 20  DEX_EPH         
289f0 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68 20 61   2   /* Search a
28a00 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d 74 72  n ephemeral b-tr
28a10 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  ee */.#define IN
28a20 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43  _INDEX_INDEX_ASC
28a30 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69 73 74      3   /* Exist
28a40 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45 4e 44  ing index ASCEND
28a50 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ING */.#define I
28a60 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45  N_INDEX_INDEX_DE
28a70 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78 69 73  SC   4   /* Exis
28a80 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53 43 45  ting index DESCE
28a90 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65  NDING */.#define
28aa0 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20   IN_INDEX_NOOP  
28ab0 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f         5   /* No
28ac0 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62 6c 65   table available
28ad0 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e  . Use comparison
28ae0 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  s */./*.** Allow
28af0 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65  ed flags for the
28b00 20 33 72 64 20 70 61 72 61 6d 65 74 65 72 20 74   3rd parameter t
28b10 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  o sqlite3FindInI
28b20 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69  ndex()..*/.#defi
28b30 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  ne IN_INDEX_NOOP
28b40 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31 20 20  _OK     0x0001  
28b50 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20  /* OK to return 
28b60 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f  IN_INDEX_NOOP */
28b70 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
28b80 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20 30 78  X_MEMBERSHIP  0x
28b90 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72  0002  /* IN oper
28ba0 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20 6d 65  ator used for me
28bb0 6d 62 65 72 73 68 69 70 20 74 65 73 74 20 2a 2f  mbership test */
28bc0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
28bd0 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20 30 78  X_LOOP        0x
28be0 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72  0004  /* IN oper
28bf0 61 74 6f 72 20 75 73 65 64 20 61 73 20 61 20 6c  ator used as a l
28c00 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  oop */.int sqlit
28c10 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61  e3FindInIndex(Pa
28c20 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75  rse *, Expr *, u
28c30 33 32 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69 66 64  32, int*);..#ifd
28c40 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
28c50 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20  _ATOMIC_WRITE.  
28c60 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
28c70 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76  alOpen(sqlite3_v
28c80 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  fs *, const char
28c90 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65   *, sqlite3_file
28ca0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20   *, int, int);. 
28cb0 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
28cc0 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f  nalSize(sqlite3_
28cd0 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  vfs *);.  int sq
28ce0 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61  lite3JournalCrea
28cf0 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  te(sqlite3_file 
28d00 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
28d10 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 73  3JournalExists(s
28d20 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b  qlite3_file *p);
28d30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
28d40 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53   sqlite3JournalS
28d50 69 7a 65 28 70 56 66 73 29 20 28 28 70 56 66 73  ize(pVfs) ((pVfs
28d60 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a 20 20 23  )->szOsFile).  #
28d70 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f  define sqlite3Jo
28d80 75 72 6e 61 6c 45 78 69 73 74 73 28 70 29 20 31  urnalExists(p) 1
28d90 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71  .#endif..void sq
28da0 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f  lite3MemJournalO
28db0 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  pen(sqlite3_file
28dc0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
28dd0 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 76  MemJournalSize(v
28de0 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  oid);.int sqlite
28df0 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28 73 71  3IsMemJournal(sq
28e00 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a  lite3_file *);..
28e10 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
28e20 53 65 74 48 65 69 67 68 74 41 6e 64 46 6c 61 67  SetHeightAndFlag
28e30 73 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  s(Parse *pParse,
28e40 20 45 78 70 72 20 2a 70 29 3b 0a 23 69 66 20 53   Expr *p);.#if S
28e50 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
28e60 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 73 71 6c  EPTH>0.  int sql
28e70 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65  ite3SelectExprHe
28e80 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a  ight(Select *);.
28e90 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70    int sqlite3Exp
28ea0 72 43 68 65 63 6b 48 65 69 67 68 74 28 50 61 72  rCheckHeight(Par
28eb0 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65  se*, int);.#else
28ec0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
28ed0 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67  e3SelectExprHeig
28ee0 68 74 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e  ht(x) 0.  #defin
28ef0 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  e sqlite3ExprChe
28f00 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65  ckHeight(x,y).#e
28f10 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65  ndif..u32 sqlite
28f20 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20  3Get4byte(const 
28f30 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
28f40 65 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20  e3Put4byte(u8*, 
28f50 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  u32);..#ifdef SQ
28f60 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f  LITE_ENABLE_UNLO
28f70 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64  CK_NOTIFY.  void
28f80 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
28f90 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65  onBlocked(sqlite
28fa0 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b  3 *, sqlite3 *);
28fb0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
28fc0 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65  onnectionUnlocke
28fd0 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  d(sqlite3 *db);.
28fe0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
28ff0 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73  nnectionClosed(s
29000 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c  qlite3 *db);.#el
29010 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
29020 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c  ite3ConnectionBl
29030 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65  ocked(x,y).  #de
29040 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
29050 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78  ectionUnlocked(x
29060 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
29070 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f  te3ConnectionClo
29080 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23  sed(x).#endif..#
29090 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
290a0 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  UG.  void sqlite
290b0 33 50 61 72 73 65 72 54 72 61 63 65 28 46 49 4c  3ParserTrace(FIL
290c0 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e  E*, char *);.#en
290d0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68  dif../*.** If th
290e0 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20  e SQLITE_ENABLE 
290f0 49 4f 54 52 41 43 45 20 65 78 69 73 74 73 20 74  IOTRACE exists t
29100 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76  hen the global v
29110 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74  ariable.** sqlit
29120 65 33 49 6f 54 72 61 63 65 20 69 73 20 61 20 70  e3IoTrace is a p
29130 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e  ointer to a prin
29140 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20  tf-like routine 
29150 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74  used to.** print
29160 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73   I/O tracing mes
29170 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69 66 64 65  sages. .*/.#ifde
29180 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
29190 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65  IOTRACE.# define
291a0 20 49 4f 54 52 41 43 45 28 41 29 20 20 69 66 28   IOTRACE(A)  if(
291b0 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
291c0 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  ){ sqlite3IoTrac
291d0 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71  e A; }.  void sq
291e0 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65  lite3VdbeIOTrace
291f0 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49  Sql(Vdbe*);.SQLI
29200 54 45 5f 41 50 49 20 53 51 4c 49 54 45 5f 45 58  TE_API SQLITE_EX
29210 54 45 52 4e 20 76 6f 69 64 20 28 53 51 4c 49 54  TERN void (SQLIT
29220 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74 65 33  E_CDECL *sqlite3
29230 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63  IoTrace)(const c
29240 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65  har*,...);.#else
29250 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
29260 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71  E(A).# define sq
29270 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65  lite3VdbeIOTrace
29280 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f  Sql(X).#endif../
29290 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69  *.** These routi
292a0 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c  nes are availabl
292b0 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63  e for the mem2.c
292c0 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72   debugging memor
292d0 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f  y allocator.** o
292e0 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20 75  nly.  They are u
292f0 73 65 64 20 74 6f 20 76 65 72 69 66 79 20 74 68  sed to verify th
29300 61 74 20 64 69 66 66 65 72 65 6e 74 20 22 74 79  at different "ty
29310 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a  pes" of memory.*
29320 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72  * allocations ar
29330 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b  e properly track
29340 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d  ed by the system
29350 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  ..**.** sqlite3M
29360 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
29370 20 73 65 74 73 20 74 68 65 20 22 74 79 70 65 22   sets the "type"
29380 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f   of an allocatio
29390 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74  n to one of.** t
293a0 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63  he MEMTYPE_* mac
293b0 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f  ros defined belo
293c0 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75 73  w.  The type mus
293d0 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77  t be a bitmask w
293e0 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20  ith.** a single 
293f0 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73  bit set..**.** s
29400 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
29410 73 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20  sType() returns 
29420 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74  true if any of t
29430 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73  he bits in its s
29440 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e  econd.** argumen
29450 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65  t match the type
29460 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76   set by the prev
29470 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64  ious sqlite3Memd
29480 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a  ebugSetType()..*
29490 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
294a0 67 48 61 73 54 79 70 65 28 29 20 69 73 20 69 6e  gHasType() is in
294b0 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69  tended for use i
294c0 6e 73 69 64 65 20 61 73 73 65 72 74 28 29 20 73  nside assert() s
294d0 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
294e0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
294f0 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e 73  NoType() returns
29500 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66   true if none of
29510 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73   the bits in its
29520 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d   second.** argum
29530 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79  ent match the ty
29540 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72  pe set by the pr
29550 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65  evious sqlite3Me
29560 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e  mdebugSetType().
29570 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74  .**.** Perhaps t
29580 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e  he most importan
29590 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64  t point is the d
295a0 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
295b0 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a  n MEMTYPE_HEAP.*
295c0 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f  * and MEMTYPE_LO
295d0 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20  OKASIDE.  If an 
295e0 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45  allocation is ME
295f0 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c  MTYPE_LOOKASIDE,
29600 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69   that means.** i
29610 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65  t might have bee
29620 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c  n allocated by l
29630 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74  ookaside, except
29640 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20   the allocation 
29650 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65  was.** too large
29660 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61   or lookaside wa
29670 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20  s already full. 
29680 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74   It is important
29690 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68   to verify.** th
296a0 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74  at allocations t
296b0 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20 62  hat might have b
296c0 65 65 6e 20 73 61 74 69 73 66 69 65 64 20 62 79  een satisfied by
296d0 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e   lookaside are n
296e0 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63  ot.** passed bac
296f0 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69  k to non-lookasi
29700 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e  de free() routin
29710 65 73 2e 20 20 41 73 73 65 72 74 73 20 73 75 63  es.  Asserts suc
29720 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d  h as the.** exam
29730 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c  ple above are pl
29740 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d  aced on the non-
29750 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29  lookaside free()
29760 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72   routines to ver
29770 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73  ify.** this cons
29780 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20 41  traint. .**.** A
29790 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f  ll of this is no
297a0 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63  -op for a produc
297b0 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20  tion build.  It 
297c0 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a  only comes into.
297d0 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65  ** play when the
297e0 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
297f0 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
29800 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f  tion is used..*/
29810 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d  .#ifdef SQLITE_M
29820 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73  EMDEBUG.  void s
29830 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
29840 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  tType(void*,u8);
29850 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  .  int sqlite3Me
29860 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 76 6f  mdebugHasType(vo
29870 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73  id*,u8);.  int s
29880 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
29890 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a  Type(void*,u8);.
298a0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
298b0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
298c0 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e  tType(X,Y)  /* n
298d0 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65  o-op */.# define
298e0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
298f0 48 61 73 54 79 70 65 28 58 2c 59 29 20 20 31 0a  HasType(X,Y)  1.
29900 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
29910 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58  MemdebugNoType(X
29920 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23  ,Y)   1.#endif.#
29930 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48  define MEMTYPE_H
29940 45 41 50 20 20 20 20 20 20 20 30 78 30 31 20 20  EAP       0x01  
29950 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20  /* General heap 
29960 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23  allocations */.#
29970 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c  define MEMTYPE_L
29980 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20 20  OOKASIDE  0x02  
29990 2f 2a 20 48 65 61 70 20 74 68 61 74 20 6d 69 67  /* Heap that mig
299a0 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f  ht have been loo
299b0 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65 66 69 6e  kaside */.#defin
299c0 65 20 4d 45 4d 54 59 50 45 5f 53 43 52 41 54 43  e MEMTYPE_SCRATC
299d0 48 20 20 20 20 30 78 30 34 20 20 2f 2a 20 53 63  H    0x04  /* Sc
299e0 72 61 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e  ratch allocation
299f0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  s */.#define MEM
29a00 54 59 50 45 5f 50 43 41 43 48 45 20 20 20 20 20  TYPE_PCACHE     
29a10 30 78 30 38 20 20 2f 2a 20 50 61 67 65 20 63 61  0x08  /* Page ca
29a20 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  che allocations 
29a30 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64  */../*.** Thread
29a40 69 6e 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f  ing interface.*/
29a50 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
29a60 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30  WORKER_THREADS>0
29a70 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65  .int sqlite3Thre
29a80 61 64 43 72 65 61 74 65 28 53 51 4c 69 74 65 54  adCreate(SQLiteT
29a90 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29  hread**,void*(*)
29aa0 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a  (void*),void*);.
29ab0 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61  int sqlite3Threa
29ac0 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65  dJoin(SQLiteThre
29ad0 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65  ad*, void**);.#e
29ae0 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65  ndif..#if define
29af0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
29b00 44 42 53 54 41 54 5f 56 54 41 42 29 20 7c 7c 20  DBSTAT_VTAB) || 
29b10 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
29b20 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33  EST).int sqlite3
29b30 44 62 73 74 61 74 52 65 67 69 73 74 65 72 28 73  DbstatRegister(s
29b40 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66  qlite3*);.#endif
29b50 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c  ..#endif /* _SQL
29b60 49 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a           ITEINT_H_ */.