/ Hex Artifact Content
Login

Artifact 680a0371a53bf46a2ad795e4ef3ccf2df702a1b8:


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 2f 2a 20  e "mutex.h"../* 
7e90: 57 68 65 6e 20 75 73 69 6e 67 20 61 20 64 65 66  When using a def
7ea0: 61 75 6c 74 20 77 61 6c 20 73 61 66 65 74 79 20  ault wal safety 
7eb0: 6c 65 76 65 6c 2c 20 74 68 65 20 73 61 66 65 74  level, the safet
7ec0: 79 20 6c 65 76 65 6c 20 73 68 6f 75 6c 64 20 6f  y level should o
7ed0: 6e 6c 79 20 0a 2a 2a 20 63 68 61 6e 67 65 20 77  nly .** change w
7ee0: 69 74 68 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20  ith the journal 
7ef0: 6d 6f 64 65 20 69 66 20 74 68 65 20 75 73 65 72  mode if the user
7f00: 20 68 61 73 6e 27 74 20 6d 61 6e 75 61 6c 6c 79   hasn't manually
7f10: 20 73 70 65 63 69 66 69 65 64 20 0a 2a 2a 20 70   specified .** p
7f20: 72 61 67 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75  ragma synchronou
7f30: 73 2c 20 69 66 20 74 68 65 79 20 68 61 76 65 20  s, if they have 
7f40: 74 68 65 20 64 65 66 61 75 6c 74 73 20 73 68 6f  the defaults sho
7f50: 75 6c 64 6e 27 74 20 62 65 20 61 70 70 6c 69 65  uldn't be applie
7f60: 64 2e 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  d..** The SQLITE
7f70: 5f 53 41 46 45 54 59 4c 45 56 45 4c 5f 46 49 58  _SAFETYLEVEL_FIX
7f80: 45 44 20 76 61 6c 75 65 20 69 73 20 4f 52 65 64  ED value is ORed
7f90: 20 69 6e 74 6f 20 74 68 65 20 44 62 2d 3e 73 61   into the Db->sa
7fa0: 66 65 74 79 5f 6c 65 76 65 6c 0a 2a 2a 20 66 69  fety_level.** fi
7fb0: 65 6c 64 20 77 68 65 6e 20 74 68 65 20 75 73 65  eld when the use
7fc0: 72 20 68 61 73 20 73 70 65 63 69 66 69 65 64 20  r has specified 
7fd0: 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65  a synchronous se
7fe0: 74 74 69 6e 67 20 76 69 61 20 70 72 61 67 6d 61  tting via pragma
7ff0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
8000: 49 54 45 5f 53 41 46 45 54 59 4c 45 56 45 4c 5f  ITE_SAFETYLEVEL_
8010: 46 49 58 45 44 20 30 78 31 30 0a 23 64 65 66 69  FIXED 0x10.#defi
8020: 6e 65 20 53 51 4c 49 54 45 5f 53 41 46 45 54 59  ne SQLITE_SAFETY
8030: 4c 45 56 45 4c 5f 56 41 4c 55 45 5f 4d 41 53 4b  LEVEL_VALUE_MASK
8040: 20 30 78 30 33 0a 23 64 65 66 69 6e 65 20 53 51   0x03.#define SQ
8050: 4c 49 54 45 5f 44 62 53 61 66 65 74 79 4c 65 76  LITE_DbSafetyLev
8060: 65 6c 56 61 6c 75 65 28 6c 65 76 65 6c 29 20 28  elValue(level) (
8070: 6c 65 76 65 6c 26 53 51 4c 49 54 45 5f 53 41 46  level&SQLITE_SAF
8080: 45 54 59 4c 45 56 45 4c 5f 56 41 4c 55 45 5f 4d  ETYLEVEL_VALUE_M
8090: 41 53 4b 29 0a 23 64 65 66 69 6e 65 20 53 51 4c  ASK).#define SQL
80a0: 49 54 45 5f 44 62 53 61 66 65 74 79 4c 65 76 65  ITE_DbSafetyLeve
80b0: 6c 49 73 46 69 78 65 64 28 6c 65 76 65 6c 29 20  lIsFixed(level) 
80c0: 28 6c 65 76 65 6c 26 53 51 4c 49 54 45 5f 53 41  (level&SQLITE_SA
80d0: 46 45 54 59 4c 45 56 45 4c 5f 46 49 58 45 44 29  FETYLEVEL_FIXED)
80e0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
80f0: 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65  abase file to be
8100: 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65   accessed by the
8110: 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e   system is an in
8120: 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65  stance.** of the
8130: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
8140: 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65  ture.  There are
8150: 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66   normally two of
8160: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
8170: 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69  s.** in the sqli
8180: 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20  te.aDb[] array. 
8190: 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d   aDb[0] is the m
81a0: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
81b0: 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20  e and.** aDb[1] 
81c0: 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
81d0: 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c  file used to hol
81e0: 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  d temporary tabl
81f0: 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a  es.  Additional.
8200: 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79  ** databases may
8210: 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f   be attached..*/
8220: 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63  .struct Db {.  c
8230: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
8240: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
8250: 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
8260: 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20    Btree *pBt;   
8270: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a         /* The B*
8280: 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66  Tree structure f
8290: 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65  or this database
82a0: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61   file */.  u8 sa
82b0: 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20  fety_level;     
82c0: 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76  /* How aggressiv
82d0: 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74  e at syncing dat
82e0: 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53  a to disk */.  S
82f0: 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
8300: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
8310: 6f 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  o database schem
8320: 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72  a (possibly shar
8330: 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ed) */.};../*.**
8340: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
8350: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
8360: 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20 61  ructure stores a
8370: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
8380: 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68  ..**.** Most Sch
8390: 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ema objects are 
83a0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
83b0: 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65 78  a Btree.  The ex
83c0: 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68  ception is.** th
83d0: 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65  e Schema for the
83e0: 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20 28   TEMP databaes (
83f0: 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20  sqlite3.aDb[1]) 
8400: 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73 74  which is free-st
8410: 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68  anding..** In sh
8420: 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c  ared cache mode,
8430: 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61   a single Schema
8440: 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73   object can be s
8450: 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c  hared by multipl
8460: 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74  e.** Btrees that
8470: 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73 61   refer to the sa
8480: 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74  me underlying Bt
8490: 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a  Shared object..*
84a0: 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a  * .** Schema obj
84b0: 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74  ects are automat
84c0: 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74  ically deallocat
84d0: 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74  ed when the last
84e0: 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72   Btree that.** r
84f0: 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69  eferences them i
8500: 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54  s destroyed.   T
8510: 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69  he TEMP Schema i
8520: 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64  s manually freed
8530: 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63   by.** sqlite3_c
8540: 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74  lose()..*.** A t
8550: 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f  hread must be ho
8560: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
8570: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
8580: 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65  ng Btree in orde
8590: 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53  r.** to access S
85a0: 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20  chema content.  
85b0: 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61  This implies tha
85c0: 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73  t the thread mus
85d0: 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c  t also be.** hol
85e0: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
85f0: 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e  the sqlite3 conn
8600: 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74  ection pointer t
8610: 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72  hat owns the Btr
8620: 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d  ee..** For a TEM
8630: 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74  P Schema, only t
8640: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  he connection mu
8650: 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e  tex is required.
8660: 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d  .*/.struct Schem
8670: 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61  a {.  int schema
8680: 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61  _cookie;   /* Da
8690: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65  tabase schema ve
86a0: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72  rsion number for
86b0: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
86c0: 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b  int iGeneration;
86d0: 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69       /* Generati
86e0: 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63  on counter.  Inc
86f0: 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61  remented with ea
8700: 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48  ch change */.  H
8710: 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20  ash tblHash;    
8720: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65      /* All table
8730: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
8740: 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48  e */.  Hash idxH
8750: 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ash;        /* A
8760: 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63  ll (named) indic
8770: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
8780: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69  me */.  Hash tri
8790: 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  gHash;       /* 
87a0: 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64  All triggers ind
87b0: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
87c0: 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b    Hash fkeyHash;
87d0: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f         /* All fo
87e0: 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65  reign keys by re
87f0: 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e  ferenced table n
8800: 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ame */.  Table *
8810: 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a  pSeqTab;      /*
8820: 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   The sqlite_sequ
8830: 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20  ence table used 
8840: 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  by AUTOINCREMENT
8850: 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f   */.  u8 file_fo
8860: 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63  rmat;      /* Sc
8870: 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73  hema format vers
8880: 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ion for this fil
8890: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  e */.  u8 enc;  
88a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
88b0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65  ext encoding use
88c0: 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61  d by this databa
88d0: 73 65 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65  se */.  u16 sche
88e0: 6d 61 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20  maFlags;     /* 
88f0: 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  Flags associated
8900: 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d   with this schem
8910: 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65  a */.  int cache
8920: 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e  _size;      /* N
8930: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74  umber of pages t
8940: 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63  o use in the cac
8950: 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  he */.};../*.** 
8960: 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
8970: 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
8980: 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
8990: 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20  bits in the .** 
89a0: 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  Db.pSchema->flag
89b0: 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
89c0: 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72 74  ine DbHasPropert
89d0: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28  y(D,I,P)     (((
89e0: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
89f0: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26  ma->schemaFlags&
8a00: 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69  (P))==(P)).#defi
8a10: 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65  ne DbHasAnyPrope
8a20: 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44  rty(D,I,P)  (((D
8a30: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
8a40: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28  a->schemaFlags&(
8a50: 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  P))!=0).#define 
8a60: 44 62 53 65 74 50 72 6f 70 65 72 74 79 28 44 2c  DbSetProperty(D,
8a70: 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e 61 44  I,P)     (D)->aD
8a80: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  b[I].pSchema->sc
8a90: 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23  hemaFlags|=(P).#
8aa0: 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72  define DbClearPr
8ab0: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20  operty(D,I,P)   
8ac0: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
8ad0: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
8ae0: 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c  &=~(P)../*.** Al
8af0: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
8b00: 20 74 68 65 20 44 42 2e 70 53 63 68 65 6d 61 2d   the DB.pSchema-
8b10: 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a  >flags field..**
8b20: 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63 68 65 6d  .** The DB_Schem
8b30: 61 4c 6f 61 64 65 64 20 66 6c 61 67 20 69 73 20  aLoaded flag is 
8b40: 73 65 74 20 61 66 74 65 72 20 74 68 65 20 64 61  set after the da
8b50: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61  tabase schema ha
8b60: 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69  s been.** read i
8b70: 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61 73  nto internal has
8b80: 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20  h tables..**.** 
8b90: 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20  DB_UnresetViews 
8ba0: 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f  means that one o
8bb0: 72 20 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76  r more views hav
8bc0: 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74  e column names t
8bd0: 68 61 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e  hat.** have been
8be0: 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66   filled out.  If
8bf0: 20 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e   the schema chan
8c00: 67 65 73 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d  ges, these colum
8c10: 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a  n names might.**
8c20: 20 63 68 61 6e 67 65 73 20 61 6e 64 20 73 6f 20   changes and so 
8c30: 74 68 65 20 76 69 65 77 20 77 69 6c 6c 20 6e 65  the view will ne
8c40: 65 64 20 74 6f 20 62 65 20 72 65 73 65 74 2e 0a  ed to be reset..
8c50: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 53 63  */.#define DB_Sc
8c60: 68 65 6d 61 4c 6f 61 64 65 64 20 20 20 20 30 78  hemaLoaded    0x
8c70: 30 30 30 31 20 20 2f 2a 20 54 68 65 20 73 63 68  0001  /* The sch
8c80: 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61  ema has been loa
8c90: 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ded */.#define D
8ca0: 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 20  B_UnresetViews  
8cb0: 20 20 30 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d    0x0002  /* Som
8cc0: 65 20 76 69 65 77 73 20 68 61 76 65 20 64 65 66  e views have def
8cd0: 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  ined column name
8ce0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  s */.#define DB_
8cf0: 45 6d 70 74 79 20 20 20 20 20 20 20 20 20 20 20  Empty           
8d00: 30 78 30 30 30 34 20 20 2f 2a 20 54 68 65 20 66  0x0004  /* The f
8d10: 69 6c 65 20 69 73 20 65 6d 70 74 79 20 28 6c 65  ile is empty (le
8d20: 6e 67 74 68 20 30 20 62 79 74 65 73 29 20 2a 2f  ngth 0 bytes) */
8d30: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  ../*.** The numb
8d40: 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20  er of different 
8d50: 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20  kinds of things 
8d60: 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69  that can be limi
8d70: 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65  ted.** using the
8d80: 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29   sqlite3_limit()
8d90: 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23   interface..*/.#
8da0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f  define SQLITE_N_
8db0: 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49  LIMIT (SQLITE_LI
8dc0: 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MIT_WORKER_THREA
8dd0: 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f  DS+1)../*.** Loo
8de0: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73  kaside malloc is
8df0: 20 61 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d   a set of fixed-
8e00: 73 69 7a 65 20 62 75 66 66 65 72 73 20 74 68 61  size buffers tha
8e10: 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a  t can be used.**
8e20: 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c   to satisfy smal
8e30: 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f  l transient memo
8e40: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65  ry allocation re
8e50: 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63  quests for objec
8e60: 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64  ts.** associated
8e70: 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c   with a particul
8e80: 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ar database conn
8e90: 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65  ection.  The use
8ea0: 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65   of.** lookaside
8eb0: 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73   malloc provides
8ec0: 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70   a significant p
8ed0: 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e  erformance enhan
8ee0: 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f  cement.** (appro
8ef0: 78 20 31 30 25 29 20 62 79 20 61 76 6f 69 64 69  x 10%) by avoidi
8f00: 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c  ng numerous mall
8f10: 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73 74 73  oc/free requests
8f20: 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a   while parsing.*
8f30: 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  * SQL statements
8f40: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b  ..**.** The Look
8f50: 61 73 69 64 65 20 73 74 72 75 63 74 75 72 65 20  aside structure 
8f60: 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74  holds configurat
8f70: 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ion information 
8f80: 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f  about the.** loo
8f90: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75  kaside malloc su
8fa0: 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61  bsystem.  Each a
8fb0: 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20  vailable memory 
8fc0: 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a  allocation in.**
8fd0: 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73   the lookaside s
8fe0: 75 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72  ubsystem is stor
8ff0: 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed on a linked l
9000: 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65  ist of Lookaside
9010: 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e  Slot.** objects.
9020: 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65  .**.** Lookaside
9030: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
9040: 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f   only allowed fo
9050: 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61  r objects that a
9060: 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a  re associated.**
9070: 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c   with a particul
9080: 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ar database conn
9090: 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20  ection.  Hence, 
90a0: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
90b0: 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20  on cannot.** be 
90c0: 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73  stored in lookas
90d0: 69 64 65 20 62 65 63 61 75 73 65 20 69 6e 20 73  ide because in s
90e0: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
90f0: 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f   the schema info
9100: 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68  rmation.** is sh
9110: 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65  ared by multiple
9120: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
9130: 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72  tions.  Therefor
9140: 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  e, while parsing
9150: 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  .** schema infor
9160: 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b  mation, the Look
9170: 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66  aside.bEnabled f
9180: 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64 20 73  lag is cleared s
9190: 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73  o that.** lookas
91a0: 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ide allocations 
91b0: 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20  are not used to 
91c0: 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73 63  construct the sc
91d0: 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f  hema objects..*/
91e0: 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64  .struct Lookasid
91f0: 65 20 7b 0a 20 20 75 31 36 20 73 7a 3b 20 20 20  e {.  u16 sz;   
9200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9210: 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75   Size of each bu
9220: 66 66 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f  ffer in bytes */
9230: 0a 20 20 75 38 20 62 45 6e 61 62 6c 65 64 3b 20  .  u8 bEnabled; 
9240: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 61             /* Fa
9250: 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65 20 6e  lse to disable n
9260: 65 77 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ew lookaside all
9270: 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38  ocations */.  u8
9280: 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20   bMalloced;     
9290: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
92a0: 20 70 53 74 61 72 74 20 6f 62 74 61 69 6e 65 64   pStart obtained
92b0: 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61   from sqlite3_ma
92c0: 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  lloc() */.  int 
92d0: 6e 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  nOut;           
92e0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
92f0: 20 62 75 66 66 65 72 73 20 63 75 72 72 65 6e 74   buffers current
9300: 6c 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a  ly checked out *
9310: 2f 0a 20 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20  /.  int mxOut;  
9320: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
9330: 69 67 68 77 61 74 65 72 20 6d 61 72 6b 20 66 6f  ighwater mark fo
9340: 72 20 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20  r nOut */.  int 
9350: 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20  anStat[3];      
9360: 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20      /* 0: hits. 
9370: 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e   1: size misses.
9380: 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73    2: full misses
9390: 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53   */.  LookasideS
93a0: 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a  lot *pFree;   /*
93b0: 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c 61 62   List of availab
93c0: 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20  le buffers */.  
93d0: 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20 20 20  void *pStart;   
93e0: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
93f0: 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c 61 62   byte of availab
9400: 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20  le memory space 
9410: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b  */.  void *pEnd;
9420: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9430: 46 69 72 73 74 20 62 79 74 65 20 70 61 73 74 20  First byte past 
9440: 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  end of available
9450: 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72   space */.};.str
9460: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  uct LookasideSlo
9470: 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53  t {.  LookasideS
9480: 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f  lot *pNext;    /
9490: 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20 69 6e  * Next buffer in
94a0: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66 72 65   the list of fre
94b0: 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a  e buffers */.};.
94c0: 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74 61  ./*.** A hash ta
94d0: 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e  ble for function
94e0: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a   definitions..**
94f0: 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75  .** Hash each Fu
9500: 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20  ncDef structure 
9510: 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  into one of the 
9520: 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20  FuncDefHash.a[] 
9530: 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73  slots..** Collis
9540: 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20  ions are on the 
9550: 46 75 6e 63 44 65 66 2e 70 48 61 73 68 20 63 68  FuncDef.pHash ch
9560: 61 69 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  ain..*/.struct F
9570: 75 6e 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46  uncDefHash {.  F
9580: 75 6e 63 44 65 66 20 2a 61 5b 32 33 5d 3b 20 20  uncDef *a[23];  
9590: 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62       /* Hash tab
95a0: 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73  le for functions
95b0: 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53   */.};..#ifdef S
95c0: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
95d0: 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20  NTICATION./*.** 
95e0: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64  Information held
95f0: 20 69 6e 20 74 68 65 20 22 73 71 6c 69 74 65 33   in the "sqlite3
9600: 22 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  " database conne
9610: 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64  ction object and
9620: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61   used.** to mana
9630: 67 65 20 75 73 65 72 20 61 75 74 68 65 6e 74 69  ge user authenti
9640: 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64  cation..*/.typed
9650: 65 66 20 73 74 72 75 63 74 20 73 71 6c 69 74 65  ef struct sqlite
9660: 33 5f 75 73 65 72 61 75 74 68 20 73 71 6c 69 74  3_userauth sqlit
9670: 65 33 5f 75 73 65 72 61 75 74 68 3b 0a 73 74 72  e3_userauth;.str
9680: 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72  uct sqlite3_user
9690: 61 75 74 68 20 7b 0a 20 20 75 38 20 61 75 74 68  auth {.  u8 auth
96a0: 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
96b0: 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
96c0: 74 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  t authentication
96d0: 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20   level */.  int 
96e0: 6e 41 75 74 68 50 57 3b 20 20 20 20 20 20 20 20  nAuthPW;        
96f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
9700: 65 20 6f 66 20 74 68 65 20 7a 41 75 74 68 50 57  e of the zAuthPW
9710: 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 63   in bytes */.  c
9720: 68 61 72 20 2a 7a 41 75 74 68 50 57 3b 20 20 20  har *zAuthPW;   
9730: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9740: 50 61 73 73 77 6f 72 64 20 75 73 65 64 20 74 6f  Password used to
9750: 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f   authenticate */
9760: 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68 55 73  .  char *zAuthUs
9770: 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
9780: 20 2f 2a 20 55 73 65 72 20 6e 61 6d 65 20 75 73   /* User name us
9790: 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61  ed to authentica
97a0: 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c  te */.};../* All
97b0: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
97c0: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
97d0: 2e 61 75 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64  .authLevel */.#d
97e0: 65 66 69 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e  efine UAUTH_Unkn
97f0: 6f 77 6e 20 20 20 20 20 30 20 20 20 20 20 2f 2a  own     0     /*
9800: 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   Authentication 
9810: 6e 6f 74 20 79 65 74 20 63 68 65 63 6b 65 64 20  not yet checked 
9820: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48  */.#define UAUTH
9830: 5f 46 61 69 6c 20 20 20 20 20 20 20 20 31 20 20  _Fail        1  
9840: 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65     /* User authe
9850: 6e 74 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64  ntication failed
9860: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54   */.#define UAUT
9870: 48 5f 55 73 65 72 20 20 20 20 20 20 20 20 32 20  H_User        2 
9880: 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63      /* Authentic
9890: 61 74 65 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c  ated as a normal
98a0: 20 75 73 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65   user */.#define
98b0: 20 55 41 55 54 48 5f 41 64 6d 69 6e 20 20 20 20   UAUTH_Admin    
98c0: 20 20 20 33 20 20 20 20 20 2f 2a 20 41 75 74 68     3     /* Auth
98d0: 65 6e 74 69 63 61 74 65 64 20 61 73 20 61 6e 20  enticated as an 
98e0: 61 64 6d 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f  administrator */
98f0: 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75  ../* Functions u
9900: 73 65 64 20 6f 6e 6c 79 20 62 79 20 75 73 65 72  sed only by user
9910: 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c   authorization l
9920: 6f 67 69 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  ogic */.int sqli
9930: 74 65 33 55 73 65 72 41 75 74 68 54 61 62 6c 65  te3UserAuthTable
9940: 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  (const char*);.i
9950: 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75  nt sqlite3UserAu
9960: 74 68 43 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c  thCheckLogin(sql
9970: 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
9980: 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  *,u8*);.void sql
9990: 69 74 65 33 55 73 65 72 41 75 74 68 49 6e 69 74  ite3UserAuthInit
99a0: 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
99b0: 20 73 71 6c 69 74 65 33 43 72 79 70 74 46 75 6e   sqlite3CryptFun
99c0: 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  c(sqlite3_contex
99d0: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
99e0: 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66  alue**);..#endif
99f0: 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 52 5f   /* SQLITE_USER_
9a00: 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a  AUTHENTICATION *
9a10: 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66  /../*.** typedef
9a20: 20 66 6f 72 20 74 68 65 20 61 75 74 68 6f 72 69   for the authori
9a30: 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20  zation callback 
9a40: 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66  function..*/.#if
9a50: 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f  def SQLITE_USER_
9a60: 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20  AUTHENTICATION. 
9a70: 20 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73   typedef int (*s
9a80: 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f  qlite3_xauth)(vo
9a90: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
9aa0: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
9ab0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20  const char*,.   
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ad0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
9ae0: 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
9af0: 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74  har*);.#else.  t
9b00: 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c  ypedef int (*sql
9b10: 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64  ite3_xauth)(void
9b20: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
9b30: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
9b40: 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20  nst char*,.     
9b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b60: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
9b70: 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
9b80: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61  ./*.** Each data
9b90: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
9ba0: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
9bb0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
9bc0: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
9bd0: 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20  ruct sqlite3 {. 
9be0: 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56   sqlite3_vfs *pV
9bf0: 66 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  fs;            /
9c00: 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a  * OS Interface *
9c10: 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20  /.  struct Vdbe 
9c20: 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20  *pVdbe;         
9c30: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74    /* List of act
9c40: 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  ive virtual mach
9c50: 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  ines */.  CollSe
9c60: 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20  q *pDfltColl;   
9c70: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
9c80: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67  efault collating
9c90: 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52   sequence (BINAR
9ca0: 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  Y) */.  sqlite3_
9cb0: 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20  mutex *mutex;   
9cc0: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74        /* Connect
9cd0: 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44  ion mutex */.  D
9ce0: 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20  b *aDb;         
9cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9d00: 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  All backends */.
9d10: 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20    int nDb;      
9d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d30: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63  /* Number of bac
9d40: 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20  kends currently 
9d50: 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20  in use */.  int 
9d60: 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
9d70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73            /* Mis
9d80: 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73  cellaneous flags
9d90: 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20  . See below */. 
9da0: 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20   i64 lastRowid; 
9db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9dc0: 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20  * ROWID of most 
9dd0: 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73  recent insert (s
9de0: 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69  ee above) */.  i
9df0: 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20  64 szMmap;      
9e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9e10: 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a  Default mmap_siz
9e20: 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75  e setting */.  u
9e30: 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e  nsigned int open
9e40: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20  Flags;       /* 
9e50: 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
9e60: 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65  sqlite3_vfs.xOpe
9e70: 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72  n() */.  int err
9e80: 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Code;           
9e90: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
9ea0: 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65  ecent error code
9eb0: 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20   (SQLITE_*) */. 
9ec0: 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20   int errMask;   
9ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9ee0: 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73  * & result codes
9ef0: 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72   with this befor
9f00: 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20  e returning */. 
9f10: 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b   u16 dbOptFlags;
9f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9f30: 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c  * Flags to enabl
9f40: 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69  e/disable optimi
9f50: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20  zations */.  u8 
9f60: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
9f70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
9f80: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  xt encoding */. 
9f90: 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20   u8 autoCommit; 
9fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9fb0: 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  * The auto-commi
9fc0: 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20  t flag. */.  u8 
9fd0: 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20  temp_store;     
9fe0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a             /* 1:
9ff0: 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20   file 2: memory 
a000: 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  0: default */.  
a010: 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b  u8 mallocFailed;
a020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a030: 20 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65   True if we have
a040: 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66   seen a malloc f
a050: 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 64  ailure */.  u8 d
a060: 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20  fltLockMode;    
a070: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
a080: 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64  ault locking-mod
a090: 65 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64  e for attached d
a0a0: 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63  bs */.  signed c
a0b0: 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b  har nextAutovac;
a0c0: 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63        /* Autovac
a0d0: 20 73 65 74 74 69 6e 67 20 61 66 74 65 72 20 56   setting after V
a0e0: 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a  ACUUM if >=0 */.
a0f0: 20 20 75 38 20 73 75 70 70 72 65 73 73 45 72 72    u8 suppressErr
a100: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a110: 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20  /* Do not issue 
a120: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69  error messages i
a130: 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76  f true */.  u8 v
a140: 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20  tabOnConflict;  
a150: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
a160: 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72  ue to return for
a170: 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66   s3_vtab_on_conf
a180: 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69  lict() */.  u8 i
a190: 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
a1a0: 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75  point;    /* Tru
a1b0: 65 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f  e if the outermo
a1c0: 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20  st savepoint is 
a1d0: 61 20 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65  a TS */.  int ne
a1e0: 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20  xtPagesize;     
a1f0: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73          /* Pages
a200: 69 7a 65 20 61 66 74 65 72 20 56 41 43 55 55 4d  ize after VACUUM
a210: 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20   if >0 */.  u32 
a220: 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20 20 20  magic;          
a230: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67            /* Mag
a240: 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65  ic number for de
a250: 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73  tect library mis
a260: 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68  use */.  int nCh
a270: 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  ange;           
a280: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
a290: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
a2a0: 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f  te3_changes() */
a2b0: 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61  .  int nTotalCha
a2c0: 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nge;            
a2d0: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
a2e0: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f  ed by sqlite3_to
a2f0: 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f  tal_changes() */
a300: 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51  .  int aLimit[SQ
a310: 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20  LITE_N_LIMIT];  
a320: 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20   /* Limits */.  
a330: 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d  int nMaxSorterMm
a340: 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ap;           /*
a350: 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66   Maximum size of
a360: 20 72 65 67 69 6f 6e 73 20 6d 61 70 70 65 64 20   regions mapped 
a370: 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73  by sorter */.  s
a380: 74 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69  truct sqlite3Ini
a390: 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20  tInfo {      /* 
a3a0: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  Information used
a3b0: 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69   during initiali
a3c0: 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  zation */.    in
a3d0: 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20  t newTnum;      
a3e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f            /* Roo
a3f0: 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62  tpage of table b
a400: 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
a410: 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20   */.    u8 iDb; 
a420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a430: 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20      /* Which db 
a440: 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e  file is being in
a450: 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20  itialized */.   
a460: 20 75 38 20 62 75 73 79 3b 20 20 20 20 20 20 20   u8 busy;       
a470: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a480: 54 52 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c  TRUE if currentl
a490: 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a  y initializing *
a4a0: 2f 0a 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54  /.    u8 orphanT
a4b0: 72 69 67 67 65 72 3b 20 20 20 20 20 20 20 20 20  rigger;         
a4c0: 20 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d    /* Last statem
a4d0: 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20  ent is orphaned 
a4e0: 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a  TEMP trigger */.
a4f0: 20 20 20 20 75 38 20 69 6d 70 6f 73 74 65 72 54      u8 imposterT
a500: 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
a510: 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e 20 69  /* Building an i
a520: 6d 70 6f 73 74 65 72 20 74 61 62 6c 65 20 2a 2f  mposter table */
a530: 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74  .  } init;.  int
a540: 20 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20 20   nVdbeActive;   
a550: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
a560: 6d 62 65 72 20 6f 66 20 56 44 42 45 73 20 63 75  mber of VDBEs cu
a570: 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20  rrently running 
a580: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65  */.  int nVdbeRe
a590: 61 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ad;             
a5a0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
a5b0: 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61  active VDBEs tha
a5c0: 74 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20  t read or write 
a5d0: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72  */.  int nVdbeWr
a5e0: 69 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ite;            
a5f0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
a600: 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61  active VDBEs tha
a610: 74 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65  t read and write
a620: 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45   */.  int nVdbeE
a630: 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  xec;            
a640: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
a650: 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
a660: 20 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20   VdbeExec() */. 
a670: 20 69 6e 74 20 6e 56 44 65 73 74 72 6f 79 3b 20   int nVDestroy; 
a680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a690: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
a6a0: 76 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f  ve OP_VDestroy o
a6b0: 70 65 72 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69  perations */.  i
a6c0: 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20  nt nExtension;  
a6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a6e0: 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64  Number of loaded
a6f0: 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20   extensions */. 
a700: 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69   void **aExtensi
a710: 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  on;            /
a720: 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61 72 65  * Array of share
a730: 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65  d library handle
a740: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54  s */.  void (*xT
a750: 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73  race)(void*,cons
a760: 74 20 63 68 61 72 2a 29 3b 20 20 20 20 20 20 20  t char*);       
a770: 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69   /* Trace functi
a780: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54  on */.  void *pT
a790: 72 61 63 65 41 72 67 3b 20 20 20 20 20 20 20 20  raceArg;        
a7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a7b0: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
a7c0: 20 74 68 65 20 74 72 61 63 65 20 66 75 6e 63 74   the trace funct
a7d0: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ion */.  void (*
a7e0: 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c  xProfile)(void*,
a7f0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29  const char*,u64)
a800: 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20  ;  /* Profiling 
a810: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
a820: 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b  id *pProfileArg;
a830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a840: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
a850: 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66  ent to profile f
a860: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
a870: 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20  d *pCommitArg;  
a880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a890: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43  * Argument to xC
a8a0: 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20  ommitCallback() 
a8b0: 2a 2f 20 20 20 0a 20 20 69 6e 74 20 28 2a 78 43  */   .  int (*xC
a8c0: 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76  ommitCallback)(v
a8d0: 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76  oid*);    /* Inv
a8e0: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
a8f0: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
a900: 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20  *pRollbackArg;  
a910: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a920: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c  Argument to xRol
a930: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20  lbackCallback() 
a940: 2a 2f 20 20 20 0a 20 20 76 6f 69 64 20 28 2a 78  */   .  void (*x
a950: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
a960: 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76  )(void*); /* Inv
a970: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
a980: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
a990: 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76  *pUpdateArg;.  v
a9a0: 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c  oid (*xUpdateCal
a9b0: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74  lback)(void*,int
a9c0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  , const char*,co
a9d0: 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65  nst char*,sqlite
a9e0: 5f 69 6e 74 36 34 29 3b 0a 23 69 66 6e 64 65 66  _int64);.#ifndef
a9f0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
aa00: 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c  .  int (*xWalCal
aa10: 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73  lback)(void *, s
aa20: 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
aa30: 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20  char *, int);.  
aa40: 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23  void *pWalArg;.#
aa50: 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78 43  endif.  void(*xC
aa60: 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64 2a  ollNeeded)(void*
aa70: 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54  ,sqlite3*,int eT
aa80: 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68 61  extRep,const cha
aa90: 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f  r*);.  void(*xCo
aaa0: 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69 64  llNeeded16)(void
aab0: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65  *,sqlite3*,int e
aac0: 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f  TextRep,const vo
aad0: 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43  id*);.  void *pC
aae0: 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20  ollNeededArg;.  
aaf0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
ab00: 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Err;          /*
ab10: 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72   Most recent err
ab20: 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20  or message */.  
ab30: 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61  union {.    vola
ab40: 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65 72  tile int isInter
ab50: 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65 20  rupted; /* True 
ab60: 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  if sqlite3_inter
ab70: 72 75 70 74 20 68 61 73 20 62 65 65 6e 20 63 61  rupt has been ca
ab80: 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62  lled */.    doub
ab90: 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20 20  le notUsed1;    
aba0: 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
abb0: 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c  r */.  } u1;.  L
abc0: 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69  ookaside lookasi
abd0: 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  de;          /* 
abe0: 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  Lookaside malloc
abf0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a   configuration *
ac00: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
ac10: 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54  _OMIT_AUTHORIZAT
ac20: 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 78 61  ION.  sqlite3_xa
ac30: 75 74 68 20 78 41 75 74 68 3b 20 20 20 20 20 20  uth xAuth;      
ac40: 20 20 20 20 2f 2a 20 41 63 63 65 73 73 20 61 75      /* Access au
ac50: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63  thorization func
ac60: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
ac70: 70 41 75 74 68 41 72 67 3b 20 20 20 20 20 20 20  pAuthArg;       
ac80: 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61          /* 1st a
ac90: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 61  rgument to the a
aca0: 63 63 65 73 73 20 61 75 74 68 20 66 75 6e 63 74  ccess auth funct
acb0: 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ion */.#endif.#i
acc0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
acd0: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
ace0: 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f  ACK.  int (*xPro
acf0: 67 72 65 73 73 29 28 76 6f 69 64 20 2a 29 3b 20  gress)(void *); 
ad00: 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72      /* The progr
ad10: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ess callback */.
ad20: 20 20 76 6f 69 64 20 2a 70 50 72 6f 67 72 65 73    void *pProgres
ad30: 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  sArg;           
ad40: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74  /* Argument to t
ad50: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
ad60: 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  back */.  unsign
ad70: 65 64 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b  ed nProgressOps;
ad80: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
ad90: 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f 72  r of opcodes for
ada0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
adb0: 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  ck */.#endif.#if
adc0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
add0: 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
ade0: 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20 20 20  int nVTrans;    
adf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ae00: 20 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65 20   Allocated size 
ae10: 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20  of aVTrans */.  
ae20: 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20  Hash aModule;   
ae30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ae40: 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20 73 71   populated by sq
ae50: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64  lite3_create_mod
ae60: 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61 62 43  ule() */.  VtabC
ae70: 74 78 20 2a 70 56 74 61 62 43 74 78 3b 20 20 20  tx *pVtabCtx;   
ae80: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74           /* Cont
ae90: 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 76  ext for active v
aea0: 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61  tab connect/crea
aeb0: 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  te */.  VTable *
aec0: 2a 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20  *aVTrans;       
aed0: 20 20 20 20 20 20 2f 2a 20 56 69 72 74 75 61 6c        /* Virtual
aee0: 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f 70 65   tables with ope
aef0: 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a  n transactions *
af00: 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 44 69 73  /.  VTable *pDis
af10: 63 6f 6e 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44  connect;    /* D
af20: 69 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65 20  isconnect these 
af30: 69 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33 5f  in next sqlite3_
af40: 70 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e  prepare() */.#en
af50: 64 69 66 0a 20 20 46 75 6e 63 44 65 66 48 61 73  dif.  FuncDefHas
af60: 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20 20  h aFunc;        
af70: 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c      /* Hash tabl
af80: 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e of connection 
af90: 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48  functions */.  H
afa0: 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20  ash aCollSeq;   
afb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
afc0: 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  All collating se
afd0: 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73  quences */.  Bus
afe0: 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61 6e  yHandler busyHan
aff0: 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42 75  dler;      /* Bu
b000: 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  sy callback */. 
b010: 20 44 62 20 61 44 62 53 74 61 74 69 63 5b 32 5d   Db aDbStatic[2]
b020: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
b030: 2a 20 53 74 61 74 69 63 20 73 70 61 63 65 20 66  * Static space f
b040: 6f 72 20 74 68 65 20 32 20 64 65 66 61 75 6c 74  or the 2 default
b050: 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53   backends */.  S
b060: 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70  avepoint *pSavep
b070: 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  oint;        /* 
b080: 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 73  List of active s
b090: 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69  avepoints */.  i
b0a0: 6e 74 20 62 75 73 79 54 69 6d 65 6f 75 74 3b 20  nt busyTimeout; 
b0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b0c0: 42 75 73 79 20 68 61 6e 64 6c 65 72 20 74 69 6d  Busy handler tim
b0d0: 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f  eout, in msec */
b0e0: 0a 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e  .  int nSavepoin
b0f0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
b100: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f   /* Number of no
b110: 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  n-transaction sa
b120: 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  vepoints */.  in
b130: 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20 20  t nStatement;   
b140: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
b150: 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
b160: 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61  statement-transa
b170: 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34  ctions  */.  i64
b180: 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20   nDeferredCons; 
b190: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
b1a0: 74 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74  t deferred const
b1b0: 72 61 69 6e 74 73 20 74 68 69 73 20 74 72 61 6e  raints this tran
b1c0: 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36  saction. */.  i6
b1d0: 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  4 nDeferredImmCo
b1e0: 6e 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ns;         /* N
b1f0: 65 74 20 64 65 66 65 72 72 65 64 20 69 6d 6d 65  et deferred imme
b200: 64 69 61 74 65 20 63 6f 6e 73 74 72 61 69 6e 74  diate constraint
b210: 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79  s */.  int *pnBy
b220: 74 65 73 46 72 65 65 64 3b 20 20 20 20 20 20 20  tesFreed;       
b230: 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e       /* If not N
b240: 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74  ULL, increment t
b250: 68 69 73 20 69 6e 20 44 62 46 72 65 65 28 29 20  his in DbFree() 
b260: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
b270: 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e  _ENABLE_UNLOCK_N
b280: 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66  OTIFY.  /* The f
b290: 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c  ollowing variabl
b2a0: 65 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65  es are all prote
b2b0: 63 74 65 64 20 62 79 20 74 68 65 20 53 54 41 54  cted by the STAT
b2c0: 49 43 5f 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20  IC_MASTER .  ** 
b2d0: 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71  mutex, not by sq
b2e0: 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65  lite3.mutex. The
b2f0: 79 20 61 72 65 20 75 73 65 64 20 62 79 20 63 6f  y are used by co
b300: 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20  de in notify.c. 
b310: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20  .  **.  ** When 
b320: 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74  X.pUnlockConnect
b330: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
b340: 6e 73 20 74 68 61 74 20 58 20 69 73 20 77 61 69  ns that X is wai
b350: 74 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20  ting for Y to.  
b360: 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61  ** unlock so tha
b370: 74 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64  t it can proceed
b380: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e  ..  **.  ** When
b390: 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e   X.pBlockingConn
b3a0: 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20  ection==Y, that 
b3b0: 6d 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74  means that somet
b3c0: 68 69 6e 67 20 74 68 61 74 20 58 20 74 72 69 65  hing that X trie
b3d0: 64 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20  d.  ** tried to 
b3e0: 64 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c  do recently fail
b3f0: 65 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54  ed with an SQLIT
b400: 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64  E_LOCKED error d
b410: 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a  ue to locks.  **
b420: 20 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f   held by Y..  */
b430: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f  .  sqlite3 *pBlo
b440: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b  ckingConnection;
b450: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
b460: 68 61 74 20 63 61 75 73 65 64 20 53 51 4c 49 54  hat caused SQLIT
b470: 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71  E_LOCKED */.  sq
b480: 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f  lite3 *pUnlockCo
b490: 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20  nnection;       
b4a0: 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f      /* Connectio
b4b0: 6e 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75  n to watch for u
b4c0: 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  nlock */.  void 
b4d0: 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20  *pUnlockArg;    
b4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4f0: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
b500: 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f  xUnlockNotify */
b510: 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63  .  void (*xUnloc
b520: 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a  kNotify)(void **
b530: 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f  , int);  /* Unlo
b540: 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61  ck notify callba
b550: 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  ck */.  sqlite3 
b560: 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20  *pNextBlocked;  
b570: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e        /* Next in
b580: 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f   list of all blo
b590: 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  cked connections
b5a0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65   */.#endif.#ifde
b5b0: 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  f SQLITE_USER_AU
b5c0: 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73  THENTICATION.  s
b5d0: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20  qlite3_userauth 
b5e0: 61 75 74 68 3b 20 20 20 20 20 20 20 20 2f 2a 20  auth;        /* 
b5f0: 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74  User authenticat
b600: 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ion information 
b610: 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
b620: 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64  .** A macro to d
b630: 69 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f  iscover the enco
b640: 64 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61  ding of a databa
b650: 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  se..*/.#define S
b660: 43 48 45 4d 41 5f 45 4e 43 28 64 62 29 20 28 28  CHEMA_ENC(db) ((
b670: 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68  db)->aDb[0].pSch
b680: 65 6d 61 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e  ema->enc).#defin
b690: 65 20 45 4e 43 28 64 62 29 20 20 20 20 20 20 20  e ENC(db)       
b6a0: 20 28 28 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a   ((db)->enc)../*
b6b0: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
b6c0: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
b6d0: 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64  te3.flags..*/.#d
b6e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
b6f0: 65 54 72 61 63 65 20 20 20 20 20 20 30 78 30 30  eTrace      0x00
b700: 30 30 30 30 30 31 20 20 2f 2a 20 54 72 75 65 20  000001  /* True 
b710: 74 6f 20 74 72 61 63 65 20 56 44 42 45 20 65 78  to trace VDBE ex
b720: 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  ecution */.#defi
b730: 6e 65 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e  ne SQLITE_Intern
b740: 43 68 61 6e 67 65 73 20 20 30 78 30 30 30 30 30  Changes  0x00000
b750: 30 30 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74  002  /* Uncommit
b760: 74 65 64 20 48 61 73 68 20 74 61 62 6c 65 20 63  ted Hash table c
b770: 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
b780: 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79  e SQLITE_FullFSy
b790: 6e 63 20 20 20 20 20 20 30 78 30 30 30 30 30 30  nc      0x000000
b7a0: 30 34 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20  04  /* Use full 
b7b0: 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63  fsync on the bac
b7c0: 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  kend */.#define 
b7d0: 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46  SQLITE_CkptFullF
b7e0: 53 79 6e 63 20 20 30 78 30 30 30 30 30 30 30 38  Sync  0x00000008
b7f0: 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73    /* Use full fs
b800: 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69  ync for checkpoi
b810: 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nt */.#define SQ
b820: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20  LITE_CacheSpill 
b830: 20 20 20 20 30 78 30 30 30 30 30 30 31 30 20 20      0x00000010  
b840: 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70  /* OK to spill p
b850: 61 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64  ager cache */.#d
b860: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c  efine SQLITE_Ful
b870: 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30  lColNames   0x00
b880: 30 30 30 30 32 30 20 20 2f 2a 20 53 68 6f 77 20  000020  /* Show 
b890: 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  full column name
b8a0: 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23  s on SELECT */.#
b8b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68  define SQLITE_Sh
b8c0: 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30  ortColNames  0x0
b8d0: 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77  0000040  /* Show
b8e0: 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e   short columns n
b8f0: 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ames */.#define 
b900: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
b910: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 38 30        0x00000080
b920: 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20    /* Count rows 
b930: 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52  changed by INSER
b940: 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  T, */.          
b950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b970: 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20  /*   DELETE, or 
b980: 55 50 44 41 54 45 20 61 6e 64 20 72 65 74 75 72  UPDATE and retur
b990: 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  n */.           
b9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b9c0: 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73  *   the count us
b9d0: 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20  ing a callback. 
b9e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b9f0: 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20  E_NullCallback  
ba00: 20 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20   0x00000100  /* 
ba10: 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62  Invoke the callb
ba20: 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20  ack once if the 
ba30: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
ba40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ba60: 20 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20    result set is 
ba70: 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65  empty */.#define
ba80: 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65   SQLITE_SqlTrace
ba90: 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32 30         0x0000020
baa0: 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e  0  /* Debug prin
bab0: 74 20 53 51 4c 20 61 73 20 69 74 20 65 78 65 63  t SQL as it exec
bac0: 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  utes */.#define 
bad0: 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69  SQLITE_VdbeListi
bae0: 6e 67 20 20 20 20 30 78 30 30 30 30 30 34 30 30  ng    0x00000400
baf0: 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69    /* Debug listi
bb00: 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67  ngs of VDBE prog
bb10: 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rams */.#define 
bb20: 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65  SQLITE_WriteSche
bb30: 6d 61 20 20 20 20 30 78 30 30 30 30 30 38 30 30  ma    0x00000800
bb40: 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74    /* OK to updat
bb50: 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20  e SQLITE_MASTER 
bb60: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bb70: 45 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63 65  E_VdbeAddopTrace
bb80: 20 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20   0x00001000  /* 
bb90: 54 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62  Trace sqlite3Vdb
bba0: 65 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a  eAddOp() calls *
bbb0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
bbc0: 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20  _IgnoreChecks   
bbd0: 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20 44  0x00002000  /* D
bbe0: 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68  o not enforce ch
bbf0: 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  eck constraints 
bc00: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bc10: 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65  E_ReadUncommitte
bc20: 64 20 30 78 30 30 30 34 30 30 30 20 20 2f 2a 20  d 0x0004000  /* 
bc30: 46 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65  For shared-cache
bc40: 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65   mode */.#define
bc50: 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69   SQLITE_LegacyFi
bc60: 6c 65 46 6d 74 20 20 30 78 30 30 30 30 38 30 30  leFmt  0x0000800
bc70: 30 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77  0  /* Create new
bc80: 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f   databases in fo
bc90: 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e  rmat 1 */.#defin
bca0: 65 20 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72  e SQLITE_Recover
bcb0: 79 4d 6f 64 65 20 20 20 30 78 30 30 30 31 30 30  yMode   0x000100
bcc0: 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63  00  /* Ignore sc
bcd0: 68 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23  hema errors */.#
bce0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
bcf0: 76 65 72 73 65 4f 72 64 65 72 20 20 20 30 78 30  verseOrder   0x0
bd00: 30 30 32 30 30 30 30 20 20 2f 2a 20 52 65 76 65  0020000  /* Reve
bd10: 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45  rse unordered SE
bd20: 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65  LECTs */.#define
bd30: 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67   SQLITE_RecTrigg
bd40: 65 72 73 20 20 20 20 30 78 30 30 30 34 30 30 30  ers    0x0004000
bd50: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63  0  /* Enable rec
bd60: 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73 20  ursive triggers 
bd70: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bd80: 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20  E_ForeignKeys   
bd90: 20 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20   0x00080000  /* 
bda0: 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20  Enforce foreign 
bdb0: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  key constraints 
bdc0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
bdd0: 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20  TE_AutoIndex    
bde0: 20 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a    0x00100000  /*
bdf0: 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69   Enable automati
be00: 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  c indexes */.#de
be10: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 65 66  fine SQLITE_Pref
be20: 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30 32  erBuiltin  0x002
be30: 30 30 30 30 30 20 20 2f 2a 20 50 72 65 66 65 72  00000  /* Prefer
be40: 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e  ence to built-in
be50: 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e   funcs */.#defin
be60: 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74  e SQLITE_LoadExt
be70: 65 6e 73 69 6f 6e 20 20 30 78 30 30 34 30 30 30  ension  0x004000
be80: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f  00  /* Enable lo
be90: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a  ad_extension */.
bea0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
beb0: 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78  nableTrigger  0x
bec0: 30 30 38 30 30 30 30 30 20 20 2f 2a 20 54 72 75  00800000  /* Tru
bed0: 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67  e to enable trig
bee0: 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gers */.#define 
bef0: 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20  SQLITE_DeferFKs 
bf00: 20 20 20 20 20 20 30 78 30 31 30 30 30 30 30 30        0x01000000
bf10: 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46    /* Defer all F
bf20: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  K constraints */
bf30: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
bf40: 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30  QueryOnly      0
bf50: 78 30 32 30 30 30 30 30 30 20 20 2f 2a 20 44 69  x02000000  /* Di
bf60: 73 61 62 6c 65 20 64 61 74 61 62 61 73 65 20 63  sable database c
bf70: 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
bf80: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50  e SQLITE_VdbeEQP
bf90: 20 20 20 20 20 20 20 20 30 78 30 34 30 30 30 30          0x040000
bfa0: 30 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58 50  00  /* Debug EXP
bfb0: 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
bfc0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bfd0: 45 5f 56 61 63 75 75 6d 20 20 20 20 20 20 20 20  E_Vacuum        
bfe0: 20 30 78 30 38 30 30 30 30 30 30 20 20 2f 2a 20   0x08000000  /* 
bff0: 43 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 20 56  Currently in a V
c000: 41 43 55 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65  ACUUM */.#define
c010: 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65   SQLITE_CellSize
c020: 43 6b 20 20 20 20 20 30 78 31 30 30 30 30 30 30  Ck     0x1000000
c030: 30 20 20 2f 2a 20 43 68 65 63 6b 20 62 74 72 65  0  /* Check btre
c040: 65 20 63 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20  e cell sizes on 
c050: 6c 6f 61 64 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  load */.../*.** 
c060: 42 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69  Bits of the sqli
c070: 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66  te3.dbOptFlags f
c080: 69 65 6c 64 20 74 68 61 74 20 61 72 65 20 75 73  ield that are us
c090: 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c  ed by the.** sql
c0a0: 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
c0b0: 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  l(SQLITE_TESTCTR
c0c0: 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c  L_OPTIMIZATIONS,
c0d0: 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74  ...) interface t
c0e0: 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79  o.** selectively
c0f0: 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73   disable various
c100: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
c110: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c120: 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72  E_QueryFlattener
c130: 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65   0x0001   /* Que
c140: 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f  ry flattening */
c150: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c160: 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30  ColumnCache    0
c170: 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d  x0002   /* Colum
c180: 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69  n cache */.#defi
c190: 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42  ne SQLITE_GroupB
c1a0: 79 4f 72 64 65 72 20 20 20 30 78 30 30 30 34 20  yOrder   0x0004 
c1b0: 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76    /* GROUPBY cov
c1c0: 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f  er of ORDERBY */
c1d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c1e0: 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30  FactorOutConst 0
c1f0: 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74  x0008   /* Const
c200: 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f  ant factoring */
c210: 0a 2f 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  ./*             
c220: 20 20 20 6e 6f 74 20 75 73 65 64 20 20 20 20 30     not used    0
c230: 78 30 30 31 30 20 20 20 2f 2f 20 57 61 73 3a 20  x0010   // Was: 
c240: 53 51 4c 49 54 45 5f 49 64 78 52 65 61 6c 41 73  SQLITE_IdxRealAs
c250: 49 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  Int */.#define S
c260: 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70  QLITE_DistinctOp
c270: 74 20 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a  t    0x0020   /*
c280: 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20   DISTINCT using 
c290: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
c2a0: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49  ne SQLITE_CoverI
c2b0: 64 78 53 63 61 6e 20 20 20 30 78 30 30 34 30 20  dxScan   0x0040 
c2c0: 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e    /* Covering in
c2d0: 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65  dex scans */.#de
c2e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65  fine SQLITE_Orde
c2f0: 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 38  rByIdxJoin 0x008
c300: 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  0   /* ORDER BY 
c310: 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64  of joins via ind
c320: 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ex */.#define SQ
c330: 4c 49 54 45 5f 53 75 62 71 43 6f 72 6f 75 74 69  LITE_SubqCorouti
c340: 6e 65 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20  ne  0x0100   /* 
c350: 45 76 61 6c 75 61 74 65 20 73 75 62 71 75 65 72  Evaluate subquer
c360: 69 65 73 20 61 73 20 63 6f 72 6f 75 74 69 6e 65  ies as coroutine
c370: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
c380: 49 54 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20  ITE_Transitive  
c390: 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54     0x0200   /* T
c3a0: 72 61 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72  ransitive constr
c3b0: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
c3c0: 20 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70   SQLITE_OmitNoop
c3d0: 4a 6f 69 6e 20 20 20 30 78 30 34 30 30 20 20 20  Join   0x0400   
c3e0: 2f 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64 20 74  /* Omit unused t
c3f0: 61 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a  ables in joins *
c400: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c410: 5f 53 74 61 74 33 34 20 20 20 20 20 20 20 20 20  _Stat34         
c420: 30 78 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20  0x0800   /* Use 
c430: 53 54 41 54 33 20 6f 72 20 53 54 41 54 34 20 64  STAT3 or STAT4 d
c440: 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ata */.#define S
c450: 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20  QLITE_AllOpts   
c460: 20 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a       0xffff   /*
c470: 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f   All optimizatio
c480: 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  ns */../*.** Mac
c490: 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ros for testing 
c4a0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f  whether or not o
c4b0: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65  ptimizations are
c4c0: 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61   enabled or disa
c4d0: 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  bled..*/.#ifndef
c4e0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
c4f0: 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e  LTIN_TEST.#defin
c500: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69  e OptimizationDi
c510: 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  sabled(db, mask)
c520: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
c530: 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29  lags&(mask))!=0)
c540: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
c550: 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c  ationEnabled(db,
c560: 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d   mask)   (((db)-
c570: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
c580: 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64  k))==0).#else.#d
c590: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
c5a0: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
c5b0: 61 73 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20  ask)  0.#define 
c5c0: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62  OptimizationEnab
c5d0: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20  led(db, mask)   
c5e0: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
c5f0: 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69  Return true if i
c600: 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63  t OK to factor c
c610: 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
c620: 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69  ons into the ini
c630: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63  tialization.** c
c640: 6f 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e  ode. The argumen
c650: 74 20 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a  t is a Parse obj
c660: 65 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65  ect for the code
c670: 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23   generator..*/.#
c680: 64 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74  define ConstFact
c690: 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b  orOk(P) ((P)->ok
c6a0: 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a  ConstFactor)../*
c6b0: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
c6c0: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
c6d0: 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a  te.magic field..
c6e0: 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61  ** The numbers a
c6f0: 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72  re obtained at r
c700: 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e  andom and have n
c710: 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  o special meanin
c720: 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e  g, other.** than
c730: 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20   being distinct 
c740: 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72  from one another
c750: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
c760: 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20  ITE_MAGIC_OPEN  
c770: 20 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f     0xa029a697  /
c780: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70  * Database is op
c790: 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  en */.#define SQ
c7a0: 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45  LITE_MAGIC_CLOSE
c7b0: 44 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20  D   0x9f3c2d33  
c7c0: 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63  /* Database is c
c7d0: 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  losed */.#define
c7e0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49   SQLITE_MAGIC_SI
c7f0: 43 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39  CK     0x4b77129
c800: 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20  0  /* Error and 
c810: 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a  awaiting close *
c820: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c830: 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20  _MAGIC_BUSY     
c840: 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44  0xf03b7906  /* D
c850: 61 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c  atabase currentl
c860: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66  y in use */.#def
c870: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
c880: 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35  _ERROR    0xb535
c890: 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49  7930  /* An SQLI
c8a0: 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20  TE_MISUSE error 
c8b0: 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66  occurred */.#def
c8c0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
c8d0: 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66  _ZOMBIE   0x64cf
c8e0: 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77  fc7f  /* Close w
c8f0: 69 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65  ith last stateme
c900: 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a  nt close */../*.
c910: 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63  ** Each SQL func
c920: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20  tion is defined 
c930: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
c940: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
c950: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 41  ** structure.  A
c960: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
c970: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 73 74   structure is st
c980: 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
c990: 74 65 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68  te.aFunc.** hash
c9a0: 20 74 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75   table.  When mu
c9b0: 6c 74 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73  ltiple functions
c9c0: 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e   have the same n
c9d0: 61 6d 65 2c 20 74 68 65 20 68 61 73 68 20 74 61  ame, the hash ta
c9e0: 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f  ble.** points to
c9f0: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f   a linked list o
ca00: 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72  f these structur
ca10: 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  es..*/.struct Fu
ca20: 6e 63 44 65 66 20 7b 0a 20 20 69 31 36 20 6e 41  ncDef {.  i16 nA
ca30: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rg;            /
ca40: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
ca50: 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73  ments.  -1 means
ca60: 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20   unlimited */.  
ca70: 75 31 36 20 66 75 6e 63 46 6c 61 67 73 3b 20 20  u16 funcFlags;  
ca80: 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d       /* Some com
ca90: 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49  bination of SQLI
caa0: 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76  TE_FUNC_* */.  v
cab0: 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20  oid *pUserData; 
cac0: 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61      /* User data
cad0: 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20   parameter */.  
cae0: 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20  FuncDef *pNext; 
caf0: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e       /* Next fun
cb00: 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20  ction with same 
cb10: 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28  name */.  void (
cb20: 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f  *xFunc)(sqlite3_
cb30: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
cb40: 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f  ite3_value**); /
cb50: 2a 20 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69  * Regular functi
cb60: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  on */.  void (*x
cb70: 53 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f  Step)(sqlite3_co
cb80: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
cb90: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20  e3_value**); /* 
cba0: 41 67 67 72 65 67 61 74 65 20 73 74 65 70 20 2a  Aggregate step *
cbb0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61  /.  void (*xFina
cbc0: 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f  lize)(sqlite3_co
cbd0: 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20  ntext*);        
cbe0: 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67 72 65          /* Aggre
cbf0: 67 61 74 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a  gate finalizer *
cc00: 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  /.  char *zName;
cc10: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20           /* SQL 
cc20: 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  name of the func
cc30: 74 69 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63 44  tion. */.  FuncD
cc40: 65 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20  ef *pHash;      
cc50: 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20 64  /* Next with a d
cc60: 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75  ifferent name bu
cc70: 74 20 74 68 65 20 73 61 6d 65 20 68 61 73 68 20  t the same hash 
cc80: 2a 2f 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63  */.  FuncDestruc
cc90: 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72  tor *pDestructor
cca0: 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65  ;   /* Reference
ccb0: 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63   counted destruc
ccc0: 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  tor function */.
ccd0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73  };../*.** This s
cce0: 74 72 75 63 74 75 72 65 20 65 6e 63 61 70 73 75  tructure encapsu
ccf0: 6c 61 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e  lates a user-fun
cd00: 63 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72  ction destructor
cd10: 20 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a   callback (as.**
cd20: 20 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e   configured usin
cd30: 67 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  g create_functio
cd40: 6e 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72 65  n_v2()) and a re
cd50: 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e  ference counter.
cd60: 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f   When.** create_
cd70: 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73  function_v2() is
cd80: 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74   called to creat
cd90: 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  e a function wit
cda0: 68 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a  h a destructor,.
cdb0: 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65  ** a single obje
cdc0: 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ct of this type 
cdd0: 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75  is allocated. Fu
cde0: 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65  ncDestructor.nRe
cdf0: 66 20 69 73 20 73 65 74 20 74 6f 20 0a 2a 2a 20  f is set to .** 
ce00: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75  the number of Fu
ce10: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72  ncDef objects cr
ce20: 65 61 74 65 64 20 28 65 69 74 68 65 72 20 31 20  eated (either 1 
ce30: 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20  or 3, depending 
ce40: 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72  on whether.** or
ce50: 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66 69   not the specifi
ce60: 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53  ed encoding is S
ce70: 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20  QLITE_ANY). The 
ce80: 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63  FuncDef.pDestruc
ce90: 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66  tor.** member of
cea0: 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77   each of the new
ceb0: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73   FuncDef objects
cec0: 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74   is set to point
ced0: 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65   to the allocate
cee0: 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63  d.** FuncDestruc
cef0: 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  tor..**.** There
cf00: 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20  after, when one 
cf10: 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f  of the FuncDef o
cf20: 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74 65  bjects is delete
cf30: 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63 65  d, the reference
cf40: 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69  .** count on thi
cf50: 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72  s object is decr
cf60: 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74  emented. When it
cf70: 20 72 65 61 63 68 65 73 20 30 2c 20 74 68 65 20   reaches 0, the 
cf80: 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73  destructor.** is
cf90: 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65   invoked and the
cfa0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
cfb0: 73 74 72 75 63 74 75 72 65 20 66 72 65 65 64 2e  structure freed.
cfc0: 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44  .*/.struct FuncD
cfd0: 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e  estructor {.  in
cfe0: 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28  t nRef;.  void (
cff0: 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20  *xDestroy)(void 
d000: 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65  *);.  void *pUse
d010: 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  rData;.};../*.**
d020: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
d030: 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61   for FuncDef.fla
d040: 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74  gs.  Note that t
d050: 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f  he _LENGTH and _
d060: 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73  TYPEOF.** values
d070: 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64   must correspond
d080: 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54   to OPFLAG_LENGT
d090: 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f  HARG and OPFLAG_
d0a0: 54 59 50 45 4f 46 41 52 47 2e 20 20 54 68 65 72  TYPEOFARG.  Ther
d0b0: 65 0a 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28  e.** are assert(
d0c0: 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  ) statements in 
d0d0: 74 68 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69  the code to veri
d0e0: 66 79 20 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66  fy this..*/.#def
d0f0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
d100: 45 4e 43 4d 41 53 4b 20 20 30 78 30 30 33 20 2f  ENCMASK  0x003 /
d110: 2a 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53  * SQLITE_UTF8, S
d120: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72  QLITE_UTF16BE or
d130: 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66   UTF16LE */.#def
d140: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
d150: 4c 49 4b 45 20 20 20 20 20 30 78 30 30 34 20 2f  LIKE     0x004 /
d160: 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20  * Candidate for 
d170: 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a  the LIKE optimiz
d180: 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
d190: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53   SQLITE_FUNC_CAS
d1a0: 45 20 20 20 20 20 30 78 30 30 38 20 2f 2a 20 43  E     0x008 /* C
d1b0: 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49  ase-sensitive LI
d1c0: 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e  KE-type function
d1d0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d1e0: 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20  TE_FUNC_EPHEM   
d1f0: 20 30 78 30 31 30 20 2f 2a 20 45 70 68 65 6d 65   0x010 /* Epheme
d200: 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74  ral.  Delete wit
d210: 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e  h VDBE */.#defin
d220: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  e SQLITE_FUNC_NE
d230: 45 44 43 4f 4c 4c 20 30 78 30 32 30 20 2f 2a 20  EDCOLL 0x020 /* 
d240: 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f  sqlite3GetFuncCo
d250: 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62 65  llSeq() might be
d260: 20 63 61 6c 6c 65 64 20 2a 2f 0a 23 64 65 66 69   called */.#defi
d270: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
d280: 45 4e 47 54 48 20 20 20 30 78 30 34 30 20 2f 2a  ENGTH   0x040 /*
d290: 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68   Built-in length
d2a0: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
d2b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
d2c0: 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78 30 38  NC_TYPEOF   0x08
d2d0: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79  0 /* Built-in ty
d2e0: 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20  peof() function 
d2f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d300: 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20  E_FUNC_COUNT    
d310: 30 78 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  0x100 /* Built-i
d320: 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65  n count(*) aggre
d330: 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gate */.#define 
d340: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c  SQLITE_FUNC_COAL
d350: 45 53 43 45 20 30 78 32 30 30 20 2f 2a 20 42 75  ESCE 0x200 /* Bu
d360: 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28  ilt-in coalesce(
d370: 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f  ) or ifnull() */
d380: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d390: 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78  FUNC_UNLIKELY 0x
d3a0: 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  400 /* Built-in 
d3b0: 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74  unlikely() funct
d3c0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
d3d0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
d3e0: 41 4e 54 20 30 78 38 30 30 20 2f 2a 20 43 6f 6e  ANT 0x800 /* Con
d3f0: 73 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76  stant inputs giv
d400: 65 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74  e a constant out
d410: 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  put */.#define S
d420: 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
d430: 58 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72 75  X  0x1000 /* Tru
d440: 65 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20  e for min() and 
d450: 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65 73  max() aggregates
d460: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66   */../*.** The f
d470: 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d  ollowing three m
d480: 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28  acros, FUNCTION(
d490: 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e  ), LIKEFUNC() an
d4a0: 64 20 41 47 47 52 45 47 41 54 45 28 29 20 61 72  d AGGREGATE() ar
d4b0: 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65  e.** used to cre
d4c0: 61 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69  ate the initiali
d4d0: 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e  zers for the Fun
d4e0: 63 44 65 66 20 73 74 72 75 63 74 75 72 65 73 2e  cDef structures.
d4f0: 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f  .**.**   FUNCTIO
d500: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
d510: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
d520: 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
d530: 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20  create a scalar 
d540: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
d550: 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ion of a functio
d560: 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20  n zName .**     
d570: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43  implemented by C
d580: 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20   function xFunc 
d590: 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72  that accepts nAr
d5a0: 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65  g arguments. The
d5b0: 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61  .**     value pa
d5c0: 73 73 65 64 20 61 73 20 69 41 72 67 20 69 73 20  ssed as iArg is 
d5d0: 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a  cast to a (void*
d5e0: 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c  ) and made avail
d5f0: 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74  able.**     as t
d600: 68 65 20 75 73 65 72 2d 64 61 74 61 20 28 73 71  he user-data (sq
d610: 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28  lite3_user_data(
d620: 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74  )) for the funct
d630: 69 6f 6e 2e 20 49 66 20 0a 2a 2a 20 20 20 20 20  ion. If .**     
d640: 61 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20  argument bNC is 
d650: 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53  true, then the S
d660: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
d670: 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e  OLL flag is set.
d680: 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49  .**.**   VFUNCTI
d690: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
d6a0: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
d6b0: 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55  ).**     Like FU
d6c0: 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74  NCTION except it
d6d0: 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54   omits the SQLIT
d6e0: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
d6f0: 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47  flag..**.**   AG
d700: 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
d710: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
d720: 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a  xStep, xFinal).*
d730: 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
d740: 65 61 74 65 20 61 6e 20 61 67 67 72 65 67 61 74  eate an aggregat
d750: 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  e function defin
d760: 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ition implemente
d770: 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20  d by.**     the 
d780: 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65  C functions xSte
d790: 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68  p and xFinal. Th
d7a0: 65 20 66 69 72 73 74 20 66 6f 75 72 20 70 61 72  e first four par
d7b0: 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61  ameters.**     a
d7c0: 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 69  re interpreted i
d7d0: 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61  n the same way a
d7e0: 73 20 74 68 65 20 66 69 72 73 74 20 34 20 70 61  s the first 4 pa
d7f0: 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20  rameters to.**  
d800: 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a     FUNCTION()..*
d810: 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28  *.**   LIKEFUNC(
d820: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72  zName, nArg, pAr
d830: 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20  g, flags).**    
d840: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
d850: 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  a scalar functio
d860: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  n definition of 
d870: 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65  a function zName
d880: 20 0a 2a 2a 20 20 20 20 20 74 68 61 74 20 61 63   .**     that ac
d890: 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
d8a0: 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d 70 6c  ents and is impl
d8b0: 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63 61 6c  emented by a cal
d8c0: 6c 20 74 6f 20 43 20 0a 2a 2a 20 20 20 20 20 66  l to C .**     f
d8d0: 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63  unction likeFunc
d8e0: 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20  . Argument pArg 
d8f0: 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f  is cast to a (vo
d900: 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a  id *) and made.*
d910: 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20  *     available 
d920: 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  as the function 
d930: 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74  user-data (sqlit
d940: 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e  e3_user_data()).
d950: 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63   The.**     Func
d960: 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62  Def.flags variab
d970: 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  le is set to the
d980: 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
d990: 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20   the flags.**   
d9a0: 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a    parameter..*/.
d9b0: 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e  #define FUNCTION
d9c0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
d9d0: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
d9e0: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
d9f0: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
da00: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
da10: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
da20: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
da30: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
da40: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
da50: 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c  0, 0, #zName, 0,
da60: 20 30 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e   0}.#define VFUN
da70: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
da80: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
da90: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
daa0: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
dab0: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
dac0: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
dad0: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
dae0: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
daf0: 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c  0, 0, #zName, 0,
db00: 20 30 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43   0}.#define FUNC
db10: 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72  TION2(zName, nAr
db20: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
db30: 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29  unc, extraFlags)
db40: 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54   \.  {nArg,SQLIT
db50: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
db60: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
db70: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
db80: 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67  DCOLL)|extraFlag
db90: 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  s,\.   SQLITE_IN
dba0: 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
dbb0: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
dbc0: 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64  #zName, 0, 0}.#d
dbd0: 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49  efine STR_FUNCTI
dbe0: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
dbf0: 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  pArg, bNC, xFunc
dc00: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
dc10: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
dc20: 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62  T|SQLITE_UTF8|(b
dc30: 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  NC*SQLITE_FUNC_N
dc40: 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70  EEDCOLL), \.   p
dc50: 41 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  Arg, 0, xFunc, 0
dc60: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20  , 0, #zName, 0, 
dc70: 30 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46  0}.#define LIKEF
dc80: 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
dc90: 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20   arg, flags) \. 
dca0: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
dcb0: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
dcc0: 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20  ITE_UTF8|flags, 
dcd0: 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67  \.   (void *)arg
dce0: 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30  , 0, likeFunc, 0
dcf0: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20  , 0, #zName, 0, 
dd00: 30 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45  0}.#define AGGRE
dd10: 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  GATE(zName, nArg
dd20: 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70  , arg, nc, xStep
dd30: 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e  , xFinal) \.  {n
dd40: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
dd50: 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43  |(nc*SQLITE_FUNC
dd60: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
dd70: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
dd80: 54 52 28 61 72 67 29 2c 20 30 2c 20 30 2c 20 78  TR(arg), 0, 0, x
dd90: 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61  Step,xFinal,#zNa
dda0: 6d 65 2c 30 2c 30 7d 0a 23 64 65 66 69 6e 65 20  me,0,0}.#define 
ddb0: 41 47 47 52 45 47 41 54 45 32 28 7a 4e 61 6d 65  AGGREGATE2(zName
ddc0: 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c  , nArg, arg, nc,
ddd0: 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20   xStep, xFinal, 
dde0: 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20  extraFlags) \.  
ddf0: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
de00: 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55  F8|(nc*SQLITE_FU
de10: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74  NC_NEEDCOLL)|ext
de20: 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51  raFlags, \.   SQ
de30: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
de40: 61 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74 65  arg), 0, 0, xSte
de50: 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c  p,xFinal,#zName,
de60: 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20  0,0}../*.** All 
de70: 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e  current savepoin
de80: 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ts are stored in
de90: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73   a linked list s
dea0: 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71  tarting at.** sq
deb0: 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74  lite3.pSavepoint
dec0: 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d  . The first elem
ded0: 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ent in the list 
dee0: 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  is the most rece
def0: 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73  ntly.** opened s
df00: 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f  avepoint. Savepo
df10: 69 6e 74 73 20 61 72 65 20 61 64 64 65 64 20 74  ints are added t
df20: 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20 74 68  o the list by th
df30: 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76  e vdbe.** OP_Sav
df40: 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69  epoint instructi
df50: 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61  on..*/.struct Sa
df60: 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72  vepoint {.  char
df70: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
df80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df90: 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d  /* Savepoint nam
dfa0: 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65  e (nul-terminate
dfb0: 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  d) */.  i64 nDef
dfc0: 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
dfd0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
dfe0: 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65  umber of deferre
dff0: 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20  d fk violations 
e000: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
e010: 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
e020: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
e030: 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 69  er of deferred i
e040: 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65  mm fk. */.  Save
e050: 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20  point *pNext;   
e060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e070: 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f  /* Parent savepo
e080: 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a  int (if any) */.
e090: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
e0a0: 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64  llowing are used
e0b0: 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70   as the second p
e0c0: 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69  arameter to sqli
e0d0: 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a  te3Savepoint(),.
e0e0: 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50 31  ** and as the P1
e0f0: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
e100: 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e   OP_Savepoint in
e110: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64  struction..*/.#d
e120: 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
e130: 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65  BEGIN      0.#de
e140: 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52  fine SAVEPOINT_R
e150: 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65 66  ELEASE    1.#def
e160: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f  ine SAVEPOINT_RO
e170: 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a  LLBACK   2.../*.
e180: 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d  ** Each SQLite m
e190: 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74  odule (virtual t
e1a0: 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29  able definition)
e1b0: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
e1c0: 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  n.** instance of
e1d0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
e1e0: 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64  tructure, stored
e1f0: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e   in the sqlite3.
e200: 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20  aModule.** hash 
e210: 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  table..*/.struct
e220: 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73   Module {.  cons
e230: 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
e240: 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20   *pModule;      
e250: 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69   /* Callback poi
e260: 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74  nters */.  const
e270: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
e280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e290: 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74  /* Name passed t
e2a0: 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  o create_module(
e2b0: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  ) */.  void *pAu
e2c0: 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
e2d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70              /* p
e2e0: 41 75 78 20 70 61 73 73 65 64 20 74 6f 20 63 72  Aux passed to cr
e2f0: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
e300: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72  .  void (*xDestr
e310: 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  oy)(void *);    
e320: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c          /* Modul
e330: 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e  e destructor fun
e340: 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c 65  ction */.  Table
e350: 20 2a 70 45 70 6f 54 61 62 3b 20 20 20 20 20 20   *pEpoTab;      
e360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e370: 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73 20 74 61 62  /* Eponymous tab
e380: 6c 65 20 66 6f 72 20 74 68 69 73 20 6d 6f 64 75  le for this modu
e390: 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
e3a0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
e3b0: 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66  t each column of
e3c0: 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73   an SQL table is
e3d0: 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74   held in an inst
e3e0: 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20  ance.** of this 
e3f0: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
e400: 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20  ruct Column {.  
e410: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
e420: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
e430: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70   column */.  Exp
e440: 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a  r *pDflt;     /*
e450: 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   Default value o
e460: 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  f this column */
e470: 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c 74 3b 20  .  char *zDflt; 
e480: 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20      /* Original 
e490: 74 65 78 74 20 6f 66 20 74 68 65 20 64 65 66 61  text of the defa
e4a0: 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 63  ult value */.  c
e4b0: 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 20 20 20  har *zType;     
e4c0: 2f 2a 20 44 61 74 61 20 74 79 70 65 20 66 6f 72  /* Data type for
e4d0: 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   this column */.
e4e0: 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20    char *zColl;  
e4f0: 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20     /* Collating 
e500: 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55  sequence.  If NU
e510: 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66 61  LL, use the defa
e520: 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e  ult */.  u8 notN
e530: 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  ull;      /* An 
e540: 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e  OE_ code for han
e550: 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c  dling a NOT NULL
e560: 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20   constraint */. 
e570: 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
e580: 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20    /* One of the 
e590: 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76  SQLITE_AFF_... v
e5a0: 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a  alues */.  u8 sz
e5b0: 45 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 45  Est;        /* E
e5c0: 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66  stimated size of
e5d0: 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 20 49   this column.  I
e5e0: 4e 54 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f  NT==1 */.  u8 co
e5f0: 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 42  lFlags;     /* B
e600: 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65  oolean propertie
e610: 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f  s.  See COLFLAG_
e620: 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a   defines below *
e630: 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  /.};../* Allowed
e640: 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75   values for Colu
e650: 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a  mn.colFlags:.*/.
e660: 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
e670: 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20  PRIMKEY  0x0001 
e680: 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20     /* Column is 
e690: 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d  part of the prim
e6a0: 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69  ary key */.#defi
e6b0: 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45  ne COLFLAG_HIDDE
e6c0: 4e 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a  N   0x0002    /*
e6d0: 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e   A hidden column
e6e0: 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61   in a virtual ta
e6f0: 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  ble */../*.** A 
e700: 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75 65  "Collating Seque
e710: 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65 64 20  nce" is defined 
e720: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
e730: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
e740: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 43 6f  ** structure. Co
e750: 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f  nceptually, a co
e760: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
e770: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6e   consists of a n
e780: 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d  ame and.** a com
e790: 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20  parison routine 
e7a0: 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65  that defines the
e7b0: 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74 20 73   order of that s
e7c0: 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49  equence..**.** I
e7d0: 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69  f CollSeq.xCmp i
e7e0: 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73  s NULL, it means
e7f0: 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c   that the.** col
e800: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
e810: 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 49  is undefined.  I
e820: 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e 20  ndices built on 
e830: 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20  an undefined.** 
e840: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
e850: 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 65  ce may not be re
e860: 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a  ad or written..*
e870: 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71  /.struct CollSeq
e880: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
e890: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  ;          /* Na
e8a0: 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74  me of the collat
e8b0: 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55 54  ing sequence, UT
e8c0: 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20  F-8 encoded */. 
e8d0: 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
e8e0: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65         /* Text e
e8f0: 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64 20  ncoding handled 
e900: 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76  by xCmp() */.  v
e910: 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20 20  oid *pUser;     
e920: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72       /* First ar
e930: 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28 29  gument to xCmp()
e940: 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70   */.  int (*xCmp
e950: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e  )(void*,int, con
e960: 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63  st void*, int, c
e970: 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76  onst void*);.  v
e980: 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64  oid (*xDel)(void
e990: 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75 63 74  *);  /* Destruct
e9a0: 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a  or for pUser */.
e9b0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74  };../*.** A sort
e9c0: 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65 69   order can be ei
e9d0: 74 68 65 72 20 41 53 43 20 6f 72 20 44 45 53 43  ther ASC or DESC
e9e0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
e9f0: 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20 20  ITE_SO_ASC      
ea00: 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61   0  /* Sort in a
ea10: 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a  scending order *
ea20: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ea30: 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31 20  _SO_DESC      1 
ea40: 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65   /* Sort in asce
ea50: 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23  nding order */.#
ea60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
ea70: 5f 55 4e 44 45 46 49 4e 45 44 20 2d 31 20 2f 2a  _UNDEFINED -1 /*
ea80: 20 4e 6f 20 73 6f 72 74 20 6f 72 64 65 72 20 73   No sort order s
ea90: 70 65 63 69 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a  pecified */../*.
eaa0: 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  ** Column affini
eab0: 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20  ty types..**.** 
eac0: 54 68 65 73 65 20 75 73 65 64 20 74 6f 20 68 61  These used to ha
ead0: 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65  ve mnemonic name
eae0: 20 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51   like 'i' for SQ
eaf0: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
eb00: 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20   and.** 't' for 
eb10: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e  SQLITE_AFF_TEXT.
eb20: 20 20 42 75 74 20 77 65 20 63 61 6e 20 73 61 76    But we can sav
eb30: 65 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65  e a little space
eb40: 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20   and improve.** 
eb50: 74 68 65 20 73 70 65 65 64 20 61 20 6c 69 74 74  the speed a litt
eb60: 6c 65 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20  le by numbering 
eb70: 74 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65  the values conse
eb80: 63 75 74 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a  cutively.  .**.*
eb90: 2a 20 42 75 74 20 72 61 74 68 65 72 20 74 68 61  * But rather tha
eba0: 6e 20 73 74 61 72 74 20 77 69 74 68 20 30 20 6f  n start with 0 o
ebb0: 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69  r 1, we begin wi
ebc0: 74 68 20 27 41 27 2e 20 20 54 68 61 74 20 77 61  th 'A'.  That wa
ebd0: 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69  y,.** when multi
ebe0: 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79 70  ple affinity typ
ebf0: 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61  es are concatena
ec00: 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ted into a strin
ec10: 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73  g and.** used as
ec20: 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c   the P4 operand,
ec30: 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f   they will be mo
ec40: 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a  re readable..**.
ec50: 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61  ** Note also tha
ec60: 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79  t the numeric ty
ec70: 70 65 73 20 61 72 65 20 67 72 6f 75 70 65 64 20  pes are grouped 
ec80: 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61 74  together so that
ec90: 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20   testing.** for 
eca0: 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69  a numeric type i
ecb0: 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61  s a single compa
ecc0: 72 69 73 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20  rison.  And the 
ecd0: 42 4c 4f 42 20 74 79 70 65 20 69 73 20 66 69 72  BLOB type is fir
ece0: 73 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  st..*/.#define S
ecf0: 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 20  QLITE_AFF_BLOB  
ed00: 20 20 20 27 41 27 0a 23 64 65 66 69 6e 65 20 53     'A'.#define S
ed10: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 20  QLITE_AFF_TEXT  
ed20: 20 20 20 27 42 27 0a 23 64 65 66 69 6e 65 20 53     'B'.#define S
ed30: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
ed40: 43 20 20 27 43 27 0a 23 64 65 66 69 6e 65 20 53  C  'C'.#define S
ed50: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
ed60: 52 20 20 27 44 27 0a 23 64 65 66 69 6e 65 20 53  R  'D'.#define S
ed70: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 20  QLITE_AFF_REAL  
ed80: 20 20 20 27 45 27 0a 0a 23 64 65 66 69 6e 65 20     'E'..#define 
ed90: 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72 69 63  sqlite3IsNumeric
eda0: 41 66 66 69 6e 69 74 79 28 58 29 20 20 28 28 58  Affinity(X)  ((X
edb0: 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  )>=SQLITE_AFF_NU
edc0: 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  MERIC)../*.** Th
edd0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
ede0: 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f  K values masks o
edf0: 66 66 20 74 68 65 20 73 69 67 6e 69 66 69 63 61  ff the significa
ee00: 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a  nt bits of an.**
ee10: 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75 65 2e   affinity value.
ee20: 20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c   .*/.#define SQL
ee30: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20  ITE_AFF_MASK    
ee40: 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64   0x47../*.** Add
ee50: 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75  itional bit valu
ee60: 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f  es that can be O
ee70: 52 65 64 20 77 69 74 68 20 61 6e 20 61 66 66 69  Red with an affi
ee80: 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20  nity without.** 
ee90: 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66  changing the aff
eea0: 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  inity..**.** The
eeb0: 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20   SQLITE_NOTNULL 
eec0: 66 6c 61 67 20 69 73 20 61 20 63 6f 6d 62 69 6e  flag is a combin
eed0: 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20  ation of NULLEQ 
eee0: 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a  and JUMPIFNULL..
eef0: 2a 2a 20 49 74 20 63 61 75 73 65 73 20 61 6e 20  ** It causes an 
ef00: 61 73 73 65 72 74 28 29 20 74 6f 20 66 69 72 65  assert() to fire
ef10: 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
ef20: 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61 72 69 73  nd to a comparis
ef30: 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69  on.** operator i
ef40: 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61  s NULL.  It is a
ef50: 64 64 65 64 20 74 6f 20 63 65 72 74 61 69 6e 20  dded to certain 
ef60: 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61  comparison opera
ef70: 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65  tors to.** prove
ef80: 20 74 68 61 74 20 74 68 65 20 6f 70 65 72 61 6e   that the operan
ef90: 64 73 20 61 72 65 20 61 6c 77 61 79 73 20 4e 4f  ds are always NO
efa0: 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69  T NULL..*/.#defi
efb0: 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  ne SQLITE_JUMPIF
efc0: 4e 55 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a 20  NULL   0x10  /* 
efd0: 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65 72 20  jumps if either 
efe0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
eff0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f000: 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20 30  E_STOREP2      0
f010: 78 32 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65  x20  /* Store re
f020: 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d 20  sult in reg[P2] 
f030: 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d 70  rather than jump
f040: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f050: 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20 20  TE_NULLEQ       
f060: 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55  0x80  /* NULL=NU
f070: 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LL */.#define SQ
f080: 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20  LITE_NOTNULL    
f090: 20 20 30 78 39 30 20 20 2f 2a 20 41 73 73 65 72    0x90  /* Asser
f0a0: 74 20 74 68 61 74 20 6f 70 65 72 61 6e 64 73 20  t that operands 
f0b0: 61 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a  are never NULL *
f0c0: 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65  /../*.** An obje
f0d0: 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ct of this type 
f0e0: 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65  is created for e
f0f0: 61 63 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ach virtual tabl
f100: 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20  e present in.** 
f110: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
f120: 65 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ema. .**.** If t
f130: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
f140: 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 74 68  ma is shared, th
f150: 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20  en there is one 
f160: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
f170: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f  .** structure fo
f180: 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  r each database 
f190: 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69  connection (sqli
f1a0: 74 65 33 2a 29 20 74 68 61 74 20 75 73 65 73 20  te3*) that uses 
f1b0: 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63  the shared.** sc
f1c0: 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65  hema. This is be
f1d0: 63 61 75 73 65 20 65 61 63 68 20 64 61 74 61 62  cause each datab
f1e0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72  ase connection r
f1f0: 65 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20  equires its own 
f200: 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e  unique.** instan
f210: 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ce of the sqlite
f220: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75  3_vtab* handle u
f230: 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68  sed to access th
f240: 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
f250: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
f260: 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62  on. sqlite3_vtab
f270: 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f  * handles can no
f280: 74 20 62 65 20 73 68 61 72 65 64 20 62 65 74 77  t be shared betw
f290: 65 65 6e 20 0a 2a 2a 20 64 61 74 61 62 61 73 65  een .** database
f2a0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76   connections, ev
f2b0: 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73 74  en when the rest
f2c0: 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72   of the in-memor
f2d0: 79 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 73  y database .** s
f2e0: 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c  chema is shared,
f2f0: 20 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e   as the implemen
f300: 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f  tation often sto
f310: 72 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65  res the database
f320: 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  .** connection h
f330: 61 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20  andle passed to 
f340: 69 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e  it via the xConn
f350: 65 63 74 28 29 20 6f 72 20 78 43 72 65 61 74 65  ect() or xCreate
f360: 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72  () method.** dur
f370: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ing initializati
f380: 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54  on internally. T
f390: 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e  his database con
f3a0: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d  nection handle m
f3b0: 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73  ay.** then be us
f3c0: 65 64 20 62 79 20 74 68 65 20 76 69 72 74 75 61  ed by the virtua
f3d0: 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e  l table implemen
f3e0: 74 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73  tation to access
f3f0: 20 72 65 61 6c 20 74 61 62 6c 65 73 20 0a 2a 2a   real tables .**
f400: 20 77 69 74 68 69 6e 20 74 68 65 20 64 61 74 61   within the data
f410: 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68  base. So that th
f420: 65 79 20 61 70 70 65 61 72 20 61 73 20 70 61 72  ey appear as par
f430: 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73  t of the callers
f440: 20 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e   .** transaction
f450: 2c 20 74 68 65 73 65 20 61 63 63 65 73 73 65 73  , these accesses
f460: 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65   need to be made
f470: 20 76 69 61 20 74 68 65 20 73 61 6d 65 20 64 61   via the same da
f480: 74 61 62 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65  tabase .** conne
f490: 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73  ction as that us
f4a0: 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 53 51  ed to execute SQ
f4b0: 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20  L operations on 
f4c0: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
f4d0: 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61  e..**.** All VTa
f4e0: 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74  ble objects that
f4f0: 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61   correspond to a
f500: 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e   single table in
f510: 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74   a shared.** dat
f520: 61 62 61 73 65 20 73 63 68 65 6d 61 20 61 72 65  abase schema are
f530: 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65   initially store
f540: 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69  d in a linked-li
f550: 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  st pointed to by
f560: 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56  .** the Table.pV
f570: 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72  Table member var
f580: 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72  iable of the cor
f590: 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65  responding Table
f5a0: 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e   object..** When
f5b0: 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70   an sqlite3_prep
f5c0: 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20  are() operation 
f5d0: 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 61  is required to a
f5e0: 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61  ccess the virtua
f5f0: 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73  l.** table, it s
f600: 65 61 72 63 68 65 73 20 74 68 65 20 6c 69 73 74  earches the list
f610: 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20   for the VTable 
f620: 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
f630: 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62   to the.** datab
f640: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64  ase connection d
f650: 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61 72 69  oing the prepari
f660: 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20  ng so as to use 
f670: 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73  the correct.** s
f680: 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
f690: 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69  dle in the compi
f6a0: 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a  led query..**.**
f6b0: 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f   When an in-memo
f6c0: 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20  ry Table object 
f6d0: 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20  is deleted (for 
f6e0: 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65  example when the
f6f0: 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65  .** schema is be
f700: 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72  ing reloaded for
f710: 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74   some reason), t
f720: 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  he VTable object
f730: 73 20 61 72 65 20 6e 6f 74 20 0a 2a 2a 20 64 65  s are not .** de
f740: 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71  leted and the sq
f750: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
f760: 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73  les are not xDis
f770: 63 6f 6e 6e 65 63 74 28 29 65 64 20 0a 2a 2a 20  connect()ed .** 
f780: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73  immediately. Ins
f790: 74 65 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d  tead, they are m
f7a0: 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61  oved from the Ta
f7b0: 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74  ble.pVTable list
f7c0: 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c   to.** another l
f7d0: 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65  inked list heade
f7e0: 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33  d by the sqlite3
f7f0: 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d  .pDisconnect mem
f800: 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f  ber of the.** co
f810: 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69  rresponding sqli
f820: 74 65 33 20 73 74 72 75 63 74 75 72 65 2e 20 54  te3 structure. T
f830: 68 65 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c  hey are then del
f840: 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74  eted/xDisconnect
f850: 65 64 20 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65  ed .** next time
f860: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20   a statement is 
f870: 70 72 65 70 61 72 65 64 20 75 73 69 6e 67 20 73  prepared using s
f880: 61 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68  aid sqlite3*. Th
f890: 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f  is is done.** to
f8a0: 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20   avoid deadlock 
f8b0: 69 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67  issues involving
f8c0: 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65   multiple sqlite
f8d0: 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e  3.mutex mutexes.
f8e0: 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d  .** Refer to com
f8f0: 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63  ments above func
f900: 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62  tion sqlite3Vtab
f910: 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72  UnlockList() for
f920: 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69   an.** explanati
f930: 6f 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74 20  on as to why it 
f940: 69 73 20 73 61 66 65 20 74 6f 20 61 64 64 20 61  is safe to add a
f950: 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71  n entry to an sq
f960: 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63  lite3.pDisconnec
f970: 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75  t.** list withou
f980: 74 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f  t holding the co
f990: 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69  rresponding sqli
f9a0: 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e  te3.mutex mutex.
f9b0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72  .**.** The memor
f9c0: 79 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66  y for objects of
f9d0: 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c   this type is al
f9e0: 77 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62  ways allocated b
f9f0: 79 20 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d  y .** sqlite3DbM
fa00: 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74  alloc(), using t
fa10: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  he connection ha
fa20: 6e 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56  ndle stored in V
fa30: 54 61 62 6c 65 2e 64 62 20 61 73 20 0a 2a 2a 20  Table.db as .** 
fa40: 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65  the first argume
fa50: 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54  nt..*/.struct VT
fa60: 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33  able {.  sqlite3
fa70: 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20   *db;           
fa80: 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63     /* Database c
fa90: 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69  onnection associ
faa0: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 74  ated with this t
fab0: 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65  able */.  Module
fac0: 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20   *pMod;         
fad0: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
fae0: 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  o module impleme
faf0: 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c  ntation */.  sql
fb00: 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
fb10: 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65  ;      /* Pointe
fb20: 72 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e  r to vtab instan
fb30: 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  ce */.  int nRef
fb40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
fb50: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
fb60: 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20  ointers to this 
fb70: 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75  structure */.  u
fb80: 38 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20  8 bConstraint;  
fb90: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
fba0: 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   if constraints 
fbb0: 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f  are supported */
fbc0: 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e  .  int iSavepoin
fbd0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
fbe0: 44 65 70 74 68 20 6f 66 20 74 68 65 20 53 41 56  Depth of the SAV
fbf0: 45 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a  EPOINT stack */.
fc00: 20 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b    VTable *pNext;
fc10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
fc20: 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69  ext in linked li
fc30: 73 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a  st (see above) *
fc40: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
fc50: 73 63 68 65 6d 61 20 66 6f 72 20 65 61 63 68 20  schema for each 
fc60: 53 51 4c 20 74 61 62 6c 65 20 61 6e 64 20 76 69  SQL table and vi
fc70: 65 77 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  ew is represente
fc80: 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62  d in memory.** b
fc90: 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
fca0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
fcb0: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
fcc0: 75 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68  uct Table {.  ch
fcd0: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
fce0: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
fcf0: 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  e table or view 
fd00: 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f  */.  Column *aCo
fd10: 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66  l;        /* Inf
fd20: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
fd30: 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
fd40: 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20  Index *pIndex;  
fd50: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
fd60: 53 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74  SQL indexes on t
fd70: 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20  his table. */.  
fd80: 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
fd90: 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72       /* NULL for
fda0: 20 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73   tables.  Points
fdb0: 20 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69   to definition i
fdc0: 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46  f a view. */.  F
fdd0: 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20  Key *pFKey;     
fde0: 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69      /* Linked li
fdf0: 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67  st of all foreig
fe00: 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74  n keys in this t
fe10: 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  able */.  char *
fe20: 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f  zColAff;       /
fe30: 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e  * String definin
fe40: 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  g the affinity o
fe50: 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  f each column */
fe60: 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68  .  ExprList *pCh
fe70: 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43  eck;    /* All C
fe80: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  HECK constraints
fe90: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
fea0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
feb0: 2e 2e 2e 20 61 6c 73 6f 20 75 73 65 64 20 61 73  ... also used as
fec0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69 73   column name lis
fed0: 74 20 69 6e 20 61 20 56 49 45 57 20 2a 2f 0a 20  t in a VIEW */. 
fee0: 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
fef0: 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54        /* Root BT
ff00: 72 65 65 20 70 61 67 65 20 66 6f 72 20 74 68 69  ree page for thi
ff10: 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 31 36  s table */.  i16
ff20: 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20   iPKey;         
ff30: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61    /* If not nega
ff40: 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69  tive, use aCol[i
ff50: 50 4b 65 79 5d 20 61 73 20 74 68 65 20 72 6f 77  PKey] as the row
ff60: 69 64 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c  id */.  i16 nCol
ff70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
ff80: 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
ff90: 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20  s in this table 
ffa0: 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b 20 20  */.  u16 nRef;  
ffb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
ffc0: 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ber of pointers 
ffd0: 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f  to this Table */
ffe0: 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f  .  LogEst nRowLo
fff0: 67 45 73 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d  gEst;   /* Estim
10000 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62  ated rows in tab
10010 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65  le - from sqlite
10020 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a  _stat1 table */.
10030 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52 6f    LogEst szTabRo
10040 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61  w;     /* Estima
10050 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63 68  ted size of each
10060 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62 79   table row in by
10070 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  tes */.#ifdef SQ
10080 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54  LITE_ENABLE_COST
10090 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f  MULT.  LogEst co
100a0 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43  stMult;     /* C
100b0 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72 20 66  ost multiplier f
100c0 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20 74 61  or using this ta
100d0 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ble */.#endif.  
100e0 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20  u8 tabFlags;    
100f0 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
10100 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  TF_* values */. 
10110 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20   u8 keyConf;    
10120 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f        /* What to
10130 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75   do in case of u
10140 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69  niqueness confli
10150 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23  ct on iPKey */.#
10160 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
10170 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20  IT_ALTERTABLE.  
10180 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74  int addColOffset
10190 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69  ;    /* Offset i
101a0 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  n CREATE TABLE s
101b0 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77  tmt to add a new
101c0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69   column */.#endi
101d0 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
101e0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
101f0 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65  LE.  int nModule
10200 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  Arg;      /* Num
10210 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
10220 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a   to the module *
10230 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64  /.  char **azMod
10240 75 6c 65 41 72 67 3b 20 20 2f 2a 20 30 3a 20 6d  uleArg;  /* 0: m
10250 6f 64 75 6c 65 20 31 3a 20 73 63 68 65 6d 61 20  odule 1: schema 
10260 32 3a 20 76 74 61 62 20 6e 61 6d 65 20 33 2e 2e  2: vtab name 3..
10270 2e 3a 20 61 72 67 73 20 2a 2f 0a 20 20 56 54 61  .: args */.  VTa
10280 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20  ble *pVTable;   
10290 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61    /* List of VTa
102a0 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a  ble objects. */.
102b0 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72  #endif.  Trigger
102c0 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a   *pTrigger;   /*
102d0 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   List of trigger
102e0 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68  s stored in pSch
102f0 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ema */.  Schema 
10300 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  *pSchema;     /*
10310 20 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e   Schema that con
10320 74 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65  tains this table
10330 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65   */.  Table *pNe
10340 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65  xtZombie;  /* Ne
10350 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e  xt on the Parse.
10360 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20  pZombieTab list 
10370 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
10380 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
10390 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a  Table.tabFlags..
103a0 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64  **.** TF_OOOHidd
103b0 65 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 76 69  en applies to vi
103c0 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74 68 61  rtual tables tha
103d0 74 20 68 61 76 65 20 68 69 64 64 65 6e 20 63 6f  t have hidden co
103e0 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65 0a 2a  lumns that are.*
103f0 2a 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f  * followed by no
10400 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  n-hidden columns
10410 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20 22 43 52  .  Example:  "CR
10420 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
10430 4c 45 20 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74  LE x USING.** vt
10440 61 62 31 28 61 20 48 49 44 44 45 4e 2c 20 62 29  ab1(a HIDDEN, b)
10450 3b 22 2e 20 20 53 69 6e 63 65 20 22 62 22 20 69  ;".  Since "b" i
10460 73 20 61 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63  s a non-hidden c
10470 6f 6c 75 6d 6e 20 62 75 74 20 22 61 22 20 69 73  olumn but "a" is
10480 20 68 69 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20   hidden,.** the 
10490 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74  TF_OOOHidden att
104a0 72 69 62 75 74 65 20 77 6f 75 6c 64 20 61 70 70  ribute would app
104b0 6c 79 20 69 6e 20 74 68 69 73 20 63 61 73 65 2e  ly in this case.
104c0 20 20 53 75 63 68 20 74 61 62 6c 65 73 20 72 65    Such tables re
104d0 71 75 69 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c  quire.** special
104e0 20 68 61 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67   handling during
104f0 20 49 4e 53 45 52 54 20 70 72 6f 63 65 73 73 69   INSERT processi
10500 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ng..*/.#define T
10510 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20  F_Readonly      
10520 20 20 30 78 30 31 20 20 20 20 2f 2a 20 52 65 61    0x01    /* Rea
10530 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61  d-only system ta
10540 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
10550 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20  F_Ephemeral     
10560 20 20 30 78 30 32 20 20 20 20 2f 2a 20 41 6e 20    0x02    /* An 
10570 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  ephemeral table 
10580 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61  */.#define TF_Ha
10590 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78  sPrimaryKey   0x
105a0 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68  04    /* Table h
105b0 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79  as a primary key
105c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41   */.#define TF_A
105d0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30  utoincrement   0
105e0 78 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65  x08    /* Intege
105f0 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73  r primary key is
10600 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a   autoincrement *
10610 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 56 69 72  /.#define TF_Vir
10620 74 75 61 6c 20 20 20 20 20 20 20 20 20 30 78 31  tual         0x1
10630 30 20 20 20 20 2f 2a 20 49 73 20 61 20 76 69 72  0    /* Is a vir
10640 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  tual table */.#d
10650 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74  efine TF_Without
10660 52 6f 77 69 64 20 20 20 20 30 78 32 30 20 20 20  Rowid    0x20   
10670 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50   /* No rowid.  P
10680 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68  RIMARY KEY is th
10690 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65  e key */.#define
106a0 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77   TF_NoVisibleRow
106b0 69 64 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4e  id  0x40    /* N
106c0 6f 20 75 73 65 72 2d 76 69 73 69 62 6c 65 20 22  o user-visible "
106d0 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f  rowid" column */
106e0 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48  .#define TF_OOOH
106f0 69 64 64 65 6e 20 20 20 20 20 20 20 30 78 38 30  idden       0x80
10700 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72      /* Out-of-Or
10710 64 65 72 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  der hidden colum
10720 6e 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65  ns */.../*.** Te
10730 73 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65  st to see whethe
10740 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65  r or not a table
10750 20 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61   is a virtual ta
10760 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a  ble.  This is.**
10770 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f   done as a macro
10780 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c   so that it will
10790 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75   be optimized ou
107a0 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a  t when virtual.*
107b0 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20  * table support 
107c0 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
107d0 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69  the build..*/.#i
107e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
107f0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23  T_VIRTUALTABLE.#
10800 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75    define IsVirtu
10810 61 6c 28 58 29 20 20 20 20 20 20 28 28 28 58 29  al(X)      (((X)
10820 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f  ->tabFlags & TF_
10830 56 69 72 74 75 61 6c 29 21 3d 30 29 0a 23 20 20  Virtual)!=0).#  
10840 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43  define IsHiddenC
10850 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e  olumn(X) (((X)->
10860 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c  colFlags & COLFL
10870 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23  AG_HIDDEN)!=0).#
10880 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
10890 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
108a0 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48   0.#  define IsH
108b0 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30  iddenColumn(X) 0
108c0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 65 73  .#endif../* Does
108d0 20 74 68 65 20 74 61 62 6c 65 20 68 61 76 65 20   the table have 
108e0 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  a rowid */.#defi
108f0 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29 20 20  ne HasRowid(X)  
10900 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61     (((X)->tabFla
10910 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52  gs & TF_WithoutR
10920 6f 77 69 64 29 3d 3d 30 29 0a 23 64 65 66 69 6e  owid)==0).#defin
10930 65 20 56 69 73 69 62 6c 65 52 6f 77 69 64 28 58  e VisibleRowid(X
10940 29 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67  ) (((X)->tabFlag
10950 73 20 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65  s & TF_NoVisible
10960 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a  Rowid)==0)../*.*
10970 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b  * Each foreign k
10980 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73  ey constraint is
10990 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
109a0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
109b0 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41  ructure..**.** A
109c0 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20   foreign key is 
109d0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
109e0 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65  two tables.  The
109f0 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73   "from" table is
10a00 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68  .** the table th
10a10 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  at contains the 
10a20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
10a30 65 20 74 68 61 74 20 63 72 65 61 74 65 73 20 74  e that creates t
10a40 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  he foreign.** ke
10a50 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61 62  y.  The "to" tab
10a60 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c 65 20  le is the table 
10a70 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e  that is named in
10a80 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
10a90 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69  clause..** Consi
10aa0 64 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65  der this example
10ab0 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41  :.**.**     CREA
10ac0 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a  TE TABLE ex1(.**
10ad0 20 20 20 20 20 20 20 61 20 49 4e 54 45 47 45 52         a INTEGER
10ae0 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a   PRIMARY KEY,.**
10af0 20 20 20 20 20 20 20 62 20 49 4e 54 45 47 45 52         b INTEGER
10b00 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20   CONSTRAINT fk1 
10b10 52 45 46 45 52 45 4e 43 45 53 20 65 78 32 28 78  REFERENCES ex2(x
10b20 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a  ).**     );.**.*
10b30 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65  * For foreign ke
10b40 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f  y "fk1", the fro
10b50 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31 22  m-table is "ex1"
10b60 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c   and the to-tabl
10b70 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45  e is "ex2"..** E
10b80 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a  quivalent names:
10b90 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d  .**.**     from-
10ba0 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74  table == child-t
10bb0 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f  able.**       to
10bc0 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74  -table == parent
10bd0 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63  -table.**.** Eac
10be0 68 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  h REFERENCES cla
10bf0 75 73 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e  use generates an
10c00 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
10c10 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
10c20 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73  ture.** which is
10c30 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
10c40 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68   from-table.  Th
10c50 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20  e to-table need 
10c60 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a  not exist when.*
10c70 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65  * the from-table
10c80 20 69 73 20 63 72 65 61 74 65 64 2e 20 20 54 68   is created.  Th
10c90 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74  e existence of t
10ca0 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e  he to-table is n
10cb0 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a  ot checked..**.*
10cc0 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c  * The list of al
10cd0 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68  l parents for ch
10ce0 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73 20 68  ild Table X is h
10cf0 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a  eld at X.pFKey..
10d00 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20  **.** A list of 
10d10 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72  all children for
10d20 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a   a table named Z
10d30 20 28 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f   (which might no
10d40 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a  t even exist).**
10d50 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65   is held in Sche
10d60 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68  ma.fkeyHash with
10d70 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a   a hash key of Z
10d80 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79  ..*/.struct FKey
10d90 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f   {.  Table *pFro
10da0 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  m;     /* Table 
10db0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52  containing the R
10dc0 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
10dd0 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f   (aka: Child) */
10de0 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72  .  FKey *pNextFr
10df0 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65  om;  /* Next FKe
10e00 79 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  y with the same 
10e10 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70  in pFrom. Next p
10e20 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a  arent of pFrom *
10e30 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20  /.  char *zTo;  
10e40 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
10e50 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20   table that the 
10e60 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61  key points to (a
10e70 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20  ka: Parent) */. 
10e80 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20   FKey *pNextTo; 
10e90 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20     /* Next with 
10ea0 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65  the same zTo. Ne
10eb0 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e  xt child of zTo.
10ec0 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65   */.  FKey *pPre
10ed0 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69  vTo;    /* Previ
10ee0 6f 75 73 20 77 69 74 68 20 74 68 65 20 73 61 6d  ous with the sam
10ef0 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e  e zTo */.  int n
10f00 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Col;         /* 
10f10 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
10f20 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f  s in this key */
10f30 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32  .  /* EV: R-3032
10f40 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20  3-21917 */.  u8 
10f50 69 73 44 65 66 65 72 72 65 64 3b 20 20 20 20 20  isDeferred;     
10f60 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e    /* True if con
10f70 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67  straint checking
10f80 20 69 73 20 64 65 66 65 72 72 65 64 20 74 69 6c   is deferred til
10f90 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38  l COMMIT */.  u8
10fa0 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20   aAction[2];    
10fb0 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45      /* ON DELETE
10fc0 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61   and ON UPDATE a
10fd0 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69  ctions, respecti
10fe0 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65  vely */.  Trigge
10ff0 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b  r *apTrigger[2];
11000 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72 20  /* Triggers for 
11010 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e  aAction[] action
11020 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43  s */.  struct sC
11030 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20  olMap {      /* 
11040 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d  Mapping of colum
11050 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63  ns in pFrom to c
11060 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f  olumns in zTo */
11070 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20  .    int iFrom; 
11080 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
11090 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  dex of column in
110a0 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68   pFrom */.    ch
110b0 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20  ar *zCol;       
110c0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63      /* Name of c
110d0 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49  olumn in zTo.  I
110e0 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41  f NULL use PRIMA
110f0 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43  RY KEY */.  } aC
11100 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20  ol[1];          
11110 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66    /* One entry f
11120 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20  or each of nCol 
11130 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f  columns */.};../
11140 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70  *.** SQLite supp
11150 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72  orts many differ
11160 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f  ent ways to reso
11170 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  lve a constraint
11180 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c  .** error.  ROLL
11190 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20  BACK processing 
111a0 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e  means that a con
111b0 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
111c0 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20  n.** causes the 
111d0 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
111e0 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64  cess to fail and
111f0 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
11200 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20   transaction.** 
11210 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
11220 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73  k.  ABORT proces
11230 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f  sing means the o
11240 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63  peration in proc
11250 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64  ess.** fails and
11260 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67   any prior chang
11270 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65  es from that one
11280 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62   operation are b
11290 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75  acked out,.** bu
112a0 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  t the transactio
112b0 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20  n is not rolled 
112c0 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63  back.  FAIL proc
112d0 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61  essing means tha
112e0 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69  t.** the operati
112f0 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73  on in progress s
11300 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73  tops and returns
11310 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20   an error code. 
11320 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68   But prior.** ch
11330 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68 65  anges due to the
11340 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20   same operation 
11350 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f  are not backed o
11360 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61  ut and no rollba
11370 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49  ck.** occurs.  I
11380 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74  GNORE means that
11390 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20   the particular 
113a0 72 6f 77 20 74 68 61 74 20 63 61 75 73 65 64 20  row that caused 
113b0 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  the constraint.*
113c0 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69  * error is not i
113d0 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74  nserted or updat
113e0 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20  ed.  Processing 
113f0 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f  continues and no
11400 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74   error.** is ret
11410 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20  urned.  REPLACE 
11420 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65 65 78  means that preex
11430 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
11440 72 6f 77 73 20 74 68 61 74 20 63 61 75 73 65 64  rows that caused
11450 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e  .** a UNIQUE con
11460 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
11470 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f  n are removed so
11480 20 74 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e   that the new in
11490 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74  sert or.** updat
114a0 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20  e can proceed.  
114b0 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69  Processing conti
114c0 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f  nues and no erro
114d0 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a  r is reported..*
114e0 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53  *.** RESTRICT, S
114f0 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43  ETNULL, and CASC
11500 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c  ADE actions appl
11510 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67  y only to foreig
11520 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52  n keys..** RESTR
11530 49 43 54 20 69 73 20 74 68 65 20 73 61 6d 65 20  ICT is the same 
11540 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d  as ABORT for IMM
11550 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b  EDIATE foreign k
11560 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73  eys and the.** s
11570 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20  ame as ROLLBACK 
11580 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65 79  for DEFERRED key
11590 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e  s.  SETNULL mean
115a0 73 20 74 68 61 74 20 74 68 65 20 66 6f 72 65 69  s that the forei
115b0 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74  gn.** key is set
115c0 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41   to NULL.  CASCA
115d0 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20  DE means that a 
115e0 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
115f0 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72   of the.** refer
11600 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20  enced table row 
11610 69 73 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e  is propagated in
11620 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74 20  to the row that 
11630 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72  holds the.** for
11640 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a  eign key..** .**
11650 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
11660 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61  ymbolic values a
11670 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72  re used to recor
11680 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20  d which type.** 
11690 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b  of action to tak
116a0 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  e..*/.#define OE
116b0 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a  _None     0   /*
116c0 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e   There is no con
116d0 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b  straint to check
116e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52   */.#define OE_R
116f0 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46  ollback 1   /* F
11700 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ail the operatio
11710 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74  n and rollback t
11720 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  he transaction *
11730 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f  /.#define OE_Abo
11740 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63  rt    2   /* Bac
11750 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75  k out changes bu
11760 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b  t do no rollback
11770 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
11780 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20  #define OE_Fail 
11790 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20      3   /* Stop 
117a0 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75  the operation bu
117b0 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f  t leave all prio
117c0 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  r changes */.#de
117d0 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20  fine OE_Ignore  
117e0 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74   4   /* Ignore t
117f0 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74  he error. Do not
11800 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f   do the INSERT o
11810 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  r UPDATE */.#def
11820 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20  ine OE_Replace  
11830 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78  5   /* Delete ex
11840 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74  isting record, t
11850 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72  hen do INSERT or
11860 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66   UPDATE */..#def
11870 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20  ine OE_Restrict 
11880 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20  6   /* OE_Abort 
11890 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f  for IMMEDIATE, O
118a0 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44  E_Rollback for D
118b0 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69  EFERRED */.#defi
118c0 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37  ne OE_SetNull  7
118d0 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f     /* Set the fo
118e0 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20  reign key value 
118f0 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  to NULL */.#defi
11900 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 38  ne OE_SetDflt  8
11910 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f     /* Set the fo
11920 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20  reign key value 
11930 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a  to its default *
11940 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73  /.#define OE_Cas
11950 63 61 64 65 20 20 39 20 20 20 2f 2a 20 43 61 73  cade  9   /* Cas
11960 63 61 64 65 20 74 68 65 20 63 68 61 6e 67 65 73  cade the changes
11970 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f   */..#define OE_
11980 44 65 66 61 75 6c 74 20 20 31 30 20 20 2f 2a 20  Default  10  /* 
11990 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65 20  Do whatever the 
119a0 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69  default action i
119b0 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  s */.../*.** An 
119c0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
119d0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
119e0 75 72 65 20 69 73 20 70 61 73 73 65 64 20 61 73  ure is passed as
119f0 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
11a00 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65  gument to sqlite
11a10 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20  3VdbeKeyCompare 
11a20 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 63  and is used to c
11a30 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63  ontrol the .** c
11a40 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65  omparison of the
11a50 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e   two index keys.
11a60 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74  .**.** Note that
11a70 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e   aSortOrder[] an
11a80 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e  d aColl[] have n
11a90 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20  Field+1 slots.  
11aa0 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69  There.** are nFi
11ab0 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68  eld slots for th
11ac0 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20  e columns of an 
11ad0 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65  index then one e
11ae0 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72  xtra slot.** for
11af0 20 74 68 65 20 72 6f 77 69 64 20 61 74 20 74 68   the rowid at th
11b00 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  e end..*/.struct
11b10 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32   KeyInfo {.  u32
11b20 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
11b30 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
11b40 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73  ferences to this
11b50 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20   KeyInfo object 
11b60 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
11b70 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
11b80 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20   encoding - one 
11b90 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54  of the SQLITE_UT
11ba0 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  F* values */.  u
11bb0 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  16 nField;      
11bc0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11bd0 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  key columns in t
11be0 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31  he index */.  u1
11bf0 36 20 6e 58 46 69 65 6c 64 3b 20 20 20 20 20 20  6 nXField;      
11c00 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
11c10 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e 64 20 74 68  olumns beyond th
11c20 65 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f  e key columns */
11c30 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
11c40 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
11c50 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
11c60 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74  n */.  u8 *aSort
11c70 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f  Order;     /* So
11c80 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63  rt order for eac
11c90 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43  h column. */.  C
11ca0 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d  ollSeq *aColl[1]
11cb0 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20  ;  /* Collating 
11cc0 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63  sequence for eac
11cd0 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65  h term of the ke
11ce0 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  y */.};../*.** A
11cf0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
11d00 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
11d10 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f  cture holds info
11d20 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 0a  rmation about a.
11d30 2a 2a 20 73 69 6e 67 6c 65 20 69 6e 64 65 78 20  ** single index 
11d40 72 65 63 6f 72 64 20 74 68 61 74 20 68 61 73 20  record that has 
11d50 61 6c 72 65 61 64 79 20 62 65 65 6e 20 70 61 72  already been par
11d60 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64  sed out into ind
11d70 69 76 69 64 75 61 6c 0a 2a 2a 20 76 61 6c 75 65  ividual.** value
11d80 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72  s..**.** A recor
11d90 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74  d is an object t
11da0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  hat contains one
11db0 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20   or more fields 
11dc0 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f  of data..** Reco
11dd0 72 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  rds are used to 
11de0 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e  store the conten
11df0 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77  t of a table row
11e00 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a   and to store.**
11e10 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69   the key of an i
11e20 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e  ndex.  A blob en
11e30 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f  coding of a reco
11e40 72 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79  rd is created by
11e50 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52  .** the OP_MakeR
11e60 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20  ecord opcode of 
11e70 74 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20  the VDBE and is 
11e80 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20  disassembled by 
11e90 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e  the.** OP_Column
11ea0 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54   opcode..**.** T
11eb0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 68 6f  his structure ho
11ec0 6c 64 73 20 61 20 72 65 63 6f 72 64 20 74 68 61  lds a record tha
11ed0 74 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65  t has already be
11ee0 65 6e 20 64 69 73 61 73 73 65 6d 62 6c 65 64 0a  en disassembled.
11ef0 2a 2a 20 69 6e 74 6f 20 69 74 73 20 63 6f 6e 73  ** into its cons
11f00 74 69 74 75 65 6e 74 20 66 69 65 6c 64 73 2e 0a  tituent fields..
11f10 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64  **.** The r1 and
11f20 20 72 32 20 6d 65 6d 62 65 72 20 76 61 72 69 61   r2 member varia
11f30 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73  bles are only us
11f40 65 64 20 62 79 20 74 68 65 20 6f 70 74 69 6d 69  ed by the optimi
11f50 7a 65 64 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a  zed comparison.*
11f60 2a 20 66 75 6e 63 74 69 6f 6e 73 20 76 64 62 65  * functions vdbe
11f70 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 49 6e 74  RecordCompareInt
11f80 28 29 20 61 6e 64 20 76 64 62 65 52 65 63 6f 72  () and vdbeRecor
11f90 64 43 6f 6d 70 61 72 65 53 74 72 69 6e 67 28 29  dCompareString()
11fa0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61  ..*/.struct Unpa
11fb0 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b  ckedRecord {.  K
11fc0 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
11fd0 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20  ;  /* Collation 
11fe0 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69  and sort-order i
11ff0 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20  nformation */.  
12000 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  u16 nField;     
12010 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
12020 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65   entries in apMe
12030 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65 66 61  m[] */.  i8 defa
12040 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20  ult_rc;      /* 
12050 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c  Comparison resul
12060 74 20 69 66 20 6b 65 79 73 20 61 72 65 20 65 71  t if keys are eq
12070 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72 72 43  ual */.  u8 errC
12080 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ode;         /* 
12090 45 72 72 6f 72 20 64 65 74 65 63 74 65 64 20 62  Error detected b
120a0 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61 72 65  y xRecordCompare
120b0 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e 4f 4d   (CORRUPT or NOM
120c0 45 4d 29 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d  EM) */.  Mem *aM
120d0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
120e0 56 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20  Values */.  int 
120f0 72 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r1;             
12100 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
12110 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73  rn if (lhs > rhs
12120 29 20 2a 2f 0a 20 20 69 6e 74 20 72 32 3b 20 20  ) */.  int r2;  
12130 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
12140 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66  lue to return if
12150 20 28 72 68 73 20 3c 20 6c 68 73 29 20 2a 2f 0a   (rhs < lhs) */.
12160 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  };.../*.** Each 
12170 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70  SQL index is rep
12180 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
12190 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74  ry by an.** inst
121a0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
121b0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
121c0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d  .**.** The colum
121d0 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ns of the table 
121e0 74 68 61 74 20 61 72 65 20 74 6f 20 62 65 20 69  that are to be i
121f0 6e 64 65 78 65 64 20 61 72 65 20 64 65 73 63 72  ndexed are descr
12200 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61  ibed.** by the a
12210 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20  iColumn[] field 
12220 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
12230 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  e.  For example,
12240 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68   suppose.** we h
12250 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ave the followin
12260 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65  g table and inde
12270 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45  x:.**.**     CRE
12280 41 54 45 20 54 41 42 4c 45 20 45 78 31 28 63 31  ATE TABLE Ex1(c1
12290 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33   int, c2 int, c3
122a0 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43   text);.**     C
122b0 52 45 41 54 45 20 49 4e 44 45 58 20 45 78 32 20  REATE INDEX Ex2 
122c0 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a  ON Ex1(c3,c1);.*
122d0 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c  *.** In the Tabl
122e0 65 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  e structure desc
122f0 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c  ribing Ex1, nCol
12300 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68 65 72  ==3 because ther
12310 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63  e are.** three c
12320 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
12330 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64  ble.  In the Ind
12340 65 78 20 73 74 72 75 63 74 75 72 65 20 64 65 73  ex structure des
12350 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20  cribing.** Ex2, 
12360 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65  nColumn==2 since
12370 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75   2 of the 3 colu
12380 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20 69  mns of Ex1 are i
12390 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76  ndexed..** The v
123a0 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e  alue of aiColumn
123b0 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43   is {2, 0}.  aiC
123c0 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61  olumn[0]==2 beca
123d0 75 73 65 20 74 68 65 20 0a 2a 2a 20 66 69 72 73  use the .** firs
123e0 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  t column to be i
123f0 6e 64 65 78 65 64 20 28 63 33 29 20 68 61 73 20  ndexed (c3) has 
12400 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e  an index of 2 in
12410 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20   Ex1.aCol[]..** 
12420 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d  The second colum
12430 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
12440 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c1) has an inde
12450 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31  x of 0 in.** Ex1
12460 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45  .aCol[], hence E
12470 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d  x2.aiColumn[1]==
12480 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64  0..**.** The Ind
12490 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64  ex.onError field
124a0 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74   determines whet
124b0 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69  her or not the i
124c0 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a  ndexed columns.*
124d0 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65  * must be unique
124e0 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20   and what to do 
124f0 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e  if they are not.
12500 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45    When Index.onE
12510 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a  rror=OE_None,.**
12520 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69   it means this i
12530 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69  s not a unique i
12540 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65  ndex.  Otherwise
12550 20 69 74 20 69 73 20 61 20 75 6e 69 71 75 65 20   it is a unique 
12560 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65  index.** and the
12570 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e   value of Index.
12580 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65  onError indicate
12590 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c   the which confl
125a0 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 0a  ict resolution .
125b0 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20  ** algorithm to 
125c0 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20  employ whenever 
125d0 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  an attempt is ma
125e0 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e  de to insert a n
125f0 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65  on-unique.** ele
12600 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c  ment..**.** Whil
12610 65 20 70 61 72 73 69 6e 67 20 61 20 43 52 45 41  e parsing a CREA
12620 54 45 20 54 41 42 4c 45 20 6f 72 20 43 52 45 41  TE TABLE or CREA
12630 54 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65  TE INDEX stateme
12640 6e 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  nt in order to.*
12650 2a 20 67 65 6e 65 72 61 74 65 20 56 44 42 45 20  * generate VDBE 
12660 63 6f 64 65 20 28 61 73 20 6f 70 70 6f 73 65 64  code (as opposed
12670 20 74 6f 20 70 61 72 73 69 6e 67 20 6f 6e 65 20   to parsing one 
12680 72 65 61 64 20 66 72 6f 6d 20 61 6e 20 73 71 6c  read from an sql
12690 69 74 65 5f 6d 61 73 74 65 72 0a 2a 2a 20 74 61  ite_master.** ta
126a0 62 6c 65 20 61 73 20 70 61 72 74 20 6f 66 20 70  ble as part of p
126b0 61 72 73 69 6e 67 20 61 6e 20 65 78 69 73 74 69  arsing an existi
126c0 6e 67 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ng database sche
126d0 6d 61 29 2c 20 74 72 61 6e 73 69 65 6e 74 20 69  ma), transient i
126e0 6e 73 74 61 6e 63 65 73 0a 2a 2a 20 6f 66 20 74  nstances.** of t
126f0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 6d 61  his structure ma
12700 79 20 62 65 20 63 72 65 61 74 65 64 2e 20 49 6e  y be created. In
12710 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 49   this case the I
12720 6e 64 65 78 2e 74 6e 75 6d 20 76 61 72 69 61 62  ndex.tnum variab
12730 6c 65 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f  le is.** used to
12740 20 73 74 6f 72 65 20 74 68 65 20 61 64 64 72 65   store the addre
12750 73 73 20 6f 66 20 61 20 56 44 42 45 20 69 6e 73  ss of a VDBE ins
12760 74 72 75 63 74 69 6f 6e 2c 20 6e 6f 74 20 61 20  truction, not a 
12770 64 61 74 61 62 61 73 65 20 70 61 67 65 0a 2a 2a  database page.**
12780 20 6e 75 6d 62 65 72 20 28 69 74 20 63 61 6e 6e   number (it cann
12790 6f 74 20 2d 20 74 68 65 20 64 61 74 61 62 61 73  ot - the databas
127a0 65 20 70 61 67 65 20 69 73 20 6e 6f 74 20 61 6c  e page is not al
127b0 6c 6f 63 61 74 65 64 20 75 6e 74 69 6c 20 74 68  located until th
127c0 65 20 56 44 42 45 0a 2a 2a 20 70 72 6f 67 72 61  e VDBE.** progra
127d0 6d 20 69 73 20 65 78 65 63 75 74 65 64 29 2e 20  m is executed). 
127e0 53 65 65 20 63 6f 6e 76 65 72 74 54 6f 57 69 74  See convertToWit
127f0 68 6f 75 74 52 6f 77 69 64 54 61 62 6c 65 28 29  houtRowidTable()
12800 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f   for details..*/
12810 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a  .struct Index {.
12820 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
12830 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
12840 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78  me of this index
12850 20 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c   */.  i16 *aiCol
12860 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  umn;           /
12870 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20  * Which columns 
12880 61 72 65 20 75 73 65 64 20 62 79 20 74 68 69 73  are used by this
12890 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20   index.  1st is 
128a0 30 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61  0 */.  LogEst *a
128b0 69 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 20 20  iRowLogEst;     
128c0 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a  /* From ANALYZE:
128d0 20 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63   Est. rows selec
128e0 74 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75  ted by each colu
128f0 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  mn */.  Table *p
12900 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
12910 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c   /* The SQL tabl
12920 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20  e being indexed 
12930 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41  */.  char *zColA
12940 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ff;           /*
12950 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67   String defining
12960 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   the affinity of
12970 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
12980 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20    Index *pNext; 
12990 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
129a0 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73  e next index ass
129b0 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
129c0 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20   same table */. 
129d0 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
129e0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68  ;         /* Sch
129f0 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
12a00 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  his index */.  u
12a10 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20  8 *aSortOrder;  
12a20 20 20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20 65          /* for e
12a30 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65  ach column: True
12a40 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41  ==DESC, False==A
12a50 53 43 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  SC */.  char **a
12a60 7a 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20  zColl;          
12a70 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f 6c   /* Array of col
12a80 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
12a90 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78 20  names for index 
12aa0 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50 61 72 74  */.  Expr *pPart
12ab0 49 64 78 57 68 65 72 65 3b 20 20 20 20 20 2f 2a  IdxWhere;     /*
12ac0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f   WHERE clause fo
12ad0 72 20 70 61 72 74 69 61 6c 20 69 6e 64 69 63 65  r partial indice
12ae0 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  s */.  int tnum;
12af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b00 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61  /* DB Page conta
12b10 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68  ining root of th
12b20 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f  is index */.  Lo
12b30 67 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20  gEst szIdxRow;  
12b40 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
12b50 74 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20  ted average row 
12b60 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f  size in bytes */
12b70 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20  .  u16 nKeyCol; 
12b80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
12b90 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
12ba0 20 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79   forming the key
12bb0 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d   */.  u16 nColum
12bc0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
12bd0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
12be0 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68  mns stored in th
12bf0 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20  e index */.  u8 
12c00 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20  onError;        
12c10 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72        /* OE_Abor
12c20 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45  t, OE_Ignore, OE
12c30 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f  _Replace, or OE_
12c40 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  None */.  unsign
12c50 65 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20  ed idxType:2;   
12c60 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c     /* 1==UNIQUE,
12c70 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c   2==PRIMARY KEY,
12c80 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58   0==CREATE INDEX
12c90 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62   */.  unsigned b
12ca0 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f  Unordered:1;   /
12cb0 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78  * Use this index
12cc0 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75   for == or IN qu
12cd0 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20  eries only */.  
12ce0 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74  unsigned uniqNot
12cf0 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65  Null:1;  /* True
12d00 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e   if UNIQUE and N
12d10 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20  OT NULL for all 
12d20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73  columns */.  uns
12d30 69 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a  igned isResized:
12d40 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  1;    /* True if
12d50 20 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65   resizeIndexObje
12d60 63 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61  ct() has been ca
12d70 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  lled */.  unsign
12d80 65 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b  ed isCovering:1;
12d90 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
12da0 69 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67  is is a covering
12db0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69   index */.  unsi
12dc0 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a  gned noSkipScan:
12dd0 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74  1;   /* Do not t
12de0 72 79 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73  ry to use skip-s
12df0 63 61 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 23  can if true */.#
12e00 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
12e10 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
12e20 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  T4.  int nSample
12e30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
12e40 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   Number of eleme
12e50 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d  nts in aSample[]
12e60 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c   */.  int nSampl
12e70 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f  eCol;          /
12e80 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53  * Size of IndexS
12e90 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64  ample.anEq[] and
12ea0 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77   so on */.  tRow
12eb0 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20  cnt *aAvgEq;    
12ec0 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20       /* Average 
12ed0 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b  nEq values for k
12ee0 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70  eys not in aSamp
12ef0 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d  le */.  IndexSam
12f00 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20  ple *aSample;   
12f10 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74   /* Samples of t
12f20 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79  he left-most key
12f30 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
12f40 69 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f  iRowEst;       /
12f50 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69  * Non-logarithmi
12f60 63 20 73 74 61 74 31 20 64 61 74 61 20 66 6f 72  c stat1 data for
12f70 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
12f80 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74   tRowcnt nRowEst
12f90 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e  0;        /* Non
12fa0 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d  -logarithmic num
12fb0 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
12fc0 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64  he index */.#end
12fd0 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  if.};../*.** All
12fe0 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
12ff0 49 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f  Index.idxType.*/
13000 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
13010 49 44 58 54 59 50 45 5f 41 50 50 44 45 46 20 20  IDXTYPE_APPDEF  
13020 20 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74      0   /* Creat
13030 65 64 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  ed using CREATE 
13040 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65  INDEX */.#define
13050 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
13060 55 4e 49 51 55 45 20 20 20 20 20 20 31 20 20 20  UNIQUE      1   
13070 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20  /* Implements a 
13080 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
13090 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
130a0 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d  ITE_IDXTYPE_PRIM
130b0 41 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49  ARYKEY  2   /* I
130c0 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
130d0 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20  Y for the table 
130e0 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72  */../* Return tr
130f0 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73  ue if index X is
13100 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69   a PRIMARY KEY i
13110 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
13120 49 73 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65  IsPrimaryKeyInde
13130 78 28 58 29 20 20 28 28 58 29 2d 3e 69 64 78 54  x(X)  ((X)->idxT
13140 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54  ype==SQLITE_IDXT
13150 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a  YPE_PRIMARYKEY).
13160 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  ./* Return true 
13170 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20  if index X is a 
13180 55 4e 49 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a  UNIQUE index */.
13190 23 64 65 66 69 6e 65 20 49 73 55 6e 69 71 75 65  #define IsUnique
131a0 49 6e 64 65 78 28 58 29 20 20 20 20 20 20 28 28  Index(X)      ((
131b0 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f  X)->onError!=OE_
131c0 4e 6f 6e 65 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  None)../*.** Eac
131d0 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20  h sample stored 
131e0 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  in the sqlite_st
131f0 61 74 33 20 74 61 62 6c 65 20 69 73 20 72 65 70  at3 table is rep
13200 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
13210 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73  ry .** using a s
13220 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73  tructure of this
13230 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75   type.  See docu
13240 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65  mentation at the
13250 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61   top of the.** a
13260 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20  nalyze.c source 
13270 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f  file for additio
13280 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
13290 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78  .*/.struct Index
132a0 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20  Sample {.  void 
132b0 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  *p;          /* 
132c0 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c  Pointer to sampl
132d0 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  ed record */.  i
132e0 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
132f0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f   /* Size of reco
13300 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  rd in bytes */. 
13310 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20   tRowcnt *anEq; 
13320 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
13330 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
13340 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74  the key equals t
13350 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
13360 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20  tRowcnt *anLt;  
13370 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
13380 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b   of rows where k
13390 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ey is less than 
133a0 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
133b0 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b   tRowcnt *anDLt;
133c0 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
133d0 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65  r of distinct ke
133e0 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  ys less than thi
133f0 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s sample */.};..
13400 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e  /*.** Each token
13410 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74   coming out of t
13420 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69  he lexer is an i
13430 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68  nstance of.** th
13440 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
13450 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75  okens are also u
13460 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  sed as part of a
13470 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a  n expression..**
13480 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65  .** Note if Toke
13490 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65  n.z==0 then Toke
134a0 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e  n.dyn and Token.
134b0 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20  n are undefined 
134c0 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61  and.** may conta
134d0 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73  in random values
134e0 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61  .  Do not make a
134f0 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61  ny assumptions a
13500 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a  bout Token.dyn.*
13510 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68  * and Token.n wh
13520 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a  en Token.z==0..*
13530 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b  /.struct Token {
13540 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
13550 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66  ;     /* Text of
13560 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74   the token.  Not
13570 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64   NULL-terminated
13580 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  ! */.  unsigned 
13590 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d  int n;    /* Num
135a0 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72  ber of character
135b0 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20  s in this token 
135c0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
135d0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
135e0 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
135f0 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
13600 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
13610 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61  te.** code for a
13620 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e   SELECT that con
13630 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
13640 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
13650 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f   If Expr.op==TK_
13660 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b  AGG_COLUMN or TK
13670 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68  _AGG_FUNCTION th
13680 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f  en Expr.pAggInfo
13690 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72   is a.** pointer
136a0 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
136b0 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43  re.  The Expr.iC
136c0 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74  olumn field is t
136d0 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41  he index in.** A
136e0 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72  ggInfo.aCol[] or
136f0 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d   AggInfo.aFunc[]
13700 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
13710 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
13720 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74  te.** code for t
13730 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  hat node..**.** 
13740 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79  AggInfo.pGroupBy
13750 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75   and AggInfo.aFu
13760 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74  nc.pExpr point t
13770 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20  o fields within 
13780 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20  the.** original 
13790 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65  Select structure
137a0 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20   that describes 
137b0 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
137c0 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20  ment.  These.** 
137d0 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65  fields do not ne
137e0 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77  ed to be freed w
137f0 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  hen deallocating
13800 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72   the AggInfo str
13810 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
13820 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38  t AggInfo {.  u8
13830 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20   directMode;    
13840 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20        /* Direct 
13850 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d  rendering mode m
13860 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64  eans take data d
13870 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20  irectly.        
13880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13890 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65    ** from source
138a0 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74   tables rather t
138b0 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c  han from accumul
138c0 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73  ators */.  u8 us
138d0 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20  eSortingIdx;    
138e0 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20     /* In direct 
138f0 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20  mode, reference 
13900 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
13910 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20  x rather.       
13920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13930 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73     ** than the s
13940 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
13950 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b   int sortingIdx;
13960 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73           /* Curs
13970 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  or number of the
13980 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
13990 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49  /.  int sortingI
139a0 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43  dxPTab;     /* C
139b0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
139c0 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a  pseudo-table */.
139d0 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f    int nSortingCo
139e0 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d  lumn;     /* Num
139f0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
13a00 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
13a10 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52  dex */.  int mnR
13a20 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20  eg, mxReg;      
13a30 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67   /* Range of reg
13a40 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
13a50 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46   for aCol and aF
13a60 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  unc */.  ExprLis
13a70 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
13a80 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79   /* The group by
13a90 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72   clause */.  str
13aa0 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20  uct AggInfo_col 
13ab0 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68  {    /* For each
13ac0 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20   column used in 
13ad0 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f  source tables */
13ae0 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
13af0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
13b00 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   Source table */
13b10 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
13b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
13b30 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
13b40 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  f the source tab
13b50 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  le */.    int iC
13b60 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
13b70 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
13b80 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73  ber within the s
13b90 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
13ba0 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f     int iSorterCo
13bb0 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43  lumn;       /* C
13bc0 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
13bd0 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
13be0 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  x */.    int iMe
13bf0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
13c00 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
13c10 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
13c20 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
13c30 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
13c40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
13c50 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78   The original ex
13c60 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20  pression */.  } 
13c70 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f  *aCol;.  int nCo
13c80 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
13c90 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
13ca0 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  ed entries in aC
13cb0 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  ol[] */.  int nA
13cc0 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20  ccumulator;     
13cd0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
13ce0 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77  olumns that show
13cf0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
13d00 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20  output..        
13d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20    ** Additional 
13d30 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
13d40 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74   only as paramet
13d50 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20  ers to.         
13d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d70 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75   ** aggregate fu
13d80 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72  nctions */.  str
13d90 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63  uct AggInfo_func
13da0 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68   {   /* For each
13db0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
13dc0 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ion */.    Expr 
13dd0 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
13de0 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
13df0 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66  n encoding the f
13e00 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46  unction */.    F
13e10 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20  uncDef *pFunc;  
13e20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
13e30 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
13e40 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  n implementation
13e50 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d   */.    int iMem
13e60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
13e70 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74   /* Memory locat
13e80 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73  ion that acts as
13e90 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
13ea0 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63      int iDistinc
13eb0 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
13ec0 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  Ephemeral table 
13ed0 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20  used to enforce 
13ee0 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20  DISTINCT */.  } 
13ef0 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46  *aFunc;.  int nF
13f00 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
13f10 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
13f20 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b  ntries in aFunc[
13f30 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ] */.};../*.** T
13f40 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61  he datatype ynVa
13f50 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e  r is a signed in
13f60 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36  teger, either 16
13f70 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a  -bit or 32-bit..
13f80 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73  ** Usually it is
13f90 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69   16-bits.  But i
13fa0 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  f SQLITE_MAX_VAR
13fb0 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20  IABLE_NUMBER is 
13fc0 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20  greater.** than 
13fd0 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f  32767 we have to
13fe0 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e   make it 32-bit.
13ff0 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66    16-bit is pref
14000 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a  erred because.**
14010 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65   it uses less me
14020 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72  mory in the Expr
14030 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69   object, which i
14040 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75  s a big memory u
14050 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d  ser.** in system
14060 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70  s with lots of p
14070 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
14080 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70  ts.  And few app
14090 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65  lications.** nee
140a0 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75  d more than abou
140b0 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61  t 10 or 20 varia
140c0 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20  bles.  But some 
140d0 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61  extreme users wa
140e0 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72  nt.** to have pr
140f0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
14100 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36  s with over 3276
14110 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64  7 variables, and
14120 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65   for them.** the
14130 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c   option is avail
14140 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65  able (at compile
14150 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53  -time)..*/.#if S
14160 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
14170 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37  LE_NUMBER<=32767
14180 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56  .typedef i16 ynV
14190 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65  ar;.#else.typede
141a0 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e  f int ynVar;.#en
141b0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  dif../*.** Each 
141c0 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65  node of an expre
141d0 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72  ssion in the par
141e0 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e  se tree is an in
141f0 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
14200 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  s structure..**.
14210 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68  ** Expr.op is th
14220 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e  e opcode. The in
14230 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b  teger parser tok
14240 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75  en codes are reu
14250 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65  sed.** as opcode
14260 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d  s here. For exam
14270 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20  ple, the parser 
14280 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f  defines TK_GE to
14290 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a   be an integer.*
142a0 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74  * code represent
142b0 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65  ing the ">=" ope
142c0 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65  rator. This same
142d0 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73   integer code is
142e0 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65   reused.** to re
142f0 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61  present the grea
14300 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61  ter-than-or-equa
14310 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e  l-to operator in
14320 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a   the expression.
14330 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49  ** tree..**.** I
14340 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
14350 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72   is an SQL liter
14360 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20  al (TK_INTEGER, 
14370 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f  TK_FLOAT, TK_BLO
14380 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52  B, .** or TK_STR
14390 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  ING), then Expr.
143a0 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
143b0 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53  he text of the S
143c0 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a  QL literal. If.*
143d0 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
143e0 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28   is a variable (
143f0 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68  TK_VARIABLE), th
14400 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
14410 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76  ntains the .** v
14420 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69  ariable name. Fi
14430 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78  nally, if the ex
14440 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
14450 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f  QL function (TK_
14460 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68  FUNCTION),.** th
14470 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
14480 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20  ntains the name 
14490 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
144a0 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67  .**.** Expr.pRig
144b0 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66  ht and Expr.pLef
144c0 74 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61  t are the left a
144d0 6e 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72  nd right subexpr
144e0 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20  essions of a.** 
144f0 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e  binary operator.
14500 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20   Either or both 
14510 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a  may be NULL..**.
14520 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  ** Expr.x.pList 
14530 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67  is a list of arg
14540 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78  uments if the ex
14550 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
14560 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20  QL function,.** 
14570 61 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  a CASE expressio
14580 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65  n or an IN expre
14590 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
145a0 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e  m "<lhs> IN (<y>
145b0 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45  , <z>...)"..** E
145c0 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
145d0 20 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70   used if the exp
145e0 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
145f0 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78  -select or an ex
14600 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74  pression of.** t
14610 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49  he form "<lhs> I
14620 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e  N (SELECT ...)".
14630 20 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65   If the EP_xIsSe
14640 6c 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20  lect bit is set 
14650 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66  in the.** Expr.f
14660 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
14670 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69  Expr.x.pSelect i
14680 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69  s valid. Otherwi
14690 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74  se, Expr.x.pList
146a0 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a   is .** valid..*
146b0 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69  *.** An expressi
146c0 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49  on of the form I
146d0 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72  D or ID.ID refer
146e0 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e  s to a column in
146f0 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72   a table..** For
14700 20 73 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e   such expression
14710 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65  s, Expr.op is se
14720 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61  t to TK_COLUMN a
14730 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69  nd Expr.iTable i
14740 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72  s.** the integer
14750 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
14760 66 20 61 20 56 44 42 45 20 63 75 72 73 6f 72 20  f a VDBE cursor 
14770 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74  pointing to that
14780 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78   table and.** Ex
14790 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68  pr.iColumn is th
147a0 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  e column number 
147b0 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63  for the specific
147c0 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65   column.  If the
147d0 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69  .** expression i
147e0 73 20 75 73 65 64 20 61 73 20 61 20 72 65 73 75  s used as a resu
147f0 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61  lt in an aggrega
14800 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20  te SELECT, then 
14810 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20  the.** value is 
14820 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74  also stored in t
14830 68 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c  he Expr.iAgg col
14840 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65  umn in the aggre
14850 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20  gate so that.** 
14860 69 74 20 63 61 6e 20 62 65 20 61 63 63 65 73 73  it can be access
14870 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67  ed after all agg
14880 72 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70  regates are comp
14890 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  uted..**.** If t
148a0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
148b0 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69   an unbound vari
148c0 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71  able marker (a q
148d0 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a  uestion mark .**
148e0 20 63 68 61 72 61 63 74 65 72 20 27 3f 27 20 69   character '?' i
148f0 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53  n the original S
14900 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78 70  QL) then the Exp
14910 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74  r.iTable holds t
14920 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d  he index .** num
14930 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72  ber for that var
14940 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  iable..**.** If 
14950 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
14960 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65  s a subquery the
14970 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68  n Expr.iColumn h
14980 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a  olds an integer.
14990 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62  ** register numb
149a0 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  er containing th
149b0 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
149c0 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68  subquery.  If th
149d0 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69  e.** subquery gi
149e0 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72  ves a constant r
149f0 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62  esult, then iTab
14a00 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68  le is -1.  If th
14a10 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69  e subquery.** gi
14a20 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20  ves a different 
14a30 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72  answer at differ
14a40 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67  ent times during
14a50 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65   statement proce
14a60 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54  ssing.** then iT
14a70 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72  able is the addr
14a80 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74  ess of a subrout
14a90 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65  ine that compute
14aa0 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a  s the subquery..
14ab0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70  **.** If the Exp
14ac0 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f  r is of type OP_
14ad0 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20  Column, and the 
14ae0 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65  table it is sele
14af0 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73  cting from.** is
14b00 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72   a disk table or
14b10 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65   the "old.*" pse
14b20 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20  udo-table, then 
14b30 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74  pTab points to t
14b40 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  he.** correspond
14b50 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ing table defini
14b60 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f  tion..**.** ALLO
14b70 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a  CATION NOTES:.**
14b80 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73  .** Expr objects
14b90 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f   can use a lot o
14ba0 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69  f memory space i
14bb0 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  n database schem
14bc0 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72  a.  To.** help r
14bd0 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71  educe memory req
14be0 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74  uirements, somet
14bf0 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a  imes an Expr obj
14c00 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74  ect will be.** t
14c10 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74  runcated.  And t
14c20 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d  o reduce the num
14c30 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c  ber of memory al
14c40 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74  locations, somet
14c50 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d  imes.** two or m
14c60 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73  ore Expr objects
14c70 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
14c80 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f  in a single memo
14c90 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a  ry allocation,.*
14ca0 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  * together with 
14cb0 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69  Expr.zToken stri
14cc0 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ngs..**.** If th
14cd0 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64  e EP_Reduced and
14ce0 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
14cf0 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e  ags are set when
14d00 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  .** an Expr obje
14d10 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e  ct is truncated.
14d20 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65    When EP_Reduce
14d30 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61  d is set, then a
14d40 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20  ll.** the child 
14d50 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20  Expr objects in 
14d60 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61  the Expr.pLeft a
14d70 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73  nd Expr.pRight s
14d80 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63  ubtrees.** are c
14d90 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20  ontained within 
14da0 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20  the same memory 
14db0 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74  allocation.  Not
14dc0 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74  e, however, that
14dd0 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73  .** the subtrees
14de0 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74   in Expr.x.pList
14df0 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65   or Expr.x.pSele
14e00 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65  ct are always se
14e10 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f  parately.** allo
14e20 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73  cated, regardles
14e30 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20  s of whether or 
14e40 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69  not EP_Reduced i
14e50 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  s set..*/.struct
14e60 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b   Expr {.  u8 op;
14e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e80 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65   /* Operation pe
14e90 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20  rformed by this 
14ea0 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61  node */.  char a
14eb0 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20  ffinity;        
14ec0 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
14ed0 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f   of the column o
14ee0 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c  r 0 if not a col
14ef0 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61  umn */.  u32 fla
14f00 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
14f10 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73  /* Various flags
14f20 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f  .  EP_* See belo
14f30 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  w */.  union {. 
14f40 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b     char *zToken;
14f50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
14f60 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74  en value. Zero t
14f70 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65  erminated and de
14f80 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e  quoted */.    in
14f90 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20  t iValue;       
14fa0 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61       /* Non-nega
14fb0 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c  tive integer val
14fc0 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75  ue if EP_IntValu
14fd0 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f  e */.  } u;..  /
14fe0 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65  * If the EP_Toke
14ff0 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65  nOnly flag is se
15000 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  t in the Expr.fl
15010 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e  ags mask, then n
15020 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20  o.  ** space is 
15030 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68  allocated for th
15040 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74  e fields below t
15050 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74  his point. An at
15060 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63  tempt to.  ** ac
15070 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72  cess them will r
15080 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61  esult in a segfa
15090 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69  ult or malfuncti
150a0 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  on. .  *********
150b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
150c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
150d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
150e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
150f0 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20   Expr *pLeft;   
15100 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20          /* Left 
15110 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70  subnode */.  Exp
15120 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20  r *pRight;      
15130 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62      /* Right sub
15140 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  node */.  union 
15150 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  {.    ExprList *
15160 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70  pList;     /* op
15170 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53   = IN, EXISTS, S
15180 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e  ELECT, CASE, FUN
15190 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a  CTION, BETWEEN *
151a0 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
151b0 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50  elect;     /* EP
151c0 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f  _xIsSelect and o
151d0 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20  p = IN, EXISTS, 
151e0 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b  SELECT */.  } x;
151f0 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50  ..  /* If the EP
15200 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 69 73  _Reduced flag is
15210 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72   set in the Expr
15220 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
15230 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20  n no.  ** space 
15240 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  is allocated for
15250 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f   the fields belo
15260 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e  w this point. An
15270 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a   attempt to.  **
15280 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c   access them wil
15290 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65  l result in a se
152a0 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e  gfault or malfun
152b0 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  ction..  *******
152c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
152d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
152e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
152f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
15300 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
15310 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69  EXPR_DEPTH>0.  i
15320 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20  nt nHeight;     
15330 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20        /* Height 
15340 6f 66 20 74 68 65 20 74 72 65 65 20 68 65 61 64  of the tree head
15350 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20  ed by this node 
15360 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
15370 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
15380 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
15390 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
153a0 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20  f table holding 
153b0 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20  column.         
153c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153d0 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20  ** TK_REGISTER: 
153e0 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a  register number.
153f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15400 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54           ** TK_T
15410 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77  RIGGER: 1 -> new
15420 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20  , 0 -> old.     
15430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15440 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65      ** EP_Unlike
15450 6c 79 3a 20 20 31 33 34 32 31 37 37 32 38 20 74  ly:  134217728 t
15460 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 20  imes likelihood 
15470 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75  */.  ynVar iColu
15480 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  mn;         /* T
15490 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e  K_COLUMN: column
154a0 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20   index.  -1 for 
154b0 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20  rowid..         
154c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154d0 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20  ** TK_VARIABLE: 
154e0 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20  variable number 
154f0 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a  (always >= 1). *
15500 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20  /.  i16 iAgg;   
15510 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
15520 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67  ich entry in pAg
15530 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72  gInfo->aCol[] or
15540 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20   ->aFunc[] */.  
15550 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61  i16 iRightJoinTa
15560 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f  ble;   /* If EP_
15570 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69  FromJoin, the ri
15580 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65  ght table of the
15590 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70   join */.  u8 op
155a0 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2;              
155b0 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52    /* TK_REGISTER
155c0 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65  : original value
155d0 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20   of Expr.op.    
155e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155f0 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d       ** TK_COLUM
15600 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  N: the value of 
15610 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e  p5 for OP_Column
15620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15630 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
15640 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65  AGG_FUNCTION: ne
15650 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20  sting depth */. 
15660 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
15670 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20  fo;     /* Used 
15680 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  by TK_AGG_COLUMN
15690 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43   and TK_AGG_FUNC
156a0 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  TION */.  Table 
156b0 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
156c0 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b   /* Table for TK
156d0 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69  _COLUMN expressi
156e0 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ons. */.};../*.*
156f0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
15700 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73  are the meanings
15710 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20   of bits in the 
15720 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64  Expr.flags field
15730 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ..*/.#define EP_
15740 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30  FromJoin  0x0000
15750 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73  01 /* Originates
15760 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61   in ON/USING cla
15770 75 73 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69  use of outer joi
15780 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
15790 41 67 67 20 20 20 20 20 20 20 30 78 30 30 30 30  Agg       0x0000
157a0 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f  02 /* Contains o
157b0 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65  ne or more aggre
157c0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
157d0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73  /.#define EP_Res
157e0 6f 6c 76 65 64 20 20 30 78 30 30 30 30 30 34 20  olved  0x000004 
157f0 2f 2a 20 49 44 73 20 68 61 76 65 20 62 65 65 6e  /* IDs have been
15800 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c   resolved to COL
15810 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  UMNs */.#define 
15820 45 50 5f 45 72 72 6f 72 20 20 20 20 20 30 78 30  EP_Error     0x0
15830 30 30 30 30 38 20 2f 2a 20 45 78 70 72 65 73 73  00008 /* Express
15840 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  ion contains one
15850 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20   or more errors 
15860 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69  */.#define EP_Di
15870 73 74 69 6e 63 74 20 20 30 78 30 30 30 30 31 30  stinct  0x000010
15880 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75   /* Aggregate fu
15890 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54  nction with DIST
158a0 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a  INCT keyword */.
158b0 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65  #define EP_VarSe
158c0 6c 65 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a  lect 0x000020 /*
158d0 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72   pSelect is corr
158e0 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73  elated, not cons
158f0 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tant */.#define 
15900 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30  EP_DblQuoted 0x0
15910 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a  00040 /* token.z
15920 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20   was originally 
15930 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66  in "..." */.#def
15940 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63  ine EP_InfixFunc
15950 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75   0x000080 /* Tru
15960 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66  e for an infix f
15970 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47  unction: LIKE, G
15980 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66  LOB, etc */.#def
15990 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20  ine EP_Collate  
159a0 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65   0x000100 /* Tre
159b0 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f  e contains a TK_
159c0 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
159d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 47   */.#define EP_G
159e0 65 6e 65 72 69 63 20 20 20 30 78 30 30 30 32 30  eneric   0x00020
159f0 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c  0 /* Ignore COLL
15a00 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79 20  ATE or affinity 
15a10 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f 0a  on this tree */.
15a20 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61  #define EP_IntVa
15a30 6c 75 65 20 20 30 78 30 30 30 34 30 30 20 2f 2a  lue  0x000400 /*
15a40 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63   Integer value c
15a50 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56  ontained in u.iV
15a60 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  alue */.#define 
15a70 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78 30  EP_xIsSelect 0x0
15a80 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65  00800 /* x.pSele
15a90 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68  ct is valid (oth
15aa0 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69  erwise x.pList i
15ab0 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  s) */.#define EP
15ac0 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30 30 31  _Skip      0x001
15ad0 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20  000 /* COLLATE, 
15ae0 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20  AS, or UNLIKELY 
15af0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65  */.#define EP_Re
15b00 64 75 63 65 64 20 20 20 30 78 30 30 32 30 30 30  duced   0x002000
15b10 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20   /* Expr struct 
15b20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45  EXPR_REDUCEDSIZE
15b30 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23   bytes only */.#
15b40 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f  define EP_TokenO
15b50 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a 20  nly 0x004000 /* 
15b60 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52  Expr struct EXPR
15b70 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62  _TOKENONLYSIZE b
15b80 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ytes only */.#de
15b90 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20  fine EP_Static  
15ba0 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48 65    0x008000 /* He
15bb0 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74  ld in memory not
15bc0 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d   obtained from m
15bd0 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69  alloc() */.#defi
15be0 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20  ne EP_MemToken  
15bf0 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64  0x010000 /* Need
15c00 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65   to sqlite3DbFre
15c10 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20  e() Expr.zToken 
15c20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f  */.#define EP_No
15c30 52 65 64 75 63 65 20 20 30 78 30 32 30 30 30 30  Reduce  0x020000
15c40 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44   /* Cannot EXPRD
15c50 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20 45  UP_REDUCE this E
15c60 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  xpr */.#define E
15c70 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34  P_Unlikely  0x04
15c80 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79  0000 /* unlikely
15c90 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64  () or likelihood
15ca0 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
15cb0 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46  define EP_ConstF
15cc0 75 6e 63 20 30 78 30 38 30 30 30 30 20 2f 2a 20  unc 0x080000 /* 
15cd0 4e 6f 64 65 20 69 73 20 61 20 53 51 4c 49 54 45  Node is a SQLITE
15ce0 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66  _FUNC_CONSTANT f
15cf0 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
15d00 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20  ne EP_CanBeNull 
15d10 30 78 31 30 30 30 30 30 20 2f 2a 20 43 61 6e 20  0x100000 /* Can 
15d20 62 65 20 6e 75 6c 6c 20 64 65 73 70 69 74 65 20  be null despite 
15d30 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
15d40 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  int */.#define E
15d50 50 5f 53 75 62 71 75 65 72 79 20 20 30 78 32 30  P_Subquery  0x20
15d60 30 30 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e  0000 /* Tree con
15d70 74 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43  tains a TK_SELEC
15d80 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 0a 2f  T operator */../
15d90 2a 0a 2a 2a 20 43 6f 6d 62 69 6e 61 74 69 6f 6e  *.** Combination
15da0 73 20 6f 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65  s of two or more
15db0 20 45 50 5f 2a 20 66 6c 61 67 73 0a 2a 2f 0a 23   EP_* flags.*/.#
15dc0 64 65 66 69 6e 65 20 45 50 5f 50 72 6f 70 61 67  define EP_Propag
15dd0 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c  ate (EP_Collate|
15de0 45 50 5f 53 75 62 71 75 65 72 79 29 20 2f 2a 20  EP_Subquery) /* 
15df0 50 72 6f 70 61 67 61 74 65 20 74 68 65 73 65 20  Propagate these 
15e00 62 69 74 73 20 75 70 20 74 72 65 65 20 2a 2f 0a  bits up tree */.
15e10 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  ./*.** These mac
15e20 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
15e30 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72  to test, set, or
15e40 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74   clear bits in t
15e50 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67  he .** Expr.flag
15e60 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
15e70 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70 65  ine ExprHasPrope
15e80 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 28 28  rty(E,P)     (((
15e90 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d  E)->flags&(P))!=
15ea0 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48  0).#define ExprH
15eb0 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c  asAllProperty(E,
15ec0 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73  P)  (((E)->flags
15ed0 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66  &(P))==(P)).#def
15ee0 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70 65  ine ExprSetPrope
15ef0 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 45 29  rty(E,P)     (E)
15f00 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65  ->flags|=(P).#de
15f10 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72  fine ExprClearPr
15f20 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 28 45  operty(E,P)   (E
15f30 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a  )->flags&=~(P)..
15f40 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74 56 56  /* The ExprSetVV
15f50 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72  AProperty() macr
15f60 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 56 65  o is used for Ve
15f70 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69  rification, Vali
15f80 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41  dation,.** and A
15f90 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c  ccreditation onl
15fa0 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b  y.  It works lik
15fb0 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74  e ExprSetPropert
15fc0 79 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a  y() during VVA.*
15fd0 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75 74 20  * processes but 
15fe0 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64  is a no-op for d
15ff0 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64  elivery..*/.#ifd
16000 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
16010 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  # define ExprSet
16020 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29  VVAProperty(E,P)
16030 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50    (E)->flags|=(P
16040 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
16050 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65   ExprSetVVAPrope
16060 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a  rty(E,P).#endif.
16070 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f  ./*.** Macros to
16080 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e   determine the n
16090 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72  umber of bytes r
160a0 65 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72  equired by a nor
160b0 6d 61 6c 20 45 78 70 72 20 0a 2a 2a 20 73 74 72  mal Expr .** str
160c0 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72  uct, an Expr str
160d0 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f  uct with the EP_
160e0 52 65 64 75 63 65 64 20 66 6c 61 67 20 73 65 74  Reduced flag set
160f0 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 20 0a   in Expr.flags .
16100 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73  ** and an Expr s
16110 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
16120 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
16130 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65   set..*/.#define
16140 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20   EXPR_FULLSIZE  
16150 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28           sizeof(
16160 45 78 70 72 29 20 20 20 20 20 20 20 20 20 20 20  Expr)           
16170 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a  /* Full size */.
16180 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44  #define EXPR_RED
16190 55 43 45 44 53 49 5a 45 20 20 20 20 20 20 20 20  UCEDSIZE        
161a0 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54  offsetof(Expr,iT
161b0 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e  able)  /* Common
161c0 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65   features */.#de
161d0 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f  fine EXPR_TOKENO
161e0 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66  NLYSIZE      off
161f0 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74  setof(Expr,pLeft
16200 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61  )   /* Fewer fea
16210 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tures */../*.** 
16220 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
16230 74 68 65 20 73 71 6c 69 74 65 33 45 78 70 72 44  the sqlite3ExprD
16240 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53  up() function. S
16250 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f  ee the header co
16260 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f 76 65 20  mment .** above 
16270 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
16280 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f   for details..*/
16290 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44 55 50  .#define EXPRDUP
162a0 5f 52 45 44 55 43 45 20 20 20 20 20 20 20 20 20  _REDUCE         
162b0 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20  0x0001  /* Used 
162c0 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70  reduced-size Exp
162d0 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a  r nodes */../*.*
162e0 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72  * A list of expr
162f0 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65  essions.  Each e
16300 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70  xpression may op
16310 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a  tionally have a.
16320 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70  ** name.  An exp
16330 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69  r/name combinati
16340 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69  on can be used i
16350 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20  n several ways, 
16360 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c  such.** as the l
16370 69 73 74 20 6f 66 20 22 65 78 70 72 20 41 53 20  ist of "expr AS 
16380 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f  ID" fields follo
16390 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20  wing a "SELECT" 
163a0 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73  or in the.** lis
163b0 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22  t of "ID = expr"
163c0 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44   items in an UPD
163d0 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20  ATE.  A list of 
163e0 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a  expressions can.
163f0 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  ** also be used 
16400 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  as the argument 
16410 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69  to a function, i
16420 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
16430 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c   a.zName.** fiel
16440 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a  d is not used..*
16450 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20  *.** By default 
16460 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66  the Expr.zSpan f
16470 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d  ield holds a hum
16480 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63  an-readable desc
16490 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ription of.** th
164a0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  e expression tha
164b0 74 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65  t is used in the
164c0 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65   generation of e
164d0 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e  rror messages an
164e0 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65  d.** column labe
164f0 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73  ls.  In this cas
16500 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73  e, Expr.zSpan is
16510 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74   typically the t
16520 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75  ext of a.** colu
16530 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73  mn expression as
16540 20 69 74 20 65 78 69 73 74 73 20 69 6e 20 61 20   it exists in a 
16550 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
16560 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a  .  However, if.*
16570 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54 61 62  * the bSpanIsTab
16580 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68   flag is set, th
16590 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72  en zSpan is over
165a0 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74  loaded to mean t
165b0 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68  he name.** of th
165c0 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20  e result column 
165d0 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54  in the form: DAT
165e0 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55  ABASE.TABLE.COLU
165f0 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a  MN.  This later.
16600 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20  ** form is used 
16610 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74  for name resolut
16620 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20  ion with nested 
16630 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f  FROM clauses..*/
16640 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74  .struct ExprList
16650 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20   {.  int nExpr; 
16660 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
16670 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73  umber of express
16680 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  ions on the list
16690 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70   */.  struct Exp
166a0 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20  rList_item { /* 
166b0 46 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73  For each express
166c0 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ion in the list 
166d0 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
166e0 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  pr;            /
166f0 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78  * The list of ex
16700 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20  pressions */.   
16710 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
16720 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
16730 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
16740 68 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f  h this expressio
16750 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  n */.    char *z
16760 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20  Span;           
16770 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78   /* Original tex
16780 74 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73  t of the express
16790 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f  ion */.    u8 so
167a0 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
167b0 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43     /* 1 for DESC
167c0 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f   or 0 for ASC */
167d0 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f  .    unsigned do
167e0 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20  ne :1;       /* 
167f0 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61  A flag to indica
16800 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69  te when processi
16810 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a  ng is finished *
16820 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62  /.    unsigned b
16830 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a  SpanIsTab :1; /*
16840 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e   zSpan holds DB.
16850 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a  TABLE.COLUMN */.
16860 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75      unsigned reu
16870 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43  sable :1;   /* C
16880 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
16890 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a  on is reusable *
168a0 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20  /.    union {.  
168b0 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20      struct {.   
168c0 20 20 20 20 20 75 31 36 20 69 4f 72 64 65 72 42       u16 iOrderB
168d0 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f  yCol;      /* Fo
168e0 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75  r ORDER BY, colu
168f0 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73  mn number in res
16900 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20  ult set */.     
16910 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20     u16 iAlias;  
16920 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
16930 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c  x into Parse.aAl
16940 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20  ias[] for zName 
16950 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20  */.      } x;.  
16960 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78      int iConstEx
16970 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52  prReg;      /* R
16980 65 67 69 73 74 65 72 20 69 6e 20 77 68 69 63 68  egister in which
16990 20 45 78 70 72 20 76 61 6c 75 65 20 69 73 20 63   Expr value is c
169a0 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75  ached */.    } u
169b0 3b 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20  ;.  } *a;       
169c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
169d0 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f 66 20 74  loc a power of t
169e0 77 6f 20 67 72 65 61 74 65 72 20 6f 72 20 65 71  wo greater or eq
169f0 75 61 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a  ual to nExpr */.
16a00 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
16a10 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
16a20 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
16a30 62 79 20 74 68 65 20 70 61 72 73 65 72 20 74 6f  by the parser to
16a40 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20   record both.** 
16a50 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66  the parse tree f
16a60 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
16a70 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66   and the span of
16a80 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20   input text for 
16a90 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  an.** expression
16aa0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
16ab0 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70  Span {.  Expr *p
16ac0 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Expr;          /
16ad0 2a 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * The expression
16ae0 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20   parse tree */. 
16af0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74   const char *zSt
16b00 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20  art;   /* First 
16b10 63 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70  character of inp
16b20 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e  ut text */.  con
16b30 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20  st char *zEnd;  
16b40 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63     /* One charac
16b50 74 65 72 20 70 61 73 74 20 74 68 65 20 65 6e 64  ter past the end
16b60 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a   of input text *
16b70 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
16b80 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
16b90 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f  structure can ho
16ba0 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74  ld a simple list
16bb0 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c   of identifiers,
16bc0 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20  .** such as the 
16bd0 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20  list "a,b,c" in 
16be0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
16bf0 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20  atements:.**.** 
16c00 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
16c10 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53   t(a,b,c) VALUES
16c20 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52   ...;.**      CR
16c30 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f  EATE INDEX idx O
16c40 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20  N t(a,b,c);.**  
16c50 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
16c60 45 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55  ER trig BEFORE U
16c70 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63  PDATE ON t(a,b,c
16c80 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65  ) ...;.**.** The
16c90 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69   IdList.a.idx fi
16ca0 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e  eld is used when
16cb0 20 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72   the IdList repr
16cc0 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20  esents the list 
16cd0 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d  of.** column nam
16ce0 65 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  es after a table
16cf0 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45   name in an INSE
16d00 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  RT statement.  I
16d10 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  n the statement.
16d20 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54  **.**     INSERT
16d30 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e   INTO t(a,b,c) .
16d40 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20  ...**.** If "a" 
16d50 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75  is the k-th colu
16d60 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c  mn of table "t",
16d70 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30   then IdList.a[0
16d80 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72  ].idx==k..*/.str
16d90 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73  uct IdList {.  s
16da0 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65  truct IdList_ite
16db0 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e  m {.    char *zN
16dc0 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
16dd0 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66  e of the identif
16de0 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ier */.    int i
16df0 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  dx;          /* 
16e00 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61  Index in some Ta
16e10 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20  ble.aCol[] of a 
16e20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61  column named zNa
16e30 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20  me */.  } *a;.  
16e40 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20  int nId;        
16e50 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64   /* Number of id
16e60 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65  entifiers on the
16e70 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
16e80 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64  ** The bitmask d
16e90 61 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20  atatype defined 
16ea0 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f  below is used fo
16eb0 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  r various optimi
16ec0 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43  zations..**.** C
16ed0 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f  hanging this fro
16ee0 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20  m a 64-bit to a 
16ef0 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69  32-bit type limi
16f00 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ts the number of
16f10 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20  .** tables in a 
16f20 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65  join to 32 inste
16f30 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69  ad of 64.  But i
16f40 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74  t also reduces t
16f50 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68  he size.** of th
16f60 65 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38  e library by 738
16f70 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a   bytes on ix86..
16f80 2a 2f 0a 74 79 70 65 64 65 66 20 75 36 34 20 42  */.typedef u64 B
16f90 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54  itmask;../*.** T
16fa0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  he number of bit
16fb0 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20  s in a Bitmask. 
16fc0 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69   "BMS" means "Bi
16fd0 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a  tMask Size"..*/.
16fe0 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69  #define BMS  ((i
16ff0 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61  nt)(sizeof(Bitma
17000 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41  sk)*8))../*.** A
17010 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73   bit in a Bitmas
17020 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  k.*/.#define MAS
17030 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69 74  KBIT(n)   (((Bit
17040 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64  mask)1)<<(n)).#d
17050 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28  efine MASKBIT32(
17060 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69  n) (((unsigned i
17070 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a  nt)1)<<(n))../*.
17080 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
17090 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
170a0 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c  ibes the FROM cl
170b0 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
170c0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45   statement..** E
170d0 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62  ach table or sub
170e0 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f  query in the FRO
170f0 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65  M clause is a se
17100 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f  parate element o
17110 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74  f.** the SrcList
17120 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a  .a[] array..**.*
17130 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74  * With the addit
17140 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20  ion of multiple 
17150 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74  database support
17160 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
17170 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e  structure.** can
17180 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
17190 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74   describe a part
171a0 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63  icular table suc
171b0 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74  h as the table t
171c0 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69  hat.** is modifi
171d0 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c  ed by an INSERT,
171e0 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
171f0 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  TE statement.  I
17200 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a  n standard SQL,.
17210 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20  ** such a table 
17220 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65  must be a simple
17230 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20   name: ID.  But 
17240 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74  in SQLite, the t
17250 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20  able can.** now 
17260 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  be identified by
17270 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65   a database name
17280 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68  , a dot, then th
17290 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44  e table name: ID
172a0 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a  .ID..**.** The j
172b0 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f  ointype starts o
172c0 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a  ut showing the j
172d0 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e  oin type between
172e0 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62   the current tab
172f0 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65  le.** and the ne
17300 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20  xt table on the 
17310 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65  list.  The parse
17320 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73  r builds the lis
17330 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42  t this way..** B
17340 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  ut sqlite3SrcLis
17350 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29  tShiftJoinType()
17360 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68   later shifts th
17370 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74  e jointypes so t
17380 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e  hat each.** join
17390 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74  type expresses t
173a0 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  he join between 
173b0 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68  the table and th
173c0 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65  e previous table
173d0 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63  ..**.** In the c
173e0 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68  olUsed field, th
173f0 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
17400 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74   (bit 63) is set
17410 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a   if the table.**
17420 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74   contains more t
17430 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61  han 63 columns a
17440 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20  nd the 64-th or 
17450 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20  later column is 
17460 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  used..*/.struct 
17470 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20  SrcList {.  int 
17480 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  nSrc;        /* 
17490 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
174a0 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69   or subqueries i
174b0 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
174c0 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f  e */.  u32 nAllo
174d0 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  c;      /* Numbe
174e0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c  r of entries all
174f0 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65  ocated in a[] be
17500 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  low */.  struct 
17510 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20  SrcList_item {. 
17520 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65     Schema *pSche
17530 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74  ma;  /* Schema t
17540 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 74 65  o which this ite
17550 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20  m is fixed */.  
17560 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73    char *zDatabas
17570 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64  e;  /* Name of d
17580 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
17590 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
175a0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
175b0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
175c0 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  he table */.    
175d0 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20  char *zAlias;   
175e0 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72    /* The "B" par
175f0 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20  t of a "A AS B" 
17600 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69  phrase.  zName i
17610 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20  s the "A" */.   
17620 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
17630 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62     /* An SQL tab
17640 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  le corresponding
17650 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20   to zName */.   
17660 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
17670 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73  ;  /* A SELECT s
17680 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e  tatement used in
17690 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c   place of a tabl
176a0 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e  e name */.    in
176b0 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20  t addrFillSub;  
176c0 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73 75  /* Address of su
176d0 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69  broutine to mani
176e0 66 65 73 74 20 61 20 73 75 62 71 75 65 72 79 20  fest a subquery 
176f0 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
17700 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69  turn;    /* Regi
17710 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74  ster holding ret
17720 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61  urn address of a
17730 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20  ddrFillSub */.  
17740 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b    int regResult;
17750 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73      /* Registers
17760 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73   holding results
17770 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65   of a co-routine
17780 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 7b   */.    struct {
17790 0a 20 20 20 20 20 20 75 38 20 6a 6f 69 6e 74 79  .      u8 jointy
177a0 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65  pe;      /* Type
177b0 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e   of join between
177c0 20 74 68 69 73 20 61 62 6c 65 20 61 6e 64 20 74   this able and t
177d0 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20  he previous */. 
177e0 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f       unsigned no
177f0 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20  tIndexed :1;    
17800 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65  /* True if there
17810 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45   is a NOT INDEXE
17820 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  D clause */.    
17830 20 20 75 6e 73 69 67 6e 65 64 20 69 73 49 6e 64    unsigned isInd
17840 65 78 65 64 42 79 20 3a 31 3b 20 20 20 2f 2a 20  exedBy :1;   /* 
17850 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73  True if there is
17860 20 61 6e 20 49 4e 44 45 58 45 44 20 42 59 20 63   an INDEXED BY c
17870 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75  lause */.      u
17880 6e 73 69 67 6e 65 64 20 69 73 54 61 62 46 75 6e  nsigned isTabFun
17890 63 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72 75  c :1;     /* Tru
178a0 65 20 69 66 20 74 61 62 6c 65 2d 76 61 6c 75 65  e if table-value
178b0 64 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e 74 61  d-function synta
178c0 78 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  x */.      unsig
178d0 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64  ned isCorrelated
178e0 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66   :1;  /* True if
178f0 20 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f   sub-query is co
17900 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20  rrelated */.    
17910 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f    unsigned viaCo
17920 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20  routine :1;  /* 
17930 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61  Implemented as a
17940 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20   co-routine */. 
17950 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73       unsigned is
17960 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20  Recursive :1;   
17970 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63 75  /* True for recu
17980 72 73 69 76 65 20 72 65 66 65 72 65 6e 63 65 20  rsive reference 
17990 69 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20 20 7d  in WITH */.    }
179a0 20 66 67 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c   fg;.#ifndef SQL
179b0 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
179c0 0a 20 20 20 20 75 38 20 69 53 65 6c 65 63 74 49  .    u8 iSelectI
179d0 64 3b 20 20 20 20 20 2f 2a 20 49 66 20 70 53 65  d;     /* If pSe
179e0 6c 65 63 74 21 3d 30 2c 20 74 68 65 20 69 64 20  lect!=0, the id 
179f0 6f 66 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63  of the sub-selec
17a00 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64  t in EQP */.#end
17a10 69 66 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73  if.    int iCurs
17a20 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  or;      /* The 
17a30 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62  VDBE cursor numb
17a40 65 72 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  er used to acces
17a50 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  s this table */.
17a60 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20      Expr *pOn;  
17a70 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20        /* The ON 
17a80 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
17a90 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a   */.    IdList *
17aa0 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65  pUsing;   /* The
17ab0 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66   USING clause of
17ac0 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42   a join */.    B
17ad0 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20  itmask colUsed; 
17ae0 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29   /* Bit N (1<<N)
17af0 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e   set if column N
17b00 20 6f 66 20 70 54 61 62 20 69 73 20 75 73 65 64   of pTab is used
17b10 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a   */.    union {.
17b20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64        char *zInd
17b30 65 78 65 64 42 79 3b 20 20 20 20 2f 2a 20 49 64  exedBy;    /* Id
17b40 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49  entifier from "I
17b50 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65  NDEXED BY <zInde
17b60 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  x>" clause */.  
17b70 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 46      ExprList *pF
17b80 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72 67 75  uncArg;  /* Argu
17b90 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d 76  ments to table-v
17ba0 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 2a  alued-function *
17bb0 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20 20 20  /.    } u1;.    
17bc0 49 6e 64 65 78 20 2a 70 49 42 49 6e 64 65 78 3b  Index *pIBIndex;
17bd0 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63    /* Index struc
17be0 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  ture correspondi
17bf0 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78 65  ng to u1.zIndexe
17c00 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b  dBy */.  } a[1];
17c10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17c20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
17c30 63 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e  ch identifier on
17c40 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
17c50 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64  ./*.** Permitted
17c60 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53   values of the S
17c70 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70  rcList.a.jointyp
17c80 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69  e field.*/.#defi
17c90 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20  ne JT_INNER     
17ca0 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79  0x0001    /* Any
17cb0 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f   kind of inner o
17cc0 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a  r cross join */.
17cd0 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53  #define JT_CROSS
17ce0 20 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f       0x0002    /
17cf0 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f  * Explicit use o
17d00 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77  f the CROSS keyw
17d10 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  ord */.#define J
17d20 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30  T_NATURAL   0x00
17d30 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f  04    /* True fo
17d40 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f  r a "natural" jo
17d50 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
17d60 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30  _LEFT      0x000
17d70 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74  8    /* Left out
17d80 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
17d90 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20  ne JT_RIGHT     
17da0 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67  0x0010    /* Rig
17db0 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ht outer join */
17dc0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45  .#define JT_OUTE
17dd0 52 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20  R     0x0020    
17de0 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b  /* The "OUTER" k
17df0 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e  eyword is presen
17e00 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  t */.#define JT_
17e10 45 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30  ERROR     0x0040
17e20 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f      /* unknown o
17e30 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f  r unsupported jo
17e40 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a  in type */.../*.
17e50 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72  ** Flags appropr
17e60 69 61 74 65 20 66 6f 72 20 74 68 65 20 77 63 74  iate for the wct
17e70 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65  rlFlags paramete
17e80 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72  r of sqlite3Wher
17e90 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20  eBegin().** and 
17ea0 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63  the WhereInfo.wc
17eb0 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e  trlFlags member.
17ec0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52  .*/.#define WHER
17ed0 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c  E_ORDERBY_NORMAL
17ee0 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d     0x0000 /* No-
17ef0 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  op */.#define WH
17f00 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20  ERE_ORDERBY_MIN 
17f10 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f       0x0001 /* O
17f20 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69  RDER BY processi
17f30 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e  ng for min() fun
17f40 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  c */.#define WHE
17f50 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20  RE_ORDERBY_MAX  
17f60 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52      0x0002 /* OR
17f70 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e  DER BY processin
17f80 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63  g for max() func
17f90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
17fa0 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45  E_ONEPASS_DESIRE
17fb0 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e  D  0x0004 /* Wan
17fc0 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73  t to do one-pass
17fd0 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a   UPDATE/DELETE *
17fe0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
17ff0 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20  DUPLICATES_OK   
18000 20 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20 74 6f   0x0008 /* Ok to
18010 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f   return a row mo
18020 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a  re than once */.
18030 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4d  #define WHERE_OM
18040 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20 20 30  IT_OPEN_CLOSE  0
18050 78 30 30 31 30 20 2f 2a 20 54 61 62 6c 65 20 63  x0010 /* Table c
18060 75 72 73 6f 72 73 20 61 72 65 20 61 6c 72 65 61  ursors are alrea
18070 64 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69  dy open */.#defi
18080 6e 65 20 57 48 45 52 45 5f 46 4f 52 43 45 5f 54  ne WHERE_FORCE_T
18090 41 42 4c 45 20 20 20 20 20 20 30 78 30 30 32 30  ABLE      0x0020
180a0 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 61   /* Do not use a
180b0 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73 65 61  n index-only sea
180c0 72 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  rch */.#define W
180d0 48 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e  HERE_ONETABLE_ON
180e0 4c 59 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20  LY    0x0040 /* 
180f0 4f 6e 6c 79 20 63 6f 64 65 20 74 68 65 20 31 73  Only code the 1s
18100 74 20 74 61 62 6c 65 20 69 6e 20 70 54 61 62 4c  t table in pTabL
18110 69 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ist */.#define W
18120 48 45 52 45 5f 4e 4f 5f 41 55 54 4f 49 4e 44 45  HERE_NO_AUTOINDE
18130 58 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20  X     0x0080 /* 
18140 44 69 73 61 6c 6c 6f 77 20 61 75 74 6f 6d 61 74  Disallow automat
18150 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64  ic indexes */.#d
18160 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f 55  efine WHERE_GROU
18170 50 42 59 20 20 20 20 20 20 20 20 20 20 30 78 30  PBY          0x0
18180 31 30 30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20  100 /* pOrderBy 
18190 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55  is really a GROU
181a0 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  P BY */.#define 
181b0 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42 59  WHERE_DISTINCTBY
181c0 20 20 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a         0x0200 /*
181d0 20 70 4f 72 64 65 72 62 79 20 69 73 20 72 65 61   pOrderby is rea
181e0 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20 63  lly a DISTINCT c
181f0 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
18200 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53 54   WHERE_WANT_DIST
18210 49 4e 43 54 20 20 20 20 30 78 30 34 30 30 20 2f  INCT    0x0400 /
18220 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65  * All output nee
18230 64 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63  ds to be distinc
18240 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t */.#define WHE
18250 52 45 5f 53 4f 52 54 42 59 47 52 4f 55 50 20 20  RE_SORTBYGROUP  
18260 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20 53 75      0x0800 /* Su
18270 70 70 6f 72 74 20 73 71 6c 69 74 65 33 57 68 65  pport sqlite3Whe
18280 72 65 49 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a  reIsSorted() */.
18290 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 52 45  #define WHERE_RE
182a0 4f 50 45 4e 5f 49 44 58 20 20 20 20 20 20 20 30  OPEN_IDX       0
182b0 78 31 30 30 30 20 2f 2a 20 54 72 79 20 74 6f 20  x1000 /* Try to 
182c0 75 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78  use OP_ReopenIdx
182d0 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20   */../* Allowed 
182e0 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72  return values fr
182f0 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  om sqlite3WhereI
18300 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23  sDistinct().*/.#
18310 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
18320 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20  TINCT_NOOP      
18330 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b  0  /* DISTINCT k
18340 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20  eyword not used 
18350 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
18360 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45  _DISTINCT_UNIQUE
18370 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70      1  /* No dup
18380 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69  licates */.#defi
18390 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
183a0 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f  T_ORDERED   2  /
183b0 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73  * All duplicates
183c0 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f   are adjacent */
183d0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
183e0 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45  ISTINCT_UNORDERE
183f0 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74  D 3  /* Duplicat
18400 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65 64  es are scattered
18410 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d   */../*.** A Nam
18420 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73  eContext defines
18430 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68   a context in wh
18440 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74  ich to resolve t
18450 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a  able and column.
18460 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63  ** names.  The c
18470 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20  ontext consists 
18480 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62  of a list of tab
18490 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69 73  les (the pSrcLis
184a0 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20  t) field and.** 
184b0 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20  a list of named 
184c0 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69  expression (pELi
184d0 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20  st).  The named 
184e0 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20  expression list 
184f0 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20  may.** be NULL. 
18500 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65 73   The pSrc corres
18510 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f  ponds to the FRO
18520 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  M clause of a SE
18530 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68  LECT or.** to th
18540 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70  e table being op
18550 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53  erated on by INS
18560 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20  ERT, UPDATE, or 
18570 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20  DELETE.  The.** 
18580 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e  pEList correspon
18590 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74  ds to the result
185a0 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54   set of a SELECT
185b0 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72   and is NULL for
185c0 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d  .** other statem
185d0 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65  ents..**.** Name
185e0 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20  Contexts can be 
185f0 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65  nested.  When re
18600 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74  solving names, t
18610 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a  he inner-most .*
18620 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61  * context is sea
18630 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66  rched first.  If
18640 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75   no match is fou
18650 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74  nd, the next out
18660 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  er.** context is
18670 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68   checked.  If th
18680 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20  ere is still no 
18690 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20  match, the next 
186a0 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68  context.** is ch
186b0 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f  ecked.  This pro
186c0 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75  cess continues u
186d0 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61  ntil either a ma
186e0 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20  tch is found.** 
186f0 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20  or all contexts 
18700 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e  are check.  When
18710 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
18720 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62  d, the nRef memb
18730 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  er of.** the con
18740 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20  text containing 
18750 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63  the match is inc
18760 72 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a  remented. .**.**
18770 20 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67   Each subquery g
18780 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f  ets a new NameCo
18790 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78  ntext.  The pNex
187a0 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74  t field points t
187b0 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  o the.** NameCon
187c0 74 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65  text in the pare
187d0 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20  nt query.  Thus 
187e0 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73  the process of s
187f0 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e  canning the.** N
18800 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20  ameContext list 
18810 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73  corresponds to s
18820 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68  earching through
18830 20 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75   successively ou
18840 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65  ter.** subquerie
18850 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20  s looking for a 
18860 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74  match..*/.struct
18870 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20   NameContext {. 
18880 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
18890 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
188a0 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74  ser */.  SrcList
188b0 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a   *pSrcList;   /*
188c0 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62   One or more tab
188d0 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f  les used to reso
188e0 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45  lve names */.  E
188f0 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b  xprList *pEList;
18900 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
18910 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73  list of result-s
18920 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  et columns */.  
18930 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
18940 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  o;   /* Informat
18950 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67  ion about aggreg
18960 61 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76  ates at this lev
18970 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74  el */.  NameCont
18980 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  ext *pNext;  /* 
18990 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20  Next outer name 
189a0 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66  context.  NULL f
189b0 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a  or outermost */.
189c0 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
189d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
189e0 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76   of names resolv
189f0 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65  ed by this conte
18a00 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  xt */.  int nErr
18a10 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
18a20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
18a30 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69   encountered whi
18a40 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  le resolving nam
18a50 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c  es */.  u16 ncFl
18a60 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ags;         /* 
18a70 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f  Zero or more NC_
18a80 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20  * flags defined 
18a90 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  below */.};../*.
18aa0 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
18ab0 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f  s for the NameCo
18ac0 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66  ntext, ncFlags f
18ad0 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  ield..**.** Note
18ae0 3a 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20  :  NC_MinMaxAgg 
18af0 6d 75 73 74 20 68 61 76 65 20 74 68 65 20 73 61  must have the sa
18b00 6d 65 20 76 61 6c 75 65 20 61 73 20 53 46 5f 4d  me value as SF_M
18b10 69 6e 4d 61 78 41 67 67 20 61 6e 64 0a 2a 2a 20  inMaxAgg and.** 
18b20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d  SQLITE_FUNC_MINM
18b30 41 58 2e 0a 2a 2a 20 0a 2a 2f 0a 23 64 65 66 69  AX..** .*/.#defi
18b40 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20  ne NC_AllowAgg  
18b50 30 78 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65  0x0001  /* Aggre
18b60 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  gate functions a
18b70 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20  re allowed here 
18b80 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61  */.#define NC_Ha
18b90 73 41 67 67 20 20 20 20 30 78 30 30 30 32 20 20  sAgg    0x0002  
18ba0 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61  /* One or more a
18bb0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
18bc0 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69  ns seen */.#defi
18bd0 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20  ne NC_IsCheck   
18be0 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20  0x0004  /* True 
18bf0 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  if resolving nam
18c00 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f  es in a CHECK co
18c10 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
18c20 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63  ine NC_InAggFunc
18c30 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65   0x0008  /* True
18c40 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72   if analyzing ar
18c50 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67  guments to an ag
18c60 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  g func */.#defin
18c70 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30  e NC_PartIdx   0
18c80 78 30 30 31 30 20 20 2f 2a 20 54 72 75 65 20 69  x0010  /* True i
18c90 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61  f resolving a pa
18ca0 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52  rtial index WHER
18cb0 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  E */.#define NC_
18cc0 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30  MinMaxAgg 0x1000
18cd0 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67    /* min/max agg
18ce0 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53  regates seen.  S
18cf0 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f  ee note above */
18d00 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
18d10 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
18d20 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
18d30 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f  ontains all info
18d40 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65  rmation.** neede
18d50 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f  d to generate co
18d60 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20  de for a single 
18d70 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
18d80 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69  ..**.** nLimit i
18d90 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74  s set to -1 if t
18da0 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54  here is no LIMIT
18db0 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65   clause.  nOffse
18dc0 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a  t is set to 0..*
18dd0 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20  * If there is a 
18de0 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68  LIMIT clause, th
18df0 65 20 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c  e parser sets nL
18e00 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75  imit to the valu
18e10 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69  e of the.** limi
18e20 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f  t and nOffset to
18e30 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
18e40 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69  e offset (or 0 i
18e50 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a  f there is not.*
18e60 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20  * offset).  But 
18e70 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74  later on, nLimit
18e80 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63   and nOffset bec
18e90 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c  ome the memory l
18ea0 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74  ocations.** in t
18eb0 68 65 20 56 44 42 45 20 74 68 61 74 20 72 65 63  he VDBE that rec
18ec0 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e  ord the limit an
18ed0 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72  d offset counter
18ee0 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65  s..**.** addrOpe
18ef0 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20  nEphm[] entries 
18f00 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72  contain the addr
18f10 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70  ess of OP_OpenEp
18f20 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e  hemeral opcodes.
18f30 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65 73  .** These addres
18f40 73 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72  ses must be stor
18f50 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 63 61  ed so that we ca
18f60 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69  n go back and fi
18f70 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f  ll in.** the P4_
18f80 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70  KEYINFO and P2 p
18f90 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e  arameters later.
18fa0 20 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65    Neither the Ke
18fb0 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65  yInfo nor.** the
18fc0 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
18fd0 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20  ns in P2 can be 
18fe0 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65 20  computed at the 
18ff0 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20  same time.** as 
19000 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20  the OP_OpenEphm 
19010 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63  instruction is c
19020 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74  oded because not
19030 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72  .** enough infor
19040 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
19050 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20   compound query 
19060 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74  is known at that
19070 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b   point..** The K
19080 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f  eyInfo for addrO
19090 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b  penTran[0] and [
190a0 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  1] contains coll
190b0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a  ating sequences.
190c0 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c  ** for the resul
190d0 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49  t set.  The KeyI
190e0 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
190f0 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73  Ephm[2] contains
19100 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65   collating.** se
19110 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20  quences for the 
19120 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
19130 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63  .*/.struct Selec
19140 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a  t {.  ExprList *
19150 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20  pEList;      /* 
19160 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68  The fields of th
19170 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38  e result */.  u8
19180 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
19190 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20       /* One of: 
191a0 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20  TK_UNION TK_ALL 
191b0 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f  TK_INTERSECT TK_
191c0 45 58 43 45 50 54 20 2a 2f 0a 20 20 75 31 36 20  EXCEPT */.  u16 
191d0 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20  selFlags;       
191e0 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46     /* Various SF
191f0 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69  _* values */.  i
19200 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73  nt iLimit, iOffs
19210 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20  et;   /* Memory 
19220 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e  registers holdin
19230 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54  g LIMIT & OFFSET
19240 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66   counters */.#if
19250 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
19260 42 4c 45 44 0a 20 20 63 68 61 72 20 7a 53 65 6c  BLED.  char zSel
19270 4e 61 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a  Name[12];     /*
19280 20 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f   Symbolic name o
19290 66 20 74 68 69 73 20 53 45 4c 45 43 54 20 75 73  f this SELECT us
192a0 65 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67 20  e for debugging 
192b0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
192c0 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b  addrOpenEphm[2];
192d0 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68     /* OP_OpenEph
192e0 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74  em opcodes relat
192f0 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63  ed to this selec
19300 74 20 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65  t */.  u64 nSele
19310 63 74 52 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a  ctRow;        /*
19320 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65   Estimated numbe
19330 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  r of result rows
19340 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
19350 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Src;         /* 
19360 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  The FROM clause 
19370 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72  */.  Expr *pWher
19380 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  e;          /* T
19390 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
193a0 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
193b0 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54  GroupBy;    /* T
193c0 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  he GROUP BY clau
193d0 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48  se */.  Expr *pH
193e0 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f  aving;         /
193f0 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61  * The HAVING cla
19400 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  use */.  ExprLis
19410 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20  t *pOrderBy;    
19420 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
19430 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65  clause */.  Sele
19440 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20  ct *pPrior;     
19450 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65     /* Prior sele
19460 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ct in a compound
19470 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e   select statemen
19480 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  t */.  Select *p
19490 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
194a0 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20   Next select to 
194b0 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f  the left in a co
194c0 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72  mpound */.  Expr
194d0 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20   *pLimit;       
194e0 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72     /* LIMIT expr
194f0 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61  ession. NULL mea
19500 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a  ns not used. */.
19510 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b    Expr *pOffset;
19520 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53           /* OFFS
19530 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e  ET expression. N
19540 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73  ULL means not us
19550 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  ed. */.  With *p
19560 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  With;           
19570 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20 61  /* WITH clause a
19580 74 74 61 63 68 65 64 20 74 6f 20 74 68 69 73 20  ttached to this 
19590 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e  select. Or NULL.
195a0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
195b0 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
195c0 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73   Select.selFlags
195d0 2e 20 20 54 68 65 20 22 53 46 22 20 70 72 65 66  .  The "SF" pref
195e0 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ix stands for.**
195f0 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a   "Select Flag"..
19600 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69  */.#define SF_Di
19610 73 74 69 6e 63 74 20 20 20 20 20 20 20 20 30 78  stinct        0x
19620 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20  0001  /* Output 
19630 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e  should be DISTIN
19640 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  CT */.#define SF
19650 5f 41 6c 6c 20 20 20 20 20 20 20 20 20 20 20 20  _All            
19660 20 30 78 30 30 30 32 20 20 2f 2a 20 49 6e 63 6c   0x0002  /* Incl
19670 75 64 65 73 20 74 68 65 20 41 4c 4c 20 6b 65 79  udes the ALL key
19680 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
19690 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20  SF_Resolved     
196a0 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 49 64     0x0004  /* Id
196b0 65 6e 74 69 66 69 65 72 73 20 68 61 76 65 20 62  entifiers have b
196c0 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a  een resolved */.
196d0 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65  #define SF_Aggre
196e0 67 61 74 65 20 20 20 20 20 20 20 30 78 30 30 30  gate       0x000
196f0 38 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61  8  /* Contains a
19700 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
19710 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ns */.#define SF
19720 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20  _UsesEphemeral  
19730 20 30 78 30 30 31 30 20 20 2f 2a 20 55 73 65 73   0x0010  /* Uses
19740 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72   the OpenEphemer
19750 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65  al opcode */.#de
19760 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64  fine SF_Expanded
19770 20 20 20 20 20 20 20 20 30 78 30 30 32 30 20 20          0x0020  
19780 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  /* sqlite3Select
19790 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20  Expand() called 
197a0 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69  on this */.#defi
197b0 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66  ne SF_HasTypeInf
197c0 6f 20 20 20 20 20 30 78 30 30 34 30 20 20 2f 2a  o     0x0040  /*
197d0 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73   FROM subqueries
197e0 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61   have Table meta
197f0 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20  data */.#define 
19800 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20  SF_Compound     
19810 20 20 20 30 78 30 30 38 30 20 20 2f 2a 20 50 61     0x0080  /* Pa
19820 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64  rt of a compound
19830 20 71 75 65 72 79 20 2a 2f 0a 23 64 65 66 69 6e   query */.#defin
19840 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20  e SF_Values     
19850 20 20 20 20 20 30 78 30 31 30 30 20 20 2f 2a 20       0x0100  /* 
19860 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d  Synthesized from
19870 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a   VALUES clause *
19880 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 75 6c  /.#define SF_Mul
19890 74 69 56 61 6c 75 65 20 20 20 20 20 20 30 78 30  tiValue      0x0
198a0 32 30 30 20 20 2f 2a 20 53 69 6e 67 6c 65 20 56  200  /* Single V
198b0 41 4c 55 45 53 20 74 65 72 6d 20 77 69 74 68 20  ALUES term with 
198c0 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
198d0 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74  .#define SF_Nest
198e0 65 64 46 72 6f 6d 20 20 20 20 20 20 30 78 30 34  edFrom      0x04
198f0 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61  00  /* Part of a
19900 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46   parenthesized F
19910 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  ROM clause */.#d
19920 65 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f  efine SF_MaybeCo
19930 6e 76 65 72 74 20 20 20 20 30 78 30 38 30 30 20  nvert    0x0800 
19940 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74   /* Need convert
19950 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f  CompoundSelectTo
19960 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64  Subquery() */.#d
19970 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78 41  efine SF_MinMaxA
19980 67 67 20 20 20 20 20 20 20 30 78 31 30 30 30 20  gg       0x1000 
19990 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 63 6f   /* Aggregate co
199a0 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20 6f  ntaining min() o
199b0 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64 65 66 69  r max() */.#defi
199c0 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76 65 20  ne SF_Recursive 
199d0 20 20 20 20 20 20 30 78 32 30 30 30 20 20 2f 2a        0x2000  /*
199e0 20 54 68 65 20 72 65 63 75 72 73 69 76 65 20 70   The recursive p
199f0 61 72 74 20 6f 66 20 61 20 72 65 63 75 72 73 69  art of a recursi
19a00 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e  ve CTE */.#defin
19a10 65 20 53 46 5f 43 6f 6e 76 65 72 74 65 64 20 20  e SF_Converted  
19a20 20 20 20 20 20 30 78 34 30 30 30 20 20 2f 2a 20       0x4000  /* 
19a30 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  By convertCompou
19a40 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
19a50 72 79 28 29 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  ry() */.../*.** 
19a60 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61  The results of a
19a70 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65 20 64   SELECT can be d
19a80 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 73 65  istributed in se
19a90 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73 20 64  veral ways, as d
19aa0 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65  efined.** by one
19ab0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
19ac0 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65 20 22  g macros.  The "
19ad0 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e  SRT" prefix mean
19ae0 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74  s "SELECT Result
19af0 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a  .** Type"..**.**
19b00 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20       SRT_Union  
19b10 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
19b20 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e 20 61  ts as a key in a
19b30 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78   temporary index
19b40 20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20   .**            
19b50 20 20 20 20 20 20 20 20 20 69 64 65 6e 74 69 66           identif
19b60 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53  ied by pDest->iS
19b70 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  DParm..**.**    
19b80 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20   SRT_Except     
19b90 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20   Remove results 
19ba0 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61  from the tempora
19bb0 72 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e  ry index pDest->
19bc0 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20  iSDParm..**.**  
19bd0 20 20 20 53 52 54 5f 45 78 69 73 74 73 20 20 20     SRT_Exists   
19be0 20 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20     Store a 1 in 
19bf0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73  memory cell pDes
19c00 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68  t->iSDParm if th
19c10 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20  e result.**     
19c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c30 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  set is not empty
19c40 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
19c50 44 69 73 63 61 72 64 20 20 20 20 20 54 68 72 6f  Discard     Thro
19c60 77 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 77  w the results aw
19c70 61 79 2e 20 20 54 68 69 73 20 69 73 20 75 73 65  ay.  This is use
19c80 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20  d by SELECT.**  
19c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ca0 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69     statements wi
19cb0 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 77 68  thin triggers wh
19cc0 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65  ose only purpose
19cd0 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   is.**          
19ce0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73             the s
19cf0 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66  ide-effects of f
19d00 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
19d10 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  All of the above
19d20 20 61 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e   are free to ign
19d30 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45 52 20  ore their ORDER 
19d40 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65  BY clause. Those
19d50 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20   that.** follow 
19d60 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f  must honor the O
19d70 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
19d80 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75  **.**     SRT_Ou
19d90 74 70 75 74 20 20 20 20 20 20 47 65 6e 65 72 61  tput      Genera
19da0 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70  te a row of outp
19db0 75 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50  ut (using the OP
19dc0 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20  _ResultRow.**   
19dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19de0 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61    opcode) for ea
19df0 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65  ch row in the re
19e00 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  sult set..**.** 
19e10 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20      SRT_Mem     
19e20 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69      Only valid i
19e30 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  f the result is 
19e40 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
19e50 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19e60 20 20 20 20 20 20 20 20 53 74 6f 72 65 20 74 68          Store th
19e70 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f  e first column o
19e80 66 20 74 68 65 20 66 69 72 73 74 20 72 65 73 75  f the first resu
19e90 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20  lt row.**       
19ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
19eb0 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d   register pDest-
19ec0 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62  >iSDParm then ab
19ed0 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a  andon the rest.*
19ee0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19ef0 20 20 20 20 20 20 6f 66 20 74 68 65 20 71 75 65        of the que
19f00 72 79 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e  ry.  This destin
19f10 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c  ation implies "L
19f20 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20  IMIT 1"..**.**  
19f30 20 20 20 53 52 54 5f 53 65 74 20 20 20 20 20 20     SRT_Set      
19f40 20 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75     The result mu
19f50 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63  st be a single c
19f60 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61  olumn.  Store ea
19f70 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ch.**           
19f80 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66            row of
19f90 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b   result as the k
19fa0 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73  ey in table pDes
19fb0 74 2d 3e 69 53 44 50 61 72 6d 2e 20 0a 2a 2a 20  t->iSDParm. .** 
19fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fd0 20 20 20 20 41 70 70 6c 79 20 74 68 65 20 61 66      Apply the af
19fe0 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66  finity pDest->af
19ff0 66 53 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f  fSdst before sto
1a000 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20  ring.**         
1a010 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1a020 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d  lts.  Used to im
1a030 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c  plement "IN (SEL
1a040 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a  ECT ...)"..**.**
1a050 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61       SRT_EphemTa
1a060 62 20 20 20 20 43 72 65 61 74 65 20 61 6e 20 74  b    Create an t
1a070 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
1a080 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e  Dest->iSDParm an
1a090 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20  d store.**      
1a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1a0b0 68 65 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e  he result there.
1a0c0 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c   The cursor is l
1a0d0 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a  eft open after.*
1a0e0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1a0f0 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e        returning.
1a100 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53    This is like S
1a110 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20  RT_Table except 
1a120 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  that.**         
1a130 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1a140 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65   destination use
1a150 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  s OP_OpenEphemer
1a160 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20  al to create.** 
1a170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a180 20 20 20 20 74 68 65 20 74 61 62 6c 65 20 66 69      the table fi
1a190 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  rst..**.**     S
1a1a0 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47  RT_Coroutine   G
1a1b0 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75  enerate a co-rou
1a1c0 74 69 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e  tine that return
1a1d0 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a  s a new row of.*
1a1e0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1a1f0 20 20 20 20 20 20 72 65 73 75 6c 74 73 20 65 61        results ea
1a200 63 68 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e  ch time it is in
1a210 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72  voked.  The entr
1a220 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20  y point.**      
1a230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
1a240 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65  f the co-routine
1a250 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
1a260 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53  gister pDest->iS
1a270 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20  DParm.**        
1a280 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 64               and
1a290 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20   the result row 
1a2a0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65  is stored in pDe
1a2b0 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74  st->nDest regist
1a2c0 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ers.**          
1a2d0 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74             start
1a2e0 69 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e  ing with pDest->
1a2f0 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  iSdst..**.**    
1a300 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20   SRT_Table      
1a310 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
1a320 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  n temporary tabl
1a330 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1a340 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66  ..**     SRT_Fif
1a350 6f 20 20 20 20 20 20 20 20 54 68 69 73 20 69 73  o        This is
1a360 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54   like SRT_EphemT
1a370 61 62 20 65 78 63 65 70 74 20 74 68 61 74 20 74  ab except that t
1a380 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20  he table.**     
1a390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3a0 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c  is assumed to al
1a3b0 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20  ready be open.  
1a3c0 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20  SRT_Fifo has.** 
1a3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3e0 20 20 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e      the addition
1a3f0 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62  al property of b
1a400 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e  eing able to ign
1a410 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ore.**          
1a420 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 4f             the O
1a430 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
1a440 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
1a450 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20  stFifo    Store 
1a460 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d  results in a tem
1a470 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
1a480 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
1a490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4a0 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65      But also use
1a4b0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1a4c0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b   pDest->iSDParm+
1a4d0 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  1 as.**         
1a4e0 20 20 20 20 20 20 20 20 20 20 20 20 61 20 72 65              a re
1a4f0 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f  cord of all prio
1a500 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67  r results and ig
1a510 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61  nore any duplica
1a520 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  te.**           
1a530 20 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20            rows. 
1a540 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44   Name means:  "D
1a550 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a  istinct Fifo"..*
1a560 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65  *.**     SRT_Que
1a570 75 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  ue       Store r
1a580 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69  esults in priori
1a590 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e  ty queue pDest->
1a5a0 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a  iSDParm (really.
1a5b0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1a5c0 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29         an index)
1a5d0 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65 71 75  .  Append a sequ
1a5e0 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74  ence number so t
1a5f0 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a  hat all entries.
1a600 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1a610 20 20 20 20 20 20 20 61 72 65 20 64 69 73 74 69         are disti
1a620 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  nct..**.**     S
1a630 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 53  RT_DistQueue   S
1a640 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1a650 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70  priority queue p
1a660 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e  Dest->iSDParm on
1a670 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20  ly if.**        
1a680 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1a690 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73   same record has
1a6a0 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72   never been stor
1a6b0 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a  ed before.  The.
1a6c0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1a6d0 20 20 20 20 20 20 20 69 6e 64 65 78 20 61 74 20         index at 
1a6e0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31  pDest->iSDParm+1
1a6f0 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20   hold all prior 
1a700 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  stores..*/.#defi
1a710 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20  ne SRT_Union    
1a720 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20      1  /* Store 
1a730 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69  result as keys i
1a740 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
1a750 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74  efine SRT_Except
1a760 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d         2  /* Rem
1a770 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20  ove result from 
1a780 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f  a UNION index */
1a790 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69  .#define SRT_Exi
1a7a0 73 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20  sts       3  /* 
1a7b0 53 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72  Store 1 if the r
1a7c0 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70  esult is not emp
1a7d0 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ty */.#define SR
1a7e0 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34  T_Discard      4
1a7f0 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65    /* Do not save
1a800 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79   the results any
1a810 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65  where */.#define
1a820 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20   SRT_Fifo       
1a830 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    5  /* Store re
1a840 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74  sult as data wit
1a850 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72  h an automatic r
1a860 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
1a870 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20  SRT_DistFifo    
1a880 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f   6  /* Like SRT_
1a890 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65  Fifo, but unique
1a8a0 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f   results only */
1a8b0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65  .#define SRT_Que
1a8c0 75 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20  ue        7  /* 
1a8d0 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
1a8e0 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66  an queue */.#def
1a8f0 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65 75  ine SRT_DistQueu
1a900 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20  e    8  /* Like 
1a910 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75  SRT_Queue, but u
1a920 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e  nique results on
1a930 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52  ly */../* The OR
1a940 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73  DER BY clause is
1a950 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c   ignored for all
1a960 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f   of the above */
1a970 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62  .#define Ignorab
1a980 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58  leOrderby(X) ((X
1a990 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69  ->eDest)<=SRT_Di
1a9a0 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e  stQueue)..#defin
1a9b0 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20  e SRT_Output    
1a9c0 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20     9  /* Output 
1a9d0 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75  each row of resu
1a9e0 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  lt */.#define SR
1a9f0 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30  T_Mem         10
1aa00 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1aa10 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65  t in a memory ce
1aa20 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ll */.#define SR
1aa30 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 31 31  T_Set         11
1aa40 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1aa50 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e  ts as keys in an
1aa60 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
1aa70 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20  e SRT_EphemTab  
1aa80 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20    12  /* Create 
1aa90 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e  transient tab an
1aaa0 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54  d store like SRT
1aab0 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e  _Table */.#defin
1aac0 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20  e SRT_Coroutine 
1aad0 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74    13  /* Generat
1aae0 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f  e a single row o
1aaf0 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66  f result */.#def
1ab00 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20  ine SRT_Table   
1ab10 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65      14  /* Store
1ab20 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20   result as data 
1ab30 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69  with an automati
1ab40 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a  c rowid */../*.*
1ab50 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1ab60 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73   this object des
1ab70 63 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20  cribes where to 
1ab80 70 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c  put of the resul
1ab90 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43  ts of.** a SELEC
1aba0 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a  T statement..*/.
1abb0 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
1abc0 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20  t {.  u8 eDest; 
1abd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f             /* Ho
1abe0 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20  w to dispose of 
1abf0 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e  the results.  On
1ac00 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e   of SRT_* above.
1ac10 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 53 64   */.  char affSd
1ac20 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 66  st;        /* Af
1ac30 66 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e  finity used when
1ac40 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20   eDest==SRT_Set 
1ac50 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d  */.  int iSDParm
1ac60 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70  ;         /* A p
1ac70 61 72 61 6d 65 74 65 72 20 75 73 65 64 20 62 79  arameter used by
1ac80 20 74 68 65 20 65 44 65 73 74 20 64 69 73 70 6f   the eDest dispo
1ac90 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20  sal method */.  
1aca0 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20 20  int iSdst;      
1acb0 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67       /* Base reg
1acc0 69 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75  ister where resu
1acd0 6c 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20  lts are written 
1ace0 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20  */.  int nSdst; 
1acf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1ad00 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
1ad10 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20   allocated */.  
1ad20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72  ExprList *pOrder
1ad30 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75  By;  /* Key colu
1ad40 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75  mns for SRT_Queu
1ad50 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75  e and SRT_DistQu
1ad60 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  eue */.};../*.**
1ad70 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e   During code gen
1ad80 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65  eration of state
1ad90 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e  ments that do in
1ada0 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49  serts into AUTOI
1adb0 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62  NCREMENT .** tab
1adc0 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69  les, the followi
1add0 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  ng information i
1ade0 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  s attached to th
1adf0 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e  e Table.u.autoIn
1ae00 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f  c.p.** pointer o
1ae10 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65  f each autoincre
1ae20 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65  ment table to re
1ae30 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69  cord some side i
1ae40 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a  nformation that.
1ae50 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  ** the code gene
1ae60 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65  rator needs.  We
1ae70 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65   have to keep pe
1ae80 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72  r-table autoincr
1ae90 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ement.** informa
1aea0 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73  tion in case ins
1aeb0 65 72 74 73 20 61 72 65 20 64 6f 77 6e 20 77 69  erts are down wi
1aec0 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20  thin triggers.  
1aed0 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a  Triggers do not.
1aee0 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72  ** normally coor
1aef0 64 69 6e 61 74 65 20 74 68 65 69 72 20 61 63 74  dinate their act
1af00 69 76 69 74 69 65 73 2c 20 62 75 74 20 77 65 20  ivities, but we 
1af10 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64  do need to coord
1af20 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61  inate the.** loa
1af30 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20  ding and saving 
1af40 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  of autoincrement
1af50 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
1af60 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49  .struct AutoincI
1af70 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49  nfo {.  AutoincI
1af80 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a  nfo *pNext;   /*
1af90 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b   Next info block
1afa0 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68   in a list of th
1afb0 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c  em all */.  Tabl
1afc0 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
1afd0 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20    /* Table this 
1afe0 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72  info block refer
1aff0 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44  s to */.  int iD
1b000 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
1b010 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69  /* Index in sqli
1b020 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74  te3.aDb[] of dat
1b030 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54  abase holding pT
1b040 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43  ab */.  int regC
1b050 74 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  tr;           /*
1b060 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   Memory register
1b070 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77   holding the row
1b080 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b  id counter */.};
1b090 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20  ../*.** Size of 
1b0a0 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65  the column cache
1b0b0 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
1b0c0 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20  TE_N_COLCACHE.# 
1b0d0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f  define SQLITE_N_
1b0e0 43 4f 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64  COLCACHE 10.#end
1b0f0 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61  if../*.** At lea
1b100 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20  st one instance 
1b110 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1b120 20 73 74 72 75 63 74 75 72 65 20 69 73 20 63 72   structure is cr
1b130 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 0a  eated for each .
1b140 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61 74 20  ** trigger that 
1b150 6d 61 79 20 62 65 20 66 69 72 65 64 20 77 68 69  may be fired whi
1b160 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e  le parsing an IN
1b170 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20  SERT, UPDATE or 
1b180 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d  DELETE.** statem
1b190 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62  ent. All such ob
1b1a0 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72 65 64  jects are stored
1b1b0 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c   in the linked l
1b1c0 69 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a  ist headed at.**
1b1d0 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
1b1e0 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f  rg and deleted o
1b1f0 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  nce statement co
1b200 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65  mpilation has be
1b210 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e  en.** completed.
1b220 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75  .**.** A Vdbe su
1b230 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69  b-program that i
1b240 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f  mplements the bo
1b250 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75  dy and WHEN clau
1b260 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a  se of trigger.**
1b270 20 54 72 69 67 67 65 72 50 72 67 2e 70 54 72 69   TriggerPrg.pTri
1b280 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61  gger, assuming a
1b290 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   default ON CONF
1b2a0 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a  LICT clause of.*
1b2b0 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63  * TriggerPrg.orc
1b2c0 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69  onf, is stored i
1b2d0 6e 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67  n the TriggerPrg
1b2e0 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62  .pProgram variab
1b2f0 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65  le..** The Parse
1b300 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73  .pTriggerPrg lis
1b310 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73  t never contains
1b320 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74   two entries wit
1b330 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61  h the same.** va
1b340 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54  lues for both pT
1b350 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e  rigger and orcon
1b360 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69  f..**.** The Tri
1b370 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b  ggerPrg.aColmask
1b380 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20  [0] variable is 
1b390 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66  set to a mask of
1b3a0 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a   old.* columns.*
1b3b0 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72 20 73  * accessed (or s
1b3c0 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67  et to 0 for trig
1b3d0 67 65 72 73 20 66 69 72 65 64 20 61 73 20 61 20  gers fired as a 
1b3e0 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54  result of INSERT
1b3f0 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29   .** statements)
1b400 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65  . Similarly, the
1b410 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c   TriggerPrg.aCol
1b420 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65  mask[1] variable
1b430 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20   is set to.** a 
1b440 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  mask of new.* co
1b450 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68  lumns used by th
1b460 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74  e program..*/.st
1b470 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20  ruct TriggerPrg 
1b480 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  {.  Trigger *pTr
1b490 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54  igger;      /* T
1b4a0 72 69 67 67 65 72 20 74 68 69 73 20 70 72 6f 67  rigger this prog
1b4b0 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72  ram was coded fr
1b4c0 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50  om */.  TriggerP
1b4d0 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  rg *pNext;      
1b4e0 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e  /* Next entry in
1b4f0 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
1b500 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62  rg list */.  Sub
1b510 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61  Program *pProgra
1b520 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20  m;   /* Program 
1b530 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72  implementing pTr
1b540 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a  igger/orconf */.
1b550 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20    int orconf;   
1b560 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1b570 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
1b580 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32   policy */.  u32
1b590 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20   aColmask[2];   
1b5a0 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66       /* Masks of
1b5b0 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f   old.*, new.* co
1b5c0 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a  lumns accessed *
1b5d0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
1b5e0 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65  yDbMask datatype
1b5f0 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b   for the bitmask
1b600 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64   of all attached
1b610 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23   databases..*/.#
1b620 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  if SQLITE_MAX_AT
1b630 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65  TACHED>30.  type
1b640 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61  def unsigned cha
1b650 72 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54  r yDbMask[(SQLIT
1b660 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39  E_MAX_ATTACHED+9
1b670 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44  )/8];.# define D
1b680 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20  bMaskTest(M,I)  
1b690 20 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28    (((M)[(I)/8]&(
1b6a0 31 3c 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29  1<<((I)&7)))!=0)
1b6b0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1b6c0 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d  Zero(M)      mem
1b6d0 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66  set((M),0,sizeof
1b6e0 28 4d 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62  (M)).# define Db
1b6f0 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20  MaskSet(M,I)    
1b700 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c   (M)[(I)/8]|=(1<
1b710 3c 28 28 49 29 26 37 29 29 0a 23 20 64 65 66 69  <((I)&7)).# defi
1b720 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  ne DbMaskAllZero
1b730 28 4d 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d  (M)   sqlite3DbM
1b740 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20  askAllZero(M).# 
1b750 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e  define DbMaskNon
1b760 5a 65 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74  Zero(M)   (sqlit
1b770 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e3DbMaskAllZero(
1b780 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74  M)==0).#else.  t
1b790 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20  ypedef unsigned 
1b7a0 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64  int yDbMask;.# d
1b7b0 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74  efine DbMaskTest
1b7c0 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28  (M,I)    (((M)&(
1b7d0 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49  ((yDbMask)1)<<(I
1b7e0 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65  )))!=0).# define
1b7f0 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20   DbMaskZero(M)  
1b800 20 20 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69      (M)=0.# defi
1b810 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49  ne DbMaskSet(M,I
1b820 29 20 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44  )     (M)|=(((yD
1b830 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23  bMask)1)<<(I)).#
1b840 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c   define DbMaskAl
1b850 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d  lZero(M)   (M)==
1b860 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  0.# define DbMas
1b870 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d  kNonZero(M)   (M
1b880 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  )!=0.#endif../*.
1b890 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72  ** An SQL parser
1b8a0 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70   context.  A cop
1b8b0 79 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  y of this struct
1b8c0 75 72 65 20 69 73 20 70 61 73 73 65 64 20 74 68  ure is passed th
1b8d0 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72  rough.** the par
1b8e0 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74  ser and down int
1b8f0 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72  o all the parser
1b900 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20   action routine 
1b910 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63  in order to.** c
1b920 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f  arry around info
1b930 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  rmation that is 
1b940 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e  global to the en
1b950 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a  tire parse..**.*
1b960 2a 20 54 68 65 20 73 74 72 75 63 74 75 72 65 20  * The structure 
1b970 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20  is divided into 
1b980 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e  two parts.  When
1b990 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20   the parser and 
1b9a0 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65  code.** generate
1b9b0 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73   call themselves
1b9c0 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68   recursively, th
1b9d0 65 20 66 69 72 73 74 20 70 61 72 74 20 6f 66 20  e first part of 
1b9e0 74 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  the structure.**
1b9f0 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74   is constant but
1ba00 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74   the second part
1ba10 20 69 73 20 72 65 73 65 74 20 61 74 20 74 68 65   is reset at the
1ba20 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65   beginning and e
1ba30 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65  nd of.** each re
1ba40 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  cursion..**.** T
1ba50 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e  he nTableLock an
1ba60 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72  d aTableLock var
1ba70 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20  iables are only 
1ba80 75 73 65 64 20 69 66 20 74 68 65 20 73 68 61 72  used if the shar
1ba90 65 64 2d 63 61 63 68 65 20 0a 2a 2a 20 66 65 61  ed-cache .** fea
1baa0 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20  ture is enabled 
1bab0 28 69 66 20 73 71 6c 69 74 65 33 54 73 64 28 29  (if sqlite3Tsd()
1bac0 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 20  ->useSharedData 
1bad0 69 73 20 74 72 75 65 29 2e 20 54 68 65 79 20 61  is true). They a
1bae0 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74  re.** used to st
1baf0 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66 20 74  ore the set of t
1bb00 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69  able-locks requi
1bb10 72 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65  red by the state
1bb20 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f  ment being.** co
1bb30 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e  mpiled. Function
1bb40 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
1bb50 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 61  k() is used to a
1bb60 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68  dd entries to th
1bb70 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74  e.** list..*/.st
1bb80 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73  ruct Parse {.  s
1bb90 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
1bba0 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20      /* The main 
1bbb0 64 61 74 61 62 61 73 65 20 73 74 72 75 63 74 75  database structu
1bbc0 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45  re */.  char *zE
1bbd0 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20  rrMsg;       /* 
1bbe0 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  An error message
1bbf0 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62   */.  Vdbe *pVdb
1bc00 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e  e;         /* An
1bc10 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63   engine for exec
1bc20 75 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 62  uting database b
1bc30 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74  ytecode */.  int
1bc40 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   rc;            
1bc50 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65    /* Return code
1bc60 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20   from execution 
1bc70 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73  */.  u8 colNames
1bc80 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55  Set;      /* TRU
1bc90 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d  E after OP_Colum
1bca0 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69  nName has been i
1bcb0 73 73 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a  ssued to pVdbe *
1bcc0 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68 65  /.  u8 checkSche
1bcd0 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73  ma;      /* Caus
1bce0 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  es schema cookie
1bcf0 20 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20   check after an 
1bd00 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65  error */.  u8 ne
1bd10 73 74 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  sted;           
1bd20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
1bd30 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65  ted calls to the
1bd40 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e   parser/code gen
1bd50 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e  erator */.  u8 n
1bd60 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20  TempReg;        
1bd70 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65   /* Number of te
1bd80 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
1bd90 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20  s in aTempReg[] 
1bda0 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57  */.  u8 isMultiW
1bdb0 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75  rite;     /* Tru
1bdc0 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d  e if statement m
1bdd0 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74  ay modify/insert
1bde0 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a   multiple rows *
1bdf0 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b  /.  u8 mayAbort;
1be00 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1be10 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61   if statement ma
1be20 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54  y throw an ABORT
1be30 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20   exception */.  
1be40 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20  u8 hasCompound; 
1be50 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20       /* Need to 
1be60 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f  invoke convertCo
1be70 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
1be80 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38  bquery() */.  u8
1be90 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20   okConstFactor; 
1bea0 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74     /* OK to fact
1beb0 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73  or out constants
1bec0 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70 52   */.  int aTempR
1bed0 65 67 5b 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f  eg[8];     /* Ho
1bee0 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74  lding area for t
1bef0 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
1bf00 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e  rs */.  int nRan
1bf10 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20  geReg;       /* 
1bf20 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d 70  Size of the temp
1bf30 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62  orary register b
1bf40 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52  lock */.  int iR
1bf50 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f  angeReg;       /
1bf60 2a 20 46 69 72 73 74 20 72 65 67 69 73 74 65 72  * First register
1bf70 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72 65   in temporary re
1bf80 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a  gister block */.
1bf90 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
1bfa0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1bfb0 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20   of errors seen 
1bfc0 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20 20  */.  int nTab;  
1bfd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1bfe0 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73 6c  ber of previousl
1bff0 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42 45  y allocated VDBE
1c000 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e   cursors */.  in
1c010 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t nMem;         
1c020 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1c030 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65  memory cells use
1c040 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  d so far */.  in
1c050 74 20 6e 53 65 74 3b 20 20 20 20 20 20 20 20 20  t nSet;         
1c060 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1c070 73 65 74 73 20 75 73 65 64 20 73 6f 20 66 61 72  sets used so far
1c080 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 3b   */.  int nOnce;
1c090 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1c0a0 6d 62 65 72 20 6f 66 20 4f 50 5f 4f 6e 63 65 20  mber of OP_Once 
1c0b0 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 73 6f 20  instructions so 
1c0c0 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70  far */.  int nOp
1c0d0 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a  Alloc;        /*
1c0e0 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73   Number of slots
1c0f0 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56   allocated for V
1c100 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69  dbe.aOp[] */.  i
1c110 6e 74 20 69 46 69 78 65 64 4f 70 3b 20 20 20 20  nt iFixedOp;    
1c120 20 20 20 20 2f 2a 20 4e 65 76 65 72 20 62 61 63      /* Never bac
1c130 6b 20 6f 75 74 20 6f 70 63 6f 64 65 73 20 69 46  k out opcodes iF
1c140 69 78 65 64 4f 70 2d 31 20 6f 72 20 65 61 72 6c  ixedOp-1 or earl
1c150 69 65 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42  ier */.  int ckB
1c160 61 73 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ase;          /*
1c170 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20 6f   Base register o
1c180 66 20 64 61 74 61 20 64 75 72 69 6e 67 20 63 68  f data during ch
1c190 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  eck constraints 
1c1a0 2a 2f 0a 20 20 69 6e 74 20 69 50 61 72 74 49 64  */.  int iPartId
1c1b0 78 54 61 62 3b 20 20 20 20 20 2f 2a 20 54 61 62  xTab;     /* Tab
1c1c0 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  le corresponding
1c1d0 20 74 6f 20 61 20 70 61 72 74 69 61 6c 20 69 6e   to a partial in
1c1e0 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61  dex */.  int iCa
1c1f0 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a  cheLevel;     /*
1c200 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20   ColCache valid 
1c210 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d  when aColCache[]
1c220 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c  .iLevel<=iCacheL
1c230 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43  evel */.  int iC
1c240 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f  acheCnt;       /
1c250 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74  * Counter used t
1c260 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43  o generate aColC
1c270 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65  ache[].lru value
1c280 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65  s */.  int nLabe
1c290 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  l;          /* N
1c2a0 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20  umber of labels 
1c2b0 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  used */.  int *a
1c2c0 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f  Label;         /
1c2d0 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20  * Space to hold 
1c2e0 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20  the labels */.  
1c2f0 73 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68 65  struct yColCache
1c300 20 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c   {.    int iTabl
1c310 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
1c320 54 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d  Table cursor num
1c330 62 65 72 20 2a 2f 0a 20 20 20 20 69 31 36 20 69  ber */.    i16 i
1c340 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
1c350 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e   /* Table column
1c360 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75   number */.    u
1c370 38 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20 20  8 tempReg;      
1c380 20 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73 20       /* iReg is 
1c390 61 20 74 65 6d 70 20 72 65 67 69 73 74 65 72 20  a temp register 
1c3a0 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65  that needs to be
1c3b0 20 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e   freed */.    in
1c3c0 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20  t iLevel;       
1c3d0 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c      /* Nesting l
1c3e0 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20  evel */.    int 
1c3f0 69 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20  iReg;           
1c400 20 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76 61    /* Reg with va
1c410 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75  lue of this colu
1c420 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65  mn. 0 means none
1c430 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75  . */.    int lru
1c440 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1c450 2a 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c 79  * Least recently
1c460 20 75 73 65 64 20 65 6e 74 72 79 20 68 61 73 20   used entry has 
1c470 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c  the smallest val
1c480 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61  ue */.  } aColCa
1c490 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c  che[SQLITE_N_COL
1c4a0 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20  CACHE];  /* One 
1c4b0 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  for each column 
1c4c0 63 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20  cache entry */. 
1c4d0 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73   ExprList *pCons
1c4e0 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e  tExpr;/* Constan
1c4f0 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  t expressions */
1c500 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61  .  Token constra
1c510 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20  intName;/* Name 
1c520 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  of the constrain
1c530 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  t currently bein
1c540 67 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44  g parsed */.  yD
1c550 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b  bMask writeMask;
1c560 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72     /* Start a wr
1c570 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
1c580 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62 61 73  on these databas
1c590 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20  es */.  yDbMask 
1c5a0 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20  cookieMask;  /* 
1c5b0 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d  Bitmask of schem
1c5c0 61 20 76 65 72 69 66 69 65 64 20 64 61 74 61 62  a verified datab
1c5d0 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f  ases */.  int co
1c5e0 6f 6b 69 65 56 61 6c 75 65 5b 53 51 4c 49 54 45  okieValue[SQLITE
1c5f0 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 32 5d  _MAX_ATTACHED+2]
1c600 3b 20 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20  ;  /* Values of 
1c610 63 6f 6f 6b 69 65 73 20 74 6f 20 76 65 72 69 66  cookies to verif
1c620 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f  y */.  int regRo
1c630 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52  wid;        /* R
1c640 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1c650 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45 20  rowid of CREATE 
1c660 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20  TABLE entry */. 
1c670 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20   int regRoot;   
1c680 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
1c690 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70  r holding root p
1c6a0 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e  age number for n
1c6b0 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20  ew objects */.  
1c6c0 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20  int nMaxArg;    
1c6d0 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73       /* Max args
1c6e0 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72 20   passed to user 
1c6f0 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d  function by sub-
1c700 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53  program */.#if S
1c710 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
1c720 45 44 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74  ED.  int nSelect
1c730 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
1c740 62 65 72 20 6f 66 20 53 45 4c 45 43 54 20 73 74  ber of SELECT st
1c750 61 74 65 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f  atements seen */
1c760 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 49 6e  .  int nSelectIn
1c770 64 65 6e 74 3b 20 20 20 2f 2a 20 48 6f 77 20 66  dent;   /* How f
1c780 61 72 20 74 6f 20 69 6e 64 65 6e 74 20 53 45 4c  ar to indent SEL
1c790 45 43 54 54 52 41 43 45 28 29 20 6f 75 74 70 75  ECTTRACE() outpu
1c7a0 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  t */.#endif.#ifn
1c7b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1c7c0 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69  SHARED_CACHE.  i
1c7d0 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20  nt nTableLock;  
1c7e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1c7f0 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62  of locks in aTab
1c800 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c  leLock */.  Tabl
1c810 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63  eLock *aTableLoc
1c820 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74  k; /* Required t
1c830 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73  able locks for s
1c840 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
1c850 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74   */.#endif.  Aut
1c860 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b  oincInfo *pAinc;
1c870 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
1c880 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45   about AUTOINCRE
1c890 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f  MENT counters */
1c8a0 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  ..  /* Informati
1c8b0 6f 6e 20 75 73 65 64 20 77 68 69 6c 65 20 63 6f  on used while co
1c8c0 64 69 6e 67 20 74 72 69 67 67 65 72 20 70 72 6f  ding trigger pro
1c8d0 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73  grams. */.  Pars
1c8e0 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20  e *pToplevel;   
1c8f0 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63 74   /* Parse struct
1c900 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f  ure for main pro
1c910 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a  gram (or NULL) *
1c920 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67  /.  Table *pTrig
1c930 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c  gerTab;  /* Tabl
1c940 65 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62  e triggers are b
1c950 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a  eing coded for *
1c960 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54 61  /.  int addrCrTa
1c970 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72  b;       /* Addr
1c980 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65  ess of OP_Create
1c990 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20  Table opcode on 
1c9a0 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a  CREATE TABLE */.
1c9b0 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70    u32 nQueryLoop
1c9c0 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75  ;      /* Est nu
1c9d0 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f  mber of iteratio
1c9e0 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20 28 31  ns of a query (1
1c9f0 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20  0*log2(N)) */.  
1ca00 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20  u32 oldmask;    
1ca10 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
1ca20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  old.* columns re
1ca30 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33  ferenced */.  u3
1ca40 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20  2 newmask;      
1ca50 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65     /* Mask of ne
1ca60 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  w.* columns refe
1ca70 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65  renced */.  u8 e
1ca80 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20  TriggerOp;      
1ca90 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54   /* TK_UPDATE, T
1caa0 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44  K_INSERT or TK_D
1cab0 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f  ELETE */.  u8 eO
1cac0 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
1cad0 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f  /* Default ON CO
1cae0 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f  NFLICT policy fo
1caf0 72 20 74 72 69 67 67 65 72 20 73 74 65 70 73 20  r trigger steps 
1cb00 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54  */.  u8 disableT
1cb10 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75  riggers;  /* Tru
1cb20 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69  e to disable tri
1cb30 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a  ggers */..  /***
1cb40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1cb50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1cb60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1cb70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1cb80 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65  *****.  ** Above
1cb90 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74   is constant bet
1cba0 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e  ween recursions.
1cbb0 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74    Below is reset
1cbc0 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65   before and afte
1cbd0 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75  r.  ** each recu
1cbe0 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e  rsion.  The boun
1cbf0 64 61 72 79 20 62 65 74 77 65 65 6e 20 74 68 65  dary between the
1cc00 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20 69  se two regions i
1cc10 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a  s determined.  *
1cc20 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f 66  * using offsetof
1cc30 28 50 61 72 73 65 2c 6e 56 61 72 29 20 73 6f 20  (Parse,nVar) so 
1cc40 74 68 65 20 6e 56 61 72 20 66 69 65 6c 64 20 6d  the nVar field m
1cc50 75 73 74 20 62 65 20 74 68 65 20 66 69 72 73 74  ust be the first
1cc60 20 66 69 65 6c 64 0a 20 20 2a 2a 20 69 6e 20 74   field.  ** in t
1cc70 68 65 20 72 65 63 75 72 73 69 76 65 20 72 65 67  he recursive reg
1cc80 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  ion..  *********
1cc90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1cca0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ccb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ccc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
1ccd0 0a 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20 20 20  ..  int nVar;   
1cce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ccf0 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76   Number of '?' v
1cd00 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e  ariables seen in
1cd10 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20   the SQL so far 
1cd20 2a 2f 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b 20  */.  int nzVar; 
1cd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1cd40 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 76 61 69  * Number of avai
1cd50 6c 61 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20 61  lable slots in a
1cd60 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20 69  zVar[] */.  u8 i
1cd70 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  PkSortOrder;    
1cd80 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20        /* ASC or 
1cd90 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52  DESC for INTEGER
1cda0 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a   PRIMARY KEY */.
1cdb0 20 20 75 38 20 62 46 72 65 65 57 69 74 68 3b 20    u8 bFreeWith; 
1cdc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1cdd0 72 75 65 20 69 66 20 70 57 69 74 68 20 73 68 6f  rue if pWith sho
1cde0 75 6c 64 20 62 65 20 66 72 65 65 64 20 77 69 74  uld be freed wit
1cdf0 68 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 75 38  h parser */.  u8
1ce00 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20   explain;       
1ce10 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1ce20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66  if the EXPLAIN f
1ce30 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20  lag is found on 
1ce40 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66  the query */.#if
1ce50 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1ce60 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
1ce70 75 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20  u8 declareVtab; 
1ce80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1ce90 65 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69  e if inside sqli
1cea0 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62  te3_declare_vtab
1ceb0 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61  () */.  int nVta
1cec0 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20  bLock;          
1ced0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76    /* Number of v
1cee0 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f  irtual tables to
1cef0 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a   lock */.#endif.
1cf00 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20 20    int nAlias;   
1cf10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1cf20 75 6d 62 65 72 20 6f 66 20 61 6c 69 61 73 65 64  umber of aliased
1cf30 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75   result set colu
1cf40 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65  mns */.  int nHe
1cf50 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20  ight;           
1cf60 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
1cf70 20 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20   tree height of 
1cf80 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65  current sub-sele
1cf90 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ct */.#ifndef SQ
1cfa0 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49  LITE_OMIT_EXPLAI
1cfb0 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49  N.  int iSelectI
1cfc0 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
1cfd0 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73   ID of current s
1cfe0 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49  elect for EXPLAI
1cff0 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e  N output */.  in
1d000 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b  t iNextSelectId;
1d010 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
1d020 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74  available select
1d030 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20   ID for EXPLAIN 
1d040 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66  output */.#endif
1d050 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b  .  char **azVar;
1d060 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d070 50 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d 65  Pointers to name
1d080 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20  s of parameters 
1d090 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72  */.  Vdbe *pRepr
1d0a0 65 70 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f  epare;         /
1d0b0 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65  * VM being repre
1d0c0 70 61 72 65 64 20 28 73 71 6c 69 74 65 33 52 65  pared (sqlite3Re
1d0d0 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20  prepare()) */.  
1d0e0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69  const char *zTai
1d0f0 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  l;        /* All
1d100 20 53 51 4c 20 74 65 78 74 20 70 61 73 74 20 74   SQL text past t
1d110 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f  he last semicolo
1d120 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61  n parsed */.  Ta
1d130 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20  ble *pNewTable; 
1d140 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62          /* A tab
1d150 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75  le being constru
1d160 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54  cted by CREATE T
1d170 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65  ABLE */.  Trigge
1d180 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20  r *pNewTrigger; 
1d190 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75      /* Trigger u
1d1a0 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62  nder construct b
1d1b0 79 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47  y a CREATE TRIGG
1d1c0 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ER */.  const ch
1d1d0 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74  ar *zAuthContext
1d1e0 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72  ; /* The 6th par
1d1f0 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41  ameter to db->xA
1d200 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f  uth callbacks */
1d210 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f  .  Token sNameTo
1d220 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ken;         /* 
1d230 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61  Token with unqua
1d240 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62  lified schema ob
1d250 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54  ject name */.  T
1d260 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b  oken sLastToken;
1d270 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1d280 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65  last token parse
1d290 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  d */.#ifndef SQL
1d2a0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
1d2b0 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41  TABLE.  Token sA
1d2c0 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
1d2d0 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65    /* Complete te
1d2e0 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61  xt of a module a
1d2f0 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62  rgument */.  Tab
1d300 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b  le **apVtabLock;
1d310 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
1d320 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62  r to virtual tab
1d330 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b  les needing lock
1d340 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ing */.#endif.  
1d350 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61  Table *pZombieTa
1d360 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  b;        /* Lis
1d370 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63  t of Table objec
1d380 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74  ts to delete aft
1d390 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20  er code gen */. 
1d3a0 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72   TriggerPrg *pTr
1d3b0 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69  iggerPrg;  /* Li
1d3c0 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64  nked list of cod
1d3d0 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20  ed triggers */. 
1d3e0 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20   With *pWith;   
1d3f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
1d400 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73  rrent WITH claus
1d410 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 7d 3b  e, or NULL */.};
1d420 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
1d430 72 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79  rue if currently
1d440 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74   inside an sqlit
1d450 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28  e3_declare_vtab(
1d460 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65  ) call..*/.#ifde
1d470 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
1d480 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65  RTUALTABLE.  #de
1d490 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f  fine IN_DECLARE_
1d4a0 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23  VTAB 0.#else.  #
1d4b0 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
1d4c0 45 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e  E_VTAB (pParse->
1d4d0 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e  declareVtab).#en
1d4e0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
1d4f0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
1d500 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1d510 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65  e can be declare
1d520 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64  d on a stack and
1d530 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65   used.** to save
1d540 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68   the Parse.zAuth
1d550 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f  Context value so
1d560 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20   that it can be 
1d570 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a  restored later..
1d580 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f  */.struct AuthCo
1d590 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20  ntext {.  const 
1d5a0 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65  char *zAuthConte
1d5b0 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76  xt;   /* Put sav
1d5c0 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  ed Parse.zAuthCo
1d5d0 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20  ntext here */.  
1d5e0 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
1d5f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1d600 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74 75  he Parse structu
1d610 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  re */.};../*.** 
1d620 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66  Bitfield flags f
1d630 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76  or P5 value in v
1d640 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a  arious opcodes..
1d650 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1d660 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20  G_NCHANGE       
1d670 30 78 30 31 20 20 20 20 2f 2a 20 53 65 74 20 74  0x01    /* Set t
1d680 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68  o update db->nCh
1d690 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ange */.#define 
1d6a0 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20  OPFLAG_EPHEM    
1d6b0 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
1d6c0 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d  OP_Column: Ephem
1d6d0 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f  eral output is o
1d6e0 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  k */.#define OPF
1d6f0 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20  LAG_LASTROWID   
1d700 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53 65 74    0x02    /* Set
1d710 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c   to update db->l
1d720 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66  astRowid */.#def
1d730 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  ine OPFLAG_ISUPD
1d740 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20 20  ATE      0x04   
1d750 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65   /* This OP_Inse
1d760 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44  rt is an sql UPD
1d770 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
1d780 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20  PFLAG_APPEND    
1d790 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54      0x08    /* T
1d7a0 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f  his is likely to
1d7b0 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f   be an append */
1d7c0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1d7d0 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78  USESEEKRESULT 0x
1d7e0 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20  10    /* Try to 
1d7f0 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20  avoid a seek in 
1d800 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f  BtreeInsert() */
1d810 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1d820 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20 30 78  LENGTHARG     0x
1d830 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75  40    /* OP_Colu
1d840 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72  mn only used for
1d850 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65   length() */.#de
1d860 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45  fine OPFLAG_TYPE
1d870 4f 46 41 52 47 20 20 20 20 20 30 78 38 30 20 20  OFARG     0x80  
1d880 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f    /* OP_Column o
1d890 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79 70  nly used for typ
1d8a0 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  eof() */.#define
1d8b0 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20   OPFLAG_BULKCSR 
1d8c0 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
1d8d0 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20   OP_Open** used 
1d8e0 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72  to open bulk cur
1d8f0 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  sor */.#define O
1d900 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20  PFLAG_SEEKEQ    
1d910 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f      0x02    /* O
1d920 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20  P_Open** cursor 
1d930 75 73 65 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c  uses EQ seek onl
1d940 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  y */.#define OPF
1d950 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20 20 20  LAG_P2ISREG     
1d960 20 20 30 78 30 34 20 20 20 20 2f 2a 20 50 32 20    0x04    /* P2 
1d970 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20  to OP_Open** is 
1d980 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  a register numbe
1d990 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
1d9a0 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20  LAG_PERMUTE     
1d9b0 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
1d9c0 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65  Compare: use the
1d9d0 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a   permutation */.
1d9e0 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67  ./*. * Each trig
1d9f0 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74  ger present in t
1da00 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
1da10 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  ma is stored as 
1da20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20  an instance of. 
1da30 2a 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  * struct Trigger
1da40 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72  . . *. * Pointer
1da50 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f  s to instances o
1da60 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1da70 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74   are stored in t
1da80 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49  wo ways.. * 1. I
1da90 6e 20 74 68 65 20 22 74 72 69 67 48 61 73 68 22  n the "trigHash"
1daa0 20 68 61 73 68 20 74 61 62 6c 65 20 28 70 61 72   hash table (par
1dab0 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  t of the sqlite3
1dac0 2a 20 74 68 61 74 20 72 65 70 72 65 73 65 6e 74  * that represent
1dad0 73 20 74 68 65 20 0a 20 2a 20 20 20 20 64 61 74  s the . *    dat
1dae0 61 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c  abase). This all
1daf0 6f 77 73 20 54 72 69 67 67 65 72 20 73 74 72 75  ows Trigger stru
1db00 63 74 75 72 65 73 20 74 6f 20 62 65 20 72 65 74  ctures to be ret
1db10 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a  rieved by name..
1db20 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65   * 2. All trigge
1db30 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  rs associated wi
1db40 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  th a single tabl
1db50 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20  e form a linked 
1db60 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a  list, using the.
1db70 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62   *    pNext memb
1db80 65 72 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  er of struct Tri
1db90 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20  gger. A pointer 
1dba0 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
1dbb0 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20  ment of the. *  
1dbc0 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73    linked list is
1dbd0 20 73 74 6f 72 65 64 20 61 73 20 74 68 65 20 22   stored as the "
1dbe0 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72  pTrigger" member
1dbf0 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61 74   of the associat
1dc00 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20  ed. *    struct 
1dc10 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65  Table.. *. * The
1dc20 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d   "step_list" mem
1dc30 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  ber points to th
1dc40 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
1dc50 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  of a linked list
1dc60 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  . * containing t
1dc70 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
1dc80 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74  s specified as t
1dc90 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
1dca0 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54  am.. */.struct T
1dcb0 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20  rigger {.  char 
1dcc0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
1dcd0 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f     /* The name o
1dce0 66 20 74 68 65 20 74 72 69 67 67 65 72 20 20 20  f the trigger   
1dcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd00 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a       */.  char *
1dd10 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  table;          
1dd20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f    /* The table o
1dd30 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20  r view to which 
1dd40 74 68 65 20 74 72 69 67 67 65 72 20 61 70 70 6c  the trigger appl
1dd50 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ies */.  u8 op; 
1dd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd70 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45   /* One of TK_DE
1dd80 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c  LETE, TK_UPDATE,
1dd90 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20   TK_INSERT      
1dda0 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d     */.  u8 tr_tm
1ddb0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ddc0 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45  /* One of TRIGGE
1ddd0 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45  R_BEFORE, TRIGGE
1dde0 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70  R_AFTER */.  Exp
1ddf0 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20  r *pWhen;       
1de00 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e       /* The WHEN
1de10 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65   clause of the e
1de20 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62  xpression (may b
1de30 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c  e NULL) */.  IdL
1de40 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20  ist *pColumns;  
1de50 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20       /* If this 
1de60 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20  is an UPDATE OF 
1de70 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72  <column-list> tr
1de80 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20  igger,.         
1de90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dea0 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d      the <column-
1deb0 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20  list> is stored 
1dec0 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  here */.  Schema
1ded0 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20   *pSchema;      
1dee0 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
1def0 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67  aining the trigg
1df00 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  er */.  Schema *
1df10 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20  pTabSchema;     
1df20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
1df30 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a  ning the table *
1df40 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
1df50 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c  *step_list; /* L
1df60 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67  ink list of trig
1df70 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70  ger program step
1df80 73 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f  s             */
1df90 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78  .  Trigger *pNex
1dfa0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
1dfb0 78 74 20 74 72 69 67 67 65 72 20 61 73 73 6f 63  xt trigger assoc
1dfc0 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74  iated with the t
1dfd0 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  able */.};../*.*
1dfe0 2a 20 41 20 74 72 69 67 67 65 72 20 69 73 20 65  * A trigger is e
1dff0 69 74 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f  ither a BEFORE o
1e000 72 20 61 6e 20 41 46 54 45 52 20 74 72 69 67 67  r an AFTER trigg
1e010 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  er.  The followi
1e020 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20  ng constants.** 
1e030 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e  determine which.
1e040 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65   .**.** If there
1e050 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72   are multiple tr
1e060 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68  iggers, you migh
1e070 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45  t of some BEFORE
1e080 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e   and some AFTER.
1e090 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65  .** In that case
1e0a0 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73  s, the constants
1e0b0 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52   below can be OR
1e0c0 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a  ed together..*/.
1e0d0 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f  #define TRIGGER_
1e0e0 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e  BEFORE  1.#defin
1e0f0 65 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20  e TRIGGER_AFTER 
1e100 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e    2../*. * An in
1e110 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74  stance of struct
1e120 20 54 72 69 67 67 65 72 53 74 65 70 20 69 73 20   TriggerStep is 
1e130 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20  used to store a 
1e140 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65  single SQL state
1e150 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20  ment. * that is 
1e160 61 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67  a part of a trig
1e170 67 65 72 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a  ger-program. . *
1e180 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66  . * Instances of
1e190 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
1e1a0 74 65 70 20 61 72 65 20 73 74 6f 72 65 64 20 69  tep are stored i
1e1b0 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65  n a singly linke
1e1c0 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20  d list (linked. 
1e1d0 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65  * using the "pNe
1e1e0 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65  xt" member) refe
1e1f0 72 65 6e 63 65 64 20 62 79 20 74 68 65 20 22 73  renced by the "s
1e200 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72  tep_list" member
1e210 20 6f 66 20 74 68 65 20 0a 20 2a 20 61 73 73 6f   of the . * asso
1e220 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54 72  ciated struct Tr
1e230 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20  igger instance. 
1e240 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
1e250 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20  t of the linked 
1e260 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66  list is. * the f
1e270 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68 65  irst step of the
1e280 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
1e290 2e 0a 20 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70  .. * . * The "op
1e2a0 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74  " member indicat
1e2b0 65 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20  es whether this 
1e2c0 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22  is a "DELETE", "
1e2d0 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45  INSERT", "UPDATE
1e2e0 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22  " or. * "SELECT"
1e2f0 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20   statement. The 
1e300 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20  meanings of the 
1e310 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73  other members is
1e320 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
1e330 68 65 20 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20  he . * value of 
1e340 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  "op" as follows:
1e350 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
1e360 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f  _INSERT). * orco
1e370 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20  nf    -> stores 
1e380 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  the ON CONFLICT 
1e390 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65  algorithm. * pSe
1e3a0 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69  lect   -> If thi
1e3b0 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
1e3c0 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e  NTO ... SELECT .
1e3d0 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68  .. statement, th
1e3e0 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  en. *           
1e3f0 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 61     this stores a
1e400 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
1e410 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1e420 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c  . Otherwise NULL
1e430 2e 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d  .. * zTarget   -
1e440 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20  > Dequoted name 
1e450 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
1e460 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20  insert into.. * 
1e470 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20  pExprList -> If 
1e480 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
1e490 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45  T INTO ... VALUE
1e4a0 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c  S ... statement,
1e4b0 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20   then. *        
1e4c0 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65        this store
1e4d0 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69  s values to be i
1e4e0 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69  nserted. Otherwi
1e4f0 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c  se NULL.. * pIdL
1e500 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73  ist   -> If this
1e510 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
1e520 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d  TO ... (<column-
1e530 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e  names>) VALUES .
1e540 2e 2e 20 0a 20 2a 20 20 20 20 20 20 20 20 20 20  .. . *          
1e550 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74      statement, t
1e560 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20  hen this stores 
1e570 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73  the column-names
1e580 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20   to be. *       
1e590 20 20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20         inserted 
1e5a0 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20  into.. *. * (op 
1e5b0 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a  == TK_DELETE). *
1e5c0 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65   zTarget   -> De
1e5d0 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
1e5e0 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65  he table to dele
1e5f0 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65  te from.. * pWhe
1e600 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45  re    -> The WHE
1e610 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
1e620 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
1e630 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63  t if one is spec
1e640 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20  ified.. *       
1e650 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65         Otherwise
1e660 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f   NULL.. * . * (o
1e670 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a  p == TK_UPDATE).
1e680 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20   * zTarget   -> 
1e690 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  Dequoted name of
1e6a0 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70   the table to up
1e6b0 64 61 74 65 2e 0a 20 2a 20 70 57 68 65 72 65 20  date.. * pWhere 
1e6c0 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20     -> The WHERE 
1e6d0 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55 50  clause of the UP
1e6e0 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  DATE statement i
1e6f0 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69  f one is specifi
1e700 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ed.. *          
1e710 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55      Otherwise NU
1e720 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74  LL.. * pExprList
1e730 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68   -> A list of th
1e740 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64  e columns to upd
1e750 61 74 65 20 61 6e 64 20 74 68 65 20 65 78 70 72  ate and the expr
1e760 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74  essions to updat
1e770 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  e. *            
1e780 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73    them to. See s
1e790 71 6c 69 74 65 33 55 70 64 61 74 65 28 29 20 64  qlite3Update() d
1e7a0 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  ocumentation of 
1e7b0 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20  "pChanges". *   
1e7c0 20 20 20 20 20 20 20 20 20 20 20 61 72 67 75 6d             argum
1e7d0 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72  ent.. * . */.str
1e7e0 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
1e7f0 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  {.  u8 op;      
1e800 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
1e810 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b  of TK_DELETE, TK
1e820 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
1e830 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f  RT, TK_SELECT */
1e840 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20  .  u8 orconf;   
1e850 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f          /* OE_Ro
1e860 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20  llback etc. */. 
1e870 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b   Trigger *pTrig;
1e880 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69        /* The tri
1e890 67 67 65 72 20 74 68 61 74 20 74 68 69 73 20 73  gger that this s
1e8a0 74 65 70 20 69 73 20 61 20 70 61 72 74 20 6f 66  tep is a part of
1e8b0 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53   */.  Select *pS
1e8c0 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45  elect;     /* SE
1e8d0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f  LECT statement o
1e8e0 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20  r RHS of INSERT 
1e8f0 49 4e 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20  INTO SELECT ... 
1e900 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 61 72 67  */.  char *zTarg
1e910 65 74 3b 20 20 20 20 20 20 20 2f 2a 20 54 61 72  et;       /* Tar
1e920 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45  get table for DE
1e930 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e  LETE, UPDATE, IN
1e940 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a  SERT */.  Expr *
1e950 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f  pWhere;        /
1e960 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  * The WHERE clau
1e970 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72  se for DELETE or
1e980 20 55 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f   UPDATE steps */
1e990 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78  .  ExprList *pEx
1e9a0 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63  prList; /* SET c
1e9b0 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41 54 45  lause for UPDATE
1e9c0 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70  . */.  IdList *p
1e9d0 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43  IdList;     /* C
1e9e0 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20  olumn names for 
1e9f0 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67  INSERT */.  Trig
1ea00 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20  gerStep *pNext; 
1ea10 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20   /* Next in the 
1ea20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54  link-list */.  T
1ea30 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73  riggerStep *pLas
1ea40 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d  t;  /* Last elem
1ea50 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74  ent in link-list
1ea60 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20  . Valid for 1st 
1ea70 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a  elem only */.};.
1ea80 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
1ea90 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
1eaa0 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
1eab0 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20  ion used by the 
1eac0 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20  sqliteFix....** 
1ead0 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79  routines as they
1eae0 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20   walk the parse 
1eaf0 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74  tree to make dat
1eb00 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73  abase references
1eb10 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20 20 0a  .** explicit.  .
1eb20 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
1eb30 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78 65  t DbFixer DbFixe
1eb40 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78 65  r;.struct DbFixe
1eb50 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  r {.  Parse *pPa
1eb60 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rse;      /* The
1eb70 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74   parsing context
1eb80 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  .  Error message
1eb90 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a  s written here *
1eba0 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
1ebb0 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69  ema;    /* Fix i
1ebc0 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68  tems to this sch
1ebd0 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61  ema */.  int bVa
1ebe0 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20  rOnly;       /* 
1ebf0 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62  Check for variab
1ec00 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e  le references on
1ec10 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ly */.  const ch
1ec20 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d  ar *zDb;    /* M
1ec30 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a  ake sure all obj
1ec40 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e  ects are contain
1ec50 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61 62  ed in this datab
1ec60 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ase */.  const c
1ec70 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20  har *zType;  /* 
1ec80 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  Type of the cont
1ec90 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72  ainer - used for
1eca0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
1ecb0 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  */.  const Token
1ecc0 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65   *pName; /* Name
1ecd0 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
1ece0 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
1ecf0 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d  or messages */.}
1ed00 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65  ;../*.** An obje
1ed10 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63 63  cted used to acc
1ed20 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78 74  umulate the text
1ed30 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68 65   of a string whe
1ed40 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20  re we.** do not 
1ed50 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77  necessarily know
1ed60 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74 72   how big the str
1ed70 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74  ing will be in t
1ed80 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63  he end..*/.struc
1ed90 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73  t StrAccum {.  s
1eda0 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
1edb0 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
1edc0 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f  database for loo
1edd0 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20  kaside.  Can be 
1ede0 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a  NULL */.  char *
1edf0 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f  zBase;         /
1ee00 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74  * A base allocat
1ee10 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d  ion.  Not from m
1ee20 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72  alloc. */.  char
1ee30 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20   *zText;        
1ee40 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63   /* The string c
1ee50 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20  ollected so far 
1ee60 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61 72 3b  */.  int  nChar;
1ee70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
1ee80 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e  gth of the strin
1ee90 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  g so far */.  in
1eea0 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20  t  nAlloc;      
1eeb0 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20     /* Amount of 
1eec0 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  space allocated 
1eed0 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e  in zText */.  in
1eee0 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20  t  mxAlloc;     
1eef0 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c     /* Maximum al
1ef00 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  lowed allocation
1ef10 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c  .  0 for no mall
1ef20 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20 20 75 38  oc usage */.  u8
1ef30 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20     accError;    
1ef40 20 20 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e     /* STRACCUM_N
1ef50 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43 43 55 4d  OMEM or STRACCUM
1ef60 5f 54 4f 4f 42 49 47 20 2a 2f 0a 7d 3b 0a 23 64  _TOOBIG */.};.#d
1ef70 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 4e  efine STRACCUM_N
1ef80 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66 69 6e 65  OMEM   1.#define
1ef90 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47   STRACCUM_TOOBIG
1efa0 20 20 32 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69    2../*.** A poi
1efb0 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
1efc0 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74  ucture is used t
1efd0 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e  o communicate in
1efe0 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f  formation.** fro
1eff0 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e  m sqlite3Init an
1f000 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61  d OP_ParseSchema
1f010 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65   into the sqlite
1f020 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a  3InitCallback..*
1f030 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
1f040 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
1f050 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
1f060 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 69  database being i
1f070 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
1f080 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b  char **pzErrMsg;
1f090 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73      /* Error mes
1f0a0 73 61 67 65 20 73 74 6f 72 65 64 20 68 65 72 65  sage stored here
1f0b0 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20   */.  int iDb;  
1f0c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66            /* 0 f
1f0d0 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  or main database
1f0e0 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32  .  1 for TEMP, 2
1f0f0 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64 20  .. for ATTACHed 
1f100 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20  */.  int rc;    
1f110 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
1f120 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68  lt code stored h
1f130 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74  ere */.} InitDat
1f140 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74  a;../*.** Struct
1f150 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67  ure containing g
1f160 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74  lobal configurat
1f170 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65  ion data for the
1f180 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
1f190 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75  .**.** This stru
1f1a0 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61  cture also conta
1f1b0 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69  ins some state i
1f1c0 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
1f1d0 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
1f1e0 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d  fig {.  int bMem
1f1f0 73 74 61 74 3b 20 20 20 20 20 20 20 20 20 20 20  stat;           
1f200 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1f210 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f  e to enable memo
1f220 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69  ry status */.  i
1f230 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20  nt bCoreMutex;  
1f240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f250 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
1f260 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67  le core mutexing
1f270 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d   */.  int bFullM
1f280 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
1f290 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1f2a0 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d  to enable full m
1f2b0 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  utexing */.  int
1f2c0 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20   bOpenUri;      
1f2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f2e0 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70  * True to interp
1f2f0 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73  ret filenames as
1f300 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62   URIs */.  int b
1f310 55 73 65 43 69 73 3b 20 20 20 20 20 20 20 20 20  UseCis;         
1f320 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f330 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  Use covering ind
1f340 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63  ices for full-sc
1f350 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53  ans */.  int mxS
1f360 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  trlen;          
1f370 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
1f380 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e  ximum string len
1f390 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76  gth */.  int nev
1f3a0 65 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20  erCorrupt;      
1f3b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
1f3c0 74 61 62 61 73 65 20 69 73 20 61 6c 77 61 79 73  tabase is always
1f3d0 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a   well-formed */.
1f3e0 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64    int szLookasid
1f3f0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1f400 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
1f410 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20  ookaside buffer 
1f420 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c  size */.  int nL
1f430 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
1f440 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
1f450 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65  efault lookaside
1f460 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f   buffer count */
1f470 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  .  sqlite3_mem_m
1f480 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20  ethods m;       
1f490 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65       /* Low-leve
1f4a0 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  l memory allocat
1f4b0 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  ion interface */
1f4c0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
1f4d0 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20  _methods mutex; 
1f4e0 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65       /* Low-leve
1f4f0 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63  l mutex interfac
1f500 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70  e */.  sqlite3_p
1f510 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70  cache_methods2 p
1f520 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d  cache2;  /* Low-
1f530 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65  level page-cache
1f540 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
1f550 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20  void *pHeap;    
1f560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f570 20 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67    /* Heap storag
1f580 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74  e space */.  int
1f590 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20 20   nHeap;         
1f5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f5b0 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b  * Size of pHeap[
1f5c0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71  ] */.  int mnReq
1f5d0 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20  , mxReq;        
1f5e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20           /* Min 
1f5f0 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65 71  and max heap req
1f600 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20  uests sizes */. 
1f610 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73   sqlite3_int64 s
1f620 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  zMmap;          
1f630 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61     /* mmap() spa
1f640 63 65 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65  ce per open file
1f650 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e   */.  sqlite3_in
1f660 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20  t64 mxMmap;     
1f670 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
1f680 75 6d 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d  um value for szM
1f690 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  map */.  void *p
1f6a0 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20  Scratch;        
1f6b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63             /* Sc
1f6c0 72 61 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a  ratch memory */.
1f6d0 20 20 69 6e 74 20 73 7a 53 63 72 61 74 63 68 3b    int szScratch;
1f6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6f0 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65      /* Size of e
1f700 61 63 68 20 73 63 72 61 74 63 68 20 62 75 66 66  ach scratch buff
1f710 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72  er */.  int nScr
1f720 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20  atch;           
1f730 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1f740 62 65 72 20 6f 66 20 73 63 72 61 74 63 68 20 62  ber of scratch b
1f750 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64  uffers */.  void
1f760 20 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20 20   *pPage;        
1f770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f780 20 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f   Page cache memo
1f790 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61  ry */.  int szPa
1f7a0 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
1f7b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
1f7c0 65 20 6f 66 20 65 61 63 68 20 70 61 67 65 20 69  e of each page i
1f7d0 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69  n pPage[] */.  i
1f7e0 6e 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20  nt nPage;       
1f7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f800 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61   /* Number of pa
1f810 67 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a  ges in pPage[] *
1f820 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72  /.  int mxParser
1f830 53 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20  Stack;          
1f840 20 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d        /* maximum
1f850 20 64 65 70 74 68 20 6f 66 20 74 68 65 20 70 61   depth of the pa
1f860 72 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20  rser stack */.  
1f870 69 6e 74 20 73 68 61 72 65 64 43 61 63 68 65 45  int sharedCacheE
1f880 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20  nabled;         
1f890 20 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61    /* true if sha
1f8a0 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65  red-cache mode e
1f8b0 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 75 33 32 20  nabled */.  u32 
1f8c0 73 7a 50 6d 61 3b 20 20 20 20 20 20 20 20 20 20  szPma;          
1f8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f8e0 20 4d 61 78 69 6d 75 6d 20 53 6f 72 74 65 72 20   Maximum Sorter 
1f8f0 50 4d 41 20 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a  PMA size */.  /*
1f900 20 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74   The above might
1f910 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   be initialized 
1f920 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68  to non-zero.  Th
1f930 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64  e following need
1f940 20 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20   to always.  ** 
1f950 69 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72  initially be zer
1f960 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20  o, however. */. 
1f970 20 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20   int isInit;    
1f980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f990 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
1f9a0 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
1f9b0 68 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a  has finished */.
1f9c0 20 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73    int inProgress
1f9d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f9e0 20 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c      /* True whil
1f9f0 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
1fa00 20 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a   in progress */.
1fa10 20 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69    int isMutexIni
1fa20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1fa30 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
1fa40 72 20 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e  r mutexes are in
1fa50 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
1fa60 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b  nt isMallocInit;
1fa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa80 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
1fa90 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c  alloc is initial
1faa0 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ized */.  int is
1fab0 50 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20  PCacheInit;     
1fac0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1fad0 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63  rue after malloc
1fae0 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
1faf0 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69  */.  int nRefIni
1fb00 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  tMutex;         
1fb10 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1fb20 20 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e   of users of pIn
1fb30 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c  itMutex */.  sql
1fb40 69 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69  ite3_mutex *pIni
1fb50 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f  tMutex;        /
1fb60 2a 20 4d 75 74 65 78 20 75 73 65 64 20 62 79 20  * Mutex used by 
1fb70 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69  sqlite3_initiali
1fb80 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28  ze() */.  void (
1fb90 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74  *xLog)(void*,int
1fba0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f  ,const char*); /
1fbb0 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c  * Function for l
1fbc0 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64  ogging */.  void
1fbd0 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20   *pLogArg;      
1fbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fbf0 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
1fc00 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a  nt to xLog() */.
1fc10 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
1fc20 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f  ABLE_SQLLOG.  vo
1fc30 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69  id(*xSqllog)(voi
1fc40 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
1fc50 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20  t char*, int);. 
1fc60 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72   void *pSqllogAr
1fc70 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  g;.#endif.#ifdef
1fc80 20 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56   SQLITE_VDBE_COV
1fc90 45 52 41 47 45 0a 20 20 2f 2a 20 54 68 65 20 66  ERAGE.  /* The f
1fca0 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63  ollowing callbac
1fcb0 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20  k (if not NULL) 
1fcc0 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76  is invoked on ev
1fcd0 65 72 79 20 56 44 42 45 20 62 72 61 6e 63 68 0a  ery VDBE branch.
1fce0 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20    ** operation. 
1fcf0 20 53 65 74 20 74 68 65 20 63 61 6c 6c 62 61 63   Set the callbac
1fd00 6b 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54  k using SQLITE_T
1fd10 45 53 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56  ESTCTRL_VDBE_COV
1fd20 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f  ERAGE..  */.  vo
1fd30 69 64 20 28 2a 78 56 64 62 65 42 72 61 6e 63 68  id (*xVdbeBranch
1fd40 29 28 76 6f 69 64 2a 2c 69 6e 74 20 69 53 72 63  )(void*,int iSrc
1fd50 4c 69 6e 65 2c 75 38 20 65 54 68 69 73 2c 75 38  Line,u8 eThis,u8
1fd60 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62   eMx);  /* Callb
1fd70 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
1fd80 56 64 62 65 42 72 61 6e 63 68 41 72 67 3b 20 20  VdbeBranchArg;  
1fd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdb0 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65     /* 1st argume
1fdc0 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  nt */.#endif.#if
1fdd0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1fde0 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20  _BUILTIN_TEST.  
1fdf0 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c 62  int (*xTestCallb
1fe00 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20 20  ack)(int);      
1fe10 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20    /* Invoked by 
1fe20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28  sqlite3FaultSim(
1fe30 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  ) */.#endif.  in
1fe40 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c  t bLocaltimeFaul
1fe50 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1fe60 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20  /* True to fail 
1fe70 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c  localtime() call
1fe80 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  s */.};../*.** T
1fe90 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65  his macro is use
1fea0 64 20 69 6e 73 69 64 65 20 6f 66 20 61 73 73 65  d inside of asse
1feb0 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
1fec0 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61 74  to indicate that
1fed0 0a 2a 2a 20 74 68 65 20 61 73 73 65 72 74 20 69  .** the assert i
1fee0 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20  s only valid on 
1fef0 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61  a well-formed da
1ff00 74 61 62 61 73 65 2e 20 20 49 6e 73 74 65 61 64  tabase.  Instead
1ff10 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61   of:.**.**     a
1ff20 73 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a  ssert( X );.**.*
1ff30 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a  * One writes:.**
1ff40 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
1ff50 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20  X || CORRUPT_DB 
1ff60 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54  );.**.** CORRUPT
1ff70 5f 44 42 20 69 73 20 74 72 75 65 20 64 75 72 69  _DB is true duri
1ff80 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74  ng normal operat
1ff90 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44 42  ion.  CORRUPT_DB
1ffa0 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63 61   does not indica
1ffb0 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64  te.** that the d
1ffc0 61 74 61 62 61 73 65 20 69 73 20 64 65 66 69 6e  atabase is defin
1ffd0 69 74 65 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f  itely corrupt, o
1ffe0 6e 6c 79 20 74 68 61 74 20 69 74 20 6d 69 67 68  nly that it migh
1fff0 74 20 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a  t be corrupt..**
20000 20 46 6f 72 20 6d 6f 73 74 20 74 65 73 74 20 63   For most test c
20010 61 73 65 73 2c 20 43 4f 52 52 55 50 54 5f 44 42  ases, CORRUPT_DB
20020 20 69 73 20 73 65 74 20 74 6f 20 66 61 6c 73 65   is set to false
20030 20 75 73 69 6e 67 20 61 20 73 70 65 63 69 61 6c   using a special
20040 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74  .** sqlite3_test
20050 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69  _control().  Thi
20060 73 20 65 6e 61 62 6c 65 73 20 61 73 73 65 72 74  s enables assert
20070 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  () statements to
20080 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73   prove.** things
20090 20 74 68 61 74 20 61 72 65 20 61 6c 77 61 79 73   that are always
200a0 20 74 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66   true for well-f
200b0 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 73 2e  ormed databases.
200c0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52 52  .*/.#define CORR
200d0 55 50 54 5f 44 42 20 20 28 73 71 6c 69 74 65 33  UPT_DB  (sqlite3
200e0 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72 72  Config.neverCorr
200f0 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43  upt==0)../*.** C
20100 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70  ontext pointer p
20110 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75  assed down throu
20120 67 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b  gh the tree-walk
20130 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b  ..*/.struct Walk
20140 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 45 78  er {.  int (*xEx
20150 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b  prCallback)(Walk
20160 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20  er*, Expr*);    
20170 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72   /* Callback for
20180 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
20190 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43    int (*xSelectC
201a0 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a  allback)(Walker*
201b0 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43  ,Select*);  /* C
201c0 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45  allback for SELE
201d0 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  CTs */.  void (*
201e0 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32  xSelectCallback2
201f0 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74  )(Walker*,Select
20200 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c  *);/* Second cal
20210 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54  lback for SELECT
20220 73 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50  s */.  Parse *pP
20230 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  arse;           
20240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20250 20 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65   /* Parser conte
20260 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 77 61  xt.  */.  int wa
20270 6c 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20 20  lkerDepth;      
20280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20290 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
202a0 20 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20   subqueries */. 
202b0 20 75 38 20 65 43 6f 64 65 3b 20 20 20 20 20 20   u8 eCode;      
202c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
202e0 73 6d 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67  small processing
202f0 20 63 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e   code */.  union
20300 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
20310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20320 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61       /* Extra da
20330 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20  ta for callback 
20340 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65  */.    NameConte
20350 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20  xt *pNC;        
20360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20370 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74    /* Naming cont
20380 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e  ext */.    int n
20390 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
203a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203b0 20 20 20 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74        /* A count
203c0 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  er */.    int iC
203d0 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ur;             
203e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203f0 20 20 20 20 20 2f 2a 20 41 20 63 75 72 73 6f 72       /* A cursor
20400 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 53   number */.    S
20410 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74  rcList *pSrcList
20420 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
20430 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f            /* FRO
20440 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  M clause */.    
20450 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20  struct SrcCount 
20460 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20  *pSrcCount;     
20470 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
20480 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65  unting column re
20490 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20  ferences */.  } 
204a0 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72  u;.};../* Forwar
204b0 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a  d declarations *
204c0 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  /.int sqlite3Wal
204d0 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45  kExpr(Walker*, E
204e0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
204f0 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57  e3WalkExprList(W
20500 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74  alker*, ExprList
20510 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
20520 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72  alkSelect(Walker
20530 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
20540 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
20550 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20  ctExpr(Walker*, 
20560 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
20570 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46  lite3WalkSelectF
20580 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  rom(Walker*, Sel
20590 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65  ect*);../*.** Re
205a0 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74  turn code from t
205b0 68 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61  he parse-tree wa
205c0 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73  lking primitives
205d0 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61   and their.** ca
205e0 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66  llbacks..*/.#def
205f0 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65  ine WRC_Continue
20600 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69      0   /* Conti
20610 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68  nue down into ch
20620 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  ildren */.#defin
20630 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20  e WRC_Prune     
20640 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68    1   /* Omit ch
20650 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69  ildren but conti
20660 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c  nue walking sibl
20670 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ings */.#define 
20680 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20  WRC_Abort       
20690 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74  2   /* Abandon t
206a0 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a  he tree walk */.
206b0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
206c0 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
206d0 74 75 72 65 20 72 65 70 72 65 73 65 6e 74 73 20  ture represents 
206e0 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20  a set of one or 
206f0 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f  more CTEs.** (co
20700 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
20710 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20  ssions) created 
20720 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48  by a single WITH
20730 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
20740 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20  ct With {.  int 
20750 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  nCte;           
20760 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
20770 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e  umber of CTEs in
20780 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
20790 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74   */.  With *pOut
207a0 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
207b0 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e        /* Contain
207c0 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c  ing WITH clause,
207d0 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74   or NULL */.  st
207e0 72 75 63 74 20 43 74 65 20 7b 20 20 20 20 20 20  ruct Cte {      
207f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20800 20 46 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e   For each CTE in
20810 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
20820 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72  .... */.    char
20830 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
20840 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
20850 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45 20  ame of this CTE 
20860 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20  */.    ExprList 
20870 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20  *pCols;         
20880 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
20890 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d  f explicit colum
208a0 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c  n names, or NULL
208b0 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
208c0 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20  pSelect;        
208d0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
208e0 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69  efinition of thi
208f0 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e  s CTE */.    con
20900 73 74 20 63 68 61 72 20 2a 7a 43 74 65 45 72 72  st char *zCteErr
20910 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
20920 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f  Error message fo
20930 72 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72  r circular refer
20940 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31  ences */.  } a[1
20950 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51  ];.};..#ifdef SQ
20960 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
20970 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
20980 74 68 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a  the TreeView obj
20990 65 63 74 20 69 73 20 75 73 65 64 20 66 6f 72 20  ect is used for 
209a0 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e  printing the con
209b0 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20  tent of.** data 
209c0 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71  structures on sq
209d0 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
209e0 28 29 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d  () using a tree-
209f0 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74  like view..*/.st
20a00 72 75 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a  ruct TreeView {.
20a10 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20    int iLevel;   
20a20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
20a30 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20  ch level of the 
20a40 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a  tree we are on *
20a50 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30  /.  u8  bLine[10
20a60 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44  0];         /* D
20a70 72 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20  raw vertical in 
20a80 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e  column i if bLin
20a90 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a  e[i] is true */.
20aa0 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  };.#endif /* SQL
20ab0 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a  ITE_DEBUG */../*
20ac0 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e  .** Assuming zIn
20ad0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66   points to the f
20ae0 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 20 55  irst byte of a U
20af0 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a  TF-8 character,.
20b00 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74  ** advance zIn t
20b10 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66  o point to the f
20b20 69 72 73 74 20 62 79 74 65 20 6f 66 20 74 68 65  irst byte of the
20b30 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61 72   next UTF-8 char
20b40 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  acter..*/.#defin
20b50 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54  e SQLITE_SKIP_UT
20b60 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20  F8(zIn) {       
20b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b80 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b   \.  if( (*(zIn+
20b90 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20  +))>=0xc0 ){    
20ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20bb0 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20            \.    
20bc0 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30  while( (*zIn & 0
20bd0 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49  xc0)==0x80 ){ zI
20be0 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20  n++; }          
20bf0 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20     \.  }        
20c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a              \.}.
20c30 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
20c40 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20  E_*_BKPT macros 
20c50 61 72 65 20 73 75 62 73 74 69 74 75 74 65 73 20  are substitutes 
20c60 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f  for the error co
20c70 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20  des with.** the 
20c80 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69  same name but wi
20c90 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20  thout the _BKPT 
20ca0 73 75 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d  suffix.  These m
20cb0 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20  acros invoke.** 
20cc0 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72 65  routines that re
20cd0 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75  port the line-nu
20ce0 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68  mber on which th
20cf0 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74  e error originat
20d00 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69  ed.** using sqli
20d10 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20  te3_log().  The 
20d20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72  routines also pr
20d30 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65  ovide a convenie
20d40 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73  nt place.** to s
20d50 65 74 20 61 20 64 65 62 75 67 67 65 72 20 62 72  et a debugger br
20d60 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74  eakpoint..*/.int
20d70 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45   sqlite3CorruptE
20d80 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rror(int);.int s
20d90 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f  qlite3MisuseErro
20da0 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
20db0 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72  te3CantopenError
20dc0 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53  (int);.#define S
20dd0 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
20de0 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  PT sqlite3Corrup
20df0 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  tError(__LINE__)
20e00 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
20e10 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69  MISUSE_BKPT sqli
20e20 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f  te3MisuseError(_
20e30 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65  _LINE__).#define
20e40 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e   SQLITE_CANTOPEN
20e50 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e  _BKPT sqlite3Can
20e60 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e  topenError(__LIN
20e70 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53  E__).../*.** FTS
20e80 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65  4 is really an e
20e90 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53  xtension for FTS
20ea0 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65  3.  It is enable
20eb0 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53  d using the.** S
20ec0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
20ed0 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f  3 macro.  But to
20ee0 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e   avoid confusion
20ef0 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a   we also call.**
20f00 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
20f10 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74 6f  LE_FTS4 macro to
20f20 20 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c 69   serve as an ali
20f30 61 73 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e  as for SQLITE_EN
20f40 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69  ABLE_FTS3..*/.#i
20f50 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
20f60 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26  _ENABLE_FTS4) &&
20f70 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
20f80 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20  _ENABLE_FTS3).# 
20f90 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
20fa0 41 42 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e 64  ABLE_FTS3 1.#end
20fb0 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74  if../*.** The ct
20fc0 79 70 65 2e 68 20 68 65 61 64 65 72 20 69 73 20  ype.h header is 
20fd0 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41  needed for non-A
20fe0 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20 49  SCII systems.  I
20ff0 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65  t is also.** nee
21000 64 65 64 20 62 79 20 46 54 53 33 20 77 68 65 6e  ded by FTS3 when
21010 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64 65   FTS3 is include
21020 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d  d in the amalgam
21030 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64  ation..*/.#if !d
21040 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 53  efined(SQLITE_AS
21050 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64  CII) || \.    (d
21060 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
21070 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64 65  ABLE_FTS3) && de
21080 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d 41  fined(SQLITE_AMA
21090 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e  LGAMATION)).# in
210a0 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a  clude <ctype.h>.
210b0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
210c0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
210d0 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74 61  os mimic the sta
210e0 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20 66 75  ndard library fu
210f0 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72 28  nctions toupper(
21100 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29 2c  ),.** isspace(),
21110 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69   isalnum(), isdi
21120 67 69 74 28 29 20 61 6e 64 20 69 73 78 64 69 67  git() and isxdig
21130 69 74 28 29 2c 20 72 65 73 70 65 63 74 69 76 65  it(), respective
21140 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74  ly. The.** sqlit
21150 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20  e versions only 
21160 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20 63  work for ASCII c
21170 68 61 72 61 63 74 65 72 73 2c 20 72 65 67 61 72  haracters, regar
21180 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e  dless of locale.
21190 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
211a0 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e 65  E_ASCII.# define
211b0 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28   sqlite3Toupper(
211c0 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69 74  x)  ((x)&~(sqlit
211d0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
211e0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
211f0 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20 73  x20)).# define s
21200 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29  qlite3Isspace(x)
21210 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
21220 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
21230 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23 20  ar)(x)]&0x01).# 
21240 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
21250 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c 69  alnum(x)   (sqli
21260 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
21270 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
21280 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20 73  0x06).# define s
21290 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29  qlite3Isalpha(x)
212a0 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
212b0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
212c0 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23 20  ar)(x)]&0x02).# 
212d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
212e0 64 69 67 69 74 28 78 29 20 20 20 28 73 71 6c 69  digit(x)   (sqli
212f0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
21300 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
21310 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20 73  0x04).# define s
21320 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78  qlite3Isxdigit(x
21330 29 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65  )  (sqlite3Ctype
21340 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
21350 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23 20  ar)(x)]&0x08).# 
21360 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
21370 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c 69  lower(x)   (sqli
21380 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  te3UpperToLower[
21390 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
213a0 78 29 5d 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  x)]).#else.# def
213b0 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70  ine sqlite3Toupp
213c0 65 72 28 78 29 20 20 20 74 6f 75 70 70 65 72 28  er(x)   toupper(
213d0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
213e0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
213f0 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20  ite3Isspace(x)  
21400 20 69 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e   isspace((unsign
21410 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
21420 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
21430 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75  lnum(x)   isalnu
21440 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  m((unsigned char
21450 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
21460 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29  qlite3Isalpha(x)
21470 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69     isalpha((unsi
21480 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
21490 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
214a0 73 64 69 67 69 74 28 78 29 20 20 20 69 73 64 69  sdigit(x)   isdi
214b0 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68  git((unsigned ch
214c0 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
214d0 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74   sqlite3Isxdigit
214e0 28 78 29 20 20 69 73 78 64 69 67 69 74 28 28 75  (x)  isxdigit((u
214f0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
21500 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
21510 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74  e3Tolower(x)   t
21520 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64  olower((unsigned
21530 20 63 68 61 72 29 28 78 29 29 0a 23 65 6e 64 69   char)(x)).#endi
21540 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
21550 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54  _OMIT_COMPILEOPT
21560 49 4f 4e 5f 44 49 41 47 53 0a 69 6e 74 20 73 71  ION_DIAGS.int sq
21570 6c 69 74 65 33 49 73 49 64 43 68 61 72 28 75 38  lite3IsIdChar(u8
21580 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  );.#endif../*.**
21590 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69   Internal functi
215a0 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f  on prototypes.*/
215b0 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
215c0 53 74 72 49 43 6d 70 20 73 71 6c 69 74 65 33 5f  StrICmp sqlite3_
215d0 73 74 72 69 63 6d 70 0a 69 6e 74 20 73 71 6c 69  stricmp.int sqli
215e0 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73  te3Strlen30(cons
215f0 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e  t char*);.#defin
21600 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  e sqlite3StrNICm
21610 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63  p sqlite3_strnic
21620 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  mp..int sqlite3M
21630 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b  allocInit(void);
21640 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c  .void sqlite3Mal
21650 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f  locEnd(void);.vo
21660 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
21670 63 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  c(u64);.void *sq
21680 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28  lite3MallocZero(
21690 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
216a0 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
216b0 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a  sqlite3*, u64);.
216c0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d  void *sqlite3DbM
216d0 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33  allocRaw(sqlite3
216e0 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73  *, u64);.char *s
216f0 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 73  qlite3DbStrDup(s
21700 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
21710 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ar*);.char *sqli
21720 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c  te3DbStrNDup(sql
21730 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
21740 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
21750 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f  qlite3Realloc(vo
21760 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  id*, u64);.void 
21770 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f  *sqlite3DbReallo
21780 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33 20  cOrFree(sqlite3 
21790 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b  *, void *, u64);
217a0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
217b0 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20  Realloc(sqlite3 
217c0 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b  *, void *, u64);
217d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46  .void sqlite3DbF
217e0 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  ree(sqlite3*, vo
217f0 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
21800 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64  3MallocSize(void
21810 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  *);.int sqlite3D
21820 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69  bMallocSize(sqli
21830 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f  te3*, void*);.vo
21840 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61 74  id *sqlite3Scrat
21850 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  chMalloc(int);.v
21860 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72 61 74  oid sqlite3Scrat
21870 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76  chFree(void*);.v
21880 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65  oid *sqlite3Page
21890 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69  Malloc(int);.voi
218a0 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72 65  d sqlite3PageFre
218b0 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  e(void*);.void s
218c0 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61  qlite3MemSetDefa
218d0 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64  ult(void);.#ifnd
218e0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
218f0 55 49 4c 54 49 4e 5f 54 45 53 54 0a 76 6f 69 64  UILTIN_TEST.void
21900 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61   sqlite3BenignMa
21910 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28  llocHooks(void (
21920 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28  *)(void), void (
21930 2a 29 28 76 6f 69 64 29 29 3b 0a 23 65 6e 64 69  *)(void));.#endi
21940 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61  f.int sqlite3Hea
21950 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64  pNearlyFull(void
21960 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73  );../*.** On sys
21970 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20  tems with ample 
21980 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20  stack space and 
21990 74 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c  that support all
219a0 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75  oca(), make.** u
219b0 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74  se of alloca() t
219c0 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66  o obtain space f
219d0 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74  or large automat
219e0 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20  ic objects.  By 
219f0 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61  default,.** obta
21a00 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61  in space from ma
21a10 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68  lloc()..**.** Th
21a20 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69  e alloca() routi
21a30 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73  ne never returns
21a40 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c   NULL.  This wil
21a50 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70 61 74  l cause code pat
21a60 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20  hs.** that deal 
21a70 77 69 74 68 20 73 71 6c 69 74 65 33 53 74 61 63  with sqlite3Stac
21a80 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65  kAlloc() failure
21a90 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61  s to be unreacha
21aa0 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ble..*/.#ifdef S
21ab0 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41  QLITE_USE_ALLOCA
21ac0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
21ad0 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44  3StackAllocRaw(D
21ae0 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a  ,N)   alloca(N).
21af0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
21b00 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44  StackAllocZero(D
21b10 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f  ,N)  memset(allo
21b20 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64  ca(N), 0, N).# d
21b30 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
21b40 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20  ckFree(D,P)     
21b50 20 20 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e    .#else.# defin
21b60 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
21b70 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71  locRaw(D,N)   sq
21b80 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
21b90 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  (D,N).# define s
21ba0 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
21bb0 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74  Zero(D,N)  sqlit
21bc0 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44  e3DbMallocZero(D
21bd0 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,N).# define sql
21be0 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
21bf0 50 29 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  P)       sqlite3
21c00 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64  DbFree(D,P).#end
21c10 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
21c20 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33  E_ENABLE_MEMSYS3
21c30 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d  .const sqlite3_m
21c40 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69  em_methods *sqli
21c50 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33  te3MemGetMemsys3
21c60 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23  (void);.#endif.#
21c70 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
21c80 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73  BLE_MEMSYS5.cons
21c90 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65  t sqlite3_mem_me
21ca0 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65  thods *sqlite3Me
21cb0 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64  mGetMemsys5(void
21cc0 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e  );.#endif...#ifn
21cd0 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58  def SQLITE_MUTEX
21ce0 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33 5f  _OMIT.  sqlite3_
21cf0 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f  mutex_methods co
21d00 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66 61  nst *sqlite3Defa
21d10 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  ultMutex(void);.
21d20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
21d30 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73  methods const *s
21d40 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28  qlite3NoopMutex(
21d50 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  void);.  sqlite3
21d60 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d  _mutex *sqlite3M
21d70 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a  utexAlloc(int);.
21d80 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74    int sqlite3Mut
21d90 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20  exInit(void);.  
21da0 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78  int sqlite3Mutex
21db0 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  End(void);.#endi
21dc0 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  f..sqlite3_int64
21dd0 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56 61   sqlite3StatusVa
21de0 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  lue(int);.void s
21df0 71 6c 69 74 65 33 53 74 61 74 75 73 55 70 28 69  qlite3StatusUp(i
21e00 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
21e10 71 6c 69 74 65 33 53 74 61 74 75 73 44 6f 77 6e  qlite3StatusDown
21e20 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  (int, int);.void
21e30 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 53 65   sqlite3StatusSe
21e40 74 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 2f 2a  t(int, int);../*
21e50 20 41 63 63 65 73 73 20 74 6f 20 6d 75 74 65 78   Access to mutex
21e60 65 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  es used by sqlit
21e70 65 33 5f 73 74 61 74 75 73 28 29 20 2a 2f 0a 73  e3_status() */.s
21e80 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71  qlite3_mutex *sq
21e90 6c 69 74 65 33 50 63 61 63 68 65 31 4d 75 74 65  lite3Pcache1Mute
21ea0 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69 74 65 33  x(void);.sqlite3
21eb0 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d  _mutex *sqlite3M
21ec0 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f 69 64 29  allocMutex(void)
21ed0 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
21ee0 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
21ef0 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69  POINT.  int sqli
21f00 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29  te3IsNaN(double)
21f10 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
21f20 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29   sqlite3IsNaN(X)
21f30 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a    0.#endif../*.*
21f40 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
21f50 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
21f60 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69  tructure holds i
21f70 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
21f80 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e   SQL.** function
21f90 73 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74  s arguments that
21fa0 20 61 72 65 20 74 68 65 20 70 61 72 61 6d 65 74   are the paramet
21fb0 65 72 73 20 74 6f 20 74 68 65 20 70 72 69 6e 74  ers to the print
21fc0 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f  f() function..*/
21fd0 0a 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72  .struct PrintfAr
21fe0 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20  guments {.  int 
21ff0 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  nArg;           
22000 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75       /* Total nu
22010 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
22020 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64  s */.  int nUsed
22030 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22040 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
22050 75 6d 65 6e 74 73 20 75 73 65 64 20 73 6f 20 66  uments used so f
22060 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ar */.  sqlite3_
22070 76 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20 20  value **apArg;  
22080 20 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74   /* The argument
22090 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 23   values */.};..#
220a0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
220b0 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78  INTF_INTERNAL 0x
220c0 30 31 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  01.#define SQLIT
220d0 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43  E_PRINTF_SQLFUNC
220e0 20 20 30 78 30 32 0a 76 6f 69 64 20 73 71 6c 69    0x02.void sqli
220f0 74 65 33 56 58 50 72 69 6e 74 66 28 53 74 72 41  te3VXPrintf(StrA
22100 63 63 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73  ccum*, u32, cons
22110 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74  t char*, va_list
22120 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58  );.void sqlite3X
22130 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a  Printf(StrAccum*
22140 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20 63 68 61  , u32, const cha
22150 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a  r*, ...);.char *
22160 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73  sqlite3MPrintf(s
22170 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
22180 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20  ar*, ...);.char 
22190 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66  *sqlite3VMPrintf
221a0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
221b0 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b  char*, va_list);
221c0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
221d0 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
221e0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56  fined(SQLITE_HAV
221f0 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20 76 6f  E_OS_TRACE).  vo
22200 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67 50  id sqlite3DebugP
22210 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72  rintf(const char
22220 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a  *, ...);.#endif.
22230 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
22240 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20  TE_TEST).  void 
22250 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65 78 74  *sqlite3TestText
22260 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72  ToPtr(const char
22270 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  *);.#endif..#if 
22280 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
22290 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c  EBUG).  void sql
222a0 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72  ite3TreeViewExpr
222b0 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
222c0 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20  t Expr*, u8);.  
222d0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
222e0 56 69 65 77 45 78 70 72 4c 69 73 74 28 54 72 65  ViewExprList(Tre
222f0 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78  eView*, const Ex
22300 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e  prList*, u8, con
22310 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
22320 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
22330 77 53 65 6c 65 63 74 28 54 72 65 65 56 69 65 77  wSelect(TreeView
22340 2a 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a  *, const Select*
22350 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a  , u8);.#endif...
22360 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53  void sqlite3SetS
22370 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73  tring(char **, s
22380 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63  qlite3*, const c
22390 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
223a0 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73  te3ErrorMsg(Pars
223b0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
223c0 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74   ...);.int sqlit
223d0 65 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29  e3Dequote(char*)
223e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79  ;.int sqlite3Key
223f0 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75  wordCode(const u
22400 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69  nsigned char*, i
22410 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
22420 52 75 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a  RunParser(Parse*
22430 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
22440 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  har **);.void sq
22450 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e  lite3FinishCodin
22460 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73  g(Parse*);.int s
22470 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65 67  qlite3GetTempReg
22480 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
22490 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d  qlite3ReleaseTem
224a0 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29  pReg(Parse*,int)
224b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
224c0 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a  TempRange(Parse*
224d0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
224e0 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61  te3ReleaseTempRa
224f0 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69  nge(Parse*,int,i
22500 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
22510 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63  3ClearTempRegCac
22520 68 65 28 50 61 72 73 65 2a 29 3b 0a 45 78 70 72  he(Parse*);.Expr
22530 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c   *sqlite3ExprAll
22540 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  oc(sqlite3*,int,
22550 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74  const Token*,int
22560 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
22570 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  Expr(sqlite3*,in
22580 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
22590 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
225a0 41 74 74 61 63 68 53 75 62 74 72 65 65 73 28 73  AttachSubtrees(s
225b0 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78  qlite3*,Expr*,Ex
225c0 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72  pr*,Expr*);.Expr
225d0 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28 50   *sqlite3PExpr(P
225e0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72  arse*, int, Expr
225f0 2a 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20  *, Expr*, const 
22600 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73  Token*);.Expr *s
22610 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73 71  qlite3ExprAnd(sq
22620 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78  lite3*,Expr*, Ex
22630 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
22640 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28  te3ExprFunction(
22650 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
22660 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
22670 73 71 6c 69 74 65 33 45 78 70 72 41 73 73 69 67  sqlite3ExprAssig
22680 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65  nVarNumber(Parse
22690 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
226a0 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74  sqlite3ExprDelet
226b0 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72  e(sqlite3*, Expr
226c0 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  *);.ExprList *sq
226d0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70  lite3ExprListApp
226e0 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  end(Parse*,ExprL
226f0 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69  ist*,Expr*);.voi
22700 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
22710 74 53 65 74 53 6f 72 74 4f 72 64 65 72 28 45 78  tSetSortOrder(Ex
22720 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 76 6f  prList*,int);.vo
22730 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
22740 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a  stSetName(Parse*
22750 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e  ,ExprList*,Token
22760 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
22770 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53  ite3ExprListSetS
22780 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  pan(Parse*,ExprL
22790 69 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b  ist*,ExprSpan*);
227a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
227b0 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  rListDelete(sqli
227c0 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  te3*, ExprList*)
227d0 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 45 78 70  ;.u32 sqlite3Exp
227e0 72 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e 73 74  rListFlags(const
227f0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
22800 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c   sqlite3Init(sql
22810 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  ite3*, char**);.
22820 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43  int sqlite3InitC
22830 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69  allback(void*, i
22840 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72  nt, char**, char
22850 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
22860 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54  3Pragma(Parse*,T
22870 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  oken*,Token*,Tok
22880 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  en*,int);.void s
22890 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63  qlite3ResetAllSc
228a0 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f  hemasOfConnectio
228b0 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  n(sqlite3*);.voi
228c0 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e  d sqlite3ResetOn
228d0 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a  eSchema(sqlite3*
228e0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
228f0 74 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62  te3CollapseDatab
22900 61 73 65 41 72 72 61 79 28 73 71 6c 69 74 65 33  aseArray(sqlite3
22910 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22920 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65  BeginParse(Parse
22930 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
22940 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e  ite3CommitIntern
22950 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65  alChanges(sqlite
22960 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
22970 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d  3DeleteColumnNam
22980 65 73 28 73 71 6c 69 74 65 33 2a 2c 54 61 62 6c  es(sqlite3*,Tabl
22990 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
229a0 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78 70 72 4c  ColumnsFromExprL
229b0 69 73 74 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ist(Parse*,ExprL
229c0 69 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e  ist*,i16*,Column
229d0 2a 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  **);.Table *sqli
229e0 74 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65  te3ResultSetOfSe
229f0 6c 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65  lect(Parse*,Sele
22a00 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ct*);.void sqlit
22a10 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c  e3OpenMasterTabl
22a20 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b  e(Parse *, int);
22a30 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50  .Index *sqlite3P
22a40 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54  rimaryKeyIndex(T
22a50 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69  able*);.i16 sqli
22a60 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78  te3ColumnOfIndex
22a70 28 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76  (Index*, i16);.v
22a80 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 72 74  oid sqlite3Start
22a90 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b  Table(Parse*,Tok
22aa0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69  en*,Token*,int,i
22ab0 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69  nt,int,int);.voi
22ac0 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75  d sqlite3AddColu
22ad0 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  mn(Parse*,Token*
22ae0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
22af0 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a  ddNotNull(Parse*
22b00 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
22b10 69 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65  ite3AddPrimaryKe
22b20 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
22b30 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  st*, int, int, i
22b40 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
22b50 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61  3AddCheckConstra
22b60 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  int(Parse*, Expr
22b70 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22b80 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61  AddColumnType(Pa
22b90 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  rse*,Token*);.vo
22ba0 69 64 20 73 71 6c 69 74 65 33 41 64 64 44 65 66  id sqlite3AddDef
22bb0 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a  aultValue(Parse*
22bc0 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69  ,ExprSpan*);.voi
22bd0 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c  d sqlite3AddColl
22be0 61 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20  ateType(Parse*, 
22bf0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
22c00 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61  lite3EndTable(Pa
22c10 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
22c20 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a  n*,u8,Select*);.
22c30 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
22c40 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  Uri(const char*,
22c50 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69  const char*,unsi
22c60 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20  gned int*,.     
22c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
22c80 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61  qlite3_vfs**,cha
22c90 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74  r**,char **);.Bt
22ca0 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61  ree *sqlite3DbNa
22cb0 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65  meToBtree(sqlite
22cc0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  3*,const char*);
22cd0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65  .int sqlite3Code
22ce0 4f 6e 63 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a  Once(Parse *);..
22cf0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
22d00 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
22d10 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
22d20 46 61 75 6c 74 53 69 6d 28 58 29 20 53 51 4c 49  FaultSim(X) SQLI
22d30 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e  TE_OK.#else.  in
22d40 74 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  t sqlite3FaultSi
22d50 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  m(int);.#endif..
22d60 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33 42  Bitvec *sqlite3B
22d70 69 74 76 65 63 43 72 65 61 74 65 28 75 33 32 29  itvecCreate(u32)
22d80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
22d90 76 65 63 54 65 73 74 28 42 69 74 76 65 63 2a 2c  vecTest(Bitvec*,
22da0 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74   u32);.int sqlit
22db0 65 33 42 69 74 76 65 63 54 65 73 74 4e 6f 74 4e  e3BitvecTestNotN
22dc0 75 6c 6c 28 42 69 74 76 65 63 2a 2c 20 75 33 32  ull(Bitvec*, u32
22dd0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
22de0 74 76 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c  tvecSet(Bitvec*,
22df0 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u32);.void sqli
22e00 74 65 33 42 69 74 76 65 63 43 6c 65 61 72 28 42  te3BitvecClear(B
22e10 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69  itvec*, u32, voi
22e20 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  d*);.void sqlite
22e30 33 42 69 74 76 65 63 44 65 73 74 72 6f 79 28 42  3BitvecDestroy(B
22e40 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c  itvec*);.u32 sql
22e50 69 74 65 33 42 69 74 76 65 63 53 69 7a 65 28 42  ite3BitvecSize(B
22e60 69 74 76 65 63 2a 29 3b 0a 23 69 66 6e 64 65 66  itvec*);.#ifndef
22e70 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
22e80 4c 54 49 4e 5f 54 45 53 54 0a 69 6e 74 20 73 71  LTIN_TEST.int sq
22e90 6c 69 74 65 33 42 69 74 76 65 63 42 75 69 6c 74  lite3BitvecBuilt
22ea0 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29  inTest(int,int*)
22eb0 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74  ;.#endif..RowSet
22ec0 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49   *sqlite3RowSetI
22ed0 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  nit(sqlite3*, vo
22ee0 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e  id*, unsigned in
22ef0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22f00 52 6f 77 53 65 74 43 6c 65 61 72 28 52 6f 77 53  RowSetClear(RowS
22f10 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  et*);.void sqlit
22f20 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 52  e3RowSetInsert(R
22f30 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e  owSet*, i64);.in
22f40 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54  t sqlite3RowSetT
22f50 65 73 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74  est(RowSet*, int
22f60 20 69 42 61 74 63 68 2c 20 69 36 34 29 3b 0a 69   iBatch, i64);.i
22f70 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  nt sqlite3RowSet
22f80 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c 20 69 36  Next(RowSet*, i6
22f90 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74  4*);..void sqlit
22fa0 65 33 43 72 65 61 74 65 56 69 65 77 28 50 61 72  e3CreateView(Par
22fb0 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
22fc0 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73  *,Token*,ExprLis
22fd0 74 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69  t*,Select*,int,i
22fe0 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e  nt);..#if !defin
22ff0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
23000 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64  IEW) || !defined
23010 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52  (SQLITE_OMIT_VIR
23020 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74  TUALTABLE).  int
23030 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43   sqlite3ViewGetC
23040 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65  olumnNames(Parse
23050 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65  *,Table*);.#else
23060 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23070 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61  3ViewGetColumnNa
23080 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69  mes(A,B) 0.#endi
23090 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  f..#if SQLITE_MA
230a0 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20  X_ATTACHED>30.  
230b0 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 73  int sqlite3DbMas
230c0 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b  kAllZero(yDbMask
230d0 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
230e0 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65 28  qlite3DropTable(
230f0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
23100 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
23110 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72 6f  d sqlite3CodeDro
23120 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 54  pTable(Parse*, T
23130 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  able*, int, int)
23140 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
23150 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65  leteTable(sqlite
23160 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66  3*, Table*);.#if
23170 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
23180 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20  _AUTOINCREMENT. 
23190 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
231a0 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28  oincrementBegin(
231b0 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
231c0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
231d0 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50  toincrementEnd(P
231e0 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 23  arse *pParse);.#
231f0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
23200 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
23210 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66  ntBegin(X).# def
23220 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69  ine sqlite3Autoi
23230 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23  ncrementEnd(X).#
23240 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
23250 65 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c  e3Insert(Parse*,
23260 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63   SrcList*, Selec
23270 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74  t*, IdList*, int
23280 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
23290 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71  ArrayAllocate(sq
232a0 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74  lite3*,void*,int
232b0 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c  ,int*,int*);.IdL
232c0 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
232d0 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33  stAppend(sqlite3
232e0 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65  *, IdList*, Toke
232f0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
23300 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69  IdListIndex(IdLi
23310 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  st*,const char*)
23320 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
23330 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65  e3SrcListEnlarge
23340 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
23350 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
23360 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
23370 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71  SrcListAppend(sq
23380 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
23390 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
233a0 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
233b0 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64  te3SrcListAppend
233c0 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c  FromTerm(Parse*,
233d0 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
233e0 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  *, Token*,.     
233f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23410 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a   Token*, Select*
23420 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a  , Expr*, IdList*
23430 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
23440 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28  rcListIndexedBy(
23450 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74  Parse *, SrcList
23460 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f   *, Token *);.vo
23470 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
23480 74 46 75 6e 63 41 72 67 73 28 50 61 72 73 65 2a  tFuncArgs(Parse*
23490 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
234a0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
234b0 74 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b  te3IndexedByLook
234c0 75 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75  up(Parse *, stru
234d0 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20  ct SrcList_item 
234e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
234f0 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e  SrcListShiftJoin
23500 54 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a  Type(SrcList*);.
23510 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
23520 69 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73  istAssignCursors
23530 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
23540 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23550 49 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c  IdListDelete(sql
23560 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b  ite3*, IdList*);
23570 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
23580 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
23590 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  e3*, SrcList*);.
235a0 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c  Index *sqlite3Al
235b0 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63  locateIndexObjec
235c0 74 28 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69  t(sqlite3*,i16,i
235d0 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 49 6e 64 65  nt,char**);.Inde
235e0 78 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65  x *sqlite3Create
235f0 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b  Index(Parse*,Tok
23600 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69  en*,Token*,SrcLi
23610 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  st*,ExprList*,in
23620 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20  t,Token*,.      
23630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23640 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20      Expr*, int, 
23650 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
23660 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73  e3DropIndex(Pars
23670 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
23680 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  t);.int sqlite3S
23690 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65  elect(Parse*, Se
236a0 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73  lect*, SelectDes
236b0 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c  t*);.Select *sql
236c0 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61  ite3SelectNew(Pa
236d0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  rse*,ExprList*,S
236e0 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
236f0 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  prList*,.       
23700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23710 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74    Expr*,ExprList
23720 2a 2c 75 31 36 2c 45 78 70 72 2a 2c 45 78 70 72  *,u16,Expr*,Expr
23730 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23740 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c  SelectDelete(sql
23750 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ite3*, Select*);
23760 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53  .Table *sqlite3S
23770 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72  rcListLookup(Par
23780 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  se*, SrcList*);.
23790 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61  int sqlite3IsRea
237a0 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61  dOnly(Parse*, Ta
237b0 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ble*, int);.void
237c0 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
237d0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43  e(Parse*, int iC
237e0 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62  ur, int iDb, Tab
237f0 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64  le*, int);.#if d
23800 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
23810 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
23820 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65  TE_LIMIT) && !de
23830 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
23840 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72  T_SUBQUERY).Expr
23850 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68   *sqlite3LimitWh
23860 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69  ere(Parse*,SrcLi
23870 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
23880 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c  st*,Expr*,Expr*,
23890 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76  char*);.#endif.v
238a0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
238b0 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72  eFrom(Parse*, Sr
238c0 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  cList*, Expr*);.
238d0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64 61  void sqlite3Upda
238e0 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  te(Parse*, SrcLi
238f0 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  st*, ExprList*, 
23900 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65  Expr*, int);.Whe
23910 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57  reInfo *sqlite3W
23920 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a  hereBegin(Parse*
23930 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
23940 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ExprList*,ExprLi
23950 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f  st*,u16,int);.vo
23960 69 64 20 73 71 6c 69 74 65 33 57 68 65 72 65 45  id sqlite3WhereE
23970 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  nd(WhereInfo*);.
23980 75 36 34 20 73 71 6c 69 74 65 33 57 68 65 72 65  u64 sqlite3Where
23990 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57  OutputRowCount(W
239a0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
239b0 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69  sqlite3WhereIsDi
239c0 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f  stinct(WhereInfo
239d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
239e0 68 65 72 65 49 73 4f 72 64 65 72 65 64 28 57 68  hereIsOrdered(Wh
239f0 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
23a00 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72  qlite3WhereIsSor
23a10 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  ted(WhereInfo*);
23a20 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
23a30 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57  eContinueLabel(W
23a40 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
23a50 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61  sqlite3WhereBrea
23a60 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  kLabel(WhereInfo
23a70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
23a80 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68  hereOkOnePass(Wh
23a90 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b  ereInfo*, int*);
23aa0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
23ab0 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61  CodeGetColumn(Pa
23ac0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
23ad0 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29  t, int, int, u8)
23ae0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
23af0 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f  prCodeGetColumnO
23b00 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61  fTable(Vdbe*, Ta
23b10 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
23b20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
23b30 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50  e3ExprCodeMove(P
23b40 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
23b50 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
23b60 74 65 33 45 78 70 72 43 61 63 68 65 53 74 6f 72  te3ExprCacheStor
23b70 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
23b80 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
23b90 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50  qlite3ExprCacheP
23ba0 75 73 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ush(Parse*);.voi
23bb0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
23bc0 68 65 50 6f 70 28 50 61 72 73 65 2a 29 3b 0a 76  hePop(Parse*);.v
23bd0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
23be0 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73 65  acheRemove(Parse
23bf0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
23c00 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
23c10 63 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a 29  cheClear(Parse*)
23c20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
23c30 70 72 43 61 63 68 65 41 66 66 69 6e 69 74 79 43  prCacheAffinityC
23c40 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69 6e  hange(Parse*, in
23c50 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
23c60 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61  lite3ExprCode(Pa
23c70 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
23c80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
23c90 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62 6c  xprCodeFactorabl
23ca0 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
23cb0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
23cc0 74 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69  te3ExprCodeAtIni
23cd0 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  t(Parse*, Expr*,
23ce0 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
23cf0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 65  qlite3ExprCodeTe
23d00 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  mp(Parse*, Expr*
23d10 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
23d20 69 74 65 33 45 78 70 72 43 6f 64 65 54 61 72 67  ite3ExprCodeTarg
23d30 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  et(Parse*, Expr*
23d40 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
23d50 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64 43  ite3ExprCodeAndC
23d60 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78 70  ache(Parse*, Exp
23d70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
23d80 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45 78 70  lite3ExprCodeExp
23d90 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78  rList(Parse*, Ex
23da0 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
23db0 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e 65 20  t, u8);.#define 
23dc0 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50 20  SQLITE_ECEL_DUP 
23dd0 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 44 65       0x01  /* De
23de0 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20  ep, not shallow 
23df0 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e  copies */.#defin
23e00 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41  e SQLITE_ECEL_FA
23e10 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f 2a 20  CTOR   0x02  /* 
23e20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74  Factor out const
23e30 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 23 64 65  ant terms */.#de
23e40 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
23e50 5f 52 45 46 20 20 20 20 20 20 30 78 30 34 20 20  _REF      0x04  
23e60 2f 2a 20 55 73 65 20 45 78 70 72 4c 69 73 74 2e  /* Use ExprList.
23e70 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20  u.x.iOrderByCol 
23e80 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  */.void sqlite3E
23e90 78 70 72 49 66 54 72 75 65 28 50 61 72 73 65 2a  xprIfTrue(Parse*
23ea0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e  , Expr*, int, in
23eb0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
23ec0 45 78 70 72 49 66 46 61 6c 73 65 28 50 61 72 73  ExprIfFalse(Pars
23ed0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
23ee0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
23ef0 65 33 45 78 70 72 49 66 46 61 6c 73 65 44 75 70  e3ExprIfFalseDup
23f00 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
23f10 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65  int, int);.Table
23f20 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62   *sqlite3FindTab
23f30 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  le(sqlite3*,cons
23f40 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
23f50 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  har*);.Table *sq
23f60 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65  lite3LocateTable
23f70 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69  (Parse*,int isVi
23f80 65 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  ew,const char*, 
23f90 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61  const char*);.Ta
23fa0 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  ble *sqlite3Loca
23fb0 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73  teTableItem(Pars
23fc0 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 73 74  e*,int isView,st
23fd0 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
23fe0 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  m *);.Index *sql
23ff0 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71  ite3FindIndex(sq
24000 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
24010 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
24020 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
24030 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
24040 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  le(sqlite3*,int,
24050 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
24060 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
24070 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73  AndDeleteIndex(s
24080 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
24090 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
240a0 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61 72  qlite3Vacuum(Par
240b0 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  se*);.int sqlite
240c0 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a  3RunVacuum(char*
240d0 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68  *, sqlite3*);.ch
240e0 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46  ar *sqlite3NameF
240f0 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33  romToken(sqlite3
24100 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
24110 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61  sqlite3ExprCompa
24120 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  re(Expr*, Expr*,
24130 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
24140 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72  e3ExprListCompar
24150 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  e(ExprList*, Exp
24160 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  rList*, int);.in
24170 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70  t sqlite3ExprImp
24180 6c 69 65 73 45 78 70 72 28 45 78 70 72 2a 2c 20  liesExpr(Expr*, 
24190 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
241a0 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61  d sqlite3ExprAna
241b0 6c 79 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e  lyzeAggregates(N
241c0 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
241d0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
241e0 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c  3ExprAnalyzeAggL
241f0 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  ist(NameContext*
24200 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74  ,ExprList*);.int
24210 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e   sqlite3Function
24220 55 73 65 73 54 68 69 73 53 72 63 28 45 78 70 72  UsesThisSrc(Expr
24230 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64  *, SrcList*);.Vd
24240 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64  be *sqlite3GetVd
24250 62 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 6e  be(Parse*);.#ifn
24260 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
24270 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 76 6f 69  BUILTIN_TEST.voi
24280 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76  d sqlite3PrngSav
24290 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f  eState(void);.vo
242a0 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65  id sqlite3PrngRe
242b0 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29  storeState(void)
242c0 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
242d0 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c  lite3RollbackAll
242e0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
242f0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
24300 56 65 72 69 66 79 53 63 68 65 6d 61 28 50 61 72  VerifySchema(Par
24310 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
24320 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
24330 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61 72  yNamedSchema(Par
24340 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  se*, const char 
24350 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69  *zDb);.void sqli
24360 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74  te3BeginTransact
24370 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ion(Parse*, int)
24380 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
24390 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f 6e 28  mmitTransaction(
243a0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
243b0 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61  lite3RollbackTra
243c0 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29  nsaction(Parse*)
243d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61  ;.void sqlite3Sa
243e0 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20  vepoint(Parse*, 
243f0 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  int, Token*);.vo
24400 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53  id sqlite3CloseS
24410 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65  avepoints(sqlite
24420 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  3 *);.void sqlit
24430 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43  e3LeaveMutexAndC
24440 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74  loseZombie(sqlit
24450 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
24460 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28  3ExprIsConstant(
24470 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
24480 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
24490 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b  tNotJoin(Expr*);
244a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
244b0 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63  IsConstantOrFunc
244c0 74 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b  tion(Expr*, u8);
244d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
244e0 49 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28  IsTableConstant(
244f0 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20  Expr*,int);.int 
24500 73 71 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74  sqlite3ExprIsInt
24510 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a  eger(Expr*, int*
24520 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
24530 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73  prCanBeNull(cons
24540 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  t Expr*);.int sq
24550 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f  lite3ExprNeedsNo
24560 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63  AffinityChange(c
24570 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72  onst Expr*, char
24580 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
24590 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72  Rowid(const char
245a0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
245b0 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74  GenerateRowDelet
245c0 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  e(Parse*,Table*,
245d0 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74  Trigger*,int,int
245e0 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75  ,int,i16,u8,u8,u
245f0 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
24600 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78  GenerateRowIndex
24610 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54  Delete(Parse*, T
24620 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
24630 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
24640 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78  te3GenerateIndex
24650 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64 65  Key(Parse*, Inde
24660 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  x*, int, int, in
24670 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69  t, int*,Index*,i
24680 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
24690 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78 4c  3ResolvePartIdxL
246a0 61 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29  abel(Parse*,int)
246b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
246c0 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74  nerateConstraint
246d0 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61  Checks(Parse*,Ta
246e0 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e  ble*,int*,int,in
246f0 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20  t,int,int,.     
24700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24720 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b  u8,u8,int,int*);
24730 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
24740 70 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50  pleteInsertion(P
24750 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
24760 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e  ,int,int,int*,in
24770 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20  t,int,int);.int 
24780 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
24790 41 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73 65  AndIndices(Parse
247a0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
247b0 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20  int, u8*, int*, 
247c0 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  int*);.void sqli
247d0 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65  te3BeginWriteOpe
247e0 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69  ration(Parse*, i
247f0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
24800 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65  qlite3MultiWrite
24810 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
24820 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50  qlite3MayAbort(P
24830 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
24840 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69  ite3HaltConstrai
24850 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
24860 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20  int, char*, i8, 
24870 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
24880 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e  3UniqueConstrain
24890 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49  t(Parse*, int, I
248a0 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
248b0 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61  ite3RowidConstra
248c0 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
248d0 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a   Table*);.Expr *
248e0 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 73  sqlite3ExprDup(s
248f0 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
24900 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  t);.ExprList *sq
24910 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70  lite3ExprListDup
24920 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69  (sqlite3*,ExprLi
24930 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73  st*,int);.SrcLis
24940 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
24950 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72  tDup(sqlite3*,Sr
24960 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c  cList*,int);.IdL
24970 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
24980 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49  stDup(sqlite3*,I
24990 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20  dList*);.Select 
249a0 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75  *sqlite3SelectDu
249b0 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
249c0 74 2a 2c 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c  t*,int);.#if SEL
249d0 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
249e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
249f0 65 63 74 53 65 74 4e 61 6d 65 28 53 65 6c 65 63  ectSetName(Selec
24a00 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  t*,const char*);
24a10 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
24a20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74  sqlite3SelectSet
24a30 4e 61 6d 65 28 41 2c 42 29 0a 23 65 6e 64 69 66  Name(A,B).#endif
24a40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 75 6e  .void sqlite3Fun
24a50 63 44 65 66 49 6e 73 65 72 74 28 46 75 6e 63 44  cDefInsert(FuncD
24a60 65 66 48 61 73 68 2a 2c 20 46 75 6e 63 44 65 66  efHash*, FuncDef
24a70 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c  *);.FuncDef *sql
24a80 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e  ite3FindFunction
24a90 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
24aa0 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38  char*,int,int,u8
24ab0 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ,u8);.void sqlit
24ac0 65 33 52 65 67 69 73 74 65 72 42 75 69 6c 74 69  e3RegisterBuilti
24ad0 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74  nFunctions(sqlit
24ae0 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
24af0 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54 69  e3RegisterDateTi
24b00 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  meFunctions(void
24b10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
24b20 65 67 69 73 74 65 72 47 6c 6f 62 61 6c 46 75 6e  egisterGlobalFun
24b30 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e  ctions(void);.in
24b40 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
24b50 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29  heckOk(sqlite3*)
24b60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66  ;.int sqlite3Saf
24b70 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b  etyCheckSickOrOk
24b80 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
24b90 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f   sqlite3ChangeCo
24ba0 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  okie(Parse*, int
24bb0 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  );..#if !defined
24bc0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45  (SQLITE_OMIT_VIE
24bd0 57 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  W) && !defined(S
24be0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
24bf0 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ER).void sqlite3
24c00 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28  MaterializeView(
24c10 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
24c20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e  Expr*, int);.#en
24c30 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
24c40 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
24c50 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42  .  void sqlite3B
24c60 65 67 69 6e 54 72 69 67 67 65 72 28 50 61 72 73  eginTrigger(Pars
24c70 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  e*, Token*,Token
24c80 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74  *,int,int,IdList
24c90 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20  *,SrcList*,.    
24ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24cb0 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74         Expr*,int
24cc0 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
24cd0 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69 67  qlite3FinishTrig
24ce0 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  ger(Parse*, Trig
24cf0 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a  gerStep*, Token*
24d00 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
24d10 33 44 72 6f 70 54 72 69 67 67 65 72 28 50 61 72  3DropTrigger(Par
24d20 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
24d30 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
24d40 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74  te3DropTriggerPt
24d50 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
24d60 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  r*);.  Trigger *
24d70 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45  sqlite3TriggersE
24d80 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61  xist(Parse *, Ta
24d90 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  ble*, int, ExprL
24da0 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b  ist*, int *pMask
24db0 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71  );.  Trigger *sq
24dc0 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74  lite3TriggerList
24dd0 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20  (Parse *, Table 
24de0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
24df0 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
24e00 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
24e10 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73   *, int, ExprLis
24e20 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a  t*, int, Table *
24e30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
24e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
24e50 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  t, int, int);.  
24e60 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
24e70 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74  RowTriggerDirect
24e80 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65  (Parse *, Trigge
24e90 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e  r *, Table *, in
24ea0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  t, int, int);.  
24eb0 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77 54  void sqliteViewT
24ec0 72 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20  riggers(Parse*, 
24ed0 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Table*, Expr*, i
24ee0 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  nt, ExprList*);.
24ef0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
24f00 6c 65 74 65 54 72 69 67 67 65 72 53 74 65 70 28  leteTriggerStep(
24f10 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65  sqlite3*, Trigge
24f20 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67  rStep*);.  Trigg
24f30 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
24f40 72 69 67 67 65 72 53 65 6c 65 63 74 53 74 65 70  riggerSelectStep
24f50 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74  (sqlite3*,Select
24f60 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
24f70 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
24f80 72 49 6e 73 65 72 74 53 74 65 70 28 73 71 6c 69  rInsertStep(sqli
24f90 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c  te3*,Token*, IdL
24fa0 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
24fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65                Se
24fd0 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69  lect*,u8);.  Tri
24fe0 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
24ff0 33 54 72 69 67 67 65 72 55 70 64 61 74 65 53 74  3TriggerUpdateSt
25000 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
25010 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  n*,ExprList*, Ex
25020 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69 67  pr*, u8);.  Trig
25030 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
25040 54 72 69 67 67 65 72 44 65 6c 65 74 65 53 74 65  TriggerDeleteSte
25050 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
25060 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69  *, Expr*);.  voi
25070 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
25080 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c  rigger(sqlite3*,
25090 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f   Trigger*);.  vo
250a0 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
250b0 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
250c0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
250d0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33  nst char*);.  u3
250e0 32 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  2 sqlite3Trigger
250f0 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54  Colmask(Parse*,T
25100 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74  rigger*,ExprList
25110 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a  *,int,int,Table*
25120 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  ,int);.# define 
25130 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c  sqlite3ParseTopl
25140 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54  evel(p) ((p)->pT
25150 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70  oplevel ? (p)->p
25160 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a  Toplevel : (p)).
25170 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
25180 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78  qlite3TriggersEx
25190 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30  ist(B,C,D,E,F) 0
251a0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
251b0 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41  3DeleteTrigger(A
251c0 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,B).# define sql
251d0 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50  ite3DropTriggerP
251e0 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  tr(A,B).# define
251f0 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
25200 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41  dDeleteTrigger(A
25210 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73  ,B,C).# define s
25220 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
25230 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  gger(A,B,C,D,E,F
25240 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65  ,G,H,I).# define
25250 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
25260 72 69 67 67 65 72 44 69 72 65 63 74 28 41 2c 42  riggerDirect(A,B
25270 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69  ,C,D,E,F).# defi
25280 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
25290 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20  rList(X, Y) 0.# 
252a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61  define sqlite3Pa
252b0 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70  rseToplevel(p) p
252c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
252d0 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28  3TriggerColmask(
252e0 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30  A,B,C,D,E,F,G) 0
252f0 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c  .#endif..int sql
25300 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72  ite3JoinType(Par
25310 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
25320 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  en*, Token*);.vo
25330 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  id sqlite3Create
25340 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65  ForeignKey(Parse
25350 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f  *, ExprList*, To
25360 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ken*, ExprList*,
25370 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
25380 74 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b  te3DeferForeignK
25390 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ey(Parse*, int);
253a0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
253b0 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49  OMIT_AUTHORIZATI
253c0 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ON.  void sqlite
253d0 33 41 75 74 68 52 65 61 64 28 50 61 72 73 65 2a  3AuthRead(Parse*
253e0 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53  ,Expr*,Schema*,S
253f0 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20  rcList*);.  int 
25400 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b  sqlite3AuthCheck
25410 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e  (Parse*,int, con
25420 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
25430 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
25440 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
25450 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75  te3AuthContextPu
25460 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43  sh(Parse*, AuthC
25470 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63  ontext*, const c
25480 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
25490 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
254a0 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a  Pop(AuthContext*
254b0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
254c0 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73  AuthReadCol(Pars
254d0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  e*, const char *
254e0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
254f0 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  int);.#else.# de
25500 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
25510 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20  Read(a,b,c,d).# 
25520 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
25530 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c  thCheck(a,b,c,d,
25540 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a  e)    SQLITE_OK.
25550 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25560 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28  AuthContextPush(
25570 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20  a,b,c).# define 
25580 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
25590 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64  xtPop(a)  ((void
255a0 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69  )(a)).#endif.voi
255b0 64 20 73 71 6c 69 74 65 33 41 74 74 61 63 68 28  d sqlite3Attach(
255c0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45  Parse*, Expr*, E
255d0 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  xpr*, Expr*);.vo
255e0 69 64 20 73 71 6c 69 74 65 33 44 65 74 61 63 68  id sqlite3Detach
255f0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
25600 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 78  .void sqlite3Fix
25610 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50  Init(DbFixer*, P
25620 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  arse*, int, cons
25630 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54  t char*, const T
25640 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
25650 74 65 33 46 69 78 53 72 63 4c 69 73 74 28 44 62  te3FixSrcList(Db
25660 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a  Fixer*, SrcList*
25670 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
25680 78 53 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a  xSelect(DbFixer*
25690 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
256a0 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 28 44  sqlite3FixExpr(D
256b0 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b  bFixer*, Expr*);
256c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45  .int sqlite3FixE
256d0 78 70 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a  xprList(DbFixer*
256e0 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
256f0 74 20 73 71 6c 69 74 65 33 46 69 78 54 72 69 67  t sqlite3FixTrig
25700 67 65 72 53 74 65 70 28 44 62 46 69 78 65 72 2a  gerStep(DbFixer*
25710 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b  , TriggerStep*);
25720 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46  .int sqlite3AtoF
25730 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20  (const char *z, 
25740 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38  double*, int, u8
25750 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
25760 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61  tInt32(const cha
25770 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  r *, int*);.int 
25780 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73  sqlite3Atoi(cons
25790 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
257a0 6c 69 74 65 33 55 74 66 31 36 42 79 74 65 4c 65  lite3Utf16ByteLe
257b0 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44  n(const void *pD
257c0 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b  ata, int nChar);
257d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38  .int sqlite3Utf8
257e0 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68  CharLen(const ch
257f0 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e  ar *pData, int n
25800 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74  Byte);.u32 sqlit
25810 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74  e3Utf8Read(const
25820 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73   u8**);.LogEst s
25830 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34  qlite3LogEst(u64
25840 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  );.LogEst sqlite
25850 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73  3LogEstAdd(LogEs
25860 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64  t,LogEst);.#ifnd
25870 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
25880 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45  IRTUALTABLE.LogE
25890 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  st sqlite3LogEst
258a0 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c  FromDouble(doubl
258b0 65 29 3b 0a 23 65 6e 64 69 66 0a 75 36 34 20 73  e);.#endif.u64 s
258c0 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e  qlite3LogEstToIn
258d0 74 28 4c 6f 67 45 73 74 29 3b 0a 0a 2f 2a 0a 2a  t(LogEst);../*.*
258e0 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65  * Routines to re
258f0 61 64 20 61 6e 64 20 77 72 69 74 65 20 76 61 72  ad and write var
25900 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74  iable-length int
25910 65 67 65 72 73 2e 20 20 54 68 65 73 65 20 75 73  egers.  These us
25920 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69  ed to.** be defi
25930 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74  ned locally, but
25940 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68 65 20   now we use the 
25950 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20  varint routines 
25960 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a  in the util.c.**
25970 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71   file..*/.int sq
25980 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 75  lite3PutVarint(u
25990 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75  nsigned char*, u
259a0 36 34 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47  64);.u8 sqlite3G
259b0 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75  etVarint(const u
259c0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
259d0 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74  u64 *);.u8 sqlit
259e0 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f  e3GetVarint32(co
259f0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
25a00 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74  r *, u32 *);.int
25a10 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65   sqlite3VarintLe
25a20 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a  n(u64 v);../*.**
25a30 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65   The common case
25a40 20 69 73 20 66 6f 72 20 61 20 76 61 72 69 6e 74   is for a varint
25a50 20 74 6f 20 62 65 20 61 20 73 69 6e 67 6c 65 20   to be a single 
25a60 62 79 74 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c  byte.  They foll
25a70 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20  owing.** macros 
25a80 68 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f  handle the commo
25a90 6e 20 63 61 73 65 20 77 69 74 68 6f 75 74 20 61  n case without a
25aa0 20 70 72 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c   procedure call,
25ab0 20 62 75 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a   but then call.*
25ac0 2a 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20  * the procedure 
25ad0 66 6f 72 20 6c 61 72 67 65 72 20 76 61 72 69 6e  for larger varin
25ae0 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67  ts..*/.#define g
25af0 65 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20  etVarint32(A,B) 
25b00 20 5c 0a 20 20 28 75 38 29 28 28 2a 28 41 29 3c   \.  (u8)((*(A)<
25b10 28 75 38 29 30 78 38 30 29 3f 28 28 42 29 3d 28  (u8)0x80)?((B)=(
25b20 75 33 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69  u32)*(A)),1:sqli
25b30 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 28  te3GetVarint32((
25b40 41 29 2c 28 75 33 32 20 2a 29 26 28 42 29 29 29  A),(u32 *)&(B)))
25b50 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69  .#define putVari
25b60 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28  nt32(A,B)  \.  (
25b70 75 38 29 28 28 28 75 33 32 29 28 42 29 3c 28 75  u8)(((u32)(B)<(u
25b80 33 32 29 30 78 38 30 29 3f 28 2a 28 41 29 3d 28  32)0x80)?(*(A)=(
25b90 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 42  unsigned char)(B
25ba0 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33  )),1:\.  sqlite3
25bb0 50 75 74 56 61 72 69 6e 74 28 28 41 29 2c 28 42  PutVarint((A),(B
25bc0 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56  ))).#define getV
25bd0 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33  arint    sqlite3
25be0 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e  GetVarint.#defin
25bf0 65 20 70 75 74 56 61 72 69 6e 74 20 20 20 20 73  e putVarint    s
25c00 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a  qlite3PutVarint.
25c10 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ..const char *sq
25c20 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69  lite3IndexAffini
25c30 74 79 53 74 72 28 73 71 6c 69 74 65 33 2a 2c 20  tyStr(sqlite3*, 
25c40 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
25c50 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69 6e 69  lite3TableAffini
25c60 74 79 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a  ty(Vdbe*, Table*
25c70 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c  , int);.char sql
25c80 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66 69 6e  ite3CompareAffin
25c90 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 2c  ity(Expr *pExpr,
25ca0 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69 6e 74   char aff2);.int
25cb0 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66   sqlite3IndexAff
25cc0 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a 70 45  inityOk(Expr *pE
25cd0 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f 61 66  xpr, char idx_af
25ce0 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20 73 71  finity);.char sq
25cf0 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e 69 74  lite3ExprAffinit
25d00 79 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  y(Expr *pExpr);.
25d10 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36  int sqlite3Atoi6
25d20 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  4(const char*, i
25d30 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69  64*, int, u8);.i
25d40 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48  nt sqlite3DecOrH
25d50 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20 63 68  exToI64(const ch
25d60 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64  ar*, i64*);.void
25d70 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74   sqlite3ErrorWit
25d80 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c 20 69  hMsg(sqlite3*, i
25d90 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
25da0 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
25db0 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a  e3Error(sqlite3*
25dc0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  ,int);.void *sql
25dd0 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71  ite3HexToBlob(sq
25de0 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
25df0 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75  ar *z, int n);.u
25e00 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e  8 sqlite3HexToIn
25e10 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71  t(int h);.int sq
25e20 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65  lite3TwoPartName
25e30 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20  (Parse *, Token 
25e40 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65  *, Token *, Toke
25e50 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69  n **);..#if defi
25e60 6e 65 64 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f  ned(SQLITE_NEED_
25e70 45 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20  ERR_NAME).const 
25e80 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72  char *sqlite3Err
25e90 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69  Name(int);.#endi
25ea0 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  f..const char *s
25eb0 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74  qlite3ErrStr(int
25ec0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
25ed0 61 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a  adSchema(Parse *
25ee0 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71  pParse);.CollSeq
25ef0 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c   *sqlite3FindCol
25f00 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38  lSeq(sqlite3*,u8
25f10 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72   enc, const char
25f20 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20  *,int);.CollSeq 
25f30 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f  *sqlite3LocateCo
25f40 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
25f50 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  rse, const char*
25f60 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20  zName);.CollSeq 
25f70 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c  *sqlite3ExprColl
25f80 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
25f90 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b  e, Expr *pExpr);
25fa0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
25fb0 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65  prAddCollateToke
25fc0 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  n(Parse *pParse,
25fd0 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   Expr*, const To
25fe0 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72  ken*, int);.Expr
25ff0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
26000 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61  CollateString(Pa
26010 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74  rse*,Expr*,const
26020 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73   char*);.Expr *s
26030 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f  qlite3ExprSkipCo
26040 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e  llate(Expr*);.in
26050 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f  t sqlite3CheckCo
26060 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43  llSeq(Parse *, C
26070 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73  ollSeq *);.int s
26080 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63  qlite3CheckObjec
26090 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63  tName(Parse *, c
260a0 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f  onst char *);.vo
260b0 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  id sqlite3VdbeSe
260c0 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  tChanges(sqlite3
260d0 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71   *, int);.int sq
260e0 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 69 36  lite3AddInt64(i6
260f0 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
26100 69 74 65 33 53 75 62 49 6e 74 36 34 28 69 36 34  ite3SubInt64(i64
26110 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
26120 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a  te3MulInt64(i64*
26130 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
26140 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b  e3AbsInt32(int);
26150 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
26160 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a  NABLE_8_3_NAMES.
26170 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65  void sqlite3File
26180 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68  Suffix3(const ch
26190 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c  ar*, char*);.#el
261a0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
261b0 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 58  te3FileSuffix3(X
261c0 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71  ,Y).#endif.u8 sq
261d0 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
261e0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75 38  const char *z,u8
261f0 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  );..const void *
26200 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74  sqlite3ValueText
26210 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
26220 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
26230 33 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69  3ValueBytes(sqli
26240 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b  te3_value*, u8);
26250 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
26260 75 65 53 65 74 53 74 72 28 73 71 6c 69 74 65 33  ueSetStr(sqlite3
26270 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f  _value*, int, co
26280 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a  nst void *,u8, .
26290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262a0 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28          void(*)(
262b0 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71  void*));.void sq
262c0 6c 69 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c  lite3ValueSetNul
262d0 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  l(sqlite3_value*
262e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
262f0 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65 33  alueFree(sqlite3
26300 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65  _value*);.sqlite
26310 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33  3_value *sqlite3
26320 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33  ValueNew(sqlite3
26330 20 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74   *);.char *sqlit
26340 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74  e3Utf16to8(sqlit
26350 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64  e3 *, const void
26360 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
26370 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f   sqlite3ValueFro
26380 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  mExpr(sqlite3 *,
26390 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c   Expr *, u8, u8,
263a0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
263b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
263c0 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
263d0 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ty(sqlite3_value
263e0 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66   *, u8, u8);.#if
263f0 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  ndef SQLITE_AMAL
26400 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20  GAMATION.extern 
26410 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
26420 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64  har sqlite3Opcod
26430 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74  eProperty[];.ext
26440 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
26450 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 55  ed char sqlite3U
26460 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65  pperToLower[];.e
26470 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
26480 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
26490 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74  3CtypeMap[];.ext
264a0 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20  ern const Token 
264b0 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73  sqlite3IntTokens
264c0 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54  [];.extern SQLIT
264d0 45 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c  E_WSD struct Sql
264e0 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74  ite3Config sqlit
264f0 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e  e3Config;.extern
26500 20 53 51 4c 49 54 45 5f 57 53 44 20 46 75 6e 63   SQLITE_WSD Func
26510 44 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 47  DefHash sqlite3G
26520 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a  lobalFunctions;.
26530 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
26540 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69  MIT_WSD.extern i
26550 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e  nt sqlite3Pendin
26560 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65  gByte;.#endif.#e
26570 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
26580 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73  3RootPageMoved(s
26590 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e  qlite3*, int, in
265a0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
265b0 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50 61 72  lite3Reindex(Par
265c0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
265d0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
265e0 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73  e3AlterFunctions
265f0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
26600 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54  ite3AlterRenameT
26610 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
26620 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
26630 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f  int sqlite3GetTo
26640 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ken(const unsign
26650 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a  ed char *, int *
26660 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e  );.void sqlite3N
26670 65 73 74 65 64 50 61 72 73 65 28 50 61 72 73 65  estedParse(Parse
26680 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
26690 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
266a0 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
266b0 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74  Statements(sqlit
266c0 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
266d0 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50  3CodeSubselect(P
266e0 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
266f0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
26700 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65  sqlite3SelectPre
26710 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  p(Parse*, Select
26720 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29  *, NameContext*)
26730 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
26740 6c 65 63 74 57 72 6f 6e 67 4e 75 6d 54 65 72 6d  lectWrongNumTerm
26750 73 45 72 72 6f 72 28 50 61 72 73 65 20 2a 70 50  sError(Parse *pP
26760 61 72 73 65 2c 20 53 65 6c 65 63 74 20 2a 70 29  arse, Select *p)
26770 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74  ;.int sqlite3Mat
26780 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74  chSpanName(const
26790 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
267a0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
267b0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
267c0 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
267d0 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65  veExprNames(Name
267e0 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
267f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73  ;.int sqlite3Res
26800 6f 6c 76 65 45 78 70 72 4c 69 73 74 4e 61 6d 65  olveExprListName
26810 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
26820 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  ExprList*);.void
26830 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53   sqlite3ResolveS
26840 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65  electNames(Parse
26850 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65  *, Select*, Name
26860 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20  Context*);.void 
26870 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65  sqlite3ResolveSe
26880 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61 72 73  lfReference(Pars
26890 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78  e*,Table*,int,Ex
268a0 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a  pr*,ExprList*);.
268b0 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
268c0 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50  veOrderGroupBy(P
268d0 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
268e0 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74  ExprList*, const
268f0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
26900 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75  lite3ColumnDefau
26910 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65  lt(Vdbe *, Table
26920 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76   *, int, int);.v
26930 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
26940 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28  FinishAddColumn(
26950 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Parse *, Token *
26960 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
26970 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75  lterBeginAddColu
26980 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  mn(Parse *, SrcL
26990 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  ist *);.CollSeq 
269a0 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53  *sqlite3GetCollS
269b0 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43  eq(Parse*, u8, C
269c0 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20  ollSeq *, const 
269d0 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c  char*);.char sql
269e0 69 74 65 33 41 66 66 69 6e 69 74 79 54 79 70 65  ite3AffinityType
269f0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 38  (const char*, u8
26a00 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26a10 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20  Analyze(Parse*, 
26a20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
26a30 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f  .int sqlite3Invo
26a40 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75  keBusyHandler(Bu
26a50 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74  syHandler*);.int
26a60 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73   sqlite3FindDb(s
26a70 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29  qlite3*, Token*)
26a80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  ;.int sqlite3Fin
26a90 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20  dDbName(sqlite3 
26aa0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
26ab0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61  ;.int sqlite3Ana
26ac0 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65  lysisLoad(sqlite
26ad0 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69  3*,int iDB);.voi
26ae0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49  d sqlite3DeleteI
26af0 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69  ndexSamples(sqli
26b00 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f  te3*,Index*);.vo
26b10 69 64 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c  id sqlite3Defaul
26b20 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b  tRowEst(Index*);
26b30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
26b40 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f  isterLikeFunctio
26b50 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ns(sqlite3*, int
26b60 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
26b70 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c  LikeFunction(sql
26b80 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a  ite3*,Expr*,int*
26b90 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,char*);.void sq
26ba0 6c 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69 6c 65  lite3MinimumFile
26bb0 46 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c 20 69  Format(Parse*, i
26bc0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
26bd0 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61  qlite3SchemaClea
26be0 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d  r(void *);.Schem
26bf0 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61  a *sqlite3Schema
26c00 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42  Get(sqlite3 *, B
26c10 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  tree *);.int sql
26c20 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65  ite3SchemaToInde
26c30 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53  x(sqlite3 *db, S
26c40 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66  chema *);.KeyInf
26c50 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
26c60 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c  oAlloc(sqlite3*,
26c70 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  int,int);.void s
26c80 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72  qlite3KeyInfoUnr
26c90 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65  ef(KeyInfo*);.Ke
26ca0 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
26cb0 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f  yInfoRef(KeyInfo
26cc0 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
26cd0 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64  ite3KeyInfoOfInd
26ce0 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78  ex(Parse*, Index
26cf0 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  *);.#ifdef SQLIT
26d00 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69  E_DEBUG.int sqli
26d10 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69 74  te3KeyInfoIsWrit
26d20 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b  eable(KeyInfo*);
26d30 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
26d40 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 73 71  te3CreateFunc(sq
26d50 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
26d60 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  har *, int, int,
26d70 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76 6f 69 64   void *, .  void
26d80 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
26d90 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
26da0 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76  3_value **),.  v
26db0 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
26dc0 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
26dd0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20  ite3_value **), 
26de0 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
26df0 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75  _context*),.  Fu
26e00 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44  ncDestructor *pD
26e10 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 69 6e 74  estructor.);.int
26e20 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
26e30 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74  sqlite3 *db, int
26e40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70  );.int sqlite3Op
26e50 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28 50  enTempDatabase(P
26e60 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73  arse *);..void s
26e70 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e  qlite3StrAccumIn
26e80 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 73 71  it(StrAccum*, sq
26e90 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c 20 69  lite3*, char*, i
26ea0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
26eb0 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70  qlite3StrAccumAp
26ec0 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c 63  pend(StrAccum*,c
26ed0 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
26ee0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
26ef0 41 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28 53  AccumAppendAll(S
26f00 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63  trAccum*,const c
26f10 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
26f20 74 65 33 41 70 70 65 6e 64 43 68 61 72 28 53 74  te3AppendChar(St
26f30 72 41 63 63 75 6d 2a 2c 69 6e 74 2c 63 68 61 72  rAccum*,int,char
26f40 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
26f50 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53  StrAccumFinish(S
26f60 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20  trAccum*);.void 
26f70 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52  sqlite3StrAccumR
26f80 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29 3b  eset(StrAccum*);
26f90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
26fa0 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c 65  ectDestInit(Sele
26fb0 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29  ctDest*,int,int)
26fc0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 43  ;.Expr *sqlite3C
26fd0 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28  reateColumnExpr(
26fe0 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c 69  sqlite3 *, SrcLi
26ff0 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  st *, int, int);
27000 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61  ..void sqlite3Ba
27010 63 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c 69  ckupRestart(sqli
27020 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76  te3_backup *);.v
27030 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75  oid sqlite3Backu
27040 70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33 5f  pUpdate(sqlite3_
27050 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20  backup *, Pgno, 
27060 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23 69  const u8 *);..#i
27070 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
27080 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
27090 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e  4.void sqlite3An
270a0 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76  alyzeFunctions(v
270b0 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  oid);.int sqlite
270c0 33 53 74 61 74 34 50 72 6f 62 65 53 65 74 56 61  3Stat4ProbeSetVa
270d0 6c 75 65 28 50 61 72 73 65 2a 2c 49 6e 64 65 78  lue(Parse*,Index
270e0 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  *,UnpackedRecord
270f0 2a 2a 2c 45 78 70 72 2a 2c 75 38 2c 69 6e 74 2c  **,Expr*,u8,int,
27100 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
27110 65 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f 6d  e3Stat4ValueFrom
27120 45 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78 70  Expr(Parse*, Exp
27130 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f  r*, u8, sqlite3_
27140 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73  value**);.void s
27150 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65  qlite3Stat4Probe
27160 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63  Free(UnpackedRec
27170 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ord*);.int sqlit
27180 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71  e3Stat4Column(sq
27190 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f  lite3*, const vo
271a0 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73  id*, int, int, s
271b0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
271c0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
271d0 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  he interface to 
271e0 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61  the LEMON-genera
271f0 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76 6f  ted parser.*/.vo
27200 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65  id *sqlite3Parse
27210 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28  rAlloc(void*(*)(
27220 75 36 34 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69  u64));.void sqli
27230 74 65 33 50 61 72 73 65 72 46 72 65 65 28 76 6f  te3ParserFree(vo
27240 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69  id*, void(*)(voi
27250 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  d*));.void sqlit
27260 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20  e3Parser(void*, 
27270 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73  int, Token, Pars
27280 65 2a 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52  e*);.#ifdef YYTR
27290 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48  ACKMAXSTACKDEPTH
272a0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61  .  int sqlite3Pa
272b0 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f  rserStackPeak(vo
272c0 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f  id*);.#endif..vo
272d0 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f  id sqlite3AutoLo
272e0 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c  adExtensions(sql
272f0 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20  ite3*);.#ifndef 
27300 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44  SQLITE_OMIT_LOAD
27310 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69  _EXTENSION.  voi
27320 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78  d sqlite3CloseEx
27330 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33  tensions(sqlite3
27340 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
27350 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45  ne sqlite3CloseE
27360 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e  xtensions(X).#en
27370 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
27380 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
27390 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c  CACHE.  void sql
273a0 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61  ite3TableLock(Pa
273b0 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  rse *, int, int,
273c0 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20   u8, const char 
273d0 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
273e0 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65  ine sqlite3Table
273f0 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a  Lock(v,w,x,y,z).
27400 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
27410 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74  QLITE_TEST.  int
27420 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28   sqlite3Utf8To8(
27430 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b  unsigned char*);
27440 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
27450 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
27460 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69  UALTABLE.#  defi
27470 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c  ne sqlite3VtabCl
27480 65 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65  ear(Y).#  define
27490 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63   sqlite3VtabSync
274a0 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  (X,Y) SQLITE_OK.
274b0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
274c0 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29  3VtabRollback(X)
274d0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
274e0 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a  e3VtabCommit(X).
274f0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
27500 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20  3VtabInSync(db) 
27510 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  0.#  define sqli
27520 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 20 0a  te3VtabLock(X) .
27530 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
27540 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23  3VtabUnlock(X).#
27550 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
27560 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58  VtabUnlockList(X
27570 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
27580 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
27590 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45  (X, Y, Z) SQLITE
275a0 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71  _OK.#  define sq
275b0 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 58  lite3GetVTable(X
275c0 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30  ,Y)  ((VTable*)0
275d0 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20  ).#else.   void 
275e0 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72  sqlite3VtabClear
275f0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61  (sqlite3 *db, Ta
27600 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  ble*);.   void s
27610 71 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e  qlite3VtabDiscon
27620 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64 62  nect(sqlite3 *db
27630 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20  , Table *p);.   
27640 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53  int sqlite3VtabS
27650 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ync(sqlite3 *db,
27660 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20   Vdbe*);.   int 
27670 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62  sqlite3VtabRollb
27680 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ack(sqlite3 *db)
27690 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
276a0 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74  VtabCommit(sqlit
276b0 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64  e3 *db);.   void
276c0 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
276d0 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76  (VTable *);.   v
276e0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55  oid sqlite3VtabU
276f0 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b  nlock(VTable *);
27700 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
27710 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73  VtabUnlockList(s
27720 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74  qlite3*);.   int
27730 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
27740 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c  point(sqlite3 *,
27750 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76   int, int);.   v
27760 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 49  oid sqlite3VtabI
27770 6d 70 6f 72 74 45 72 72 6d 73 67 28 56 64 62 65  mportErrmsg(Vdbe
27780 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  *, sqlite3_vtab*
27790 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71  );.   VTable *sq
277a0 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 73  lite3GetVTable(s
277b0 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29  qlite3*, Table*)
277c0 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ;.#  define sqli
277d0 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62  te3VtabInSync(db
277e0 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73  ) ((db)->nVTrans
277f0 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54 72  >0 && (db)->aVTr
27800 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 69  ans==0).#endif.i
27810 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 45 70  nt sqlite3VtabEp
27820 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 49 6e 69 74  onymousTableInit
27830 28 50 61 72 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29  (Parse*,Module*)
27840 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
27850 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65  abEponymousTable
27860 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 2c 4d  Clear(sqlite3*,M
27870 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71  odule*);.void sq
27880 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57 72 69  lite3VtabMakeWri
27890 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 61 62  table(Parse*,Tab
278a0 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
278b0 65 33 56 74 61 62 42 65 67 69 6e 50 61 72 73 65  e3VtabBeginParse
278c0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
278d0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
278e0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
278f0 74 65 33 56 74 61 62 46 69 6e 69 73 68 50 61 72  te3VtabFinishPar
27900 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  se(Parse*, Token
27910 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27920 56 74 61 62 41 72 67 49 6e 69 74 28 50 61 72 73  VtabArgInit(Pars
27930 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
27940 33 56 74 61 62 41 72 67 45 78 74 65 6e 64 28 50  3VtabArgExtend(P
27950 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
27960 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
27970 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65  allCreate(sqlite
27980 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
27990 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b  har *, char **);
279a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
279b0 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73  CallConnect(Pars
279c0 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74  e*, Table*);.int
279d0 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
279e0 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65 33 2a  Destroy(sqlite3*
279f0 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
27a00 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r *);.int sqlite
27a10 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c 69 74  3VtabBegin(sqlit
27a20 65 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b  e3 *, VTable *);
27a30 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65  .FuncDef *sqlite
27a40 33 56 74 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e  3VtabOverloadFun
27a50 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c  ction(sqlite3 *,
27a60 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41  FuncDef*, int nA
27a70 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  rg, Expr*);.void
27a80 20 73 71 6c 69 74 65 33 49 6e 76 61 6c 69 64 46   sqlite3InvalidF
27a90 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f  unction(sqlite3_
27aa0 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
27ab0 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73  ite3_value**);.s
27ac0 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c  qlite3_int64 sql
27ad0 69 74 65 33 53 74 6d 74 43 75 72 72 65 6e 74 54  ite3StmtCurrentT
27ae0 69 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ime(sqlite3_cont
27af0 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ext*);.int sqlit
27b00 65 33 56 64 62 65 50 61 72 61 6d 65 74 65 72 49  e3VdbeParameterI
27b10 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73  ndex(Vdbe*, cons
27b20 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69  t char*, int);.i
27b30 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66  nt sqlite3Transf
27b40 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74  erBindings(sqlit
27b50 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74  e3_stmt *, sqlit
27b60 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64  e3_stmt *);.void
27b70 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 52 65   sqlite3ParserRe
27b80 73 65 74 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74  set(Parse*);.int
27b90 20 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72   sqlite3Reprepar
27ba0 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73  e(Vdbe*);.void s
27bb0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 68  qlite3ExprListCh
27bc0 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73 65 2a  eckLength(Parse*
27bd0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e  , ExprList*, con
27be0 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53  st char*);.CollS
27bf0 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e 61 72  eq *sqlite3Binar
27c00 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28  yCompareCollSeq(
27c10 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c  Parse *, Expr *,
27c20 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71   Expr *);.int sq
27c30 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72  lite3TempInMemor
27c40 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a  y(const sqlite3*
27c50 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  );.const char *s
27c60 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64  qlite3JournalMod
27c70 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e  ename(int);.#ifn
27c80 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
27c90 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  WAL.  int sqlite
27ca0 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69  3Checkpoint(sqli
27cb0 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  te3*, int, int, 
27cc0 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69  int*, int*);.  i
27cd0 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44 65 66  nt sqlite3WalDef
27ce0 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73  aultHook(void*,s
27cf0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
27d00 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66  ar*,int);.#endif
27d10 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
27d20 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69 74 68 20  OMIT_CTE.  With 
27d30 2a 73 71 6c 69 74 65 33 57 69 74 68 41 64 64 28  *sqlite3WithAdd(
27d40 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b  Parse*,With*,Tok
27d50 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65  en*,ExprList*,Se
27d60 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73  lect*);.  void s
27d70 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65  qlite3WithDelete
27d80 28 73 71 6c 69 74 65 33 2a 2c 57 69 74 68 2a 29  (sqlite3*,With*)
27d90 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
27da0 57 69 74 68 50 75 73 68 28 50 61 72 73 65 2a 2c  WithPush(Parse*,
27db0 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6c   With*, u8);.#el
27dc0 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  se.#define sqlit
27dd0 65 33 57 69 74 68 50 75 73 68 28 78 2c 79 2c 7a  e3WithPush(x,y,z
27de0 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ).#define sqlite
27df0 33 57 69 74 68 44 65 6c 65 74 65 28 78 2c 79 29  3WithDelete(x,y)
27e00 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c  .#endif../* Decl
27e10 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e  arations for fun
27e20 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63  ctions in fkey.c
27e30 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 61  . All of these a
27e40 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a 2a  re replaced by.*
27e50 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69  * no-op macros i
27e60 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  f OMIT_FOREIGN_K
27e70 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20 49  EY is defined. I
27e80 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20 66  n this case no f
27e90 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75  oreign.** key fu
27ea0 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 61  nctionality is a
27eb0 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49  vailable. If OMI
27ec0 54 5f 54 52 49 47 47 45 52 20 69 73 20 64 65 66  T_TRIGGER is def
27ed0 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54  ined but.** OMIT
27ee0 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20  _FOREIGN_KEY is 
27ef0 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f  not, only some o
27f00 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 20  f the functions 
27f10 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a  are no-oped. In.
27f20 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f 72  ** this case for
27f30 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70 61  eign keys are pa
27f40 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68  rsed, but no oth
27f50 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79  er functionality
27f60 20 69 73 20 0a 2a 2a 20 70 72 6f 76 69 64 65 64   is .** provided
27f70 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66   (enforcement of
27f80 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   FK constraints 
27f90 72 65 71 75 69 72 65 73 20 74 68 65 20 74 72 69  requires the tri
27fa0 67 67 65 72 73 20 73 75 62 2d 73 79 73 74 65 6d  ggers sub-system
27fb0 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  )..*/.#if !defin
27fc0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
27fd0 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21  OREIGN_KEY) && !
27fe0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
27ff0 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 76  MIT_TRIGGER).  v
28000 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68 65  oid sqlite3FkChe
28010 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ck(Parse*, Table
28020 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
28030 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
28040 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62  sqlite3FkDropTab
28050 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
28060 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  st *, Table*);. 
28070 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41   void sqlite3FkA
28080 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54  ctions(Parse*, T
28090 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  able*, ExprList*
280a0 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
280b0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
280c0 46 6b 52 65 71 75 69 72 65 64 28 50 61 72 73 65  FkRequired(Parse
280d0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c  *, Table*, int*,
280e0 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73 71 6c   int);.  u32 sql
280f0 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61  ite3FkOldmask(Pa
28100 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  rse*, Table*);. 
28110 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33 46 6b   FKey *sqlite3Fk
28120 52 65 66 65 72 65 6e 63 65 73 28 54 61 62 6c 65  References(Table
28130 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65   *);.#else.  #de
28140 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 41 63  fine sqlite3FkAc
28150 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c  tions(a,b,c,d,e,
28160 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  f).  #define sql
28170 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c  ite3FkCheck(a,b,
28180 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69  c,d,e,f).  #defi
28190 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70  ne sqlite3FkDrop
281a0 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23  Table(a,b,c).  #
281b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
281c0 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20 20 20  Oldmask(a,b)    
281d0 20 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65       0.  #define
281e0 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72   sqlite3FkRequir
281f0 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20 20 30  ed(a,b,c,d)    0
28200 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
28210 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
28220 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73  IGN_KEY.  void s
28230 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 73  qlite3FkDelete(s
28240 71 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a  qlite3 *, Table*
28250 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
28260 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 50 61  FkLocateIndex(Pa
28270 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79  rse*,Table*,FKey
28280 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29  *,Index**,int**)
28290 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
282a0 65 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74  e sqlite3FkDelet
282b0 65 28 61 2c 62 29 0a 20 20 23 64 65 66 69 6e 65  e(a,b).  #define
282c0 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65   sqlite3FkLocate
282d0 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29  Index(a,b,c,d,e)
282e0 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20  .#endif.../*.** 
282f0 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20  Available fault 
28300 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75  injectors.  Shou
28310 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62  ld be numbered b
28320 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e  eginning with 0.
28330 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
28340 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52  TE_FAULTINJECTOR
28350 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64  _MALLOC     0.#d
28360 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55  efine SQLITE_FAU
28370 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54  LTINJECTOR_COUNT
28380 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54        1../*.** T
28390 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  he interface to 
283a0 74 68 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c  the code in faul
283b0 74 2e 63 20 75 73 65 64 20 66 6f 72 20 69 64 65  t.c used for ide
283c0 6e 74 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e  ntifying "benign
283d0 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c  ".** malloc fail
283e0 75 72 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e  ures. This is on
283f0 6c 79 20 70 72 65 73 65 6e 74 20 69 66 20 53 51  ly present if SQ
28400 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
28410 4e 5f 54 45 53 54 0a 2a 2a 20 69 73 20 6e 6f 74  N_TEST.** is not
28420 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66   defined..*/.#if
28430 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
28440 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20  _BUILTIN_TEST.  
28450 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
28460 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f  nBenignMalloc(vo
28470 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  id);.  void sqli
28480 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c  te3EndBenignMall
28490 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a  oc(void);.#else.
284a0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
284b0 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
284c0 6f 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73  oc().  #define s
284d0 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d  qlite3EndBenignM
284e0 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a  alloc().#endif..
284f0 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65  /*.** Allowed re
28500 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d  turn values from
28510 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e   sqlite3FindInIn
28520 64 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65  dex().*/.#define
28530 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20   IN_INDEX_ROWID 
28540 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 53 65         1   /* Se
28550 61 72 63 68 20 74 68 65 20 72 6f 77 69 64 20 6f  arch the rowid o
28560 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23  f the table */.#
28570 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
28580 45 50 48 20 20 20 20 20 20 20 20 20 20 32 20 20  EPH          2  
28590 20 2f 2a 20 53 65 61 72 63 68 20 61 6e 20 65 70   /* Search an ep
285a0 68 65 6d 65 72 61 6c 20 62 2d 74 72 65 65 20 2a  hemeral b-tree *
285b0 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
285c0 45 58 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20  EX_INDEX_ASC    
285d0 33 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20  3   /* Existing 
285e0 69 6e 64 65 78 20 41 53 43 45 4e 44 49 4e 47 20  index ASCENDING 
285f0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
28600 44 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20  DEX_INDEX_DESC  
28610 20 34 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67   4   /* Existing
28620 20 69 6e 64 65 78 20 44 45 53 43 45 4e 44 49 4e   index DESCENDIN
28630 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  G */.#define IN_
28640 49 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20  INDEX_NOOP      
28650 20 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62     5   /* No tab
28660 6c 65 20 61 76 61 69 6c 61 62 6c 65 2e 20 55 73  le available. Us
28670 65 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f  e comparisons */
28680 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66  ./*.** Allowed f
28690 6c 61 67 73 20 66 6f 72 20 74 68 65 20 33 72 64  lags for the 3rd
286a0 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71   parameter to sq
286b0 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
286c0 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ()..*/.#define I
286d0 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20  N_INDEX_NOOP_OK 
286e0 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f      0x0001  /* O
286f0 4b 20 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49  K to return IN_I
28700 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65  NDEX_NOOP */.#de
28710 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45  fine IN_INDEX_ME
28720 4d 42 45 52 53 48 49 50 20 20 30 78 30 30 30 32  MBERSHIP  0x0002
28730 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72    /* IN operator
28740 20 75 73 65 64 20 66 6f 72 20 6d 65 6d 62 65 72   used for member
28750 73 68 69 70 20 74 65 73 74 20 2a 2f 0a 23 64 65  ship test */.#de
28760 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f  fine IN_INDEX_LO
28770 4f 50 20 20 20 20 20 20 20 20 30 78 30 30 30 34  OP        0x0004
28780 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72    /* IN operator
28790 20 75 73 65 64 20 61 73 20 61 20 6c 6f 6f 70 20   used as a loop 
287a0 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  */.int sqlite3Fi
287b0 6e 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20  ndInIndex(Parse 
287c0 2a 2c 20 45 78 70 72 20 2a 2c 20 75 33 32 2c 20  *, Expr *, u32, 
287d0 69 6e 74 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53  int*);..#ifdef S
287e0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f  QLITE_ENABLE_ATO
287f0 4d 49 43 5f 57 52 49 54 45 0a 20 20 69 6e 74 20  MIC_WRITE.  int 
28800 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70  sqlite3JournalOp
28810 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  en(sqlite3_vfs *
28820 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
28830 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20  sqlite3_file *, 
28840 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74  int, int);.  int
28850 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53   sqlite3JournalS
28860 69 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20  ize(sqlite3_vfs 
28870 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
28880 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73  3JournalCreate(s
28890 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
288a0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
288b0 72 6e 61 6c 45 78 69 73 74 73 28 73 71 6c 69 74  rnalExists(sqlit
288c0 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 23 65 6c  e3_file *p);.#el
288d0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
288e0 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28  ite3JournalSize(
288f0 70 56 66 73 29 20 28 28 70 56 66 73 29 2d 3e 73  pVfs) ((pVfs)->s
28900 7a 4f 73 46 69 6c 65 29 0a 20 20 23 64 65 66 69  zOsFile).  #defi
28910 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  ne sqlite3Journa
28920 6c 45 78 69 73 74 73 28 70 29 20 31 0a 23 65 6e  lExists(p) 1.#en
28930 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  dif..void sqlite
28940 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28  3MemJournalOpen(
28950 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b  sqlite3_file *);
28960 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 4a  .int sqlite3MemJ
28970 6f 75 72 6e 61 6c 53 69 7a 65 28 76 6f 69 64 29  ournalSize(void)
28980 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4d  ;.int sqlite3IsM
28990 65 6d 4a 6f 75 72 6e 61 6c 28 73 71 6c 69 74 65  emJournal(sqlite
289a0 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64  3_file *);..void
289b0 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48   sqlite3ExprSetH
289c0 65 69 67 68 74 41 6e 64 46 6c 61 67 73 28 50 61  eightAndFlags(Pa
289d0 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
289e0 72 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49 54  r *p);.#if SQLIT
289f0 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48  E_MAX_EXPR_DEPTH
28a00 3e 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  >0.  int sqlite3
28a10 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
28a20 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e  (Select *);.  in
28a30 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  t sqlite3ExprChe
28a40 63 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c  ckHeight(Parse*,
28a50 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23   int);.#else.  #
28a60 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65  define sqlite3Se
28a70 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28 78  lectExprHeight(x
28a80 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ) 0.  #define sq
28a90 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65  lite3ExprCheckHe
28aa0 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66  ight(x,y).#endif
28ab0 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65 74  ..u32 sqlite3Get
28ac0 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29  4byte(const u8*)
28ad0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75  ;.void sqlite3Pu
28ae0 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29  t4byte(u8*, u32)
28af0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
28b00 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e  _ENABLE_UNLOCK_N
28b10 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c  OTIFY.  void sql
28b20 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c  ite3ConnectionBl
28b30 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c  ocked(sqlite3 *,
28b40 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76   sqlite3 *);.  v
28b50 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
28b60 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71  ctionUnlocked(sq
28b70 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f  lite3 *db);.  vo
28b80 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
28b90 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74  tionClosed(sqlit
28ba0 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20  e3 *db);.#else. 
28bb0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
28bc0 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65  ConnectionBlocke
28bd0 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65  d(x,y).  #define
28be0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
28bf0 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20  onUnlocked(x).  
28c00 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
28c10 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28  onnectionClosed(
28c20 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  x).#endif..#ifde
28c30 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
28c40 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72   void sqlite3Par
28c50 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20  serTrace(FILE*, 
28c60 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a  char *);.#endif.
28c70 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  ./*.** If the SQ
28c80 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52  LITE_ENABLE IOTR
28c90 41 43 45 20 65 78 69 73 74 73 20 74 68 65 6e 20  ACE exists then 
28ca0 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  the global varia
28cb0 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f  ble.** sqlite3Io
28cc0 54 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74  Trace is a point
28cd0 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c  er to a printf-l
28ce0 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64  ike routine used
28cf0 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f   to.** print I/O
28d00 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65   tracing message
28d10 73 2e 20 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  s. .*/.#ifdef SQ
28d20 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52  LITE_ENABLE_IOTR
28d30 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54  ACE.# define IOT
28d40 52 41 43 45 28 41 29 20 20 69 66 28 20 73 71 6c  RACE(A)  if( sql
28d50 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73  ite3IoTrace ){ s
28d60 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b  qlite3IoTrace A;
28d70 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65   }.  void sqlite
28d80 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
28d90 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41  Vdbe*);.SQLITE_A
28da0 50 49 20 53 51 4c 49 54 45 5f 45 58 54 45 52 4e  PI SQLITE_EXTERN
28db0 20 76 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44   void (SQLITE_CD
28dc0 45 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72  ECL *sqlite3IoTr
28dd0 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a  ace)(const char*
28de0 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64  ,...);.#else.# d
28df0 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29  efine IOTRACE(A)
28e00 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
28e10 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
28e20 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
28e30 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20   These routines 
28e40 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f  are available fo
28e50 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62  r the mem2.c deb
28e60 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c  ugging memory al
28e70 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e  locator.** only.
28e80 20 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20    They are used 
28e90 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 64  to verify that d
28ea0 69 66 66 65 72 65 6e 74 20 22 74 79 70 65 73 22  ifferent "types"
28eb0 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c   of memory.** al
28ec0 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72  locations are pr
28ed0 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62  operly tracked b
28ee0 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a  y the system..**
28ef0 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
28f00 62 75 67 53 65 74 54 79 70 65 28 29 20 73 65 74  bugSetType() set
28f10 73 20 74 68 65 20 22 74 79 70 65 22 20 6f 66 20  s the "type" of 
28f20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f  an allocation to
28f30 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d   one of.** the M
28f40 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20  EMTYPE_* macros 
28f50 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20  defined below.  
28f60 54 68 65 20 74 79 70 65 20 6d 75 73 74 20 62 65  The type must be
28f70 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a   a bitmask with.
28f80 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20  ** a single bit 
28f90 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  set..**.** sqlit
28fa0 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
28fb0 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65  e() returns true
28fc0 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62   if any of the b
28fd0 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e  its in its secon
28fe0 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61  d.** argument ma
28ff0 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74  tch the type set
29000 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73   by the previous
29010 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
29020 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71  SetType()..** sq
29030 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
29040 54 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64  Type() is intend
29050 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64  ed for use insid
29060 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  e assert() state
29070 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  ments..**.** sql
29080 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
29090 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75  pe() returns tru
290a0 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65  e if none of the
290b0 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63   bits in its sec
290c0 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  ond.** argument 
290d0 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73  match the type s
290e0 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f  et by the previo
290f0 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  us sqlite3Memdeb
29100 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a  ugSetType()..**.
29110 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65 20 6d  ** Perhaps the m
29120 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f  ost important po
29130 69 6e 74 20 69 73 20 74 68 65 20 64 69 66 66 65  int is the diffe
29140 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45  rence between ME
29150 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e  MTYPE_HEAP.** an
29160 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  d MEMTYPE_LOOKAS
29170 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f  IDE.  If an allo
29180 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50  cation is MEMTYP
29190 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61  E_LOOKASIDE, tha
291a0 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69  t means.** it mi
291b0 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c  ght have been al
291c0 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61  located by looka
291d0 73 69 64 65 2c 20 65 78 63 65 70 74 20 74 68 65  side, except the
291e0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a   allocation was.
291f0 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20  ** too large or 
29200 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c  lookaside was al
29210 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20  ready full.  It 
29220 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20  is important to 
29230 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61  verify.** that a
29240 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20  llocations that 
29250 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
29260 73 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f  satisfied by loo
29270 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a  kaside are not.*
29280 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f  * passed back to
29290 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66   non-lookaside f
292a0 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20  ree() routines. 
292b0 20 41 73 73 65 72 74 73 20 73 75 63 68 20 61 73   Asserts such as
292c0 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20   the.** example 
292d0 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64  above are placed
292e0 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b   on the non-look
292f0 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75  aside free() rou
29300 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a  tines to verify.
29310 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69  ** this constrai
29320 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f  nt. .**.** All o
29330 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20  f this is no-op 
29340 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e  for a production
29350 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79   build.  It only
29360 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70   comes into.** p
29370 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c  lay when the SQL
29380 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d  ITE_MEMDEBUG com
29390 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
293a0 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66   is used..*/.#if
293b0 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  def SQLITE_MEMDE
293c0 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  BUG.  void sqlit
293d0 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
293e0 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69  e(void*,u8);.  i
293f0 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  nt sqlite3Memdeb
29400 75 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c  ugHasType(void*,
29410 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  u8);.  int sqlit
29420 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
29430 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73  (void*,u8);.#els
29440 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
29450 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
29460 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70  e(X,Y)  /* no-op
29470 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c   */.# define sql
29480 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
29490 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65  ype(X,Y)  1.# de
294a0 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
294b0 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20  ebugNoType(X,Y) 
294c0 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69    1.#endif.#defi
294d0 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20  ne MEMTYPE_HEAP 
294e0 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47        0x01  /* G
294f0 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f  eneral heap allo
29500 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  cations */.#defi
29510 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41  ne MEMTYPE_LOOKA
29520 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20 48  SIDE  0x02  /* H
29530 65 61 70 20 74 68 61 74 20 6d 69 67 68 74 20 68  eap that might h
29540 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69  ave been lookasi
29550 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  de */.#define ME
29560 4d 54 59 50 45 5f 53 43 52 41 54 43 48 20 20 20  MTYPE_SCRATCH   
29570 20 30 78 30 34 20 20 2f 2a 20 53 63 72 61 74 63   0x04  /* Scratc
29580 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  h allocations */
29590 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
295a0 5f 50 43 41 43 48 45 20 20 20 20 20 30 78 30 38  _PCACHE     0x08
295b0 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20    /* Page cache 
295c0 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a  allocations */..
295d0 23 69 66 20 28 53 51 4c 49 54 45 5f 45 4e 41 42  #if (SQLITE_ENAB
295e0 4c 45 5f 41 50 50 4c 45 5f 53 50 49 3e 30 29 20  LE_APPLE_SPI>0) 
295f0 26 26 20 64 65 66 69 6e 65 64 28 5f 5f 41 50 50  && defined(__APP
29600 4c 45 5f 5f 29 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  LE__)../*.** An 
29610 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
29620 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
29630 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 68  ure is used to h
29640 6f 6c 64 20 74 68 65 20 70 72 6f 63 65 73 73 20  old the process 
29650 49 44 0a 2a 2a 20 61 6e 64 20 72 65 74 75 72 6e  ID.** and return
29660 2d 62 79 2d 72 65 66 65 72 65 6e 63 65 20 6c 6f  -by-reference lo
29670 63 6b 73 74 61 74 65 20 76 61 6c 75 65 2e 20 20  ckstate value.  
29680 54 68 65 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c  The SQLITE_FCNTL
29690 5f 4c 4f 43 4b 53 54 41 54 45 5f 50 49 44 0a 2a  _LOCKSTATE_PID.*
296a0 2a 20 72 65 71 75 69 72 65 73 20 74 68 65 20 34  * requires the 4
296b0 74 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73  th argument to s
296c0 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74  qlite3_file_cont
296d0 72 6f 6c 20 74 6f 20 62 65 20 61 20 70 6f 69 6e  rol to be a poin
296e0 74 65 72 20 74 6f 20 61 6e 0a 2a 2a 20 69 6e 73  ter to an.** ins
296f0 74 61 6e 63 65 20 6f 66 20 4c 6f 63 6b 73 74 61  tance of Locksta
29700 74 65 50 49 44 20 69 6e 69 74 69 61 6c 69 7a 65  tePID initialize
29710 64 20 77 69 74 68 20 61 20 4c 6f 63 6b 73 74 61  d with a Locksta
29720 74 65 50 49 44 2e 70 69 64 20 76 61 6c 75 65 20  tePID.pid value 
29730 65 71 75 61 6c 0a 2a 2a 20 74 6f 20 61 20 70 72  equal.** to a pr
29740 6f 63 65 73 73 20 49 44 20 74 6f 20 62 65 20 74  ocess ID to be t
29750 65 73 74 65 64 2c 20 6f 72 20 74 68 65 20 73 70  ested, or the sp
29760 65 63 69 61 6c 20 76 61 6c 75 65 20 53 51 4c 49  ecial value SQLI
29770 54 45 5f 4c 4f 43 4b 53 54 41 54 45 5f 41 4e 59  TE_LOCKSTATE_ANY
29780 50 49 44 0a 2a 2a 20 54 68 65 20 4c 6f 63 6b 73  PID.** The Locks
29790 74 61 74 65 2e 73 74 61 74 65 20 76 61 6c 75 65  tate.state value
297a0 20 69 73 20 61 6c 77 61 79 73 20 73 65 74 20 74   is always set t
297b0 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  o one of the fol
297c0 6c 6f 77 69 6e 67 20 76 61 6c 75 65 73 0a 2a 2a  lowing values.**
297d0 20 77 68 65 6e 20 73 71 6c 69 74 65 33 5f 66 69   when sqlite3_fi
297e0 6c 65 5f 63 6f 6e 74 72 6f 6c 20 72 65 74 75 72  le_control retur
297f0 6e 73 3a 0a 2a 2a 20 0a 2a 2a 20 20 20 53 51 4c  ns:.** .**   SQL
29800 49 54 45 5f 4c 4f 43 4b 53 54 41 54 45 5f 4f 46  ITE_LOCKSTATE_OF
29810 46 20 20 20 20 6e 6f 20 61 63 74 69 76 65 20 73  F    no active s
29820 71 6c 69 74 65 20 66 69 6c 65 20 6c 6f 63 6b 73  qlite file locks
29830 20 6d 61 74 63 68 20 74 68 65 20 73 70 65 63 69   match the speci
29840 66 69 65 64 20 70 69 64 0a 2a 2a 20 20 20 53 51  fied pid.**   SQ
29850 4c 49 54 45 5f 4c 4f 43 4b 53 54 41 54 45 5f 4f  LITE_LOCKSTATE_O
29860 4e 20 20 20 20 20 61 63 74 69 76 65 20 73 71 6c  N     active sql
29870 69 74 65 20 66 69 6c 65 20 6c 6f 63 6b 73 20 6d  ite file locks m
29880 61 74 63 68 20 74 68 65 20 73 70 65 63 69 66 69  atch the specifi
29890 65 64 20 70 69 64 0a 2a 2a 20 20 20 53 51 4c 49  ed pid.**   SQLI
298a0 54 45 5f 4c 4f 43 4b 53 54 41 54 45 5f 4e 4f 54  TE_LOCKSTATE_NOT
298b0 41 44 42 20 70 61 74 68 20 70 6f 69 6e 74 73 20  ADB path points 
298c0 74 6f 20 61 20 66 69 6c 65 20 74 68 61 74 20 69  to a file that i
298d0 73 20 6e 6f 74 20 61 6e 20 73 71 6c 69 74 65 20  s not an sqlite 
298e0 64 62 20 66 69 6c 65 0a 2a 2a 20 20 20 53 51 4c  db file.**   SQL
298f0 49 54 45 5f 4c 4f 43 4b 53 54 41 54 45 5f 45 52  ITE_LOCKSTATE_ER
29900 52 4f 52 20 20 70 61 74 68 20 77 61 73 20 6e 6f  ROR  path was no
29910 74 20 76 61 69 6c 64 20 6f 72 20 77 61 73 20 75  t vaild or was u
29920 6e 72 65 61 64 61 62 6c 65 0a 2a 2f 0a 74 79 70  nreadable.*/.typ
29930 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 63 6b  edef struct Lock
29940 73 74 61 74 65 50 49 44 20 4c 6f 63 6b 73 74 61  statePID Locksta
29950 74 65 50 49 44 3b 0a 73 74 72 75 63 74 20 4c 6f  tePID;.struct Lo
29960 63 6b 73 74 61 74 65 50 49 44 20 7b 0a 20 20 70  ckstatePID {.  p
29970 69 64 5f 74 20 70 69 64 3b 20 20 20 20 20 20 20  id_t pid;       
29980 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72 6f            /* Pro
29990 63 65 73 73 20 49 44 20 74 6f 20 74 65 73 74 20  cess ID to test 
299a0 2a 2f 0a 20 20 69 6e 74 20 73 74 61 74 65 3b 20  */.  int state; 
299b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
299c0 2f 2a 20 54 68 65 20 73 74 61 74 65 20 6f 66 20  /* The state of 
299d0 74 68 65 20 6c 6f 63 6b 20 28 72 65 74 75 72 6e  the lock (return
299e0 20 76 61 6c 75 65 29 20 2a 2f 0a 7d 3b 0a 0a 23   value) */.};..#
299f0 65 6e 64 69 66 20 2f 2a 20 28 53 51 4c 49 54 45  endif /* (SQLITE
29a00 5f 45 4e 41 42 4c 45 5f 41 50 50 4c 45 5f 53 50  _ENABLE_APPLE_SP
29a10 49 3e 30 29 20 26 26 20 64 65 66 69 6e 65 64 28  I>0) && defined(
29a20 5f 5f 41 50 50 4c 45 5f 5f 29 20 2a 2f 0a 0a 2f  __APPLE__) */../
29a30 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e 67 20 69  *.** Threading i
29a40 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23 69 66 20  nterface.*/.#if 
29a50 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
29a60 52 5f 54 48 52 45 41 44 53 3e 30 0a 69 6e 74 20  R_THREADS>0.int 
29a70 73 71 6c 69 74 65 33 54 68 72 65 61 64 43 72 65  sqlite3ThreadCre
29a80 61 74 65 28 53 51 4c 69 74 65 54 68 72 65 61 64  ate(SQLiteThread
29a90 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76 6f 69 64  **,void*(*)(void
29aa0 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73  *),void*);.int s
29ab0 71 6c 69 74 65 33 54 68 72 65 61 64 4a 6f 69 6e  qlite3ThreadJoin
29ac0 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2c 20  (SQLiteThread*, 
29ad0 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a  void**);.#endif.
29ae0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
29af0 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41  ITE_ENABLE_DBSTA
29b00 54 5f 56 54 41 42 29 20 7c 7c 20 64 65 66 69 6e  T_VTAB) || defin
29b10 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a  ed(SQLITE_TEST).
29b20 69 6e 74 20 73 71 6c 69 74 65 33 44 62 73 74 61  int sqlite3Dbsta
29b30 74 52 65 67 69 73 74 65 72 28 73 71 6c 69 74 65  tRegister(sqlite
29b40 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 65 6e  3*);.#endif..#en
29b50 64 69 66 20 2f 2a 20 5f 53 51 4c 49 54 45 49 4e  dif /* _SQLITEIN
29b60 54 5f 48 5f 20 2a 2f 0a                          T_H_ */.