/ Hex Artifact Content
Login

Artifact 198917e2122c33b43412efedc2b055a82a212225:


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 65 55  edef struct PreU
7aa0: 70 64 61 74 65 20 50 72 65 55 70 64 61 74 65 3b  pdate PreUpdate;
7ab0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7ac0: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20  PrintfArguments 
7ad0: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b  PrintfArguments;
7ae0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7af0: 52 6f 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74  RowSet RowSet;.t
7b00: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 61  ypedef struct Sa
7b10: 76 65 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e  vepoint Savepoin
7b20: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
7b30: 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b  t Select Select;
7b40: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7b50: 53 51 4c 69 74 65 54 68 72 65 61 64 20 53 51 4c  SQLiteThread SQL
7b60: 69 74 65 54 68 72 65 61 64 3b 0a 74 79 70 65 64  iteThread;.typed
7b70: 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74  ef struct Select
7b80: 44 65 73 74 20 53 65 6c 65 63 74 44 65 73 74 3b  Dest SelectDest;
7b90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7ba0: 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73 74 3b  SrcList SrcList;
7bb0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7bc0: 53 74 72 41 63 63 75 6d 20 53 74 72 41 63 63 75  StrAccum StrAccu
7bd0: 6d 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  m;.typedef struc
7be0: 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74  t Table Table;.t
7bf0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61  ypedef struct Ta
7c00: 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63  bleLock TableLoc
7c10: 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  k;.typedef struc
7c20: 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74  t Token Token;.t
7c30: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
7c40: 65 65 56 69 65 77 20 54 72 65 65 56 69 65 77 3b  eeView TreeView;
7c50: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7c60: 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b  Trigger Trigger;
7c70: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7c80: 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67  TriggerPrg Trigg
7c90: 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73  erPrg;.typedef s
7ca0: 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
7cb0: 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74  p TriggerStep;.t
7cc0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e  ypedef struct Un
7cd0: 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70  packedRecord Unp
7ce0: 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70  ackedRecord;.typ
7cf0: 65 64 65 66 20 73 74 72 75 63 74 20 56 54 61 62  edef struct VTab
7d00: 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64  le VTable;.typed
7d10: 65 66 20 73 74 72 75 63 74 20 56 74 61 62 43 74  ef struct VtabCt
7d20: 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64  x VtabCtx;.typed
7d30: 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72  ef struct Walker
7d40: 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66   Walker;.typedef
7d50: 20 73 74 72 75 63 74 20 57 68 65 72 65 49 6e 66   struct WhereInf
7d60: 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70  o WhereInfo;.typ
7d70: 65 64 65 66 20 73 74 72 75 63 74 20 57 69 74 68  edef struct With
7d80: 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65   With;../*.** De
7d90: 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62  fer sourcing vdb
7da0: 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20  e.h and btree.h 
7db0: 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65 20  until after the 
7dc0: 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75  "u8" and .** "Bu
7dd0: 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64  syHandler" typed
7de0: 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f  efs. vdbe.h also
7df0: 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77 20   requires a few 
7e00: 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a  of the opaque.**
7e10: 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28   pointer types (
7e20: 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65  i.e. FuncDef) de
7e30: 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a  fined above..*/.
7e40: 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e  #include "btree.
7e50: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62  h".#include "vdb
7e60: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  e.h".#include "p
7e70: 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65  ager.h".#include
7e80: 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e   "pcache.h"..#in
7e90: 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e  clude "os.h".#in
7ea0: 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a  clude "mutex.h".
7eb0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
7ec0: 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65  abase file to be
7ed0: 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65   accessed by the
7ee0: 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e   system is an in
7ef0: 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65  stance.** of the
7f00: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
7f10: 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65  ture.  There are
7f20: 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66   normally two of
7f30: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
7f40: 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69  s.** in the sqli
7f50: 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20  te.aDb[] array. 
7f60: 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d   aDb[0] is the m
7f70: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
7f80: 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20  e and.** aDb[1] 
7f90: 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
7fa0: 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c  file used to hol
7fb0: 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  d temporary tabl
7fc0: 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a  es.  Additional.
7fd0: 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79  ** databases may
7fe0: 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f   be attached..*/
7ff0: 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63  .struct Db {.  c
8000: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
8010: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
8020: 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
8030: 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20    Btree *pBt;   
8040: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a         /* The B*
8050: 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66  Tree structure f
8060: 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65  or this database
8070: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61   file */.  u8 sa
8080: 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20  fety_level;     
8090: 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76  /* How aggressiv
80a0: 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74  e at syncing dat
80b0: 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53  a to disk */.  S
80c0: 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
80d0: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
80e0: 6f 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  o database schem
80f0: 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72  a (possibly shar
8100: 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ed) */.};../*.**
8110: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
8120: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
8130: 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20 61  ructure stores a
8140: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
8150: 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68  ..**.** Most Sch
8160: 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ema objects are 
8170: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
8180: 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65 78  a Btree.  The ex
8190: 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68  ception is.** th
81a0: 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65  e Schema for the
81b0: 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20 28   TEMP databaes (
81c0: 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20  sqlite3.aDb[1]) 
81d0: 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73 74  which is free-st
81e0: 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68  anding..** In sh
81f0: 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c  ared cache mode,
8200: 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61   a single Schema
8210: 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73   object can be s
8220: 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c  hared by multipl
8230: 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74  e.** Btrees that
8240: 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73 61   refer to the sa
8250: 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74  me underlying Bt
8260: 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a  Shared object..*
8270: 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a  * .** Schema obj
8280: 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74  ects are automat
8290: 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74  ically deallocat
82a0: 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74  ed when the last
82b0: 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72   Btree that.** r
82c0: 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69  eferences them i
82d0: 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54  s destroyed.   T
82e0: 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69  he TEMP Schema i
82f0: 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64  s manually freed
8300: 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63   by.** sqlite3_c
8310: 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74  lose()..*.** A t
8320: 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f  hread must be ho
8330: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
8340: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
8350: 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65  ng Btree in orde
8360: 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53  r.** to access S
8370: 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20  chema content.  
8380: 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61  This implies tha
8390: 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73  t the thread mus
83a0: 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c  t also be.** hol
83b0: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
83c0: 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e  the sqlite3 conn
83d0: 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74  ection pointer t
83e0: 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72  hat owns the Btr
83f0: 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d  ee..** For a TEM
8400: 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74  P Schema, only t
8410: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  he connection mu
8420: 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e  tex is required.
8430: 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d  .*/.struct Schem
8440: 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61  a {.  int schema
8450: 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61  _cookie;   /* Da
8460: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65  tabase schema ve
8470: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72  rsion number for
8480: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
8490: 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b  int iGeneration;
84a0: 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69       /* Generati
84b0: 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63  on counter.  Inc
84c0: 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61  remented with ea
84d0: 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48  ch change */.  H
84e0: 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20  ash tblHash;    
84f0: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65      /* All table
8500: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
8510: 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48  e */.  Hash idxH
8520: 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ash;        /* A
8530: 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63  ll (named) indic
8540: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
8550: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69  me */.  Hash tri
8560: 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  gHash;       /* 
8570: 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64  All triggers ind
8580: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
8590: 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b    Hash fkeyHash;
85a0: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f         /* All fo
85b0: 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65  reign keys by re
85c0: 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e  ferenced table n
85d0: 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ame */.  Table *
85e0: 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a  pSeqTab;      /*
85f0: 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   The sqlite_sequ
8600: 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20  ence table used 
8610: 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  by AUTOINCREMENT
8620: 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f   */.  u8 file_fo
8630: 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63  rmat;      /* Sc
8640: 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73  hema format vers
8650: 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ion for this fil
8660: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  e */.  u8 enc;  
8670: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
8680: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65  ext encoding use
8690: 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61  d by this databa
86a0: 73 65 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65  se */.  u16 sche
86b0: 6d 61 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20  maFlags;     /* 
86c0: 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  Flags associated
86d0: 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d   with this schem
86e0: 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65  a */.  int cache
86f0: 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e  _size;      /* N
8700: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74  umber of pages t
8710: 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63  o use in the cac
8720: 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  he */.};../*.** 
8730: 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
8740: 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
8750: 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
8760: 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20  bits in the .** 
8770: 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  Db.pSchema->flag
8780: 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
8790: 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72 74  ine DbHasPropert
87a0: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28  y(D,I,P)     (((
87b0: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
87c0: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26  ma->schemaFlags&
87d0: 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69  (P))==(P)).#defi
87e0: 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65  ne DbHasAnyPrope
87f0: 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44  rty(D,I,P)  (((D
8800: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
8810: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28  a->schemaFlags&(
8820: 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  P))!=0).#define 
8830: 44 62 53 65 74 50 72 6f 70 65 72 74 79 28 44 2c  DbSetProperty(D,
8840: 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e 61 44  I,P)     (D)->aD
8850: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  b[I].pSchema->sc
8860: 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23  hemaFlags|=(P).#
8870: 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72  define DbClearPr
8880: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20  operty(D,I,P)   
8890: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
88a0: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
88b0: 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c  &=~(P)../*.** Al
88c0: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
88d0: 20 74 68 65 20 44 42 2e 70 53 63 68 65 6d 61 2d   the DB.pSchema-
88e0: 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a  >flags field..**
88f0: 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63 68 65 6d  .** The DB_Schem
8900: 61 4c 6f 61 64 65 64 20 66 6c 61 67 20 69 73 20  aLoaded flag is 
8910: 73 65 74 20 61 66 74 65 72 20 74 68 65 20 64 61  set after the da
8920: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61  tabase schema ha
8930: 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69  s been.** read i
8940: 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61 73  nto internal has
8950: 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20  h tables..**.** 
8960: 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20  DB_UnresetViews 
8970: 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f  means that one o
8980: 72 20 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76  r more views hav
8990: 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74  e column names t
89a0: 68 61 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e  hat.** have been
89b0: 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66   filled out.  If
89c0: 20 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e   the schema chan
89d0: 67 65 73 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d  ges, these colum
89e0: 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a  n names might.**
89f0: 20 63 68 61 6e 67 65 73 20 61 6e 64 20 73 6f 20   changes and so 
8a00: 74 68 65 20 76 69 65 77 20 77 69 6c 6c 20 6e 65  the view will ne
8a10: 65 64 20 74 6f 20 62 65 20 72 65 73 65 74 2e 0a  ed to be reset..
8a20: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 53 63  */.#define DB_Sc
8a30: 68 65 6d 61 4c 6f 61 64 65 64 20 20 20 20 30 78  hemaLoaded    0x
8a40: 30 30 30 31 20 20 2f 2a 20 54 68 65 20 73 63 68  0001  /* The sch
8a50: 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61  ema has been loa
8a60: 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ded */.#define D
8a70: 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 20  B_UnresetViews  
8a80: 20 20 30 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d    0x0002  /* Som
8a90: 65 20 76 69 65 77 73 20 68 61 76 65 20 64 65 66  e views have def
8aa0: 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  ined column name
8ab0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  s */.#define DB_
8ac0: 45 6d 70 74 79 20 20 20 20 20 20 20 20 20 20 20  Empty           
8ad0: 30 78 30 30 30 34 20 20 2f 2a 20 54 68 65 20 66  0x0004  /* The f
8ae0: 69 6c 65 20 69 73 20 65 6d 70 74 79 20 28 6c 65  ile is empty (le
8af0: 6e 67 74 68 20 30 20 62 79 74 65 73 29 20 2a 2f  ngth 0 bytes) */
8b00: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  ../*.** The numb
8b10: 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20  er of different 
8b20: 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20  kinds of things 
8b30: 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69  that can be limi
8b40: 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65  ted.** using the
8b50: 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29   sqlite3_limit()
8b60: 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23   interface..*/.#
8b70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f  define SQLITE_N_
8b80: 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49  LIMIT (SQLITE_LI
8b90: 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MIT_WORKER_THREA
8ba0: 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f  DS+1)../*.** Loo
8bb0: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73  kaside malloc is
8bc0: 20 61 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d   a set of fixed-
8bd0: 73 69 7a 65 20 62 75 66 66 65 72 73 20 74 68 61  size buffers tha
8be0: 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a  t can be used.**
8bf0: 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c   to satisfy smal
8c00: 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f  l transient memo
8c10: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65  ry allocation re
8c20: 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63  quests for objec
8c30: 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64  ts.** associated
8c40: 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c   with a particul
8c50: 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ar database conn
8c60: 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65  ection.  The use
8c70: 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65   of.** lookaside
8c80: 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73   malloc provides
8c90: 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70   a significant p
8ca0: 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e  erformance enhan
8cb0: 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f  cement.** (appro
8cc0: 78 20 31 30 25 29 20 62 79 20 61 76 6f 69 64 69  x 10%) by avoidi
8cd0: 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c  ng numerous mall
8ce0: 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73 74 73  oc/free requests
8cf0: 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a   while parsing.*
8d00: 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  * SQL statements
8d10: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b  ..**.** The Look
8d20: 61 73 69 64 65 20 73 74 72 75 63 74 75 72 65 20  aside structure 
8d30: 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74  holds configurat
8d40: 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ion information 
8d50: 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f  about the.** loo
8d60: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75  kaside malloc su
8d70: 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61  bsystem.  Each a
8d80: 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20  vailable memory 
8d90: 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a  allocation in.**
8da0: 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73   the lookaside s
8db0: 75 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72  ubsystem is stor
8dc0: 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed on a linked l
8dd0: 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65  ist of Lookaside
8de0: 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e  Slot.** objects.
8df0: 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65  .**.** Lookaside
8e00: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
8e10: 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f   only allowed fo
8e20: 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61  r objects that a
8e30: 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a  re associated.**
8e40: 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c   with a particul
8e50: 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ar database conn
8e60: 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20  ection.  Hence, 
8e70: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
8e80: 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20  on cannot.** be 
8e90: 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73  stored in lookas
8ea0: 69 64 65 20 62 65 63 61 75 73 65 20 69 6e 20 73  ide because in s
8eb0: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
8ec0: 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f   the schema info
8ed0: 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68  rmation.** is sh
8ee0: 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65  ared by multiple
8ef0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
8f00: 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72  tions.  Therefor
8f10: 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  e, while parsing
8f20: 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  .** schema infor
8f30: 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b  mation, the Look
8f40: 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66  aside.bEnabled f
8f50: 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64 20 73  lag is cleared s
8f60: 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73  o that.** lookas
8f70: 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ide allocations 
8f80: 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20  are not used to 
8f90: 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73 63  construct the sc
8fa0: 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f  hema objects..*/
8fb0: 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64  .struct Lookasid
8fc0: 65 20 7b 0a 20 20 75 31 36 20 73 7a 3b 20 20 20  e {.  u16 sz;   
8fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8fe0: 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75   Size of each bu
8ff0: 66 66 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f  ffer in bytes */
9000: 0a 20 20 75 38 20 62 45 6e 61 62 6c 65 64 3b 20  .  u8 bEnabled; 
9010: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 61             /* Fa
9020: 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65 20 6e  lse to disable n
9030: 65 77 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ew lookaside all
9040: 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38  ocations */.  u8
9050: 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20   bMalloced;     
9060: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
9070: 20 70 53 74 61 72 74 20 6f 62 74 61 69 6e 65 64   pStart obtained
9080: 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61   from sqlite3_ma
9090: 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  lloc() */.  int 
90a0: 6e 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  nOut;           
90b0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
90c0: 20 62 75 66 66 65 72 73 20 63 75 72 72 65 6e 74   buffers current
90d0: 6c 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a  ly checked out *
90e0: 2f 0a 20 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20  /.  int mxOut;  
90f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
9100: 69 67 68 77 61 74 65 72 20 6d 61 72 6b 20 66 6f  ighwater mark fo
9110: 72 20 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20  r nOut */.  int 
9120: 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20  anStat[3];      
9130: 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20      /* 0: hits. 
9140: 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e   1: size misses.
9150: 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73    2: full misses
9160: 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53   */.  LookasideS
9170: 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a  lot *pFree;   /*
9180: 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c 61 62   List of availab
9190: 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20  le buffers */.  
91a0: 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20 20 20  void *pStart;   
91b0: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
91c0: 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c 61 62   byte of availab
91d0: 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20  le memory space 
91e0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b  */.  void *pEnd;
91f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9200: 46 69 72 73 74 20 62 79 74 65 20 70 61 73 74 20  First byte past 
9210: 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  end of available
9220: 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72   space */.};.str
9230: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  uct LookasideSlo
9240: 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53  t {.  LookasideS
9250: 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f  lot *pNext;    /
9260: 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20 69 6e  * Next buffer in
9270: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66 72 65   the list of fre
9280: 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a  e buffers */.};.
9290: 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74 61  ./*.** A hash ta
92a0: 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e  ble for function
92b0: 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a   definitions..**
92c0: 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75  .** Hash each Fu
92d0: 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20  ncDef structure 
92e0: 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  into one of the 
92f0: 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20  FuncDefHash.a[] 
9300: 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73  slots..** Collis
9310: 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20  ions are on the 
9320: 46 75 6e 63 44 65 66 2e 70 48 61 73 68 20 63 68  FuncDef.pHash ch
9330: 61 69 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  ain..*/.struct F
9340: 75 6e 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46  uncDefHash {.  F
9350: 75 6e 63 44 65 66 20 2a 61 5b 32 33 5d 3b 20 20  uncDef *a[23];  
9360: 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62       /* Hash tab
9370: 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73  le for functions
9380: 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53   */.};..#ifdef S
9390: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
93a0: 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20  NTICATION./*.** 
93b0: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64  Information held
93c0: 20 69 6e 20 74 68 65 20 22 73 71 6c 69 74 65 33   in the "sqlite3
93d0: 22 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  " database conne
93e0: 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64  ction object and
93f0: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61   used.** to mana
9400: 67 65 20 75 73 65 72 20 61 75 74 68 65 6e 74 69  ge user authenti
9410: 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64  cation..*/.typed
9420: 65 66 20 73 74 72 75 63 74 20 73 71 6c 69 74 65  ef struct sqlite
9430: 33 5f 75 73 65 72 61 75 74 68 20 73 71 6c 69 74  3_userauth sqlit
9440: 65 33 5f 75 73 65 72 61 75 74 68 3b 0a 73 74 72  e3_userauth;.str
9450: 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72  uct sqlite3_user
9460: 61 75 74 68 20 7b 0a 20 20 75 38 20 61 75 74 68  auth {.  u8 auth
9470: 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
9480: 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
9490: 74 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  t authentication
94a0: 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20   level */.  int 
94b0: 6e 41 75 74 68 50 57 3b 20 20 20 20 20 20 20 20  nAuthPW;        
94c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
94d0: 65 20 6f 66 20 74 68 65 20 7a 41 75 74 68 50 57  e of the zAuthPW
94e0: 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 63   in bytes */.  c
94f0: 68 61 72 20 2a 7a 41 75 74 68 50 57 3b 20 20 20  har *zAuthPW;   
9500: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9510: 50 61 73 73 77 6f 72 64 20 75 73 65 64 20 74 6f  Password used to
9520: 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f   authenticate */
9530: 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68 55 73  .  char *zAuthUs
9540: 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
9550: 20 2f 2a 20 55 73 65 72 20 6e 61 6d 65 20 75 73   /* User name us
9560: 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61  ed to authentica
9570: 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c  te */.};../* All
9580: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
9590: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
95a0: 2e 61 75 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64  .authLevel */.#d
95b0: 65 66 69 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e  efine UAUTH_Unkn
95c0: 6f 77 6e 20 20 20 20 20 30 20 20 20 20 20 2f 2a  own     0     /*
95d0: 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   Authentication 
95e0: 6e 6f 74 20 79 65 74 20 63 68 65 63 6b 65 64 20  not yet checked 
95f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48  */.#define UAUTH
9600: 5f 46 61 69 6c 20 20 20 20 20 20 20 20 31 20 20  _Fail        1  
9610: 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65     /* User authe
9620: 6e 74 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64  ntication failed
9630: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54   */.#define UAUT
9640: 48 5f 55 73 65 72 20 20 20 20 20 20 20 20 32 20  H_User        2 
9650: 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63      /* Authentic
9660: 61 74 65 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c  ated as a normal
9670: 20 75 73 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65   user */.#define
9680: 20 55 41 55 54 48 5f 41 64 6d 69 6e 20 20 20 20   UAUTH_Admin    
9690: 20 20 20 33 20 20 20 20 20 2f 2a 20 41 75 74 68     3     /* Auth
96a0: 65 6e 74 69 63 61 74 65 64 20 61 73 20 61 6e 20  enticated as an 
96b0: 61 64 6d 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f  administrator */
96c0: 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75  ../* Functions u
96d0: 73 65 64 20 6f 6e 6c 79 20 62 79 20 75 73 65 72  sed only by user
96e0: 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c   authorization l
96f0: 6f 67 69 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  ogic */.int sqli
9700: 74 65 33 55 73 65 72 41 75 74 68 54 61 62 6c 65  te3UserAuthTable
9710: 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  (const char*);.i
9720: 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75  nt sqlite3UserAu
9730: 74 68 43 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c  thCheckLogin(sql
9740: 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
9750: 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  *,u8*);.void sql
9760: 69 74 65 33 55 73 65 72 41 75 74 68 49 6e 69 74  ite3UserAuthInit
9770: 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
9780: 20 73 71 6c 69 74 65 33 43 72 79 70 74 46 75 6e   sqlite3CryptFun
9790: 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  c(sqlite3_contex
97a0: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
97b0: 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66  alue**);..#endif
97c0: 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 52 5f   /* SQLITE_USER_
97d0: 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a  AUTHENTICATION *
97e0: 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66  /../*.** typedef
97f0: 20 66 6f 72 20 74 68 65 20 61 75 74 68 6f 72 69   for the authori
9800: 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20  zation callback 
9810: 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66  function..*/.#if
9820: 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f  def SQLITE_USER_
9830: 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20  AUTHENTICATION. 
9840: 20 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73   typedef int (*s
9850: 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f  qlite3_xauth)(vo
9860: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
9870: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
9880: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20  const char*,.   
9890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98a0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
98b0: 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
98c0: 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74  har*);.#else.  t
98d0: 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c  ypedef int (*sql
98e0: 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64  ite3_xauth)(void
98f0: 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
9900: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
9910: 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20  nst char*,.     
9920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9930: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
9940: 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
9950: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61  ./*.** Each data
9960: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
9970: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
9980: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
9990: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
99a0: 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20  ruct sqlite3 {. 
99b0: 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56   sqlite3_vfs *pV
99c0: 66 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  fs;            /
99d0: 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a  * OS Interface *
99e0: 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20  /.  struct Vdbe 
99f0: 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20  *pVdbe;         
9a00: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74    /* List of act
9a10: 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  ive virtual mach
9a20: 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  ines */.  CollSe
9a30: 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20  q *pDfltColl;   
9a40: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
9a50: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67  efault collating
9a60: 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52   sequence (BINAR
9a70: 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  Y) */.  sqlite3_
9a80: 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20  mutex *mutex;   
9a90: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74        /* Connect
9aa0: 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44  ion mutex */.  D
9ab0: 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20  b *aDb;         
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9ad0: 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  All backends */.
9ae0: 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20    int nDb;      
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b00: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63  /* Number of bac
9b10: 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20  kends currently 
9b20: 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20  in use */.  int 
9b30: 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
9b40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73            /* Mis
9b50: 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73  cellaneous flags
9b60: 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20  . See below */. 
9b70: 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20   i64 lastRowid; 
9b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9b90: 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20  * ROWID of most 
9ba0: 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73  recent insert (s
9bb0: 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69  ee above) */.  i
9bc0: 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20  64 szMmap;      
9bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9be0: 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a  Default mmap_siz
9bf0: 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75  e setting */.  u
9c00: 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e  nsigned int open
9c10: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20  Flags;       /* 
9c20: 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
9c30: 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65  sqlite3_vfs.xOpe
9c40: 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72  n() */.  int err
9c50: 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Code;           
9c60: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
9c70: 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65  ecent error code
9c80: 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20   (SQLITE_*) */. 
9c90: 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20   int errMask;   
9ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9cb0: 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73  * & result codes
9cc0: 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72   with this befor
9cd0: 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20  e returning */. 
9ce0: 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b   u16 dbOptFlags;
9cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9d00: 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c  * Flags to enabl
9d10: 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69  e/disable optimi
9d20: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20  zations */.  u8 
9d30: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
9d40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
9d50: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  xt encoding */. 
9d60: 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20   u8 autoCommit; 
9d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9d80: 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  * The auto-commi
9d90: 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20  t flag. */.  u8 
9da0: 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20  temp_store;     
9db0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a             /* 1:
9dc0: 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20   file 2: memory 
9dd0: 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  0: default */.  
9de0: 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b  u8 mallocFailed;
9df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9e00: 20 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65   True if we have
9e10: 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66   seen a malloc f
9e20: 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 64  ailure */.  u8 d
9e30: 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20  fltLockMode;    
9e40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
9e50: 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64  ault locking-mod
9e60: 65 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64  e for attached d
9e70: 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63  bs */.  signed c
9e80: 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b  har nextAutovac;
9e90: 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63        /* Autovac
9ea0: 20 73 65 74 74 69 6e 67 20 61 66 74 65 72 20 56   setting after V
9eb0: 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a  ACUUM if >=0 */.
9ec0: 20 20 75 38 20 73 75 70 70 72 65 73 73 45 72 72    u8 suppressErr
9ed0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9ee0: 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20  /* Do not issue 
9ef0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69  error messages i
9f00: 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76  f true */.  u8 v
9f10: 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20  tabOnConflict;  
9f20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
9f30: 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72  ue to return for
9f40: 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66   s3_vtab_on_conf
9f50: 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69  lict() */.  u8 i
9f60: 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
9f70: 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75  point;    /* Tru
9f80: 65 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f  e if the outermo
9f90: 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20  st savepoint is 
9fa0: 61 20 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65  a TS */.  int ne
9fb0: 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20  xtPagesize;     
9fc0: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73          /* Pages
9fd0: 69 7a 65 20 61 66 74 65 72 20 56 41 43 55 55 4d  ize after VACUUM
9fe0: 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20   if >0 */.  u32 
9ff0: 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20 20 20  magic;          
a000: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67            /* Mag
a010: 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65  ic number for de
a020: 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73  tect library mis
a030: 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68  use */.  int nCh
a040: 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  ange;           
a050: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
a060: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
a070: 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f  te3_changes() */
a080: 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61  .  int nTotalCha
a090: 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nge;            
a0a0: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
a0b0: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f  ed by sqlite3_to
a0c0: 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f  tal_changes() */
a0d0: 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51  .  int aLimit[SQ
a0e0: 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20  LITE_N_LIMIT];  
a0f0: 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20   /* Limits */.  
a100: 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d  int nMaxSorterMm
a110: 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ap;           /*
a120: 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66   Maximum size of
a130: 20 72 65 67 69 6f 6e 73 20 6d 61 70 70 65 64 20   regions mapped 
a140: 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73  by sorter */.  s
a150: 74 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69  truct sqlite3Ini
a160: 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20  tInfo {      /* 
a170: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  Information used
a180: 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69   during initiali
a190: 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  zation */.    in
a1a0: 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20  t newTnum;      
a1b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f            /* Roo
a1c0: 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62  tpage of table b
a1d0: 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
a1e0: 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20   */.    u8 iDb; 
a1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a200: 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20      /* Which db 
a210: 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e  file is being in
a220: 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20  itialized */.   
a230: 20 75 38 20 62 75 73 79 3b 20 20 20 20 20 20 20   u8 busy;       
a240: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a250: 54 52 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c  TRUE if currentl
a260: 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a  y initializing *
a270: 2f 0a 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54  /.    u8 orphanT
a280: 72 69 67 67 65 72 3b 20 20 20 20 20 20 20 20 20  rigger;         
a290: 20 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d    /* Last statem
a2a0: 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20  ent is orphaned 
a2b0: 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a  TEMP trigger */.
a2c0: 20 20 20 20 75 38 20 69 6d 70 6f 73 74 65 72 54      u8 imposterT
a2d0: 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
a2e0: 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e 20 69  /* Building an i
a2f0: 6d 70 6f 73 74 65 72 20 74 61 62 6c 65 20 2a 2f  mposter table */
a300: 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74  .  } init;.  int
a310: 20 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20 20   nVdbeActive;   
a320: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
a330: 6d 62 65 72 20 6f 66 20 56 44 42 45 73 20 63 75  mber of VDBEs cu
a340: 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20  rrently running 
a350: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65  */.  int nVdbeRe
a360: 61 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ad;             
a370: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
a380: 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61  active VDBEs tha
a390: 74 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20  t read or write 
a3a0: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72  */.  int nVdbeWr
a3b0: 69 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ite;            
a3c0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
a3d0: 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61  active VDBEs tha
a3e0: 74 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65  t read and write
a3f0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45   */.  int nVdbeE
a400: 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  xec;            
a410: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
a420: 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
a430: 20 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20   VdbeExec() */. 
a440: 20 69 6e 74 20 6e 56 44 65 73 74 72 6f 79 3b 20   int nVDestroy; 
a450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a460: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69  * Number of acti
a470: 76 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f  ve OP_VDestroy o
a480: 70 65 72 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69  perations */.  i
a490: 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20  nt nExtension;  
a4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a4b0: 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64  Number of loaded
a4c0: 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20   extensions */. 
a4d0: 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69   void **aExtensi
a4e0: 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  on;            /
a4f0: 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61 72 65  * Array of share
a500: 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65  d library handle
a510: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54  s */.  void (*xT
a520: 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73  race)(void*,cons
a530: 74 20 63 68 61 72 2a 29 3b 20 20 20 20 20 20 20  t char*);       
a540: 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69   /* Trace functi
a550: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54  on */.  void *pT
a560: 72 61 63 65 41 72 67 3b 20 20 20 20 20 20 20 20  raceArg;        
a570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a580: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
a590: 20 74 68 65 20 74 72 61 63 65 20 66 75 6e 63 74   the trace funct
a5a0: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ion */.  void (*
a5b0: 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c  xProfile)(void*,
a5c0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29  const char*,u64)
a5d0: 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20  ;  /* Profiling 
a5e0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
a5f0: 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b  id *pProfileArg;
a600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a610: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
a620: 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66  ent to profile f
a630: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
a640: 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20  d *pCommitArg;  
a650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a660: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43  * Argument to xC
a670: 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20  ommitCallback() 
a680: 2a 2f 20 20 20 0a 20 20 69 6e 74 20 28 2a 78 43  */   .  int (*xC
a690: 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76  ommitCallback)(v
a6a0: 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76  oid*);    /* Inv
a6b0: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
a6c0: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
a6d0: 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20  *pRollbackArg;  
a6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a6f0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c  Argument to xRol
a700: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20  lbackCallback() 
a710: 2a 2f 20 20 20 0a 20 20 76 6f 69 64 20 28 2a 78  */   .  void (*x
a720: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
a730: 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76  )(void*); /* Inv
a740: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
a750: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
a760: 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76  *pUpdateArg;.  v
a770: 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c  oid (*xUpdateCal
a780: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74  lback)(void*,int
a790: 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  , const char*,co
a7a0: 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65  nst char*,sqlite
a7b0: 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64 65 66 20  _int64);.#ifdef 
a7c0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52  SQLITE_ENABLE_PR
a7d0: 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76  EUPDATE_HOOK.  v
a7e0: 6f 69 64 20 2a 70 50 72 65 55 70 64 61 74 65 41  oid *pPreUpdateA
a7f0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  rg;          /* 
a800: 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
a810: 6f 20 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c  o xPreUpdateCall
a820: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28  back */.  void (
a830: 2a 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62  *xPreUpdateCallb
a840: 61 63 6b 29 28 20 20 20 2f 2a 20 52 65 67 69 73  ack)(   /* Regis
a850: 74 65 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69  tered using sqli
a860: 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f  te3_preupdate_ho
a870: 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64  ok() */.    void
a880: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  *,sqlite3*,int,c
a890: 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20  har const*,char 
a8a0: 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69  const*,sqlite3_i
a8b0: 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74  nt64,sqlite3_int
a8c0: 36 34 0a 20 20 29 3b 0a 20 20 50 72 65 55 70 64  64.  );.  PreUpd
a8d0: 61 74 65 20 2a 70 50 72 65 55 70 64 61 74 65 3b  ate *pPreUpdate;
a8e0: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65          /* Conte
a8f0: 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 70 72  xt for active pr
a900: 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63  e-update callbac
a910: 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k */.#endif /* S
a920: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
a930: 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23  UPDATE_HOOK */.#
a940: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
a950: 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78  IT_WAL.  int (*x
a960: 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  WalCallback)(voi
a970: 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20  d *, sqlite3 *, 
a980: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
a990: 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c  t);.  void *pWal
a9a0: 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f  Arg;.#endif.  vo
a9b0: 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29  id(*xCollNeeded)
a9c0: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
a9d0: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
a9e0: 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
a9f0: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36  d(*xCollNeeded16
aa00: 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
aa10: 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f  ,int eTextRep,co
aa20: 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f  nst void*);.  vo
aa30: 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41  id *pCollNeededA
aa40: 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  rg;.  sqlite3_va
aa50: 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20  lue *pErr;      
aa60: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
aa70: 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  nt error message
aa80: 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
aa90: 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69    volatile int i
aaa0: 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a  sInterrupted; /*
aab0: 20 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33   True if sqlite3
aac0: 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62  _interrupt has b
aad0: 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20  een called */.  
aae0: 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64    double notUsed
aaf0: 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  1;            /*
ab00: 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75   Spacer */.  } u
ab10: 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c  1;.  Lookaside l
ab20: 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
ab30: 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20     /* Lookaside 
ab40: 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61  malloc configura
ab50: 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20  tion */.#ifndef 
ab60: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
ab70: 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69  ORIZATION.  sqli
ab80: 74 65 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b  te3_xauth xAuth;
ab90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63            /* Acc
aba0: 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  ess authorizatio
abb0: 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  n function */.  
abc0: 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20  void *pAuthArg; 
abd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
abe0: 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f   1st argument to
abf0: 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68   the access auth
ac00: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e   function */.#en
ac10: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
ac20: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
ac30: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20  _CALLBACK.  int 
ac40: 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69  (*xProgress)(voi
ac50: 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65  d *);     /* The
ac60: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
ac70: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  ck */.  void *pP
ac80: 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20  rogressArg;     
ac90: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
aca0: 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73  t to the progres
acb0: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  s callback */.  
acc0: 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65  unsigned nProgre
acd0: 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a  ssOps;        /*
ace0: 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64   Number of opcod
acf0: 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20  es for progress 
ad00: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64  callback */.#end
ad10: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
ad20: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
ad30: 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e  BLE.  int nVTran
ad40: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
ad50: 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64      /* Allocated
ad60: 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73   size of aVTrans
ad70: 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75   */.  Hash aModu
ad80: 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
ad90: 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64      /* populated
ada0: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61   by sqlite3_crea
adb0: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
adc0: 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43   VtabCtx *pVtabC
add0: 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  tx;            /
ade0: 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63  * Context for ac
adf0: 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63  tive vtab connec
ae00: 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54  t/create */.  VT
ae10: 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20  able **aVTrans; 
ae20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
ae30: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69  irtual tables wi
ae40: 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  th open transact
ae50: 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65  ions */.  VTable
ae60: 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20   *pDisconnect;  
ae70: 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20    /* Disconnect 
ae80: 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71  these in next sq
ae90: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
aea0: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e 63  */.#endif.  Func
aeb0: 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b 20 20  DefHash aFunc;  
aec0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73            /* Has
aed0: 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65  h table of conne
aee0: 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20  ction functions 
aef0: 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53  */.  Hash aCollS
af00: 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eq;             
af10: 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74     /* All collat
af20: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f  ing sequences */
af30: 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62  .  BusyHandler b
af40: 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20  usyHandler;     
af50: 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63   /* Busy callbac
af60: 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61  k */.  Db aDbSta
af70: 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20  tic[2];         
af80: 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73       /* Static s
af90: 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20 64  pace for the 2 d
afa0: 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20  efault backends 
afb0: 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  */.  Savepoint *
afc0: 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  pSavepoint;     
afd0: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63     /* List of ac
afe0: 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20  tive savepoints 
aff0: 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d  */.  int busyTim
b000: 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  eout;           
b010: 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c     /* Busy handl
b020: 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d  er timeout, in m
b030: 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61  sec */.  int nSa
b040: 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
b050: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
b060: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
b070: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a  ion savepoints *
b080: 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65  /.  int nStateme
b090: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
b0a0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
b0b0: 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d  ested statement-
b0c0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f  transactions  */
b0d0: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
b0e0: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cons;           
b0f0: 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64   /* Net deferred
b100: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69   constraints thi
b110: 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a  s transaction. *
b120: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
b130: 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20  dImmCons;       
b140: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
b150: 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e 73  d immediate cons
b160: 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  traints */.  int
b170: 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b 20   *pnBytesFreed; 
b180: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66             /* If
b190: 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65   not NULL, incre
b1a0: 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62 46  ment this in DbF
b1b0: 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65 66 20  ree() */.#ifdef 
b1c0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e  SQLITE_ENABLE_UN
b1d0: 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a  LOCK_NOTIFY.  /*
b1e0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76   The following v
b1f0: 61 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c 6c  ariables are all
b200: 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 74 68   protected by th
b210: 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52 20  e STATIC_MASTER 
b220: 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74  .  ** mutex, not
b230: 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74 65   by sqlite3.mute
b240: 78 2e 20 54 68 65 79 20 61 72 65 20 75 73 65 64  x. They are used
b250: 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69   by code in noti
b260: 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a  fy.c. .  **.  **
b270: 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43   When X.pUnlockC
b280: 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68  onnection==Y, th
b290: 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58 20  at means that X 
b2a0: 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20 59  is waiting for Y
b2b0: 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20   to.  ** unlock 
b2c0: 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 70  so that it can p
b2d0: 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a  roceed..  **.  *
b2e0: 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69  * When X.pBlocki
b2f0: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ngConnection==Y,
b300: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
b310: 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20   something that 
b320: 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72 69  X tried.  ** tri
b330: 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c  ed to do recentl
b340: 79 20 66 61 69 6c 65 64 20 77 69 74 68 20 61 6e  y failed with an
b350: 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65   SQLITE_LOCKED e
b360: 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b  rror due to lock
b370: 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20 59  s.  ** held by Y
b380: 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ..  */.  sqlite3
b390: 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65   *pBlockingConne
b3a0: 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63  ction; /* Connec
b3b0: 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65 64  tion that caused
b3c0: 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a   SQLITE_LOCKED *
b3d0: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55 6e  /.  sqlite3 *pUn
b3e0: 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20  lockConnection; 
b3f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
b400: 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63 68  nection to watch
b410: 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20   for unlock */. 
b420: 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72   void *pUnlockAr
b430: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
b440: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
b450: 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74  nt to xUnlockNot
b460: 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ify */.  void (*
b470: 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76  xUnlockNotify)(v
b480: 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f  oid **, int);  /
b490: 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20  * Unlock notify 
b4a0: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71  callback */.  sq
b4b0: 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63  lite3 *pNextBloc
b4c0: 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ked;        /* N
b4d0: 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20 61  ext in list of a
b4e0: 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65  ll blocked conne
b4f0: 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66  ctions */.#endif
b500: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
b510: 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49  SER_AUTHENTICATI
b520: 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 75 73 65  ON.  sqlite3_use
b530: 72 61 75 74 68 20 61 75 74 68 3b 20 20 20 20 20  rauth auth;     
b540: 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65     /* User authe
b550: 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72 6d  ntication inform
b560: 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ation */.#endif.
b570: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72  };../*.** A macr
b580: 6f 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68  o to discover th
b590: 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20  e encoding of a 
b5a0: 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65  database..*/.#de
b5b0: 66 69 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43 28  fine SCHEMA_ENC(
b5c0: 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30  db) ((db)->aDb[0
b5d0: 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a  ].pSchema->enc).
b5e0: 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20  #define ENC(db) 
b5f0: 20 20 20 20 20 20 20 28 28 64 62 29 2d 3e 65 6e         ((db)->en
b600: 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  c)../*.** Possib
b610: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
b620: 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e  e sqlite3.flags.
b630: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
b640: 54 45 5f 56 64 62 65 54 72 61 63 65 20 20 20 20  TE_VdbeTrace    
b650: 20 20 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a    0x00000001  /*
b660: 20 54 72 75 65 20 74 6f 20 74 72 61 63 65 20 56   True to trace V
b670: 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f  DBE execution */
b680: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b690: 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20 30  InternChanges  0
b6a0: 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20 55 6e  x00000002  /* Un
b6b0: 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74  committed Hash t
b6c0: 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a  able changes */.
b6d0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
b6e0: 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78  ullFSync      0x
b6f0: 30 30 30 30 30 30 30 34 20 20 2f 2a 20 55 73 65  00000004  /* Use
b700: 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74   full fsync on t
b710: 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64  he backend */.#d
b720: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70  efine SQLITE_Ckp
b730: 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30  tFullFSync  0x00
b740: 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66  000008  /* Use f
b750: 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68  ull fsync for ch
b760: 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66  eckpoint */.#def
b770: 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65  ine SQLITE_Cache
b780: 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30  Spill     0x0000
b790: 30 30 31 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73  0010  /* OK to s
b7a0: 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65  pill pager cache
b7b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b7c0: 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20  TE_FullColNames 
b7d0: 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a    0x00000020  /*
b7e0: 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d   Show full colum
b7f0: 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43  n names on SELEC
b800: 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  T */.#define SQL
b810: 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65  ITE_ShortColName
b820: 73 20 20 30 78 30 30 30 30 30 30 34 30 20 20 2f  s  0x00000040  /
b830: 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c  * Show short col
b840: 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64  umns names */.#d
b850: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75  efine SQLITE_Cou
b860: 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78 30 30  ntRows      0x00
b870: 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74  000080  /* Count
b880: 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79   rows changed by
b890: 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20   INSERT, */.    
b8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8c0: 20 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54        /*   DELET
b8d0: 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64  E, or UPDATE and
b8e0: 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20   return */.     
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b910: 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f       /*   the co
b920: 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c  unt using a call
b930: 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65  back. */.#define
b940: 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c   SQLITE_NullCall
b950: 62 61 63 6b 20 20 20 30 78 30 30 30 30 30 31 30  back   0x0000010
b960: 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  0  /* Invoke the
b970: 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69   callback once i
b980: 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20  f the */.       
b990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9b0: 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73     /*   result s
b9c0: 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23  et is empty */.#
b9d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71  define SQLITE_Sq
b9e0: 6c 54 72 61 63 65 20 20 20 20 20 20 20 30 78 30  lTrace       0x0
b9f0: 30 30 30 30 32 30 30 20 20 2f 2a 20 44 65 62 75  0000200  /* Debu
ba00: 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69  g print SQL as i
ba10: 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64  t executes */.#d
ba20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
ba30: 65 4c 69 73 74 69 6e 67 20 20 20 20 30 78 30 30  eListing    0x00
ba40: 30 30 30 34 30 30 20 20 2f 2a 20 44 65 62 75 67  000400  /* Debug
ba50: 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42   listings of VDB
ba60: 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64  E programs */.#d
ba70: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72 69  efine SQLITE_Wri
ba80: 74 65 53 63 68 65 6d 61 20 20 20 20 30 78 30 30  teSchema    0x00
ba90: 30 30 30 38 30 30 20 20 2f 2a 20 4f 4b 20 74 6f  000800  /* OK to
baa0: 20 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f 4d   update SQLITE_M
bab0: 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65  ASTER */.#define
bac0: 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f   SQLITE_VdbeAddo
bad0: 70 54 72 61 63 65 20 30 78 30 30 30 30 31 30 30  pTrace 0x0000100
bae0: 30 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69  0  /* Trace sqli
baf0: 74 65 33 56 64 62 65 41 64 64 4f 70 28 29 20 63  te3VdbeAddOp() c
bb00: 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  alls */.#define 
bb10: 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65  SQLITE_IgnoreChe
bb20: 63 6b 73 20 20 20 30 78 30 30 30 30 32 30 30 30  cks   0x00002000
bb30: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f    /* Do not enfo
bb40: 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72  rce check constr
bb50: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
bb60: 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f   SQLITE_ReadUnco
bb70: 6d 6d 69 74 74 65 64 20 30 78 30 30 30 34 30 30  mmitted 0x000400
bb80: 30 20 20 2f 2a 20 46 6f 72 20 73 68 61 72 65 64  0  /* For shared
bb90: 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23  -cache mode */.#
bba0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65  define SQLITE_Le
bbb0: 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30  gacyFileFmt  0x0
bbc0: 30 30 30 38 30 30 30 20 20 2f 2a 20 43 72 65 61  0008000  /* Crea
bbd0: 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 73  te new databases
bbe0: 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a   in format 1 */.
bbf0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
bc00: 65 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30 78  ecoveryMode   0x
bc10: 30 30 30 31 30 30 30 30 20 20 2f 2a 20 49 67 6e  00010000  /* Ign
bc20: 6f 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f 72  ore schema error
bc30: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
bc40: 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72  ITE_ReverseOrder
bc50: 20 20 20 30 78 30 30 30 32 30 30 30 30 20 20 2f     0x00020000  /
bc60: 2a 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64 65  * Reverse unorde
bc70: 72 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23  red SELECTs */.#
bc80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
bc90: 63 54 72 69 67 67 65 72 73 20 20 20 20 30 78 30  cTriggers    0x0
bca0: 30 30 34 30 30 30 30 20 20 2f 2a 20 45 6e 61 62  0040000  /* Enab
bcb0: 6c 65 20 72 65 63 75 72 73 69 76 65 20 74 72 69  le recursive tri
bcc0: 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  ggers */.#define
bcd0: 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b   SQLITE_ForeignK
bce0: 65 79 73 20 20 20 20 30 78 30 30 30 38 30 30 30  eys    0x0008000
bcf0: 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f  0  /* Enforce fo
bd00: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
bd10: 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e  aints  */.#defin
bd20: 65 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64  e SQLITE_AutoInd
bd30: 65 78 20 20 20 20 20 20 30 78 30 30 31 30 30 30  ex      0x001000
bd40: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75  00  /* Enable au
bd50: 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20  tomatic indexes 
bd60: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bd70: 45 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20  E_PreferBuiltin 
bd80: 20 30 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20   0x00200000  /* 
bd90: 50 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75  Preference to bu
bda0: 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a  ilt-in funcs */.
bdb0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
bdc0: 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78  oadExtension  0x
bdd0: 30 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61  00400000  /* Ena
bde0: 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble load_extensi
bdf0: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
be00: 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67  LITE_EnableTrigg
be10: 65 72 20 20 30 78 30 30 38 30 30 30 30 30 20 20  er  0x00800000  
be20: 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
be30: 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64  e triggers */.#d
be40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66  efine SQLITE_Def
be50: 65 72 46 4b 73 20 20 20 20 20 20 20 30 78 30 31  erFKs       0x01
be60: 30 30 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72  000000  /* Defer
be70: 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69   all FK constrai
be80: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
be90: 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20  QLITE_QueryOnly 
bea0: 20 20 20 20 20 30 78 30 32 30 30 30 30 30 30 20       0x02000000 
beb0: 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61   /* Disable data
bec0: 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a  base changes */.
bed0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
bee0: 64 62 65 45 51 50 20 20 20 20 20 20 20 20 30 78  dbeEQP        0x
bef0: 30 34 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62  04000000  /* Deb
bf00: 75 67 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59  ug EXPLAIN QUERY
bf10: 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e 65   PLAN */.#define
bf20: 20 53 51 4c 49 54 45 5f 56 61 63 75 75 6d 20 20   SQLITE_Vacuum  
bf30: 20 20 20 20 20 20 20 30 78 30 38 30 30 30 30 30         0x0800000
bf40: 30 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20  0  /* Currently 
bf50: 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a 23  in a VACUUM */.#
bf60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 65  define SQLITE_Ce
bf70: 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20 30 78 31  llSizeCk     0x1
bf80: 30 30 30 30 30 30 30 20 20 2f 2a 20 43 68 65 63  0000000  /* Chec
bf90: 6b 20 62 74 72 65 65 20 63 65 6c 6c 20 73 69 7a  k btree cell siz
bfa0: 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 0a 0a  es on load */...
bfb0: 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68  /*.** Bits of th
bfc0: 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46  e sqlite3.dbOptF
bfd0: 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61 74 20  lags field that 
bfe0: 61 72 65 20 75 73 65 64 20 62 79 20 74 68 65 0a  are used by the.
bff0: 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  ** sqlite3_test_
c000: 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54  control(SQLITE_T
c010: 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41  ESTCTRL_OPTIMIZA
c020: 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72  TIONS,...) inter
c030: 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63  face to.** selec
c040: 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76  tively disable v
c050: 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74  arious optimizat
c060: 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ions..*/.#define
c070: 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61   SQLITE_QueryFla
c080: 74 74 65 6e 65 72 20 30 78 30 30 30 31 20 20 20  ttener 0x0001   
c090: 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e  /* Query flatten
c0a0: 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ing */.#define S
c0b0: 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68  QLITE_ColumnCach
c0c0: 65 20 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a  e    0x0002   /*
c0d0: 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f   Column cache */
c0e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c0f0: 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30  GroupByOrder   0
c100: 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50  x0004   /* GROUP
c110: 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45  BY cover of ORDE
c120: 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  RBY */.#define S
c130: 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43  QLITE_FactorOutC
c140: 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a  onst 0x0008   /*
c150: 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72   Constant factor
c160: 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20 20 20 20  ing */./*       
c170: 20 20 20 20 20 20 20 20 20 6e 6f 74 20 75 73 65           not use
c180: 64 20 20 20 20 30 78 30 30 31 30 20 20 20 2f 2f  d    0x0010   //
c190: 20 57 61 73 3a 20 53 51 4c 49 54 45 5f 49 64 78   Was: SQLITE_Idx
c1a0: 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a 23 64 65  RealAsInt */.#de
c1b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74  fine SQLITE_Dist
c1c0: 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30 32  inctOpt    0x002
c1d0: 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20  0   /* DISTINCT 
c1e0: 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f  using indexes */
c1f0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c200: 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20 30  CoverIdxScan   0
c210: 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72  x0040   /* Cover
c220: 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20  ing index scans 
c230: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c240: 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e  E_OrderByIdxJoin
c250: 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44   0x0080   /* ORD
c260: 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76  ER BY of joins v
c270: 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ia index */.#def
c280: 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43  ine SQLITE_SubqC
c290: 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30  oroutine  0x0100
c2a0: 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73     /* Evaluate s
c2b0: 75 62 71 75 65 72 69 65 73 20 61 73 20 63 6f 72  ubqueries as cor
c2c0: 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69  outines */.#defi
c2d0: 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69  ne SQLITE_Transi
c2e0: 74 69 76 65 20 20 20 20 20 30 78 30 32 30 30 20  tive     0x0200 
c2f0: 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20    /* Transitive 
c300: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
c310: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d  define SQLITE_Om
c320: 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30  itNoopJoin   0x0
c330: 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e  400   /* Omit un
c340: 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a  used tables in j
c350: 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oins */.#define 
c360: 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20 20 20  SQLITE_Stat34   
c370: 20 20 20 20 20 20 30 78 30 38 30 30 20 20 20 2f        0x0800   /
c380: 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72 20 53  * Use STAT3 or S
c390: 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 23 64 65  TAT4 data */.#de
c3a0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f  fine SQLITE_AllO
c3b0: 70 74 73 20 20 20 20 20 20 20 20 30 78 66 66 66  pts        0xfff
c3c0: 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d  f   /* All optim
c3d0: 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a  izations */../*.
c3e0: 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65  ** Macros for te
c3f0: 73 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  sting whether or
c400: 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f   not optimizatio
c410: 6e 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f  ns are enabled o
c420: 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23  r disabled..*/.#
c430: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
c440: 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
c450: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
c460: 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c  tionDisabled(db,
c470: 20 6d 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e   mask)  (((db)->
c480: 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b  dbOptFlags&(mask
c490: 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f  ))!=0).#define O
c4a0: 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c  ptimizationEnabl
c4b0: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28  ed(db, mask)   (
c4c0: 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67  ((db)->dbOptFlag
c4d0: 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65  s&(mask))==0).#e
c4e0: 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  lse.#define Opti
c4f0: 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64  mizationDisabled
c500: 28 64 62 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64  (db, mask)  0.#d
c510: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
c520: 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61  onEnabled(db, ma
c530: 73 6b 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a  sk)   1.#endif..
c540: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
c550: 65 20 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61  e if it OK to fa
c560: 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78  ctor constant ex
c570: 70 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74  pressions into t
c580: 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
c590: 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61  n.** code. The a
c5a0: 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72  rgument is a Par
c5b0: 73 65 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68  se object for th
c5c0: 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
c5d0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e  ..*/.#define Con
c5e0: 73 74 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28  stFactorOk(P) ((
c5f0: 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f  P)->okConstFacto
c600: 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  r)../*.** Possib
c610: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
c620: 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66  e sqlite.magic f
c630: 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d  ield..** The num
c640: 62 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65  bers are obtaine
c650: 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
c660: 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20  have no special 
c670: 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a  meaning, other.*
c680: 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73  * than being dis
c690: 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61  tinct from one a
c6a0: 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  nother..*/.#defi
c6b0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
c6c0: 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32 39 61  OPEN     0xa029a
c6d0: 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65  697  /* Database
c6e0: 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66   is open */.#def
c6f0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
c700: 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63  _CLOSED   0x9f3c
c710: 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73  2d33  /* Databas
c720: 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23  e is closed */.#
c730: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
c740: 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34  GIC_SICK     0x4
c750: 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f  b771290  /* Erro
c760: 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63  r and awaiting c
c770: 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lose */.#define 
c780: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
c790: 59 20 20 20 20 20 30 78 66 30 33 62 37 39 30 36  Y     0xf03b7906
c7a0: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75    /* Database cu
c7b0: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a  rrently in use *
c7c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c7d0: 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20  _MAGIC_ERROR    
c7e0: 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41  0xb5357930  /* A
c7f0: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  n SQLITE_MISUSE 
c800: 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a  error occurred *
c810: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c820: 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20  _MAGIC_ZOMBIE   
c830: 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43  0x64cffc7f  /* C
c840: 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20 73  lose with last s
c850: 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a  tatement close *
c860: 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  /../*.** Each SQ
c870: 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65  L function is de
c880: 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
c890: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
c8a0: 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
c8b0: 72 65 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74  re.  A pointer t
c8c0: 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
c8d0: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
c8e0: 65 20 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a  e sqlite.aFunc.*
c8f0: 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57  * hash table.  W
c900: 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e  hen multiple fun
c910: 63 74 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20  ctions have the 
c920: 73 61 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68  same name, the h
c930: 61 73 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69  ash table.** poi
c940: 6e 74 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20  nts to a linked 
c950: 6c 69 73 74 20 6f 66 20 74 68 65 73 65 20 73 74  list of these st
c960: 72 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72  ructures..*/.str
c970: 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20  uct FuncDef {.  
c980: 69 31 36 20 6e 41 72 67 3b 20 20 20 20 20 20 20  i16 nArg;       
c990: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
c9a0: 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31  f arguments.  -1
c9b0: 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64   means unlimited
c9c0: 20 2a 2f 0a 20 20 75 31 36 20 66 75 6e 63 46 6c   */.  u16 funcFl
c9d0: 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f  ags;       /* So
c9e0: 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f  me combination o
c9f0: 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20  f SQLITE_FUNC_* 
ca00: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  */.  void *pUser
ca10: 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65  Data;     /* Use
ca20: 72 20 64 61 74 61 20 70 61 72 61 6d 65 74 65 72  r data parameter
ca30: 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70   */.  FuncDef *p
ca40: 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Next;      /* Ne
ca50: 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  xt function with
ca60: 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20   same name */.  
ca70: 76 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71  void (*xFunc)(sq
ca80: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
ca90: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
caa0: 2a 2a 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20  **); /* Regular 
cab0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
cac0: 69 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69  id (*xStep)(sqli
cad0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
cae0: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
caf0: 29 3b 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  ); /* Aggregate 
cb00: 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28  step */.  void (
cb10: 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69  *xFinalize)(sqli
cb20: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20  te3_context*);  
cb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cb40: 20 41 67 67 72 65 67 61 74 65 20 66 69 6e 61 6c   Aggregate final
cb50: 69 7a 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a  izer */.  char *
cb60: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f  zName;         /
cb70: 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68  * SQL name of th
cb80: 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20  e function. */. 
cb90: 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b   FuncDef *pHash;
cba0: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69        /* Next wi
cbb0: 74 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e  th a different n
cbc0: 61 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65  ame but the same
cbd0: 20 68 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44   hash */.  FuncD
cbe0: 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74  estructor *pDest
cbf0: 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66  ructor;   /* Ref
cc00: 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64  erence counted d
cc10: 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69  estructor functi
cc20: 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  on */.};../*.** 
cc30: 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 65  This structure e
cc40: 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75 73  ncapsulates a us
cc50: 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74  er-function dest
cc60: 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20  ructor callback 
cc70: 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65  (as.** configure
cc80: 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66  d using create_f
cc90: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e  unction_v2()) an
cca0: 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f  d a reference co
ccb0: 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63  unter. When.** c
ccc0: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76  reate_function_v
ccd0: 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f  2() is called to
cce0: 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74 69   create a functi
ccf0: 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72 75  on with a destru
cd00: 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c  ctor,.** a singl
cd10: 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73  e object of this
cd20: 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74   type is allocat
cd30: 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74  ed. FuncDestruct
cd40: 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74  or.nRef is set t
cd50: 6f 20 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  o .** the number
cd60: 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65   of FuncDef obje
cd70: 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74  cts created (eit
cd80: 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65  her 1 or 3, depe
cd90: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
cda0: 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73  .** or not the s
cdb0: 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e  pecified encodin
cdc0: 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29  g is SQLITE_ANY)
cdd0: 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44  . The FuncDef.pD
cde0: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d  estructor.** mem
cdf0: 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74  ber of each of t
ce00: 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f  he new FuncDef o
ce10: 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f  bjects is set to
ce20: 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c   point to the al
ce30: 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44  located.** FuncD
ce40: 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a  estructor..**.**
ce50: 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65   Thereafter, whe
ce60: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  n one of the Fun
ce70: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20  cDef objects is 
ce80: 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66  deleted, the ref
ce90: 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20  erence.** count 
cea0: 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  on this object i
ceb0: 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57  s decremented. W
cec0: 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30  hen it reaches 0
ced0: 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72  , the destructor
cee0: 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61  .** is invoked a
cef0: 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72  nd the FuncDestr
cf00: 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20  uctor structure 
cf10: 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  freed..*/.struct
cf20: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
cf30: 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20  {.  int nRef;.  
cf40: 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
cf50: 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64  (void *);.  void
cf60: 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a   *pUserData;.};.
cf70: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
cf80: 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44  values for FuncD
cf90: 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20  ef.flags.  Note 
cfa0: 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48  that the _LENGTH
cfb0: 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20   and _TYPEOF.** 
cfc0: 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72  values must corr
cfd0: 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47  espond to OPFLAG
cfe0: 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f  _LENGTHARG and O
cff0: 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e  PFLAG_TYPEOFARG.
d000: 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61    There.** are a
d010: 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
d020: 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74  ts in the code t
d030: 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a  o verify this..*
d040: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d050: 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30  _FUNC_ENCMASK  0
d060: 78 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55  x003 /* SQLITE_U
d070: 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  TF8, SQLITE_UTF1
d080: 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a  6BE or UTF16LE *
d090: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d0a0: 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30  _FUNC_LIKE     0
d0b0: 78 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61 74  x004 /* Candidat
d0c0: 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f  e for the LIKE o
d0d0: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23  ptimization */.#
d0e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
d0f0: 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78 30 30  NC_CASE     0x00
d100: 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74  8 /* Case-sensit
d110: 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75  ive LIKE-type fu
d120: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
d130: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50  e SQLITE_FUNC_EP
d140: 48 45 4d 20 20 20 20 30 78 30 31 30 20 2f 2a 20  HEM    0x010 /* 
d150: 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65  Ephemeral.  Dele
d160: 74 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a  te with VDBE */.
d170: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
d180: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30  UNC_NEEDCOLL 0x0
d190: 32 30 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74  20 /* sqlite3Get
d1a0: 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69  FuncCollSeq() mi
d1b0: 67 68 74 20 62 65 20 63 61 6c 6c 65 64 20 2a 2f  ght be called */
d1c0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d1d0: 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78  FUNC_LENGTH   0x
d1e0: 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  040 /* Built-in 
d1f0: 6c 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f  length() functio
d200: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
d210: 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20  ITE_FUNC_TYPEOF 
d220: 20 20 30 78 30 38 30 20 2f 2a 20 42 75 69 6c 74    0x080 /* Built
d230: 2d 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e  -in typeof() fun
d240: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
d250: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55   SQLITE_FUNC_COU
d260: 4e 54 20 20 20 20 30 78 31 30 30 20 2f 2a 20 42  NT    0x100 /* B
d270: 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29  uilt-in count(*)
d280: 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64   aggregate */.#d
d290: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
d2a0: 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 32 30 30  C_COALESCE 0x200
d2b0: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61   /* Built-in coa
d2c0: 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c  lesce() or ifnul
d2d0: 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  l() */.#define S
d2e0: 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b  QLITE_FUNC_UNLIK
d2f0: 45 4c 59 20 30 78 34 30 30 20 2f 2a 20 42 75 69  ELY 0x400 /* Bui
d300: 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29  lt-in unlikely()
d310: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
d320: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
d330: 5f 43 4f 4e 53 54 41 4e 54 20 30 78 38 30 30 20  _CONSTANT 0x800 
d340: 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75  /* Constant inpu
d350: 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61  ts give a consta
d360: 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65  nt output */.#de
d370: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
d380: 5f 4d 49 4e 4d 41 58 20 20 30 78 31 30 30 30 20  _MINMAX  0x1000 
d390: 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28  /* True for min(
d3a0: 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72  ) and max() aggr
d3b0: 65 67 61 74 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  egates */../*.**
d3c0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
d3d0: 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e  hree macros, FUN
d3e0: 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e  CTION(), LIKEFUN
d3f0: 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54  C() and AGGREGAT
d400: 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  E() are.** used 
d410: 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e  to create the in
d420: 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74  itializers for t
d430: 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  he FuncDef struc
d440: 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46  tures..**.**   F
d450: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
d460: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
d470: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73  xFunc).**     Us
d480: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73  ed to create a s
d490: 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64  calar function d
d4a0: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66  efinition of a f
d4b0: 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a  unction zName .*
d4c0: 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65  *     implemente
d4d0: 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20  d by C function 
d4e0: 78 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70  xFunc that accep
d4f0: 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74  ts nArg argument
d500: 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61  s. The.**     va
d510: 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41  lue passed as iA
d520: 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20  rg is cast to a 
d530: 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65  (void*) and made
d540: 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20   available.**   
d550: 20 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61    as the user-da
d560: 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72  ta (sqlite3_user
d570: 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65  _data()) for the
d580: 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a   function. If .*
d590: 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62  *     argument b
d5a0: 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e  NC is true, then
d5b0: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
d5c0: 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69  _NEEDCOLL flag i
d5d0: 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56  s set..**.**   V
d5e0: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
d5f0: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
d600: 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c   xFunc).**     L
d610: 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63  ike FUNCTION exc
d620: 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65  ept it omits the
d630: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
d640: 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a  STANT flag..**.*
d650: 2a 20 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e  *   AGGREGATE(zN
d660: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
d670: 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69   bNC, xStep, xFi
d680: 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  nal).**     Used
d690: 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67   to create an ag
d6a0: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
d6b0: 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c   definition impl
d6c0: 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20  emented by.**   
d6d0: 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e    the C function
d6e0: 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e  s xStep and xFin
d6f0: 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f  al. The first fo
d700: 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a  ur parameters.**
d710: 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72       are interpr
d720: 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  eted in the same
d730: 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73   way as the firs
d740: 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74  t 4 parameters t
d750: 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f  o.**     FUNCTIO
d760: 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b  N()..**.**   LIK
d770: 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72  EFUNC(zName, nAr
d780: 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a  g, pArg, flags).
d790: 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
d7a0: 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
d7b0: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
d7c0: 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
d7d0: 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74   zName .**     t
d7e0: 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67  hat accepts nArg
d7f0: 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69   arguments and i
d800: 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  s implemented by
d810: 20 61 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a   a call to C .**
d820: 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69       function li
d830: 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74  keFunc. Argument
d840: 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   pArg is cast to
d850: 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20   a (void *) and 
d860: 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69  made.**     avai
d870: 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e  lable as the fun
d880: 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20  ction user-data 
d890: 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  (sqlite3_user_da
d8a0: 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20  ta()). The.**   
d8b0: 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20    FuncDef.flags 
d8c0: 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
d8d0: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61 73  to the value pas
d8e0: 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67 73  sed as the flags
d8f0: 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65  .**     paramete
d900: 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55  r..*/.#define FU
d910: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
d920: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
d930: 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
d940: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
d950: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
d960: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
d970: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
d980: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
d990: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
d9a0: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
d9b0: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
d9c0: 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  e VFUNCTION(zNam
d9d0: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
d9e0: 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
d9f0: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
da00: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
da10: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
da20: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
da30: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
da40: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
da50: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
da60: 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d  e FUNCTION2(zNam
da70: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
da80: 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61  NC, xFunc, extra
da90: 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67  Flags) \.  {nArg
daa0: 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e  ,SQLITE_FUNC_CON
dab0: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
dac0: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
dad0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74  NC_NEEDCOLL)|ext
dae0: 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c  raFlags,\.   SQL
daf0: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
db00: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
db10: 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c  0, 0, #zName, 0,
db20: 20 30 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f   0}.#define STR_
db30: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
db40: 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c  nArg, pArg, bNC,
db50: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
db60: 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  g, SQLITE_FUNC_C
db70: 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55  ONSTANT|SQLITE_U
db80: 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
db90: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
dba0: 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46  \.   pArg, 0, xF
dbb0: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
dbc0: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
dbd0: 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
dbe0: 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67   nArg, arg, flag
dbf0: 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  s) \.  {nArg, SQ
dc00: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
dc10: 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66  NT|SQLITE_UTF8|f
dc20: 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64  lags, \.   (void
dc30: 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46   *)arg, 0, likeF
dc40: 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d  unc, 0, 0, #zNam
dc50: 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65  e, 0, 0}.#define
dc60: 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65   AGGREGATE(zName
dc70: 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c  , nArg, arg, nc,
dc80: 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20   xStep, xFinal) 
dc90: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
dca0: 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54  E_UTF8|(nc*SQLIT
dcb0: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
dcc0: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
dcd0: 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30  T_TO_PTR(arg), 0
dce0: 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61  , 0, xStep,xFina
dcf0: 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 23 64  l,#zName,0,0}.#d
dd00: 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 32  efine AGGREGATE2
dd10: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
dd20: 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  g, nc, xStep, xF
dd30: 69 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61 67 73  inal, extraFlags
dd40: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
dd50: 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c  ITE_UTF8|(nc*SQL
dd60: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
dd70: 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20 5c  L)|extraFlags, \
dd80: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
dd90: 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30  O_PTR(arg), 0, 0
dda0: 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23  , xStep,xFinal,#
ddb0: 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a  zName,0,0}../*.*
ddc0: 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61  * All current sa
ddd0: 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f  vepoints are sto
dde0: 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20  red in a linked 
ddf0: 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74  list starting at
de00: 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76  .** sqlite3.pSav
de10: 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73  epoint. The firs
de20: 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65  t element in the
de30: 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73   list is the mos
de40: 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70  t recently.** op
de50: 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20  ened savepoint. 
de60: 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61  Savepoints are a
de70: 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74  dded to the list
de80: 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20   by the vdbe.** 
de90: 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73  OP_Savepoint ins
dea0: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  truction..*/.str
deb0: 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a  uct Savepoint {.
dec0: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
ded0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dee0: 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69        /* Savepoi
def0: 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72  nt name (nul-ter
df00: 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36  minated) */.  i6
df10: 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  4 nDeferredCons;
df20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df30: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64    /* Number of d
df40: 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61  eferred fk viola
df50: 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e  tions */.  i64 n
df60: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
df70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
df80: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65  * Number of defe
df90: 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a  rred imm fk. */.
dfa0: 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65    Savepoint *pNe
dfb0: 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  xt;             
dfc0: 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20        /* Parent 
dfd0: 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e  savepoint (if an
dfe0: 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  y) */.};../*.** 
dff0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  The following ar
e000: 65 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65  e used as the se
e010: 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74  cond parameter t
e020: 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69  o sqlite3Savepoi
e030: 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20  nt(),.** and as 
e040: 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
e050: 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f  to the OP_Savepo
e060: 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  int instruction.
e070: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45  .*/.#define SAVE
e080: 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20  POINT_BEGIN     
e090: 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50   0.#define SAVEP
e0a0: 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20  OINT_RELEASE    
e0b0: 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  1.#define SAVEPO
e0c0: 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32  INT_ROLLBACK   2
e0d0: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  .../*.** Each SQ
e0e0: 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72  Lite module (vir
e0f0: 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e  tual table defin
e100: 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65  ition) is define
e110: 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  d by an.** insta
e120: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
e130: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20  wing structure, 
e140: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
e150: 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a  lite3.aModule.**
e160: 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a   hash table..*/.
e170: 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a  struct Module {.
e180: 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
e190: 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
e1a0: 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61         /* Callba
e1b0: 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20  ck pointers */. 
e1c0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
e1d0: 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
e1e0: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61        /* Name pa
e1f0: 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d  ssed to create_m
e200: 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69  odule() */.  voi
e210: 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20  d *pAux;        
e220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e230: 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64    /* pAux passed
e240: 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c   to create_modul
e250: 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  e() */.  void (*
e260: 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
e270: 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  );            /*
e280: 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74   Module destruct
e290: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  or function */. 
e2a0: 20 54 61 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b   Table *pEpoTab;
e2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2c0: 20 20 20 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f        /* Eponymo
e2d0: 75 73 20 74 61 62 6c 65 20 66 6f 72 20 74 68 69  us table for thi
e2e0: 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s module */.};..
e2f0: 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  /*.** informatio
e300: 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c  n about each col
e310: 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61  umn of an SQL ta
e320: 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61  ble is held in a
e330: 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
e340: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
e350: 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d  .*/.struct Colum
e360: 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  n {.  char *zNam
e370: 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  e;     /* Name o
e380: 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  f this column */
e390: 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20  .  Expr *pDflt; 
e3a0: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76      /* Default v
e3b0: 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  alue of this col
e3c0: 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  umn */.  char *z
e3d0: 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 4f 72 69  Dflt;     /* Ori
e3e0: 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68  ginal text of th
e3f0: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
e400: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 79 70 65  */.  char *zType
e410: 3b 20 20 20 20 20 2f 2a 20 44 61 74 61 20 74 79  ;     /* Data ty
e420: 70 65 20 66 6f 72 20 74 68 69 73 20 63 6f 6c 75  pe for this colu
e430: 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43  mn */.  char *zC
e440: 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c  oll;     /* Coll
e450: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20  ating sequence. 
e460: 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68   If NULL, use th
e470: 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75  e default */.  u
e480: 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20  8 notNull;      
e490: 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66  /* An OE_ code f
e4a0: 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f  or handling a NO
e4b0: 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
e4c0: 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  t */.  char affi
e4d0: 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f  nity;   /* One o
e4e0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  f the SQLITE_AFF
e4f0: 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20  _... values */. 
e500: 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20 20   u8 szEst;      
e510: 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73    /* Estimated s
e520: 69 7a 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75  ize of this colu
e530: 6d 6e 2e 20 20 49 4e 54 3d 3d 31 20 2a 2f 0a 20  mn.  INT==1 */. 
e540: 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20   u8 colFlags;   
e550: 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f    /* Boolean pro
e560: 70 65 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f  perties.  See CO
e570: 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62  LFLAG_ defines b
e580: 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41  elow */.};../* A
e590: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
e5a0: 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67  r Column.colFlag
e5b0: 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  s:.*/.#define CO
e5c0: 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30  LFLAG_PRIMKEY  0
e5d0: 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75  x0001    /* Colu
e5e0: 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74 68  mn is part of th
e5f0: 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  e primary key */
e600: 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
e610: 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30 30 32  _HIDDEN   0x0002
e620: 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20      /* A hidden 
e630: 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74  column in a virt
e640: 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a  ual table */../*
e650: 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67  .** A "Collating
e660: 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64 65   Sequence" is de
e670: 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
e680: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
e690: 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
e6a0: 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79  re. Conceptually
e6b0: 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  , a collating se
e6c0: 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20  quence consists 
e6d0: 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a  of a name and.**
e6e0: 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f   a comparison ro
e6f0: 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e  utine that defin
e700: 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20  es the order of 
e710: 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a  that sequence..*
e720: 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e  *.** If CollSeq.
e730: 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74  xCmp is NULL, it
e740: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a   means that the.
e750: 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ** collating seq
e760: 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e  uence is undefin
e770: 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69  ed.  Indices bui
e780: 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e  lt on an undefin
e790: 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20  ed.** collating 
e7a0: 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74  sequence may not
e7b0: 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69 74   be read or writ
e7c0: 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43  ten..*/.struct C
e7d0: 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20  ollSeq {.  char 
e7e0: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
e7f0: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
e800: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
e810: 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65  ce, UTF-8 encode
e820: 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  d */.  u8 enc;  
e830: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e840: 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61  Text encoding ha
e850: 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20  ndled by xCmp() 
e860: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  */.  void *pUser
e870: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69  ;          /* Fi
e880: 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
e890: 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20  xCmp() */.  int 
e8a0: 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e  (*xCmp)(void*,in
e8b0: 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  t, const void*, 
e8c0: 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  int, const void*
e8d0: 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  );.  void (*xDel
e8e0: 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65  )(void*);  /* De
e8f0: 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73  structor for pUs
e900: 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
e910: 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e  A sort order can
e920: 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20 6f   be either ASC o
e930: 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69  r DESC..*/.#defi
e940: 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43  ne SQLITE_SO_ASC
e950: 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72         0  /* Sor
e960: 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f  t in ascending o
e970: 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rder */.#define 
e980: 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20  SQLITE_SO_DESC  
e990: 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69      1  /* Sort i
e9a0: 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
e9b0: 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75  r */../*.** Colu
e9c0: 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70 65  mn affinity type
e9d0: 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75  s..**.** These u
e9e0: 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d  sed to have mnem
e9f0: 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27  onic name like '
ea00: 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46  i' for SQLITE_AF
ea10: 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a  F_INTEGER and.**
ea20: 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45 5f   't' for SQLITE_
ea30: 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20 77  AFF_TEXT.  But w
ea40: 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69 74  e can save a lit
ea50: 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69 6d  tle space and im
ea60: 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70 65  prove.** the spe
ea70: 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20 6e  ed a little by n
ea80: 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61 6c  umbering the val
ea90: 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65 6c  ues consecutivel
eaa0: 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72  y.  .**.** But r
eab0: 61 74 68 65 72 20 74 68 61 6e 20 73 74 61 72 74  ather than start
eac0: 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65   with 0 or 1, we
ead0: 20 62 65 67 69 6e 20 77 69 74 68 20 27 41 27 2e   begin with 'A'.
eae0: 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77    That way,.** w
eaf0: 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66  hen multiple aff
eb00: 69 6e 69 74 79 20 74 79 70 65 73 20 61 72 65 20  inity types are 
eb10: 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74  concatenated int
eb20: 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a  o a string and.*
eb30: 2a 20 75 73 65 64 20 61 73 20 74 68 65 20 50 34  * used as the P4
eb40: 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77   operand, they w
eb50: 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64  ill be more read
eb60: 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  able..**.** Note
eb70: 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e   also that the n
eb80: 75 6d 65 72 69 63 20 74 79 70 65 73 20 61 72 65  umeric types are
eb90: 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65   grouped togethe
eba0: 72 20 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e  r so that testin
ebb0: 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72  g.** for a numer
ebc0: 69 63 20 74 79 70 65 20 69 73 20 61 20 73 69 6e  ic type is a sin
ebd0: 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  gle comparison. 
ebe0: 20 41 6e 64 20 74 68 65 20 42 4c 4f 42 20 74 79   And the BLOB ty
ebf0: 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a  pe is first..*/.
ec00: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
ec10: 46 46 5f 42 4c 4f 42 20 20 20 20 20 27 41 27 0a  FF_BLOB     'A'.
ec20: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
ec30: 46 46 5f 54 45 58 54 20 20 20 20 20 27 42 27 0a  FF_TEXT     'B'.
ec40: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
ec50: 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 43 27 0a  FF_NUMERIC  'C'.
ec60: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
ec70: 46 46 5f 49 4e 54 45 47 45 52 20 20 27 44 27 0a  FF_INTEGER  'D'.
ec80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
ec90: 46 46 5f 52 45 41 4c 20 20 20 20 20 27 45 27 0a  FF_REAL     'E'.
eca0: 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
ecb0: 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  IsNumericAffinit
ecc0: 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49  y(X)  ((X)>=SQLI
ecd0: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a  TE_AFF_NUMERIC).
ece0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
ecf0: 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65  E_AFF_MASK value
ed00: 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20  s masks off the 
ed10: 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73  significant bits
ed20: 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69   of an.** affini
ed30: 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64  ty value. .*/.#d
ed40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
ed50: 5f 4d 41 53 4b 20 20 20 20 20 30 78 34 37 0a 0a  _MASK     0x47..
ed60: 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c  /*.** Additional
ed70: 20 62 69 74 20 76 61 6c 75 65 73 20 74 68 61 74   bit values that
ed80: 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74   can be ORed wit
ed90: 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69  h an affinity wi
eda0: 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e  thout.** changin
edb0: 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a  g the affinity..
edc0: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  **.** The SQLITE
edd0: 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73  _NOTNULL flag is
ede0: 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f   a combination o
edf0: 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d  f NULLEQ and JUM
ee00: 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63  PIFNULL..** It c
ee10: 61 75 73 65 73 20 61 6e 20 61 73 73 65 72 74 28  auses an assert(
ee20: 29 20 74 6f 20 66 69 72 65 20 69 66 20 65 69 74  ) to fire if eit
ee30: 68 65 72 20 6f 70 65 72 61 6e 64 20 74 6f 20 61  her operand to a
ee40: 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f   comparison.** o
ee50: 70 65 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e  perator is NULL.
ee60: 20 20 49 74 20 69 73 20 61 64 64 65 64 20 74 6f    It is added to
ee70: 20 63 65 72 74 61 69 6e 20 63 6f 6d 70 61 72 69   certain compari
ee80: 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 74 6f  son operators to
ee90: 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61 74 20 74  .** prove that t
eea0: 68 65 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  he operands are 
eeb0: 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e  always NOT NULL.
eec0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
eed0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20  TE_JUMPIFNULL   
eee0: 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69  0x10  /* jumps i
eef0: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
ef00: 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66   is NULL */.#def
ef10: 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  ine SQLITE_STORE
ef20: 50 32 20 20 20 20 20 20 30 78 32 30 20 20 2f 2a  P2      0x20  /*
ef30: 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
ef40: 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20   reg[P2] rather 
ef50: 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65  than jump */.#de
ef60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  fine SQLITE_NULL
ef70: 45 51 20 20 20 20 20 20 20 30 78 38 30 20 20 2f  EQ       0x80  /
ef80: 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23  * NULL=NULL */.#
ef90: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f  define SQLITE_NO
efa0: 54 4e 55 4c 4c 20 20 20 20 20 20 30 78 39 30 20  TNULL      0x90 
efb0: 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
efc0: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 65 76  operands are nev
efd0: 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a  er NULL */../*.*
efe0: 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74  * An object of t
eff0: 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65 61  his type is crea
f000: 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69 72  ted for each vir
f010: 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65  tual table prese
f020: 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74  nt in.** the dat
f030: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 0a 2a  abase schema. .*
f040: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61  *.** If the data
f050: 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73  base schema is s
f060: 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65 72  hared, then ther
f070: 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63  e is one instanc
f080: 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72  e of this.** str
f090: 75 63 74 75 72 65 20 66 6f 72 20 65 61 63 68 20  ucture for each 
f0a0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
f0b0: 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20 74  ion (sqlite3*) t
f0c0: 68 61 74 20 75 73 65 73 20 74 68 65 20 73 68 61  hat uses the sha
f0d0: 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54  red.** schema. T
f0e0: 68 69 73 20 69 73 20 62 65 63 61 75 73 65 20 65  his is because e
f0f0: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
f100: 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73  nection requires
f110: 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a   its own unique.
f120: 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
f130: 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  he sqlite3_vtab*
f140: 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f 20   handle used to 
f150: 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75  access the virtu
f160: 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20 69 6d 70  al table .** imp
f170: 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c  lementation. sql
f180: 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
f190: 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73 68  es can not be sh
f1a0: 61 72 65 64 20 62 65 74 77 65 65 6e 20 0a 2a 2a  ared between .**
f1b0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
f1c0: 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e  tions, even when
f1d0: 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65   the rest of the
f1e0: 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62   in-memory datab
f1f0: 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d 61 20 69  ase .** schema i
f200: 73 20 73 68 61 72 65 64 2c 20 61 73 20 74 68 65  s shared, as the
f210: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
f220: 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68 65  often stores the
f230: 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
f240: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70  nection handle p
f250: 61 73 73 65 64 20 74 6f 20 69 74 20 76 69 61 20  assed to it via 
f260: 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f  the xConnect() o
f270: 72 20 78 43 72 65 61 74 65 28 29 20 6d 65 74 68  r xCreate() meth
f280: 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69  od.** during ini
f290: 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65  tialization inte
f2a0: 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61 74  rnally. This dat
f2b0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
f2c0: 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74   handle may.** t
f2d0: 68 65 6e 20 62 65 20 75 73 65 64 20 62 79 20 74  hen be used by t
f2e0: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
f2f0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
f300: 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20 74  to access real t
f310: 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74 68 69 6e  ables .** within
f320: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 53   the database. S
f330: 6f 20 74 68 61 74 20 74 68 65 79 20 61 70 70 65  o that they appe
f340: 61 72 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ar as part of th
f350: 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a 20 74 72  e callers .** tr
f360: 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73 65  ansaction, these
f370: 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20 74   accesses need t
f380: 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74 68  o be made via th
f390: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
f3a0: 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  .** connection a
f3b0: 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20 65  s that used to e
f3c0: 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72 61  xecute SQL opera
f3d0: 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69 72  tions on the vir
f3e0: 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  tual table..**.*
f3f0: 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a  * All VTable obj
f400: 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65 73  ects that corres
f410: 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c 65  pond to a single
f420: 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61 72   table in a shar
f430: 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 73  ed.** database s
f440: 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69 61  chema are initia
f450: 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20  lly stored in a 
f460: 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e  linked-list poin
f470: 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65  ted to by.** the
f480: 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d   Table.pVTable m
f490: 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20 6f  ember variable o
f4a0: 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  f the correspond
f4b0: 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63 74  ing Table object
f4c0: 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c  ..** When an sql
f4d0: 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f  ite3_prepare() o
f4e0: 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71 75  peration is requ
f4f0: 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  ired to access t
f500: 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  he virtual.** ta
f510: 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65 73  ble, it searches
f520: 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74 68   the list for th
f530: 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63 6f  e VTable that co
f540: 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
f550: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
f560: 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68  nection doing th
f570: 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20 61  e preparing so a
f580: 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f 72  s to use the cor
f590: 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  rect.** sqlite3_
f5a0: 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20  vtab* handle in 
f5b0: 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65  the compiled que
f5c0: 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61  ry..**.** When a
f5d0: 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c  n in-memory Tabl
f5e0: 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c 65  e object is dele
f5f0: 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65  ted (for example
f600: 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68   when the.** sch
f610: 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65 6c  ema is being rel
f620: 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20 72  oaded for some r
f630: 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61 62  eason), the VTab
f640: 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20 6e  le objects are n
f650: 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61  ot .** deleted a
f660: 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  nd the sqlite3_v
f670: 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65  tab* handles are
f680: 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74   not xDisconnect
f690: 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65 64 69 61  ()ed .** immedia
f6a0: 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74  tely. Instead, t
f6b0: 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72  hey are moved fr
f6c0: 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54  om the Table.pVT
f6d0: 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20  able list to.** 
f6e0: 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c  another linked l
f6f0: 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74 68  ist headed by th
f700: 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f  e sqlite3.pDisco
f710: 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20  nnect member of 
f720: 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e  the.** correspon
f730: 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72  ding sqlite3 str
f740: 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72 65  ucture. They are
f750: 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44   then deleted/xD
f760: 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a 20  isconnected .** 
f770: 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61 74  next time a stat
f780: 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72 65  ement is prepare
f790: 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c  d using said sql
f7a0: 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64  ite3*. This is d
f7b0: 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20  one.** to avoid 
f7c0: 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20  deadlock issues 
f7d0: 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70  involving multip
f7e0: 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  le sqlite3.mutex
f7f0: 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66   mutexes..** Ref
f800: 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61  er to comments a
f810: 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71  bove function sq
f820: 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
f830: 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20  ist() for an.** 
f840: 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74  explanation as t
f850: 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66 65  o why it is safe
f860: 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79   to add an entry
f870: 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70   to an sqlite3.p
f880: 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69  Disconnect.** li
f890: 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69  st without holdi
f8a0: 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ng the correspon
f8b0: 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74  ding sqlite3.mut
f8c0: 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20  ex mutex..**.** 
f8d0: 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f  The memory for o
f8e0: 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20 74  bjects of this t
f8f0: 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c  ype is always al
f900: 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a 2a 20 73  located by .** s
f910: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29  qlite3DbMalloc()
f920: 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e  , using the conn
f930: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74  ection handle st
f940: 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64  ored in VTable.d
f950: 62 20 61 73 20 0a 2a 2a 20 74 68 65 20 66 69 72  b as .** the fir
f960: 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  st argument..*/.
f970: 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a  struct VTable {.
f980: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
f990: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
f9a0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
f9b0: 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  on associated wi
f9c0: 74 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  th this table */
f9d0: 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b  .  Module *pMod;
f9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f9f0: 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c  Pointer to modul
fa00: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
fa10: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74   */.  sqlite3_vt
fa20: 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20  ab *pVtab;      
fa30: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74  /* Pointer to vt
fa40: 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20  ab instance */. 
fa50: 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
fa60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
fa70: 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73  mber of pointers
fa80: 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
fa90: 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73  re */.  u8 bCons
faa0: 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20  traint;         
fab0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e    /* True if con
fac0: 73 74 72 61 69 6e 74 73 20 61 72 65 20 73 75 70  straints are sup
fad0: 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20  ported */.  int 
fae0: 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  iSavepoint;     
faf0: 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f        /* Depth o
fb00: 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20  f the SAVEPOINT 
fb10: 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c  stack */.  VTabl
fb20: 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  e *pNext;       
fb30: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20       /* Next in 
fb40: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65  linked list (see
fb50: 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f   above) */.};../
fb60: 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 20  *.** The schema 
fb70: 66 6f 72 20 65 61 63 68 20 53 51 4c 20 74 61 62  for each SQL tab
fb80: 6c 65 20 61 6e 64 20 76 69 65 77 20 69 73 20 72  le and view is r
fb90: 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
fba0: 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e  mory.** by an in
fbb0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
fbc0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
fbd0: 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62  e..*/.struct Tab
fbe0: 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  le {.  char *zNa
fbf0: 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  me;         /* N
fc00: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
fc10: 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f   or view */.  Co
fc20: 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20  lumn *aCol;     
fc30: 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
fc40: 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c  n about each col
fc50: 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a  umn */.  Index *
fc60: 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a  pIndex;       /*
fc70: 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64   List of SQL ind
fc80: 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62  exes on this tab
fc90: 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  le. */.  Select 
fca0: 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
fcb0: 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73   NULL for tables
fcc0: 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66  .  Points to def
fcd0: 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65  inition if a vie
fce0: 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46  w. */.  FKey *pF
fcf0: 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Key;         /* 
fd00: 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61  Linked list of a
fd10: 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  ll foreign keys 
fd20: 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  in this table */
fd30: 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66  .  char *zColAff
fd40: 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e  ;       /* Strin
fd50: 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
fd60: 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
fd70: 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 69 66 6e 64 65  column */.#ifnde
fd80: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48  f SQLITE_OMIT_CH
fd90: 45 43 4b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a  ECK.  ExprList *
fda0: 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c  pCheck;    /* Al
fdb0: 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  l CHECK constrai
fdc0: 6e 74 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  nts */.#endif.  
fdd0: 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20  int tnum;       
fde0: 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72       /* Root BTr
fdf0: 65 65 20 70 61 67 65 20 66 6f 72 20 74 68 69 73  ee page for this
fe00: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 31 36 20   table */.  i16 
fe10: 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20  iPKey;          
fe20: 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74   /* If not negat
fe30: 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50  ive, use aCol[iP
fe40: 4b 65 79 5d 20 61 73 20 74 68 65 20 72 6f 77 69  Key] as the rowi
fe50: 64 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b  d */.  i16 nCol;
fe60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
fe70: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
fe80: 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a   in this table *
fe90: 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b 20 20 20  /.  u16 nRef;   
fea0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
feb0: 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
fec0: 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a  o this Table */.
fed0: 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67    LogEst nRowLog
fee0: 45 73 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61  Est;   /* Estima
fef0: 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c  ted rows in tabl
ff00: 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f  e - from sqlite_
ff10: 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20  stat1 table */. 
ff20: 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52 6f 77   LogEst szTabRow
ff30: 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74  ;     /* Estimat
ff40: 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63 68 20  ed size of each 
ff50: 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62 79 74  table row in byt
ff60: 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  es */.#ifdef SQL
ff70: 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d  ITE_ENABLE_COSTM
ff80: 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73  ULT.  LogEst cos
ff90: 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f  tMult;     /* Co
ffa0: 73 74 20 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f  st multiplier fo
ffb0: 72 20 75 73 69 6e 67 20 74 68 69 73 20 74 61 62  r using this tab
ffc0: 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75  le */.#endif.  u
ffd0: 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20 20  8 tabFlags;     
ffe0: 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54      /* Mask of T
fff0: 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  F_* values */.  
10000 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20  u8 keyConf;     
10010 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20       /* What to 
10020 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e  do in case of un
10030 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63  iqueness conflic
10040 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69  t on iPKey */.#i
10050 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
10060 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69  T_ALTERTABLE.  i
10070 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b  nt addColOffset;
10080 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e      /* Offset in
10090 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
100a0 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20  mt to add a new 
100b0 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66  column */.#endif
100c0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
100d0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
100e0 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41  E.  int nModuleA
100f0 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  rg;      /* Numb
10100 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
10110 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f  to the module */
10120 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75  .  char **azModu
10130 6c 65 41 72 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f  leArg;  /* 0: mo
10140 64 75 6c 65 20 31 3a 20 73 63 68 65 6d 61 20 32  dule 1: schema 2
10150 3a 20 76 74 61 62 20 6e 61 6d 65 20 33 2e 2e 2e  : vtab name 3...
10160 3a 20 61 72 67 73 20 2a 2f 0a 20 20 56 54 61 62  : args */.  VTab
10170 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20 20  le *pVTable;    
10180 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61 62   /* List of VTab
10190 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23  le objects. */.#
101a0 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72 20  endif.  Trigger 
101b0 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20  *pTrigger;   /* 
101c0 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 73  List of triggers
101d0 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65   stored in pSche
101e0 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  ma */.  Schema *
101f0 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  pSchema;     /* 
10200 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74  Schema that cont
10210 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20  ains this table 
10220 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78  */.  Table *pNex
10230 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78  tZombie;  /* Nex
10240 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70  t on the Parse.p
10250 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a  ZombieTab list *
10260 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
10270 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54  wed values for T
10280 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a  able.tabFlags..*
10290 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64 65  *.** TF_OOOHidde
102a0 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 76 69 72  n applies to vir
102b0 74 75 61 6c 20 74 61 62 6c 65 73 20 74 68 61 74  tual tables that
102c0 20 68 61 76 65 20 68 69 64 64 65 6e 20 63 6f 6c   have hidden col
102d0 75 6d 6e 73 20 74 68 61 74 20 61 72 65 0a 2a 2a  umns that are.**
102e0 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f 6e   followed by non
102f0 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e  -hidden columns.
10300 20 20 45 78 61 6d 70 6c 65 3a 20 20 22 43 52 45    Example:  "CRE
10310 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
10320 45 20 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74 61  E x USING.** vta
10330 62 31 28 61 20 48 49 44 44 45 4e 2c 20 62 29 3b  b1(a HIDDEN, b);
10340 22 2e 20 20 53 69 6e 63 65 20 22 62 22 20 69 73  ".  Since "b" is
10350 20 61 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f   a non-hidden co
10360 6c 75 6d 6e 20 62 75 74 20 22 61 22 20 69 73 20  lumn but "a" is 
10370 68 69 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20 54  hidden,.** the T
10380 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74 72  F_OOOHidden attr
10390 69 62 75 74 65 20 77 6f 75 6c 64 20 61 70 70 6c  ibute would appl
103a0 79 20 69 6e 20 74 68 69 73 20 63 61 73 65 2e 20  y in this case. 
103b0 20 53 75 63 68 20 74 61 62 6c 65 73 20 72 65 71   Such tables req
103c0 75 69 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c 20  uire.** special 
103d0 68 61 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67 20  handling during 
103e0 49 4e 53 45 52 54 20 70 72 6f 63 65 73 73 69 6e  INSERT processin
103f0 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  g..*/.#define TF
10400 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20  _Readonly       
10410 20 30 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64   0x01    /* Read
10420 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62  -only system tab
10430 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  le */.#define TF
10440 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20  _Ephemeral      
10450 20 30 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65   0x02    /* An e
10460 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a  phemeral table *
10470 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73  /.#define TF_Has
10480 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30  PrimaryKey   0x0
10490 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61  4    /* Table ha
104a0 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20  s a primary key 
104b0 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75  */.#define TF_Au
104c0 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78  toincrement   0x
104d0 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72  08    /* Integer
104e0 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20   primary key is 
104f0 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f  autoincrement */
10500 0a 23 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74  .#define TF_Virt
10510 75 61 6c 20 20 20 20 20 20 20 20 20 30 78 31 30  ual         0x10
10520 20 20 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74      /* Is a virt
10530 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  ual table */.#de
10540 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52  fine TF_WithoutR
10550 6f 77 69 64 20 20 20 20 30 78 32 30 20 20 20 20  owid    0x20    
10560 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50 52  /* No rowid.  PR
10570 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68 65  IMARY KEY is the
10580 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
10590 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69  TF_NoVisibleRowi
105a0 64 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4e 6f  d  0x40    /* No
105b0 20 75 73 65 72 2d 76 69 73 69 62 6c 65 20 22 72   user-visible "r
105c0 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  owid" column */.
105d0 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48 69  #define TF_OOOHi
105e0 64 64 65 6e 20 20 20 20 20 20 20 30 78 38 30 20  dden       0x80 
105f0 20 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64     /* Out-of-Ord
10600 65 72 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  er hidden column
10610 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73  s */.../*.** Tes
10620 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65 72  t to see whether
10630 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20   or not a table 
10640 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  is a virtual tab
10650 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20  le.  This is.** 
10660 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20  done as a macro 
10670 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20  so that it will 
10680 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74  be optimized out
10690 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a   when virtual.**
106a0 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69   table support i
106b0 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74  s omitted from t
106c0 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66  he build..*/.#if
106d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
106e0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
106f0 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61   define IsVirtua
10700 6c 28 58 29 20 20 20 20 20 20 28 28 28 58 29 2d  l(X)      (((X)-
10710 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 56  >tabFlags & TF_V
10720 69 72 74 75 61 6c 29 21 3d 30 29 0a 23 20 20 64  irtual)!=0).#  d
10730 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
10740 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63  lumn(X) (((X)->c
10750 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41  olFlags & COLFLA
10760 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65  G_HIDDEN)!=0).#e
10770 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73  lse.#  define Is
10780 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20  Virtual(X)      
10790 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  0.#  define IsHi
107a0 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a  ddenColumn(X) 0.
107b0 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 65 73 20  #endif../* Does 
107c0 74 68 65 20 74 61 62 6c 65 20 68 61 76 65 20 61  the table have a
107d0 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e   rowid */.#defin
107e0 65 20 48 61 73 52 6f 77 69 64 28 58 29 20 20 20  e HasRowid(X)   
107f0 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67    (((X)->tabFlag
10800 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f  s & TF_WithoutRo
10810 77 69 64 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65  wid)==0).#define
10820 20 56 69 73 69 62 6c 65 52 6f 77 69 64 28 58 29   VisibleRowid(X)
10830 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73   (((X)->tabFlags
10840 20 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52   & TF_NoVisibleR
10850 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a  owid)==0)../*.**
10860 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65   Each foreign ke
10870 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20  y constraint is 
10880 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
10890 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
108a0 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20  ucture..**.** A 
108b0 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61  foreign key is a
108c0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
108d0 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20  wo tables.  The 
108e0 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a  "from" table is.
108f0 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  ** the table tha
10900 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52  t contains the R
10910 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
10920 20 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68   that creates th
10930 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  e foreign.** key
10940 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c  .  The "to" tabl
10950 65 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74  e is the table t
10960 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20  hat is named in 
10970 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
10980 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64  lause..** Consid
10990 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a  er this example:
109a0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  .**.**     CREAT
109b0 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20  E TABLE ex1(.** 
109c0 20 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20        a INTEGER 
109d0 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20  PRIMARY KEY,.** 
109e0 20 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20        b INTEGER 
109f0 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52  CONSTRAINT fk1 R
10a00 45 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29  EFERENCES ex2(x)
10a10 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a  .**     );.**.**
10a20 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79   For foreign key
10a30 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d   "fk1", the from
10a40 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20  -table is "ex1" 
10a50 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65  and the to-table
10a60 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71   is "ex2"..** Eq
10a70 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a  uivalent names:.
10a80 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74  **.**     from-t
10a90 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61  able == child-ta
10aa0 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d  ble.**       to-
10ab0 74 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d  table == parent-
10ac0 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68  table.**.** Each
10ad0 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
10ae0 73 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20  se generates an 
10af0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
10b00 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
10b10 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20  ure.** which is 
10b20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
10b30 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65  from-table.  The
10b40 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e   to-table need n
10b50 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a  ot exist when.**
10b60 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20   the from-table 
10b70 69 73 20 63 72 65 61 74 65 64 2e 20 20 54 68 65  is created.  The
10b80 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68   existence of th
10b90 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f  e to-table is no
10ba0 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a  t checked..**.**
10bb0 20 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c   The list of all
10bc0 20 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69   parents for chi
10bd0 6c 64 20 54 61 62 6c 65 20 58 20 69 73 20 68 65  ld Table X is he
10be0 6c 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a  ld at X.pFKey..*
10bf0 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61  *.** A list of a
10c00 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20  ll children for 
10c10 61 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20  a table named Z 
10c20 28 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74  (which might not
10c30 20 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20   even exist).** 
10c40 69 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d  is held in Schem
10c50 61 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68 20  a.fkeyHash with 
10c60 61 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e  a hash key of Z.
10c70 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20  .*/.struct FKey 
10c80 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d  {.  Table *pFrom
10c90 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63  ;     /* Table c
10ca0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45  ontaining the RE
10cb0 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
10cc0 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a  (aka: Child) */.
10cd0 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f    FKey *pNextFro
10ce0 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79  m;  /* Next FKey
10cf0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 69   with the same i
10d00 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61  n pFrom. Next pa
10d10 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f  rent of pFrom */
10d20 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20  .  char *zTo;   
10d30 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
10d40 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b  table that the k
10d50 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b  ey points to (ak
10d60 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20  a: Parent) */.  
10d70 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20  FKey *pNextTo;  
10d80 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74    /* Next with t
10d90 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78  he same zTo. Nex
10da0 74 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20  t child of zTo. 
10db0 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76  */.  FKey *pPrev
10dc0 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f  To;    /* Previo
10dd0 75 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  us with the same
10de0 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43   zTo */.  int nC
10df0 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ol;         /* N
10e00 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
10e10 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a   in this key */.
10e20 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33    /* EV: R-30323
10e30 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69  -21917 */.  u8 i
10e40 73 44 65 66 65 72 72 65 64 3b 20 20 20 20 20 20  sDeferred;      
10e50 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73   /* True if cons
10e60 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20  traint checking 
10e70 69 73 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c  is deferred till
10e80 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20   COMMIT */.  u8 
10e90 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20  aAction[2];     
10ea0 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20     /* ON DELETE 
10eb0 61 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63  and ON UPDATE ac
10ec0 74 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76  tions, respectiv
10ed0 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ely */.  Trigger
10ee0 20 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f   *apTrigger[2];/
10ef0 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72 20 61  * Triggers for a
10f00 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73  Action[] actions
10f10 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f   */.  struct sCo
10f20 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d  lMap {      /* M
10f30 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e  apping of column
10f40 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f  s in pFrom to co
10f50 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a  lumns in zTo */.
10f60 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20      int iFrom;  
10f70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
10f80 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20  ex of column in 
10f90 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61  pFrom */.    cha
10fa0 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20  r *zCol;        
10fb0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f     /* Name of co
10fc0 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66  lumn in zTo.  If
10fd0 20 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52   NULL use PRIMAR
10fe0 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f  Y KEY */.  } aCo
10ff0 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20  l[1];           
11000 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f   /* One entry fo
11010 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63  r each of nCol c
11020 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  olumns */.};../*
11030 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f  .** SQLite suppo
11040 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65  rts many differe
11050 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c  nt ways to resol
11060 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a  ve a constraint.
11070 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42  ** error.  ROLLB
11080 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  ACK processing m
11090 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73  eans that a cons
110a0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
110b0 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f  .** causes the o
110c0 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63  peration in proc
110d0 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20  ess to fail and 
110e0 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
110f0 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74  transaction.** t
11100 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
11110 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73  .  ABORT process
11120 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70  ing means the op
11130 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
11140 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20  ss.** fails and 
11150 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65  any prior change
11160 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20  s from that one 
11170 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61  operation are ba
11180 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74  cked out,.** but
11190 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
111a0 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62   is not rolled b
111b0 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65  ack.  FAIL proce
111c0 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74  ssing means that
111d0 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f  .** the operatio
111e0 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74  n in progress st
111f0 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20  ops and returns 
11200 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20  an error code.  
11210 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61  But prior.** cha
11220 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20  nges due to the 
11230 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61  same operation a
11240 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75  re not backed ou
11250 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63  t and no rollbac
11260 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47  k.** occurs.  IG
11270 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20  NORE means that 
11280 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72  the particular r
11290 6f 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74  ow that caused t
112a0 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a  he constraint.**
112b0 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e   error is not in
112c0 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65  serted or update
112d0 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63  d.  Processing c
112e0 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20  ontinues and no 
112f0 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75  error.** is retu
11300 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d  rned.  REPLACE m
11310 65 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69  eans that preexi
11320 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72  sting database r
11330 6f 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a  ows that caused.
11340 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73  ** a UNIQUE cons
11350 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
11360 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20   are removed so 
11370 74 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73  that the new ins
11380 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65  ert or.** update
11390 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50   can proceed.  P
113a0 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e  rocessing contin
113b0 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ues and no error
113c0 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a   is reported..**
113d0 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45  .** RESTRICT, SE
113e0 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41  TNULL, and CASCA
113f0 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79  DE actions apply
11400 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e   only to foreign
11410 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49   keys..** RESTRI
11420 43 54 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  CT is the same a
11430 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45  s ABORT for IMME
11440 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65  DIATE foreign ke
11450 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61  ys and the.** sa
11460 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66  me as ROLLBACK f
11470 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65 79 73  or DEFERRED keys
11480 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73  .  SETNULL means
11490 20 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67   that the foreig
114a0 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20  n.** key is set 
114b0 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44  to NULL.  CASCAD
114c0 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44  E means that a D
114d0 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
114e0 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65  of the.** refere
114f0 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69  nced table row i
11500 73 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74  s propagated int
11510 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68  o the row that h
11520 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65  olds the.** fore
11530 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20  ign key..** .** 
11540 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  The following sy
11550 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72  mbolic values ar
11560 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64  e used to record
11570 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f   which type.** o
11580 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65  f action to take
11590 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  ..*/.#define OE_
115a0 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20  None     0   /* 
115b0 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73  There is no cons
115c0 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20  traint to check 
115d0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f  */.#define OE_Ro
115e0 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61  llback 1   /* Fa
115f0 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  il the operation
11600 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68   and rollback th
11610 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f  e transaction */
11620 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72  .#define OE_Abor
11630 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b  t    2   /* Back
11640 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75 74   out changes but
11650 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20   do no rollback 
11660 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23  transaction */.#
11670 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20  define OE_Fail  
11680 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74     3   /* Stop t
11690 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74  he operation but
116a0 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72   leave all prior
116b0 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66   changes */.#def
116c0 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20  ine OE_Ignore   
116d0 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68  4   /* Ignore th
116e0 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20  e error. Do not 
116f0 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72  do the INSERT or
11700 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69   UPDATE */.#defi
11710 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35  ne OE_Replace  5
11720 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69     /* Delete exi
11730 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68  sting record, th
11740 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20  en do INSERT or 
11750 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69  UPDATE */..#defi
11760 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20 36  ne OE_Restrict 6
11770 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66     /* OE_Abort f
11780 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45  or IMMEDIATE, OE
11790 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45  _Rollback for DE
117a0 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e  FERRED */.#defin
117b0 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20  e OE_SetNull  7 
117c0 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72    /* Set the for
117d0 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74  eign key value t
117e0 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  o NULL */.#defin
117f0 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 38 20  e OE_SetDflt  8 
11800 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72    /* Set the for
11810 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74  eign key value t
11820 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f  o its default */
11830 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63  .#define OE_Casc
11840 61 64 65 20 20 39 20 20 20 2f 2a 20 43 61 73 63  ade  9   /* Casc
11850 61 64 65 20 74 68 65 20 63 68 61 6e 67 65 73 20  ade the changes 
11860 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44  */..#define OE_D
11870 65 66 61 75 6c 74 20 20 31 30 20 20 2f 2a 20 44  efault  10  /* D
11880 6f 20 77 68 61 74 65 76 65 72 20 74 68 65 20 64  o whatever the d
11890 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73  efault action is
118a0 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69   */.../*.** An i
118b0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
118c0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
118d0 72 65 20 69 73 20 70 61 73 73 65 64 20 61 73 20  re is passed as 
118e0 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67  the first.** arg
118f0 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33  ument to sqlite3
11900 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61  VdbeKeyCompare a
11910 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  nd is used to co
11920 6e 74 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63 6f  ntrol the .** co
11930 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20  mparison of the 
11940 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a  two index keys..
11950 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20  **.** Note that 
11960 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64  aSortOrder[] and
11970 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46   aColl[] have nF
11980 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54  ield+1 slots.  T
11990 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65  here.** are nFie
119a0 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68 65  ld slots for the
119b0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69   columns of an i
119c0 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65 78  ndex then one ex
119d0 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20  tra slot.** for 
119e0 74 68 65 20 72 6f 77 69 64 20 61 74 20 74 68 65  the rowid at the
119f0 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   end..*/.struct 
11a00 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20  KeyInfo {.  u32 
11a10 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
11a20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 66  /* Number of ref
11a30 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73 20  erences to this 
11a40 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a  KeyInfo object *
11a50 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
11a60 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
11a70 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f  encoding - one o
11a80 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46  f the SQLITE_UTF
11a90 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31  * values */.  u1
11aa0 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  6 nField;       
11ab0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b    /* Number of k
11ac0 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  ey columns in th
11ad0 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36  e index */.  u16
11ae0 20 6e 58 46 69 65 6c 64 3b 20 20 20 20 20 20 20   nXField;       
11af0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
11b00 6c 75 6d 6e 73 20 62 65 79 6f 6e 64 20 74 68 65  lumns beyond the
11b10 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a   key columns */.
11b20 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
11b30 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
11b40 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
11b50 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f   */.  u8 *aSortO
11b60 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72  rder;     /* Sor
11b70 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68  t order for each
11b80 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f   column. */.  Co
11b90 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b  llSeq *aColl[1];
11ba0 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
11bb0 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68  equence for each
11bc0 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79   term of the key
11bd0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
11be0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
11bf0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
11c00 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72  ture holds infor
11c10 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 0a 2a  mation about a.*
11c20 2a 20 73 69 6e 67 6c 65 20 69 6e 64 65 78 20 72  * single index r
11c30 65 63 6f 72 64 20 74 68 61 74 20 68 61 73 20 61  ecord that has a
11c40 6c 72 65 61 64 79 20 62 65 65 6e 20 70 61 72 73  lready been pars
11c50 65 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69  ed out into indi
11c60 76 69 64 75 61 6c 0a 2a 2a 20 76 61 6c 75 65 73  vidual.** values
11c70 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64  ..**.** A record
11c80 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68   is an object th
11c90 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  at contains one 
11ca0 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f  or more fields o
11cb0 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72  f data..** Recor
11cc0 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73  ds are used to s
11cd0 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74  tore the content
11ce0 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20   of a table row 
11cf0 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  and to store.** 
11d00 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e  the key of an in
11d10 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63  dex.  A blob enc
11d20 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72  oding of a recor
11d30 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a  d is created by.
11d40 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65  ** the OP_MakeRe
11d50 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74  cord opcode of t
11d60 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64  he VDBE and is d
11d70 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74  isassembled by t
11d80 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20  he.** OP_Column 
11d90 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  opcode..**.** Th
11da0 69 73 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  is structure hol
11db0 64 73 20 61 20 72 65 63 6f 72 64 20 74 68 61 74  ds a record that
11dc0 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
11dd0 6e 20 64 69 73 61 73 73 65 6d 62 6c 65 64 0a 2a  n disassembled.*
11de0 2a 20 69 6e 74 6f 20 69 74 73 20 63 6f 6e 73 74  * into its const
11df0 69 74 75 65 6e 74 20 66 69 65 6c 64 73 2e 0a 2a  ituent fields..*
11e00 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64 20  *.** The r1 and 
11e10 72 32 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62  r2 member variab
11e20 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65  les are only use
11e30 64 20 62 79 20 74 68 65 20 6f 70 74 69 6d 69 7a  d by the optimiz
11e40 65 64 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a  ed comparison.**
11e50 20 66 75 6e 63 74 69 6f 6e 73 20 76 64 62 65 52   functions vdbeR
11e60 65 63 6f 72 64 43 6f 6d 70 61 72 65 49 6e 74 28  ecordCompareInt(
11e70 29 20 61 6e 64 20 76 64 62 65 52 65 63 6f 72 64  ) and vdbeRecord
11e80 43 6f 6d 70 61 72 65 53 74 72 69 6e 67 28 29 2e  CompareString().
11e90 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63  .*/.struct Unpac
11ea0 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65  kedRecord {.  Ke
11eb0 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
11ec0 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61    /* Collation a
11ed0 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e  nd sort-order in
11ee0 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 75  formation */.  u
11ef0 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  16 nField;      
11f00 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11f10 65 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65 6d  entries in apMem
11f20 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65 66 61 75  [] */.  i8 defau
11f30 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20 43  lt_rc;      /* C
11f40 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c 74  omparison result
11f50 20 69 66 20 6b 65 79 73 20 61 72 65 20 65 71 75   if keys are equ
11f60 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72 72 43 6f  al */.  u8 errCo
11f70 64 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45  de;         /* E
11f80 72 72 6f 72 20 64 65 74 65 63 74 65 64 20 62 79  rror detected by
11f90 20 78 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 20   xRecordCompare 
11fa0 28 43 4f 52 52 55 50 54 20 6f 72 20 4e 4f 4d 45  (CORRUPT or NOME
11fb0 4d 29 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65  M) */.  Mem *aMe
11fc0 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  m;          /* V
11fd0 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72  alues */.  int r
11fe0 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  1;             /
11ff0 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
12000 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29  n if (lhs > rhs)
12010 20 2a 2f 0a 20 20 69 6e 74 20 72 32 3b 20 20 20   */.  int r2;   
12020 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
12030 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20  ue to return if 
12040 28 72 68 73 20 3c 20 6c 68 73 29 20 2a 2f 0a 7d  (rhs < lhs) */.}
12050 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  ;.../*.** Each S
12060 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70 72  QL index is repr
12070 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
12080 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  y by an.** insta
12090 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
120a0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
120b0 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e  **.** The column
120c0 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  s of the table t
120d0 68 61 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e  hat are to be in
120e0 64 65 78 65 64 20 61 72 65 20 64 65 73 63 72 69  dexed are descri
120f0 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69  bed.** by the ai
12100 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f  Column[] field o
12110 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
12120 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
12130 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61  suppose.** we ha
12140 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ve the following
12150 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78   table and index
12160 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41  :.**.**     CREA
12170 54 45 20 54 41 42 4c 45 20 45 78 31 28 63 31 20  TE TABLE Ex1(c1 
12180 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20  int, c2 int, c3 
12190 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52  text);.**     CR
121a0 45 41 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f  EATE INDEX Ex2 O
121b0 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a  N Ex1(c3,c1);.**
121c0 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65  .** In the Table
121d0 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
121e0 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d  ibing Ex1, nCol=
121f0 3d 33 20 62 65 63 61 75 73 65 20 74 68 65 72 65  =3 because there
12200 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f   are.** three co
12210 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
12220 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65  le.  In the Inde
12230 78 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  x structure desc
12240 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e  ribing.** Ex2, n
12250 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20  Column==2 since 
12260 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d  2 of the 3 colum
12270 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e  ns of Ex1 are in
12280 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61  dexed..** The va
12290 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20  lue of aiColumn 
122a0 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f  is {2, 0}.  aiCo
122b0 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75  lumn[0]==2 becau
122c0 73 65 20 74 68 65 20 0a 2a 2a 20 66 69 72 73 74  se the .** first
122d0 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e   column to be in
122e0 64 65 78 65 64 20 28 63 33 29 20 68 61 73 20 61  dexed (c3) has a
122f0 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20  n index of 2 in 
12300 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54  Ex1.aCol[]..** T
12310 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e  he second column
12320 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28   to be indexed (
12330 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78  c1) has an index
12340 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e   of 0 in.** Ex1.
12350 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78  aCol[], hence Ex
12360 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30  2.aiColumn[1]==0
12370 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65  ..**.** The Inde
12380 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20  x.onError field 
12390 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68  determines wheth
123a0 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e  er or not the in
123b0 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a  dexed columns.**
123c0 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65 20   must be unique 
123d0 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69  and what to do i
123e0 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20  f they are not. 
123f0 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72   When Index.onEr
12400 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20  ror=OE_None,.** 
12410 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73  it means this is
12420 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e   not a unique in
12430 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20  dex.  Otherwise 
12440 69 74 20 69 73 20 61 20 75 6e 69 71 75 65 20 69  it is a unique i
12450 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20  ndex.** and the 
12460 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f  value of Index.o
12470 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20  nError indicate 
12480 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69  the which confli
12490 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a  ct resolution .*
124a0 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65  * algorithm to e
124b0 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61  mploy whenever a
124c0 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
124d0 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f  e to insert a no
124e0 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d  n-unique.** elem
124f0 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65  ent..**.** While
12500 20 70 61 72 73 69 6e 67 20 61 20 43 52 45 41 54   parsing a CREAT
12510 45 20 54 41 42 4c 45 20 6f 72 20 43 52 45 41 54  E TABLE or CREAT
12520 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e  E INDEX statemen
12530 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  t in order to.**
12540 20 67 65 6e 65 72 61 74 65 20 56 44 42 45 20 63   generate VDBE c
12550 6f 64 65 20 28 61 73 20 6f 70 70 6f 73 65 64 20  ode (as opposed 
12560 74 6f 20 70 61 72 73 69 6e 67 20 6f 6e 65 20 72  to parsing one r
12570 65 61 64 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69  ead from an sqli
12580 74 65 5f 6d 61 73 74 65 72 0a 2a 2a 20 74 61 62  te_master.** tab
12590 6c 65 20 61 73 20 70 61 72 74 20 6f 66 20 70 61  le as part of pa
125a0 72 73 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e  rsing an existin
125b0 67 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  g database schem
125c0 61 29 2c 20 74 72 61 6e 73 69 65 6e 74 20 69 6e  a), transient in
125d0 73 74 61 6e 63 65 73 0a 2a 2a 20 6f 66 20 74 68  stances.** of th
125e0 69 73 20 73 74 72 75 63 74 75 72 65 20 6d 61 79  is structure may
125f0 20 62 65 20 63 72 65 61 74 65 64 2e 20 49 6e 20   be created. In 
12600 74 68 69 73 20 63 61 73 65 20 74 68 65 20 49 6e  this case the In
12610 64 65 78 2e 74 6e 75 6d 20 76 61 72 69 61 62 6c  dex.tnum variabl
12620 65 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20  e is.** used to 
12630 73 74 6f 72 65 20 74 68 65 20 61 64 64 72 65 73  store the addres
12640 73 20 6f 66 20 61 20 56 44 42 45 20 69 6e 73 74  s of a VDBE inst
12650 72 75 63 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 64  ruction, not a d
12660 61 74 61 62 61 73 65 20 70 61 67 65 0a 2a 2a 20  atabase page.** 
12670 6e 75 6d 62 65 72 20 28 69 74 20 63 61 6e 6e 6f  number (it canno
12680 74 20 2d 20 74 68 65 20 64 61 74 61 62 61 73 65  t - the database
12690 20 70 61 67 65 20 69 73 20 6e 6f 74 20 61 6c 6c   page is not all
126a0 6f 63 61 74 65 64 20 75 6e 74 69 6c 20 74 68 65  ocated until the
126b0 20 56 44 42 45 0a 2a 2a 20 70 72 6f 67 72 61 6d   VDBE.** program
126c0 20 69 73 20 65 78 65 63 75 74 65 64 29 2e 20 53   is executed). S
126d0 65 65 20 63 6f 6e 76 65 72 74 54 6f 57 69 74 68  ee convertToWith
126e0 6f 75 74 52 6f 77 69 64 54 61 62 6c 65 28 29 20  outRowidTable() 
126f0 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a  for details..*/.
12700 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a 20  struct Index {. 
12710 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
12720 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
12730 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20  e of this index 
12740 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c 75  */.  i16 *aiColu
12750 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  mn;           /*
12760 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61   Which columns a
12770 72 65 20 75 73 65 64 20 62 79 20 74 68 69 73 20  re used by this 
12780 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20 30  index.  1st is 0
12790 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69   */.  LogEst *ai
127a0 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f  RowLogEst;     /
127b0 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20  * From ANALYZE: 
127c0 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63 74  Est. rows select
127d0 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75 6d  ed by each colum
127e0 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  n */.  Table *pT
127f0 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
12800 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c 65  /* The SQL table
12810 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 2a   being indexed *
12820 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66  /.  char *zColAf
12830 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
12840 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20  String defining 
12850 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  the affinity of 
12860 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
12870 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20 20   Index *pNext;  
12880 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
12890 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f   next index asso
128a0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
128b0 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  same table */.  
128c0 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
128d0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65           /* Sche
128e0 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
128f0 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38  is index */.  u8
12900 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20   *aSortOrder;   
12910 20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20 65 61         /* for ea
12920 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d  ch column: True=
12930 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53  =DESC, False==AS
12940 43 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a  C */.  char **az
12950 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20  Coll;           
12960 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c  /* Array of coll
12970 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e  ation sequence n
12980 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78 20 2a  ames for index *
12990 2f 0a 20 20 45 78 70 72 20 2a 70 50 61 72 74 49  /.  Expr *pPartI
129a0 64 78 57 68 65 72 65 3b 20 20 20 20 20 2f 2a 20  dxWhere;     /* 
129b0 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72  WHERE clause for
129c0 20 70 61 72 74 69 61 6c 20 69 6e 64 69 63 65 73   partial indices
129d0 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20   */.  int tnum; 
129e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
129f0 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69  * DB Page contai
12a00 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69  ning root of thi
12a10 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67  s index */.  Log
12a20 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20  Est szIdxRow;   
12a30 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74        /* Estimat
12a40 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20 73  ed average row s
12a50 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  ize in bytes */.
12a60 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20    u16 nKeyCol;  
12a70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
12a80 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
12a90 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20  forming the key 
12aa0 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e  */.  u16 nColumn
12ab0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
12ac0 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
12ad0 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  ns stored in the
12ae0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f   index */.  u8 o
12af0 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20  nError;         
12b00 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74       /* OE_Abort
12b10 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f  , OE_Ignore, OE_
12b20 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e  Replace, or OE_N
12b30 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  one */.  unsigne
12b40 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20  d idxType:2;    
12b50 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20    /* 1==UNIQUE, 
12b60 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  2==PRIMARY KEY, 
12b70 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20  0==CREATE INDEX 
12b80 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55  */.  unsigned bU
12b90 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a  nordered:1;   /*
12ba0 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78 20   Use this index 
12bb0 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65  for == or IN que
12bc0 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75  ries only */.  u
12bd0 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e  nsigned uniqNotN
12be0 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20  ull:1;  /* True 
12bf0 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f  if UNIQUE and NO
12c00 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63  T NULL for all c
12c10 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69  olumns */.  unsi
12c20 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31  gned isResized:1
12c30 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
12c40 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63  resizeIndexObjec
12c50 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c  t() has been cal
12c60 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  led */.  unsigne
12c70 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20  d isCovering:1; 
12c80 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69    /* True if thi
12c90 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20  s is a covering 
12ca0 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67  index */.  unsig
12cb0 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31  ned noSkipScan:1
12cc0 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72  ;   /* Do not tr
12cd0 79 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73 63  y to use skip-sc
12ce0 61 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 23 69  an if true */.#i
12cf0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
12d00 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
12d10 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b  4.  int nSample;
12d20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12d30 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  Number of elemen
12d40 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20  ts in aSample[] 
12d50 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  */.  int nSample
12d60 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Col;          /*
12d70 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53 61   Size of IndexSa
12d80 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20  mple.anEq[] and 
12d90 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63  so on */.  tRowc
12da0 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20 20  nt *aAvgEq;     
12db0 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e      /* Average n
12dc0 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b 65  Eq values for ke
12dd0 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c  ys not in aSampl
12de0 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70  e */.  IndexSamp
12df0 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20  le *aSample;    
12e00 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68  /* Samples of th
12e10 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20  e left-most key 
12e20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69  */.  tRowcnt *ai
12e30 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f 2a  RowEst;       /*
12e40 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63   Non-logarithmic
12e50 20 73 74 61 74 31 20 64 61 74 61 20 66 6f 72 20   stat1 data for 
12e60 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
12e70 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74 30  tRowcnt nRowEst0
12e80 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d  ;        /* Non-
12e90 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d 62  logarithmic numb
12ea0 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
12eb0 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69  e index */.#endi
12ec0 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  f.};../*.** Allo
12ed0 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 49  wed values for I
12ee0 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a  ndex.idxType.*/.
12ef0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
12f00 44 58 54 59 50 45 5f 41 50 50 44 45 46 20 20 20  DXTYPE_APPDEF   
12f10 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74 65     0   /* Create
12f20 64 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 49  d using CREATE I
12f30 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NDEX */.#define 
12f40 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 55  SQLITE_IDXTYPE_U
12f50 4e 49 51 55 45 20 20 20 20 20 20 31 20 20 20 2f  NIQUE      1   /
12f60 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55  * Implements a U
12f70 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
12f80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
12f90 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41  TE_IDXTYPE_PRIMA
12fa0 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49 73  RYKEY  2   /* Is
12fb0 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
12fc0 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20 2a   for the table *
12fd0 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75  /../* Return tru
12fe0 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73 20  e if index X is 
12ff0 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e  a PRIMARY KEY in
13000 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  dex */.#define I
13010 73 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78  sPrimaryKeyIndex
13020 28 58 29 20 20 28 28 58 29 2d 3e 69 64 78 54 79  (X)  ((X)->idxTy
13030 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54 59  pe==SQLITE_IDXTY
13040 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a  PE_PRIMARYKEY)..
13050 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  /* Return true i
13060 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 55  f index X is a U
13070 4e 49 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23  NIQUE index */.#
13080 64 65 66 69 6e 65 20 49 73 55 6e 69 71 75 65 49  define IsUniqueI
13090 6e 64 65 78 28 58 29 20 20 20 20 20 20 28 28 58  ndex(X)      ((X
130a0 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e  )->onError!=OE_N
130b0 6f 6e 65 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  one)../*.** Each
130c0 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69   sample stored i
130d0 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  n the sqlite_sta
130e0 74 33 20 74 61 62 6c 65 20 69 73 20 72 65 70 72  t3 table is repr
130f0 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
13100 79 20 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74  y .** using a st
13110 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73 20  ructure of this 
13120 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d  type.  See docum
13130 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20  entation at the 
13140 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e  top of the.** an
13150 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66  alyze.c source f
13160 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ile for addition
13170 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
13180 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53  */.struct IndexS
13190 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a  ample {.  void *
131a0 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50  p;          /* P
131b0 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65  ointer to sample
131c0 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  d record */.  in
131d0 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  t n;            
131e0 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72  /* Size of recor
131f0 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  d in bytes */.  
13200 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20  tRowcnt *anEq;  
13210 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
13220 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 74   of rows where t
13230 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68  he key equals th
13240 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74  is sample */.  t
13250 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20  Rowcnt *anLt;   
13260 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
13270 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65  of rows where ke
13280 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
13290 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
132a0 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20  tRowcnt *anDLt; 
132b0 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
132c0 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79   of distinct key
132d0 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73  s less than this
132e0 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f   sample */.};../
132f0 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20  *.** Each token 
13300 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68  coming out of th
13310 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e  e lexer is an in
13320 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69  stance of.** thi
13330 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f  s structure.  To
13340 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73  kens are also us
13350 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e  ed as part of an
13360 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a   expression..**.
13370 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e  ** Note if Token
13380 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e  .z==0 then Token
13390 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e  .dyn and Token.n
133a0 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61   are undefined a
133b0 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69  nd.** may contai
133c0 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e  n random values.
133d0 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e    Do not make an
133e0 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62  y assumptions ab
133f0 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a  out Token.dyn.**
13400 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65   and Token.n whe
13410 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f  n Token.z==0..*/
13420 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a  .struct Token {.
13430 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b    const char *z;
13440 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
13450 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20  the token.  Not 
13460 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21  NULL-terminated!
13470 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
13480 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62  nt n;    /* Numb
13490 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73  er of characters
134a0 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a   in this token *
134b0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
134c0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
134d0 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
134e0 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e  ns information n
134f0 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
13500 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20  e.** code for a 
13510 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74  SELECT that cont
13520 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66  ains aggregate f
13530 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
13540 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41  If Expr.op==TK_A
13550 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f  GG_COLUMN or TK_
13560 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65  AGG_FUNCTION the
13570 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20  n Expr.pAggInfo 
13580 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  is a.** pointer 
13590 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
135a0 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f  e.  The Expr.iCo
135b0 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68  lumn field is th
135c0 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67  e index in.** Ag
135d0 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20  gInfo.aCol[] or 
135e0 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20  AggInfo.aFunc[] 
135f0 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e  of information n
13600 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
13610 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68  e.** code for th
13620 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41  at node..**.** A
13630 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20  ggInfo.pGroupBy 
13640 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e  and AggInfo.aFun
13650 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f  c.pExpr point to
13660 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74   fields within t
13670 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53  he.** original S
13680 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65 20  elect structure 
13690 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74  that describes t
136a0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
136b0 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66  ent.  These.** f
136c0 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65  ields do not nee
136d0 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77 68  d to be freed wh
136e0 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20  en deallocating 
136f0 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75  the AggInfo stru
13700 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
13710 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20   AggInfo {.  u8 
13720 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20  directMode;     
13730 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72       /* Direct r
13740 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65  endering mode me
13750 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64 69  ans take data di
13760 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20  rectly.         
13770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13780 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20   ** from source 
13790 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74 68  tables rather th
137a0 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61  an from accumula
137b0 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65  tors */.  u8 use
137c0 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20  SortingIdx;     
137d0 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d    /* In direct m
137e0 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74  ode, reference t
137f0 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
13800 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20 20   rather.        
13810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13820 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f    ** than the so
13830 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
13840 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20  int sortingIdx; 
13850 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
13860 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  r number of the 
13870 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
13880 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64  .  int sortingId
13890 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75  xPTab;     /* Cu
138a0 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70  rsor number of p
138b0 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20  seudo-table */. 
138c0 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c   int nSortingCol
138d0 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62  umn;     /* Numb
138e0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
138f0 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
13900 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65  ex */.  int mnRe
13910 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20 20  g, mxReg;       
13920 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67 69  /* Range of regi
13930 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20  sters allocated 
13940 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46 75  for aCol and aFu
13950 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  nc */.  ExprList
13960 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20   *pGroupBy;     
13970 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79 20  /* The group by 
13980 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75  clause */.  stru
13990 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b  ct AggInfo_col {
139a0 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20      /* For each 
139b0 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73  column used in s
139c0 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a  ource tables */.
139d0 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
139e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
139f0 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  Source table */.
13a00 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20      int iTable; 
13a10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13a20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
13a30 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
13a40 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f  e */.    int iCo
13a50 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
13a60 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62    /* Column numb
13a70 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f  er within the so
13a80 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
13a90 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c    int iSorterCol
13aa0 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f  umn;       /* Co
13ab0 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74  lumn number in t
13ac0 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
13ad0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d   */.    int iMem
13ae0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
13af0 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74   /* Memory locat
13b00 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73  ion that acts as
13b10 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
13b20 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
13b30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13b40 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70  The original exp
13b50 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a  ression */.  } *
13b60 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c  aCol;.  int nCol
13b70 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
13b80 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65  /* Number of use
13b90 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f  d entries in aCo
13ba0 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63  l[] */.  int nAc
13bb0 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20  cumulator;      
13bc0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
13bd0 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20  lumns that show 
13be0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f  through to the o
13bf0 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20  utput..         
13c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c10 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63   ** Additional c
13c20 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20  olumns are used 
13c30 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65  only as paramete
13c40 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20  rs to.          
13c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c60 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ** aggregate fun
13c70 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75  ctions */.  stru
13c80 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20  ct AggInfo_func 
13c90 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20  {   /* For each 
13ca0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
13cb0 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  on */.    Expr *
13cc0 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
13cd0 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
13ce0 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75   encoding the fu
13cf0 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75  nction */.    Fu
13d00 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20  ncDef *pFunc;   
13d10 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67         /* The ag
13d20 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
13d30 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
13d40 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b  */.    int iMem;
13d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d60 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  /* Memory locati
13d70 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20  on that acts as 
13d80 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20  accumulator */. 
13d90 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74     int iDistinct
13da0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45  ;           /* E
13db0 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75  phemeral table u
13dc0 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44  sed to enforce D
13dd0 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a  ISTINCT */.  } *
13de0 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75  aFunc;.  int nFu
13df0 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
13e00 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
13e10 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d  tries in aFunc[]
13e20 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
13e30 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61 72  e datatype ynVar
13e40 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74   is a signed int
13e50 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d  eger, either 16-
13e60 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a  bit or 32-bit..*
13e70 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20  * Usually it is 
13e80 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66  16-bits.  But if
13e90 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49   SQLITE_MAX_VARI
13ea0 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67  ABLE_NUMBER is g
13eb0 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33  reater.** than 3
13ec0 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f 20  2767 we have to 
13ed0 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20  make it 32-bit. 
13ee0 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66 65   16-bit is prefe
13ef0 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20  rred because.** 
13f00 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d  it uses less mem
13f10 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72 20  ory in the Expr 
13f20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73  object, which is
13f30 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73   a big memory us
13f40 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73  er.** in systems
13f50 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72   with lots of pr
13f60 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
13f70 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c  s.  And few appl
13f80 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64  ications.** need
13f90 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74   more than about
13fa0 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61 62   10 or 20 variab
13fb0 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65  les.  But some e
13fc0 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e  xtreme users wan
13fd0 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65  t.** to have pre
13fe0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73  pared statements
13ff0 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36 37   with over 32767
14000 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20   variables, and 
14010 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20  for them.** the 
14020 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61  option is availa
14030 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d  ble (at compile-
14040 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51  time)..*/.#if SQ
14050 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
14060 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a  E_NUMBER<=32767.
14070 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56 61  typedef i16 ynVa
14080 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66  r;.#else.typedef
14090 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64   int ynVar;.#end
140a0 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e  if../*.** Each n
140b0 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73  ode of an expres
140c0 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73  sion in the pars
140d0 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73  e tree is an ins
140e0 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73  tance.** of this
140f0 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
14100 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65  * Expr.op is the
14110 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74   opcode. The int
14120 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65  eger parser toke
14130 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75 73  n codes are reus
14140 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73  ed.** as opcodes
14150 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70   here. For examp
14160 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 64  le, the parser d
14170 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20  efines TK_GE to 
14180 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  be an integer.**
14190 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69   code representi
141a0 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72  ng the ">=" oper
141b0 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20  ator. This same 
141c0 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73 20  integer code is 
141d0 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70  reused.** to rep
141e0 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61 74  resent the great
141f0 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c  er-than-or-equal
14200 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20  -to operator in 
14210 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a  the expression.*
14220 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  * tree..**.** If
14230 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
14240 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61  is an SQL litera
14250 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54  l (TK_INTEGER, T
14260 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42  K_FLOAT, TK_BLOB
14270 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49  , .** or TK_STRI
14280 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74  NG), then Expr.t
14290 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
142a0 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53 51  e text of the SQ
142b0 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a  L literal. If.**
142c0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
142d0 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28 54  is a variable (T
142e0 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65  K_VARIABLE), the
142f0 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
14300 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76 61  tains the .** va
14310 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e  riable name. Fin
14320 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70  ally, if the exp
14330 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
14340 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46  L function (TK_F
14350 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65  UNCTION),.** the
14360 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
14370 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f  tains the name o
14380 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a  f the function..
14390 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68  **.** Expr.pRigh
143a0 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74  t and Expr.pLeft
143b0 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e   are the left an
143c0 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65  d right subexpre
143d0 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62  ssions of a.** b
143e0 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20  inary operator. 
143f0 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d  Either or both m
14400 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  ay be NULL..**.*
14410 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  * Expr.x.pList i
14420 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75  s a list of argu
14430 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70  ments if the exp
14440 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
14450 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61  L function,.** a
14460 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
14470 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73   or an IN expres
14480 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
14490 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c   "<lhs> IN (<y>,
144a0 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78   <z>...)"..** Ex
144b0 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
144c0 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72  used if the expr
144d0 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d  ession is a sub-
144e0 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70  select or an exp
144f0 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ression of.** th
14500 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e  e form "<lhs> IN
14510 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20   (SELECT ...)". 
14520 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c  If the EP_xIsSel
14530 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69  ect bit is set i
14540 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c  n the.** Expr.fl
14550 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45  ags mask, then E
14560 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
14570 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73   valid. Otherwis
14580 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  e, Expr.x.pList 
14590 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a  is .** valid..**
145a0 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f  .** An expressio
145b0 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44  n of the form ID
145c0 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73   or ID.ID refers
145d0 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20   to a column in 
145e0 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20  a table..** For 
145f0 73 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73  such expressions
14600 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74  , Expr.op is set
14610 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e   to TK_COLUMN an
14620 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73  d Expr.iTable is
14630 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20  .** the integer 
14640 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  cursor number of
14650 20 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70   a VDBE cursor p
14660 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20  ointing to that 
14670 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70  table and.** Exp
14680 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65  r.iColumn is the
14690 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66   column number f
146a0 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20  or the specific 
146b0 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a  column.  If the.
146c0 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  ** expression is
146d0 20 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c   used as a resul
146e0 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74  t in an aggregat
146f0 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74  e SELECT, then t
14700 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61  he.** value is a
14710 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68  lso stored in th
14720 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75  e Expr.iAgg colu
14730 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67  mn in the aggreg
14740 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69  ate so that.** i
14750 74 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65  t can be accesse
14760 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72  d after all aggr
14770 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75  egates are compu
14780 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ted..**.** If th
14790 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
147a0 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61  an unbound varia
147b0 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75  ble marker (a qu
147c0 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20  estion mark .** 
147d0 63 68 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e  character '?' in
147e0 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51   the original SQ
147f0 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78 70 72  L) then the Expr
14800 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68  .iTable holds th
14810 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d 62  e index .** numb
14820 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72 69  er for that vari
14830 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  able..**.** If t
14840 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
14850 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65 6e   a subquery then
14860 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f   Expr.iColumn ho
14870 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a  lds an integer.*
14880 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  * register numbe
14890 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  r containing the
148a0 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73   result of the s
148b0 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68 65  ubquery.  If the
148c0 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69 76  .** subquery giv
148d0 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65  es a constant re
148e0 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c  sult, then iTabl
148f0 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65  e is -1.  If the
14900 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76   subquery.** giv
14910 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 61  es a different a
14920 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72 65  nswer at differe
14930 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20  nt times during 
14940 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73  statement proces
14950 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61  sing.** then iTa
14960 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72 65  ble is the addre
14970 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69  ss of a subrouti
14980 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73  ne that computes
14990 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a   the subquery..*
149a0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72  *.** If the Expr
149b0 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43   is of type OP_C
149c0 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74  olumn, and the t
149d0 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63  able it is selec
149e0 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20  ting from.** is 
149f0 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20  a disk table or 
14a00 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75  the "old.*" pseu
14a10 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70  do-table, then p
14a20 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  Tab points to th
14a30 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69  e.** correspondi
14a40 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  ng table definit
14a50 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43  ion..**.** ALLOC
14a60 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a  ATION NOTES:.**.
14a70 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  ** Expr objects 
14a80 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66  can use a lot of
14a90 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e   memory space in
14aa0 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
14ab0 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65  .  To.** help re
14ac0 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75  duce memory requ
14ad0 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69  irements, someti
14ae0 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  mes an Expr obje
14af0 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72  ct will be.** tr
14b00 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f  uncated.  And to
14b10 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62   reduce the numb
14b20 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c  er of memory all
14b30 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69  ocations, someti
14b40 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f  mes.** two or mo
14b50 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  re Expr objects 
14b60 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69  will be stored i
14b70 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72  n a single memor
14b80 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a  y allocation,.**
14b90 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 45   together with E
14ba0 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e  xpr.zToken strin
14bb0 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  gs..**.** If the
14bc0 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20   EP_Reduced and 
14bd0 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
14be0 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a  gs are set when.
14bf0 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63  ** an Expr objec
14c00 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20  t is truncated. 
14c10 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64   When EP_Reduced
14c20 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c   is set, then al
14c30 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45  l.** the child E
14c40 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74  xpr objects in t
14c50 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e  he Expr.pLeft an
14c60 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73 75  d Expr.pRight su
14c70 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f  btrees.** are co
14c80 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74  ntained within t
14c90 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61  he same memory a
14ca0 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65  llocation.  Note
14cb0 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a  , however, that.
14cc0 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73 20  ** the subtrees 
14cd0 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  in Expr.x.pList 
14ce0 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  or Expr.x.pSelec
14cf0 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65 70  t are always sep
14d00 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63  arately.** alloc
14d10 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73  ated, regardless
14d20 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e   of whether or n
14d30 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  ot EP_Reduced is
14d40 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   set..*/.struct 
14d50 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20  Expr {.  u8 op; 
14d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d70 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72  /* Operation per
14d80 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e  formed by this n
14d90 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  ode */.  char af
14da0 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20  finity;         
14db0 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
14dc0 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72  of the column or
14dd0 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75   0 if not a colu
14de0 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67  mn */.  u32 flag
14df0 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
14e00 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e  * Various flags.
14e10 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77    EP_* See below
14e20 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
14e30 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20    char *zToken; 
14e40 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
14e50 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65  n value. Zero te
14e60 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71  rminated and deq
14e70 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74  uoted */.    int
14e80 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20   iValue;        
14e90 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74      /* Non-negat
14ea0 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  ive integer valu
14eb0 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65  e if EP_IntValue
14ec0 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a   */.  } u;..  /*
14ed0 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e   If the EP_Token
14ee0 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74  Only flag is set
14ef0 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
14f00 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f  gs mask, then no
14f10 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61  .  ** space is a
14f20 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65  llocated for the
14f30 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68   fields below th
14f40 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74  is point. An att
14f50 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63  empt to.  ** acc
14f60 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65  ess them will re
14f70 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75  sult in a segfau
14f80 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f  lt or malfunctio
14f90 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n. .  **********
14fa0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14fb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14fc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14fd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20  ***********/..  
14fe0 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20  Expr *pLeft;    
14ff0 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73         /* Left s
15000 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72  ubnode */.  Expr
15010 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20 20   *pRight;       
15020 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e     /* Right subn
15030 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ode */.  union {
15040 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70  .    ExprList *p
15050 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20  List;     /* op 
15060 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45  = IN, EXISTS, SE
15070 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43  LECT, CASE, FUNC
15080 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f  TION, BETWEEN */
15090 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
150a0 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f  lect;     /* EP_
150b0 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70  xIsSelect and op
150c0 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53   = IN, EXISTS, S
150d0 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a  ELECT */.  } x;.
150e0 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f  .  /* If the EP_
150f0 52 65 64 75 63 65 64 20 66 6c 61 67 20 69 73 20  Reduced flag is 
15100 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e  set in the Expr.
15110 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
15120 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69   no.  ** space i
15130 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
15140 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77  the fields below
15150 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20   this point. An 
15160 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20  attempt to.  ** 
15170 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c  access them will
15180 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67   result in a seg
15190 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63  fault or malfunc
151a0 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  tion..  ********
151b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
151c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
151d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
151e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
151f0 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45  #if SQLITE_MAX_E
15200 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e  XPR_DEPTH>0.  in
15210 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20  t nHeight;      
15220 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f       /* Height o
15230 66 20 74 68 65 20 74 72 65 65 20 68 65 61 64 65  f the tree heade
15240 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a  d by this node *
15250 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69  /.#endif.  int i
15260 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
15270 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    /* TK_COLUMN: 
15280 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  cursor number of
15290 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63   table holding c
152a0 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20  olumn.          
152b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
152c0 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72  * TK_REGISTER: r
152d0 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20  egister number. 
152e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152f0 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52          ** TK_TR
15300 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c  IGGER: 1 -> new,
15310 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20   0 -> old.      
15320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15330 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c     ** EP_Unlikel
15340 79 3a 20 20 31 33 34 32 31 37 37 32 38 20 74 69  y:  134217728 ti
15350 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 20 2a  mes likelihood *
15360 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d  /.  ynVar iColum
15370 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b  n;         /* TK
15380 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20  _COLUMN: column 
15390 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72  index.  -1 for r
153a0 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20  owid..          
153b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
153c0 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76  * TK_VARIABLE: v
153d0 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28  ariable number (
153e0 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f  always >= 1). */
153f0 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20 20  .  i16 iAgg;    
15400 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
15410 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67  ch entry in pAgg
15420 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20  Info->aCol[] or 
15430 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69  ->aFunc[] */.  i
15440 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62  16 iRightJoinTab
15450 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46  le;   /* If EP_F
15460 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67  romJoin, the rig
15470 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20  ht table of the 
15480 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32  join */.  u8 op2
15490 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
154a0 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a   /* TK_REGISTER:
154b0 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20   original value 
154c0 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20  of Expr.op.     
154d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154e0 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      ** TK_COLUMN
154f0 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70  : the value of p
15500 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a  5 for OP_Column.
15510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15520 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41           ** TK_A
15530 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73  GG_FUNCTION: nes
15540 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20  ting depth */.  
15550 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
15560 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62  o;     /* Used b
15570 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20  y TK_AGG_COLUMN 
15580 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54  and TK_AGG_FUNCT
15590 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ION */.  Table *
155a0 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
155b0 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f  /* Table for TK_
155c0 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f  COLUMN expressio
155d0 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ns. */.};../*.**
155e0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   The following a
155f0 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20  re the meanings 
15600 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20 45  of bits in the E
15610 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e  xpr.flags field.
15620 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46  .*/.#define EP_F
15630 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30 30  romJoin  0x00000
15640 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73 20  1 /* Originates 
15650 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75  in ON/USING clau
15660 73 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e  se of outer join
15670 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41   */.#define EP_A
15680 67 67 20 20 20 20 20 20 20 30 78 30 30 30 30 30  gg       0x00000
15690 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e  2 /* Contains on
156a0 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67  e or more aggreg
156b0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
156c0 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f  .#define EP_Reso
156d0 6c 76 65 64 20 20 30 78 30 30 30 30 30 34 20 2f  lved  0x000004 /
156e0 2a 20 49 44 73 20 68 61 76 65 20 62 65 65 6e 20  * IDs have been 
156f0 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55  resolved to COLU
15700 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  MNs */.#define E
15710 50 5f 45 72 72 6f 72 20 20 20 20 20 30 78 30 30  P_Error     0x00
15720 30 30 30 38 20 2f 2a 20 45 78 70 72 65 73 73 69  0008 /* Expressi
15730 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  on contains one 
15740 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a  or more errors *
15750 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73  /.#define EP_Dis
15760 74 69 6e 63 74 20 20 30 78 30 30 30 30 31 30 20  tinct  0x000010 
15770 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
15780 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49  ction with DISTI
15790 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  NCT keyword */.#
157a0 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c  define EP_VarSel
157b0 65 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20  ect 0x000020 /* 
157c0 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65  pSelect is corre
157d0 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74  lated, not const
157e0 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ant */.#define E
157f0 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30  P_DblQuoted 0x00
15800 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20  0040 /* token.z 
15810 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69  was originally i
15820 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69  n "..." */.#defi
15830 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20  ne EP_InfixFunc 
15840 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65  0x000080 /* True
15850 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75   for an infix fu
15860 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c  nction: LIKE, GL
15870 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69  OB, etc */.#defi
15880 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20  ne EP_Collate   
15890 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65  0x000100 /* Tree
158a0 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43   contains a TK_C
158b0 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20  OLLATE operator 
158c0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65  */.#define EP_Ge
158d0 6e 65 72 69 63 20 20 20 30 78 30 30 30 32 30 30  neric   0x000200
158e0 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41   /* Ignore COLLA
158f0 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f  TE or affinity o
15900 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23  n this tree */.#
15910 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c  define EP_IntVal
15920 75 65 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20  ue  0x000400 /* 
15930 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f  Integer value co
15940 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61  ntained in u.iVa
15950 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  lue */.#define E
15960 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78 30 30  P_xIsSelect 0x00
15970 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63  0800 /* x.pSelec
15980 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65  t is valid (othe
15990 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73  rwise x.pList is
159a0 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ) */.#define EP_
159b0 53 6b 69 70 20 20 20 20 20 20 30 78 30 30 31 30  Skip      0x0010
159c0 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41  00 /* COLLATE, A
159d0 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a  S, or UNLIKELY *
159e0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64  /.#define EP_Red
159f0 75 63 65 64 20 20 20 30 78 30 30 32 30 30 30 20  uced   0x002000 
15a00 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45  /* Expr struct E
15a10 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20  XPR_REDUCEDSIZE 
15a20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  bytes only */.#d
15a30 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  efine EP_TokenOn
15a40 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45  ly 0x004000 /* E
15a50 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f  xpr struct EXPR_
15a60 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79  TOKENONLYSIZE by
15a70 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  tes only */.#def
15a80 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20 20  ine EP_Static   
15a90 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c   0x008000 /* Hel
15aa0 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20  d in memory not 
15ab0 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61  obtained from ma
15ac0 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e  lloc() */.#defin
15ad0 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30  e EP_MemToken  0
15ae0 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20  x010000 /* Need 
15af0 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  to sqlite3DbFree
15b00 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a  () Expr.zToken *
15b10 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52  /.#define EP_NoR
15b20 65 64 75 63 65 20 20 30 78 30 32 30 30 30 30 20  educe  0x020000 
15b30 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55  /* Cannot EXPRDU
15b40 50 5f 52 45 44 55 43 45 20 74 68 69 73 20 45 78  P_REDUCE this Ex
15b50 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  pr */.#define EP
15b60 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30  _Unlikely  0x040
15b70 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28  000 /* unlikely(
15b80 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28  ) or likelihood(
15b90 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
15ba0 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75  efine EP_ConstFu
15bb0 6e 63 20 30 78 30 38 30 30 30 30 20 2f 2a 20 4e  nc 0x080000 /* N
15bc0 6f 64 65 20 69 73 20 61 20 53 51 4c 49 54 45 5f  ode is a SQLITE_
15bd0 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 75  FUNC_CONSTANT fu
15be0 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
15bf0 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20 30  e EP_CanBeNull 0
15c00 78 31 30 30 30 30 30 20 2f 2a 20 43 61 6e 20 62  x100000 /* Can b
15c10 65 20 6e 75 6c 6c 20 64 65 73 70 69 74 65 20 4e  e null despite N
15c20 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
15c30 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  nt */.#define EP
15c40 5f 53 75 62 71 75 65 72 79 20 20 30 78 32 30 30  _Subquery  0x200
15c50 30 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74  000 /* Tree cont
15c60 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43 54  ains a TK_SELECT
15c70 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a   operator */../*
15c80 0a 2a 2a 20 43 6f 6d 62 69 6e 61 74 69 6f 6e 73  .** Combinations
15c90 20 6f 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20   of two or more 
15ca0 45 50 5f 2a 20 66 6c 61 67 73 0a 2a 2f 0a 23 64  EP_* flags.*/.#d
15cb0 65 66 69 6e 65 20 45 50 5f 50 72 6f 70 61 67 61  efine EP_Propaga
15cc0 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45  te (EP_Collate|E
15cd0 50 5f 53 75 62 71 75 65 72 79 29 20 2f 2a 20 50  P_Subquery) /* P
15ce0 72 6f 70 61 67 61 74 65 20 74 68 65 73 65 20 62  ropagate these b
15cf0 69 74 73 20 75 70 20 74 72 65 65 20 2a 2f 0a 0a  its up tree */..
15d00 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  /*.** These macr
15d10 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  os can be used t
15d20 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20  o test, set, or 
15d30 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68  clear bits in th
15d40 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73  e .** Expr.flags
15d50 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
15d60 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70 65 72  ne ExprHasProper
15d70 74 79 28 45 2c 50 29 20 20 20 20 20 28 28 28 45  ty(E,P)     (((E
15d80 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30  )->flags&(P))!=0
15d90 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  ).#define ExprHa
15da0 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c 50  sAllProperty(E,P
15db0 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26  )  (((E)->flags&
15dc0 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69  (P))==(P)).#defi
15dd0 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72  ne ExprSetProper
15de0 74 79 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d  ty(E,P)     (E)-
15df0 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  >flags|=(P).#def
15e00 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f  ine ExprClearPro
15e10 70 65 72 74 79 28 45 2c 50 29 20 20 20 28 45 29  perty(E,P)   (E)
15e20 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f  ->flags&=~(P)../
15e30 2a 20 54 68 65 20 45 78 70 72 53 65 74 56 56 41  * The ExprSetVVA
15e40 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72 6f  Property() macro
15e50 20 69 73 20 75 73 65 64 20 66 6f 72 20 56 65 72   is used for Ver
15e60 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64  ification, Valid
15e70 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63  ation,.** and Ac
15e80 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79  creditation only
15e90 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65  .  It works like
15ea0 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79   ExprSetProperty
15eb0 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a  () during VVA.**
15ec0 20 70 72 6f 63 65 73 73 65 73 20 62 75 74 20 69   processes but i
15ed0 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65  s a no-op for de
15ee0 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  livery..*/.#ifde
15ef0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
15f00 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56   define ExprSetV
15f10 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  VAProperty(E,P) 
15f20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29   (E)->flags|=(P)
15f30 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
15f40 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
15f50 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a  ty(E,P).#endif..
15f60 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
15f70 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75  determine the nu
15f80 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65  mber of bytes re
15f90 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d  quired by a norm
15fa0 61 6c 20 45 78 70 72 20 0a 2a 2a 20 73 74 72 75  al Expr .** stru
15fb0 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75  ct, an Expr stru
15fc0 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 52  ct with the EP_R
15fd0 65 64 75 63 65 64 20 66 6c 61 67 20 73 65 74 20  educed flag set 
15fe0 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a  in Expr.flags .*
15ff0 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74  * and an Expr st
16000 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50  ruct with the EP
16010 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20  _TokenOnly flag 
16020 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  set..*/.#define 
16030 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20  EXPR_FULLSIZE   
16040 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45          sizeof(E
16050 78 70 72 29 20 20 20 20 20 20 20 20 20 20 20 2f  xpr)           /
16060 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23  * Full size */.#
16070 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55  define EXPR_REDU
16080 43 45 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f  CEDSIZE        o
16090 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61  ffsetof(Expr,iTa
160a0 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20  ble)  /* Common 
160b0 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66  features */.#def
160c0 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e  ine EXPR_TOKENON
160d0 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73  LYSIZE      offs
160e0 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29  etof(Expr,pLeft)
160f0 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74     /* Fewer feat
16100 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46  ures */../*.** F
16110 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 74  lags passed to t
16120 68 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75  he sqlite3ExprDu
16130 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65  p() function. Se
16140 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d  e the header com
16150 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73  ment .** above s
16160 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20  qlite3ExprDup() 
16170 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a  for details..*/.
16180 23 64 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f  #define EXPRDUP_
16190 52 45 44 55 43 45 20 20 20 20 20 20 20 20 20 30  REDUCE         0
161a0 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72  x0001  /* Used r
161b0 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72  educed-size Expr
161c0 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   nodes */../*.**
161d0 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   A list of expre
161e0 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78  ssions.  Each ex
161f0 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74  pression may opt
16200 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a  ionally have a.*
16210 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72  * name.  An expr
16220 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f  /name combinatio
16230 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e  n can be used in
16240 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73   several ways, s
16250 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69  uch.** as the li
16260 73 74 20 6f 66 20 22 65 78 70 72 20 41 53 20 49  st of "expr AS I
16270 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77  D" fields follow
16280 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f  ing a "SELECT" o
16290 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74  r in the.** list
162a0 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22 20   of "ID = expr" 
162b0 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41  items in an UPDA
162c0 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65  TE.  A list of e
162d0 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a  xpressions can.*
162e0 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61  * also be used a
162f0 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74  s the argument t
16300 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e  o a function, in
16310 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
16320 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64  a.zName.** field
16330 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a   is not used..**
16340 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74  .** By default t
16350 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69  he Expr.zSpan fi
16360 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61  eld holds a huma
16370 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63 72  n-readable descr
16380 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  iption of.** the
16390 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
163a0 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20   is used in the 
163b0 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72  generation of er
163c0 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64  ror messages and
163d0 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c  .** column label
163e0 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65  s.  In this case
163f0 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20  , Expr.zSpan is 
16400 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65  typically the te
16410 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d  xt of a.** colum
16420 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20  n expression as 
16430 69 74 20 65 78 69 73 74 73 20 69 6e 20 61 20 53  it exists in a S
16440 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
16450 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a    However, if.**
16460 20 74 68 65 20 62 53 70 61 6e 49 73 54 61 62 20   the bSpanIsTab 
16470 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65  flag is set, the
16480 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c  n zSpan is overl
16490 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68  oaded to mean th
164a0 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65  e name.** of the
164b0 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69   result column i
164c0 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41  n the form: DATA
164d0 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d  BASE.TABLE.COLUM
164e0 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a  N.  This later.*
164f0 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66  * form is used f
16500 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69  or name resoluti
16510 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20 46  on with nested F
16520 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a  ROM clauses..*/.
16530 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20  struct ExprList 
16540 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20  {.  int nExpr;  
16550 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
16560 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69  mber of expressi
16570 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ons on the list 
16580 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72  */.  struct Expr
16590 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46  List_item { /* F
165a0 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69  or each expressi
165b0 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a  on in the list *
165c0 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
165d0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
165e0 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70   The list of exp
165f0 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20  ressions */.    
16600 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
16610 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
16620 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
16630 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e   this expression
16640 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53   */.    char *zS
16650 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  pan;            
16660 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74  /* Original text
16670 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
16680 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72  on */.    u8 sor
16690 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
166a0 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20    /* 1 for DESC 
166b0 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a  or 0 for ASC */.
166c0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e      unsigned don
166d0 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41  e :1;       /* A
166e0 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74   flag to indicat
166f0 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e  e when processin
16700 67 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f  g is finished */
16710 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53  .    unsigned bS
16720 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20  panIsTab :1; /* 
16730 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54  zSpan holds DB.T
16740 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20  ABLE.COLUMN */. 
16750 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75 73     unsigned reus
16760 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f  able :1;   /* Co
16770 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
16780 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a 2f  n is reusable */
16790 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  .    union {.   
167a0 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20     struct {.    
167b0 20 20 20 20 75 31 36 20 69 4f 72 64 65 72 42 79      u16 iOrderBy
167c0 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72  Col;      /* For
167d0 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d   ORDER BY, colum
167e0 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75  n number in resu
167f0 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20 20  lt set */.      
16800 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20    u16 iAlias;   
16810 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
16820 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69   into Parse.aAli
16830 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a  as[] for zName *
16840 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20 20  /.      } x;.   
16850 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78 70     int iConstExp
16860 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52 65  rReg;      /* Re
16870 67 69 73 74 65 72 20 69 6e 20 77 68 69 63 68 20  gister in which 
16880 45 78 70 72 20 76 61 6c 75 65 20 69 73 20 63 61  Expr value is ca
16890 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b  ched */.    } u;
168a0 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20 20  .  } *a;        
168b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
168c0 6f 63 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77  oc a power of tw
168d0 6f 20 67 72 65 61 74 65 72 20 6f 72 20 65 71 75  o greater or equ
168e0 61 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d  al to nExpr */.}
168f0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
16900 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
16910 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 62  ucture is used b
16920 79 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20  y the parser to 
16930 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74  record both.** t
16940 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f  he parse tree fo
16950 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  r an expression 
16960 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66 20  and the span of 
16970 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20 61  input text for a
16980 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e  n.** expression.
16990 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 53  .*/.struct ExprS
169a0 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70 45  pan {.  Expr *pE
169b0 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  xpr;          /*
169c0 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   The expression 
169d0 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20 20  parse tree */.  
169e0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61  const char *zSta
169f0 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20 63  rt;   /* First c
16a00 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70 75  haracter of inpu
16a10 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73  t text */.  cons
16a20 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20  t char *zEnd;   
16a30 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63 74    /* One charact
16a40 65 72 20 70 61 73 74 20 74 68 65 20 65 6e 64 20  er past the end 
16a50 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f  of input text */
16a60 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
16a70 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
16a80 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c  tructure can hol
16a90 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20  d a simple list 
16aa0 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a  of identifiers,.
16ab0 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c  ** such as the l
16ac0 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74  ist "a,b,c" in t
16ad0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61  he following sta
16ae0 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20  tements:.**.**  
16af0 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
16b00 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20  t(a,b,c) VALUES 
16b10 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45  ...;.**      CRE
16b20 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e  ATE INDEX idx ON
16b30 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20   t(a,b,c);.**   
16b40 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45     CREATE TRIGGE
16b50 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50  R trig BEFORE UP
16b60 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29  DATE ON t(a,b,c)
16b70 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20   ...;.**.** The 
16b80 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65  IdList.a.idx fie
16b90 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20  ld is used when 
16ba0 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65  the IdList repre
16bb0 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f  sents the list o
16bc0 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  f.** column name
16bd0 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20  s after a table 
16be0 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52  name in an INSER
16bf0 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e  T statement.  In
16c00 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a   the statement.*
16c10 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20  *.**     INSERT 
16c20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e  INTO t(a,b,c) ..
16c30 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69  ..**.** If "a" i
16c40 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d  s the k-th colum
16c50 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20  n of table "t", 
16c60 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d  then IdList.a[0]
16c70 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75  .idx==k..*/.stru
16c80 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74  ct IdList {.  st
16c90 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d  ruct IdList_item
16ca0 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61   {.    char *zNa
16cb0 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  me;      /* Name
16cc0 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69   of the identifi
16cd0 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64  er */.    int id
16ce0 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  x;          /* I
16cf0 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62  ndex in some Tab
16d00 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63  le.aCol[] of a c
16d10 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d  olumn named zNam
16d20 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69  e */.  } *a;.  i
16d30 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20  nt nId;         
16d40 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65  /* Number of ide
16d50 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20  ntifiers on the 
16d60 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
16d70 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61  * The bitmask da
16d80 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62  tatype defined b
16d90 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72  elow is used for
16da0 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a   various optimiz
16db0 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68  ations..**.** Ch
16dc0 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d  anging this from
16dd0 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33   a 64-bit to a 3
16de0 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74  2-bit type limit
16df0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a  s the number of.
16e00 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a  ** tables in a j
16e10 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61  oin to 32 instea
16e20 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74  d of 64.  But it
16e30 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68   also reduces th
16e40 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65  e size.** of the
16e50 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20   library by 738 
16e60 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a  bytes on ix86..*
16e70 2f 0a 74 79 70 65 64 65 66 20 75 36 34 20 42 69  /.typedef u64 Bi
16e80 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68  tmask;../*.** Th
16e90 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  e number of bits
16ea0 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20   in a Bitmask.  
16eb0 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74  "BMS" means "Bit
16ec0 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23  Mask Size"..*/.#
16ed0 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e  define BMS  ((in
16ee0 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73  t)(sizeof(Bitmas
16ef0 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20  k)*8))../*.** A 
16f00 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b  bit in a Bitmask
16f10 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b  .*/.#define MASK
16f20 42 49 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d  BIT(n)   (((Bitm
16f30 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65  ask)1)<<(n)).#de
16f40 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28 6e  fine MASKBIT32(n
16f50 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69 6e  ) (((unsigned in
16f60 74 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a 2a  t)1)<<(n))../*.*
16f70 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
16f80 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
16f90 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61  bes the FROM cla
16fa0 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
16fb0 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61  statement..** Ea
16fc0 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71  ch table or subq
16fd0 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d  uery in the FROM
16fe0 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65 70   clause is a sep
16ff0 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66  arate element of
17000 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e  .** the SrcList.
17010 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a  a[] array..**.**
17020 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74 69   With the additi
17030 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64  on of multiple d
17040 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c  atabase support,
17050 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
17060 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20  tructure.** can 
17070 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20  also be used to 
17080 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74 69  describe a parti
17090 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68  cular table such
170a0 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 68   as the table th
170b0 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65  at.** is modifie
170c0 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20  d by an INSERT, 
170d0 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54  DELETE, or UPDAT
170e0 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e  E statement.  In
170f0 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a   standard SQL,.*
17100 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d  * such a table m
17110 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20  ust be a simple 
17120 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69  name: ID.  But i
17130 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61  n SQLite, the ta
17140 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62  ble can.** now b
17150 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  e identified by 
17160 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c  a database name,
17170 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65   a dot, then the
17180 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e   table name: ID.
17190 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f  ID..**.** The jo
171a0 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f 75  intype starts ou
171b0 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f  t showing the jo
171c0 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e 20  in type between 
171d0 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c  the current tabl
171e0 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78  e.** and the nex
171f0 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c  t table on the l
17200 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65 72  ist.  The parser
17210 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74   builds the list
17220 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75   this way..** Bu
17230 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  t sqlite3SrcList
17240 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20  ShiftJoinType() 
17250 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68 65  later shifts the
17260 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68   jointypes so th
17270 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74  at each.** joint
17280 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74 68  ype expresses th
17290 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74  e join between t
172a0 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65  he table and the
172b0 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e   previous table.
172c0 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f  .**.** In the co
172d0 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65  lUsed field, the
172e0 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20   high-order bit 
172f0 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74 20  (bit 63) is set 
17300 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20  if the table.** 
17310 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68  contains more th
17320 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e  an 63 columns an
17330 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c  d the 64-th or l
17340 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75  ater column is u
17350 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  sed..*/.struct S
17360 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e  rcList {.  int n
17370 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  Src;        /* N
17380 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20  umber of tables 
17390 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e  or subqueries in
173a0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
173b0 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63   */.  u32 nAlloc
173c0 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
173d0 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f   of entries allo
173e0 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c  cated in a[] bel
173f0 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53  ow */.  struct S
17400 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20  rcList_item {.  
17410 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
17420 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f  a;  /* Schema to
17430 20 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d   which this item
17440 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20   is fixed */.   
17450 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65   char *zDatabase
17460 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61  ;  /* Name of da
17470 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74  tabase holding t
17480 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  his table */.   
17490 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
174a0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
174b0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63  e table */.    c
174c0 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20  har *zAlias;    
174d0 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74   /* The "B" part
174e0 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70   of a "A AS B" p
174f0 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73  hrase.  zName is
17500 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20   the "A" */.    
17510 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
17520 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c    /* An SQL tabl
17530 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
17540 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20  to zName */.    
17550 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
17560 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74    /* A SELECT st
17570 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20  atement used in 
17580 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65  place of a table
17590 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74   name */.    int
175a0 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f   addrFillSub;  /
175b0 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62  * Address of sub
175c0 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66  routine to manif
175d0 65 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a  est a subquery *
175e0 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74  /.    int regRet
175f0 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73  urn;    /* Regis
17600 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75  ter holding retu
17610 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64  rn address of ad
17620 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20  drFillSub */.   
17630 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20   int regResult; 
17640 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20     /* Registers 
17650 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20  holding results 
17660 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20  of a co-routine 
17670 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 7b 0a  */.    struct {.
17680 20 20 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70        u8 jointyp
17690 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20  e;      /* Type 
176a0 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  of join between 
176b0 74 68 69 73 20 61 62 6c 65 20 61 6e 64 20 74 68  this able and th
176c0 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20  e previous */.  
176d0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74      unsigned not
176e0 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f  Indexed :1;    /
176f0 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  * True if there 
17700 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44  is a NOT INDEXED
17710 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20   clause */.     
17720 20 75 6e 73 69 67 6e 65 64 20 69 73 49 6e 64 65   unsigned isInde
17730 78 65 64 42 79 20 3a 31 3b 20 20 20 2f 2a 20 54  xedBy :1;   /* T
17740 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20  rue if there is 
17750 61 6e 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c  an INDEXED BY cl
17760 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ause */.      un
17770 73 69 67 6e 65 64 20 69 73 54 61 62 46 75 6e 63  signed isTabFunc
17780 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72 75 65   :1;     /* True
17790 20 69 66 20 74 61 62 6c 65 2d 76 61 6c 75 65 64   if table-valued
177a0 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e 74 61 78  -function syntax
177b0 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
177c0 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20  ed isCorrelated 
177d0 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
177e0 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72  sub-query is cor
177f0 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 20  related */.     
17800 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72   unsigned viaCor
17810 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49  outine :1;  /* I
17820 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20  mplemented as a 
17830 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20  co-routine */.  
17840 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52      unsigned isR
17850 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20 2f  ecursive :1;   /
17860 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63 75 72  * True for recur
17870 73 69 76 65 20 72 65 66 65 72 65 6e 63 65 20 69  sive reference i
17880 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20 20 7d 20  n WITH */.    } 
17890 66 67 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  fg;.#ifndef SQLI
178a0 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
178b0 20 20 20 20 75 38 20 69 53 65 6c 65 63 74 49 64      u8 iSelectId
178c0 3b 20 20 20 20 20 2f 2a 20 49 66 20 70 53 65 6c  ;     /* If pSel
178d0 65 63 74 21 3d 30 2c 20 74 68 65 20 69 64 20 6f  ect!=0, the id o
178e0 66 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63 74  f the sub-select
178f0 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69   in EQP */.#endi
17900 66 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f  f.    int iCurso
17910 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56  r;      /* The V
17920 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  DBE cursor numbe
17930 72 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73  r used to access
17940 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
17950 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20     Expr *pOn;   
17960 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63       /* The ON c
17970 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
17980 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70  */.    IdList *p
17990 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20  Using;   /* The 
179a0 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20  USING clause of 
179b0 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69  a join */.    Bi
179c0 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20  tmask colUsed;  
179d0 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20  /* Bit N (1<<N) 
179e0 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20  set if column N 
179f0 6f 66 20 70 54 61 62 20 69 73 20 75 73 65 64 20  of pTab is used 
17a00 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20  */.    union {. 
17a10 20 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65       char *zInde
17a20 78 65 64 42 79 3b 20 20 20 20 2f 2a 20 49 64 65  xedBy;    /* Ide
17a30 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e  ntifier from "IN
17a40 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78  DEXED BY <zIndex
17a50 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  >" clause */.   
17a60 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 46 75     ExprList *pFu
17a70 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72 67 75 6d  ncArg;  /* Argum
17a80 65 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d 76 61  ents to table-va
17a90 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f  lued-function */
17aa0 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20 20 20 49  .    } u1;.    I
17ab0 6e 64 65 78 20 2a 70 49 42 49 6e 64 65 78 3b 20  ndex *pIBIndex; 
17ac0 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74   /* Index struct
17ad0 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ure correspondin
17ae0 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78 65 64  g to u1.zIndexed
17af0 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20  By */.  } a[1]; 
17b00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
17b10 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
17b20 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20  h identifier on 
17b30 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  the list */.};..
17b40 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20  /*.** Permitted 
17b50 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72  values of the Sr
17b60 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65  cList.a.jointype
17b70 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e   field.*/.#defin
17b80 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30  e JT_INNER     0
17b90 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20  x0001    /* Any 
17ba0 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72  kind of inner or
17bb0 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23   cross join */.#
17bc0 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20  define JT_CROSS 
17bd0 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a      0x0002    /*
17be0 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66   Explicit use of
17bf0 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f   the CROSS keywo
17c00 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  rd */.#define JT
17c10 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30 30  _NATURAL   0x000
17c20 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72  4    /* True for
17c30 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69   a "natural" joi
17c40 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
17c50 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30 38  LEFT      0x0008
17c60 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65      /* Left oute
17c70 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
17c80 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30  e JT_RIGHT     0
17c90 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68  x0010    /* Righ
17ca0 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  t outer join */.
17cb0 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52  #define JT_OUTER
17cc0 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f       0x0020    /
17cd0 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65  * The "OUTER" ke
17ce0 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74  yword is present
17cf0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45   */.#define JT_E
17d00 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30 20  RROR     0x0040 
17d10 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72     /* unknown or
17d20 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69   unsupported joi
17d30 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  n type */.../*.*
17d40 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69  * Flags appropri
17d50 61 74 65 20 66 6f 72 20 74 68 65 20 77 63 74 72  ate for the wctr
17d60 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72  lFlags parameter
17d70 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72 65   of sqlite3Where
17d80 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74  Begin().** and t
17d90 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74  he WhereInfo.wct
17da0 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a  rlFlags member..
17db0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
17dc0 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20  _ORDERBY_NORMAL 
17dd0 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f    0x0000 /* No-o
17de0 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  p */.#define WHE
17df0 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20  RE_ORDERBY_MIN  
17e00 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52      0x0001 /* OR
17e10 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e  DER BY processin
17e20 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63  g for min() func
17e30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
17e40 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20  E_ORDERBY_MAX   
17e50 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44     0x0002 /* ORD
17e60 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67  ER BY processing
17e70 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20   for max() func 
17e80 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
17e90 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44  _ONEPASS_DESIRED
17ea0 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74    0x0004 /* Want
17eb0 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20   to do one-pass 
17ec0 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f  UPDATE/DELETE */
17ed0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
17ee0 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20  UPLICATES_OK    
17ef0 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20 74 6f 20  0x0008 /* Ok to 
17f00 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72  return a row mor
17f10 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23  e than once */.#
17f20 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4d 49  define WHERE_OMI
17f30 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20 20 30 78  T_OPEN_CLOSE  0x
17f40 30 30 31 30 20 2f 2a 20 54 61 62 6c 65 20 63 75  0010 /* Table cu
17f50 72 73 6f 72 73 20 61 72 65 20 61 6c 72 65 61 64  rsors are alread
17f60 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  y open */.#defin
17f70 65 20 57 48 45 52 45 5f 46 4f 52 43 45 5f 54 41  e WHERE_FORCE_TA
17f80 42 4c 45 20 20 20 20 20 20 30 78 30 30 32 30 20  BLE      0x0020 
17f90 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 61 6e  /* Do not use an
17fa0 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73 65 61 72   index-only sear
17fb0 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ch */.#define WH
17fc0 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c  ERE_ONETABLE_ONL
17fd0 59 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20 4f  Y    0x0040 /* O
17fe0 6e 6c 79 20 63 6f 64 65 20 74 68 65 20 31 73 74  nly code the 1st
17ff0 20 74 61 62 6c 65 20 69 6e 20 70 54 61 62 4c 69   table in pTabLi
18000 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  st */.#define WH
18010 45 52 45 5f 4e 4f 5f 41 55 54 4f 49 4e 44 45 58  ERE_NO_AUTOINDEX
18020 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20 44       0x0080 /* D
18030 69 73 61 6c 6c 6f 77 20 61 75 74 6f 6d 61 74 69  isallow automati
18040 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  c indexes */.#de
18050 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50  fine WHERE_GROUP
18060 42 59 20 20 20 20 20 20 20 20 20 20 30 78 30 31  BY          0x01
18070 30 30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69  00 /* pOrderBy i
18080 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50  s really a GROUP
18090 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57   BY */.#define W
180a0 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20  HERE_DISTINCTBY 
180b0 20 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a 20        0x0200 /* 
180c0 70 4f 72 64 65 72 62 79 20 69 73 20 72 65 61 6c  pOrderby is real
180d0 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c  ly a DISTINCT cl
180e0 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
180f0 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49  WHERE_WANT_DISTI
18100 4e 43 54 20 20 20 20 30 78 30 34 30 30 20 2f 2a  NCT    0x0400 /*
18110 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64   All output need
18120 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74  s to be distinct
18130 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
18140 45 5f 53 4f 52 54 42 59 47 52 4f 55 50 20 20 20  E_SORTBYGROUP   
18150 20 20 20 30 78 30 38 30 30 20 2f 2a 20 53 75 70     0x0800 /* Sup
18160 70 6f 72 74 20 73 71 6c 69 74 65 33 57 68 65 72  port sqlite3Wher
18170 65 49 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23  eIsSorted() */.#
18180 64 65 66 69 6e 65 20 57 48 45 52 45 5f 52 45 4f  define WHERE_REO
18190 50 45 4e 5f 49 44 58 20 20 20 20 20 20 20 30 78  PEN_IDX       0x
181a0 31 30 30 30 20 2f 2a 20 54 72 79 20 74 6f 20 75  1000 /* Try to u
181b0 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 20  se OP_ReopenIdx 
181c0 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72  */../* Allowed r
181d0 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f  eturn values fro
181e0 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  m sqlite3WhereIs
181f0 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64  Distinct().*/.#d
18200 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
18210 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30  INCT_NOOP      0
18220 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65    /* DISTINCT ke
18230 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a  yword not used *
18240 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
18250 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20  DISTINCT_UNIQUE 
18260 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c     1  /* No dupl
18270 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e  icates */.#defin
18280 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
18290 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a  _ORDERED   2  /*
182a0 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20   All duplicates 
182b0 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a  are adjacent */.
182c0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
182d0 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44  STINCT_UNORDERED
182e0 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65   3  /* Duplicate
182f0 73 20 61 72 65 20 73 63 61 74 74 65 72 65 64 20  s are scattered 
18300 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65  */../*.** A Name
18310 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20  Context defines 
18320 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69  a context in whi
18330 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61  ch to resolve ta
18340 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a  ble and column.*
18350 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f  * names.  The co
18360 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f  ntext consists o
18370 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c  f a list of tabl
18380 65 73 20 28 74 68 65 20 70 53 72 63 4c 69 73 74  es (the pSrcList
18390 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61  ) field and.** a
183a0 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65   list of named e
183b0 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73  xpression (pELis
183c0 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65  t).  The named e
183d0 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d  xpression list m
183e0 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20  ay.** be NULL.  
183f0 54 68 65 20 70 53 72 63 20 63 6f 72 72 65 73 70  The pSrc corresp
18400 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d  onds to the FROM
18410 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
18420 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65  ECT or.** to the
18430 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65   table being ope
18440 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45  rated on by INSE
18450 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44  RT, UPDATE, or D
18460 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70  ELETE.  The.** p
18470 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64  EList correspond
18480 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20  s to the result 
18490 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20  set of a SELECT 
184a0 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a  and is NULL for.
184b0 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65  ** other stateme
184c0 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43  nts..**.** NameC
184d0 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e  ontexts can be n
184e0 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73  ested.  When res
184f0 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68  olving names, th
18500 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a  e inner-most .**
18510 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72   context is sear
18520 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66 20  ched first.  If 
18530 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e  no match is foun
18540 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65  d, the next oute
18550 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20  r.** context is 
18560 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65  checked.  If the
18570 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d  re is still no m
18580 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63  atch, the next c
18590 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65  ontext.** is che
185a0 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63  cked.  This proc
185b0 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e  ess continues un
185c0 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74  til either a mat
185d0 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f  ch is found.** o
185e0 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61  r all contexts a
185f0 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20  re check.  When 
18600 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
18610 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65  , the nRef membe
18620 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  r of.** the cont
18630 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ext containing t
18640 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72  he match is incr
18650 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20  emented. .**.** 
18660 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65  Each subquery ge
18670 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e  ts a new NameCon
18680 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74  text.  The pNext
18690 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f   field points to
186a0 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74   the.** NameCont
186b0 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e  ext in the paren
186c0 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74  t query.  Thus t
186d0 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63  he process of sc
186e0 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61  anning the.** Na
186f0 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63  meContext list c
18700 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65  orresponds to se
18710 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20  arching through 
18720 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74  successively out
18730 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73  er.** subqueries
18740 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d   looking for a m
18750 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  atch..*/.struct 
18760 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20  NameContext {.  
18770 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
18780 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73       /* The pars
18790 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  er */.  SrcList 
187a0 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20  *pSrcList;   /* 
187b0 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c  One or more tabl
187c0 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c  es used to resol
187d0 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78  ve names */.  Ex
187e0 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
187f0 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c     /* Optional l
18800 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65  ist of result-se
18810 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41  t columns */.  A
18820 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f  ggInfo *pAggInfo
18830 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  ;   /* Informati
18840 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67 61  on about aggrega
18850 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76 65  tes at this leve
18860 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65  l */.  NameConte
18870 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  xt *pNext;  /* N
18880 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63  ext outer name c
18890 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f  ontext.  NULL fo
188a0 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20  r outermost */. 
188b0 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
188c0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
188d0 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65  of names resolve
188e0 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78  d by this contex
188f0 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  t */.  int nErr;
18900 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
18910 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
18920 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c  encountered whil
18930 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  e resolving name
18940 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61  s */.  u16 ncFla
18950 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a  gs;         /* Z
18960 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a  ero or more NC_*
18970 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62   flags defined b
18980 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  elow */.};../*.*
18990 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
189a0 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e   for the NameCon
189b0 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69  text, ncFlags fi
189c0 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 3a  eld..**.** Note:
189d0 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 6d    NC_MinMaxAgg m
189e0 75 73 74 20 68 61 76 65 20 74 68 65 20 73 61 6d  ust have the sam
189f0 65 20 76 61 6c 75 65 20 61 73 20 53 46 5f 4d 69  e value as SF_Mi
18a00 6e 4d 61 78 41 67 67 20 61 6e 64 0a 2a 2a 20 53  nMaxAgg and.** S
18a10 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
18a20 58 2e 0a 2a 2a 20 0a 2a 2f 0a 23 64 65 66 69 6e  X..** .*/.#defin
18a30 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30  e NC_AllowAgg  0
18a40 78 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67  x0001  /* Aggreg
18a50 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  ate functions ar
18a60 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a  e allowed here *
18a70 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73  /.#define NC_Has
18a80 41 67 67 20 20 20 20 30 78 30 30 30 32 20 20 2f  Agg    0x0002  /
18a90 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  * One or more ag
18aa0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
18ab0 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  s seen */.#defin
18ac0 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30  e NC_IsCheck   0
18ad0 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69  x0004  /* True i
18ae0 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  f resolving name
18af0 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e  s in a CHECK con
18b00 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
18b10 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20  ne NC_InAggFunc 
18b20 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20  0x0008  /* True 
18b30 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67  if analyzing arg
18b40 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67  uments to an agg
18b50 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
18b60 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30 78   NC_PartIdx   0x
18b70 30 30 31 30 20 20 2f 2a 20 54 72 75 65 20 69 66  0010  /* True if
18b80 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72   resolving a par
18b90 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45  tial index WHERE
18ba0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d   */.#define NC_M
18bb0 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30 20  inMaxAgg 0x1000 
18bc0 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72   /* min/max aggr
18bd0 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65  egates seen.  Se
18be0 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a  e note above */.
18bf0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
18c00 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
18c10 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f  ing structure co
18c20 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72  ntains all infor
18c30 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64  mation.** needed
18c40 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64   to generate cod
18c50 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53  e for a single S
18c60 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
18c70 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73  .**.** nLimit is
18c80 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68   set to -1 if th
18c90 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20  ere is no LIMIT 
18ca0 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74  clause.  nOffset
18cb0 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a   is set to 0..**
18cc0 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20 4c   If there is a L
18cd0 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65  IMIT clause, the
18ce0 20 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69   parser sets nLi
18cf0 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  mit to the value
18d00 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74   of the.** limit
18d10 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20   and nOffset to 
18d20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
18d30 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69 66   offset (or 0 if
18d40 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a   there is not.**
18d50 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c   offset).  But l
18d60 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20  ater on, nLimit 
18d70 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f  and nOffset beco
18d80 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f  me the memory lo
18d90 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68  cations.** in th
18da0 65 20 56 44 42 45 20 74 68 61 74 20 72 65 63 6f  e VDBE that reco
18db0 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64  rd the limit and
18dc0 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73   offset counters
18dd0 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e  ..**.** addrOpen
18de0 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63  Ephm[] entries c
18df0 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72 65  ontain the addre
18e00 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68  ss of OP_OpenEph
18e10 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a  emeral opcodes..
18e20 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65 73 73  ** These address
18e30 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65  es must be store
18e40 64 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e  d so that we can
18e50 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c   go back and fil
18e60 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b  l in.** the P4_K
18e70 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61  EYINFO and P2 pa
18e80 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20  rameters later. 
18e90 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65 79   Neither the Key
18ea0 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20  Info nor.** the 
18eb0 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
18ec0 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63  s in P2 can be c
18ed0 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65 20 73  omputed at the s
18ee0 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74  ame time.** as t
18ef0 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69  he OP_OpenEphm i
18f00 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f  nstruction is co
18f10 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a  ded because not.
18f20 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d  ** enough inform
18f30 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
18f40 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69  compound query i
18f50 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20  s known at that 
18f60 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65  point..** The Ke
18f70 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70  yInfo for addrOp
18f80 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31  enTran[0] and [1
18f90 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61  ] contains colla
18fa0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a  ting sequences.*
18fb0 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74  * for the result
18fc0 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e   set.  The KeyIn
18fd0 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45  fo for addrOpenE
18fe0 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20  phm[2] contains 
18ff0 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71  collating.** seq
19000 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f  uences for the O
19010 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
19020 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74  */.struct Select
19030 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70   {.  ExprList *p
19040 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54  EList;      /* T
19050 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65  he fields of the
19060 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20   result */.  u8 
19070 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
19080 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54      /* One of: T
19090 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54  K_UNION TK_ALL T
190a0 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45  K_INTERSECT TK_E
190b0 58 43 45 50 54 20 2a 2f 0a 20 20 75 31 36 20 73  XCEPT */.  u16 s
190c0 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  elFlags;        
190d0 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f    /* Various SF_
190e0 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e  * values */.  in
190f0 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65  t iLimit, iOffse
19100 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72  t;   /* Memory r
19110 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67  egisters holding
19120 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20   LIMIT & OFFSET 
19130 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20  counters */.#if 
19140 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42  SELECTTRACE_ENAB
19150 4c 45 44 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e  LED.  char zSelN
19160 61 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20  ame[12];     /* 
19170 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66  Symbolic name of
19180 20 74 68 69 73 20 53 45 4c 45 43 54 20 75 73 65   this SELECT use
19190 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67 20 2a   for debugging *
191a0 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 61  /.#endif.  int a
191b0 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20  ddrOpenEphm[2]; 
191c0 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65    /* OP_OpenEphe
191d0 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65  m opcodes relate
191e0 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74  d to this select
191f0 20 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65 63   */.  u64 nSelec
19200 74 52 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a 20  tRow;        /* 
19210 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72  Estimated number
19220 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
19230 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53  */.  SrcList *pS
19240 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  rc;         /* T
19250 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  he FROM clause *
19260 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65  /.  Expr *pWhere
19270 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
19280 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a  e WHERE clause *
19290 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47  /.  ExprList *pG
192a0 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68  roupBy;    /* Th
192b0 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  e GROUP BY claus
192c0 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61  e */.  Expr *pHa
192d0 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  ving;         /*
192e0 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75   The HAVING clau
192f0 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  se */.  ExprList
19300 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f   *pOrderBy;    /
19310 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  * The ORDER BY c
19320 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63  lause */.  Selec
19330 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20  t *pPrior;      
19340 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63    /* Prior selec
19350 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t in a compound 
19360 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74  select statement
19370 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e   */.  Select *pN
19380 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
19390 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74  Next select to t
193a0 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d  he left in a com
193b0 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20  pound */.  Expr 
193c0 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20  *pLimit;        
193d0 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65    /* LIMIT expre
193e0 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e  ssion. NULL mean
193f0 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20  s not used. */. 
19400 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20   Expr *pOffset; 
19410 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45          /* OFFSE
19420 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55  T expression. NU
19430 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65  LL means not use
19440 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57  d. */.  With *pW
19450 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ith;           /
19460 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20 61 74  * WITH clause at
19470 74 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 73  tached to this s
19480 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20  elect. Or NULL. 
19490 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
194a0 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
194b0 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e  Select.selFlags.
194c0 20 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69    The "SF" prefi
194d0 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20  x stands for.** 
194e0 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a  "Select Flag"..*
194f0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73  /.#define SF_Dis
19500 74 69 6e 63 74 20 20 20 20 20 20 20 20 30 78 30  tinct        0x0
19510 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73  001  /* Output s
19520 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43  hould be DISTINC
19530 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  T */.#define SF_
19540 41 6c 6c 20 20 20 20 20 20 20 20 20 20 20 20 20  All             
19550 30 78 30 30 30 32 20 20 2f 2a 20 49 6e 63 6c 75  0x0002  /* Inclu
19560 64 65 73 20 74 68 65 20 41 4c 4c 20 6b 65 79 77  des the ALL keyw
19570 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ord */.#define S
19580 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20  F_Resolved      
19590 20 20 30 78 30 30 30 34 20 20 2f 2a 20 49 64 65    0x0004  /* Ide
195a0 6e 74 69 66 69 65 72 73 20 68 61 76 65 20 62 65  ntifiers have be
195b0 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23  en resolved */.#
195c0 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67  define SF_Aggreg
195d0 61 74 65 20 20 20 20 20 20 20 30 78 30 30 30 38  ate       0x0008
195e0 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67    /* Contains ag
195f0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
19600 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
19610 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20 20  UsesEphemeral   
19620 30 78 30 30 31 30 20 20 2f 2a 20 55 73 65 73 20  0x0010  /* Uses 
19630 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61  the OpenEphemera
19640 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66  l opcode */.#def
19650 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20  ine SF_Expanded 
19660 20 20 20 20 20 20 20 30 78 30 30 32 30 20 20 2f         0x0020  /
19670 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  * sqlite3SelectE
19680 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f  xpand() called o
19690 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e  n this */.#defin
196a0 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f  e SF_HasTypeInfo
196b0 20 20 20 20 20 30 78 30 30 34 30 20 20 2f 2a 20       0x0040  /* 
196c0 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20  FROM subqueries 
196d0 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64  have Table metad
196e0 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ata */.#define S
196f0 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20  F_Compound      
19700 20 20 30 78 30 30 38 30 20 20 2f 2a 20 50 61 72    0x0080  /* Par
19710 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t of a compound 
19720 71 75 65 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65  query */.#define
19730 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20 20   SF_Values      
19740 20 20 20 20 30 78 30 31 30 30 20 20 2f 2a 20 53      0x0100  /* S
19750 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d 20  ynthesized from 
19760 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a 2f  VALUES clause */
19770 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 75 6c 74  .#define SF_Mult
19780 69 56 61 6c 75 65 20 20 20 20 20 20 30 78 30 32  iValue      0x02
19790 30 30 20 20 2f 2a 20 53 69 6e 67 6c 65 20 56 41  00  /* Single VA
197a0 4c 55 45 53 20 74 65 72 6d 20 77 69 74 68 20 6d  LUES term with m
197b0 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
197c0 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74 65  #define SF_Neste
197d0 64 46 72 6f 6d 20 20 20 20 20 20 30 78 30 34 30  dFrom      0x040
197e0 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20  0  /* Part of a 
197f0 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46 52  parenthesized FR
19800 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65  OM clause */.#de
19810 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e  fine SF_MaybeCon
19820 76 65 72 74 20 20 20 20 30 78 30 38 30 30 20 20  vert    0x0800  
19830 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43  /* Need convertC
19840 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
19850 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65  ubquery() */.#de
19860 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67  fine SF_MinMaxAg
19870 67 20 20 20 20 20 20 20 30 78 31 30 30 30 20 20  g       0x1000  
19880 2f 2a 20 41 67 67 72 65 67 61 74 65 20 63 6f 6e  /* Aggregate con
19890 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72  taining min() or
198a0 20 6d 61 78 28 29 20 2a 2f 0a 23 64 65 66 69 6e   max() */.#defin
198b0 65 20 53 46 5f 52 65 63 75 72 73 69 76 65 20 20  e SF_Recursive  
198c0 20 20 20 20 20 30 78 32 30 30 30 20 20 2f 2a 20       0x2000  /* 
198d0 54 68 65 20 72 65 63 75 72 73 69 76 65 20 70 61  The recursive pa
198e0 72 74 20 6f 66 20 61 20 72 65 63 75 72 73 69 76  rt of a recursiv
198f0 65 20 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  e CTE */.#define
19900 20 53 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20   SF_Converted   
19910 20 20 20 20 30 78 34 30 30 30 20 20 2f 2a 20 42      0x4000  /* B
19920 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e  y convertCompoun
19930 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72  dSelectToSubquer
19940 79 28 29 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54  y() */.../*.** T
19950 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20  he results of a 
19960 53 45 4c 45 43 54 20 63 61 6e 20 62 65 20 64 69  SELECT can be di
19970 73 74 72 69 62 75 74 65 64 20 69 6e 20 73 65 76  stributed in sev
19980 65 72 61 6c 20 77 61 79 73 2c 20 61 73 20 64 65  eral ways, as de
19990 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20  fined.** by one 
199a0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
199b0 20 6d 61 63 72 6f 73 2e 20 20 54 68 65 20 22 53   macros.  The "S
199c0 52 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73  RT" prefix means
199d0 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74 0a   "SELECT Result.
199e0 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20  ** Type"..**.** 
199f0 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20      SRT_Union   
19a00 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
19a10 73 20 61 73 20 61 20 6b 65 79 20 69 6e 20 61 20  s as a key in a 
19a20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20  temporary index 
19a30 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19a40 20 20 20 20 20 20 20 20 69 64 65 6e 74 69 66 69          identifi
19a50 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53 44  ed by pDest->iSD
19a60 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Parm..**.**     
19a70 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20  SRT_Except      
19a80 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20 66  Remove results f
19a90 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61 72  rom the temporar
19aa0 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e 69  y index pDest->i
19ab0 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20  SDParm..**.**   
19ac0 20 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20    SRT_Exists    
19ad0 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20 6d    Store a 1 in m
19ae0 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73 74  emory cell pDest
19af0 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68 65  ->iSDParm if the
19b00 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20   result.**      
19b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
19b20 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e  et is not empty.
19b30 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44  .**.**     SRT_D
19b40 69 73 63 61 72 64 20 20 20 20 20 54 68 72 6f 77  iscard     Throw
19b50 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 77 61   the results awa
19b60 79 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64  y.  This is used
19b70 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20   by SELECT.**   
19b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b90 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74    statements wit
19ba0 68 69 6e 20 74 72 69 67 67 65 72 73 20 77 68 6f  hin triggers who
19bb0 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20  se only purpose 
19bc0 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  is.**           
19bd0 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73 69            the si
19be0 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66 75  de-effects of fu
19bf0 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41  nctions..**.** A
19c00 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20  ll of the above 
19c10 61 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e 6f  are free to igno
19c20 72 65 20 74 68 65 69 72 20 4f 52 44 45 52 20 42  re their ORDER B
19c30 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65 20  Y clause. Those 
19c40 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d  that.** follow m
19c50 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52  ust honor the OR
19c60 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
19c70 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75 74  *.**     SRT_Out
19c80 70 75 74 20 20 20 20 20 20 47 65 6e 65 72 61 74  put      Generat
19c90 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70 75  e a row of outpu
19ca0 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50 5f  t (using the OP_
19cb0 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20  ResultRow.**    
19cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cd0 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61 63   opcode) for eac
19ce0 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65 73  h row in the res
19cf0 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20  ult set..**.**  
19d00 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20     SRT_Mem      
19d10 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66     Only valid if
19d20 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   the result is a
19d30 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a   single column..
19d40 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19d50 20 20 20 20 20 20 20 53 74 6f 72 65 20 74 68 65         Store the
19d60 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66   first column of
19d70 20 74 68 65 20 66 69 72 73 74 20 72 65 73 75 6c   the first resul
19d80 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20  t row.**        
19d90 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 20               in 
19da0 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e  register pDest->
19db0 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62 61  iSDParm then aba
19dc0 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a  ndon the rest.**
19dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19de0 20 20 20 20 20 6f 66 20 74 68 65 20 71 75 65 72       of the quer
19df0 79 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e 61  y.  This destina
19e00 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49  tion implies "LI
19e10 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20  MIT 1"..**.**   
19e20 20 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20    SRT_Set       
19e30 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75 73    The result mus
19e40 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63 6f  t be a single co
19e50 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61 63  lumn.  Store eac
19e60 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  h.**            
19e70 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66 20           row of 
19e80 72 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b 65  result as the ke
19e90 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73 74  y in table pDest
19ea0 2d 3e 69 53 44 50 61 72 6d 2e 20 0a 2a 2a 20 20  ->iSDParm. .**  
19eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ec0 20 20 20 41 70 70 6c 79 20 74 68 65 20 61 66 66     Apply the aff
19ed0 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66  inity pDest->aff
19ee0 53 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72  Sdst before stor
19ef0 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ing.**          
19f00 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
19f10 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70  ts.  Used to imp
19f20 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45  lement "IN (SELE
19f30 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20  CT ...)"..**.** 
19f40 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62      SRT_EphemTab
19f50 20 20 20 20 43 72 65 61 74 65 20 61 6e 20 74 65      Create an te
19f60 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
19f70 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64  est->iSDParm and
19f80 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20   store.**       
19f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
19fa0 65 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20  e result there. 
19fb0 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65  The cursor is le
19fc0 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a  ft open after.**
19fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fe0 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20       returning. 
19ff0 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52   This is like SR
1a000 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20 74  T_Table except t
1a010 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  hat.**          
1a020 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
1a030 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73  destination uses
1a040 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1a050 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20  l to create.**  
1a060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a070 20 20 20 74 68 65 20 74 61 62 6c 65 20 66 69 72     the table fir
1a080 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  st..**.**     SR
1a090 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65  T_Coroutine   Ge
1a0a0 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74  nerate a co-rout
1a0b0 69 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e 73  ine that returns
1a0c0 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a   a new row of.**
1a0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0e0 20 20 20 20 20 72 65 73 75 6c 74 73 20 65 61 63       results eac
1a0f0 68 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76  h time it is inv
1a100 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79  oked.  The entry
1a110 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20   point.**       
1a120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66                of
1a130 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20   the co-routine 
1a140 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
1a150 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44  ister pDest->iSD
1a160 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20  Parm.**         
1a170 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 64 20              and 
1a180 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69  the result row i
1a190 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73  s stored in pDes
1a1a0 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65  t->nDest registe
1a1b0 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  rs.**           
1a1c0 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74 69            starti
1a1d0 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69  ng with pDest->i
1a1e0 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Sdst..**.**     
1a1f0 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20  SRT_Table       
1a200 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
1a210 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1a220 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1a230 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f  .**     SRT_Fifo
1a240 20 20 20 20 20 20 20 20 54 68 69 73 20 69 73 20          This is 
1a250 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61  like SRT_EphemTa
1a260 62 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  b except that th
1a270 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20  e table.**      
1a280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1a290 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72  s assumed to alr
1a2a0 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53  eady be open.  S
1a2b0 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20  RT_Fifo has.**  
1a2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2d0 20 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61     the additiona
1a2e0 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65  l property of be
1a2f0 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f  ing able to igno
1a300 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  re.**           
1a310 20 20 20 20 20 20 20 20 20 20 74 68 65 20 4f 52            the OR
1a320 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
1a330 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
1a340 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72  tFifo    Store r
1a350 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70  esults in a temp
1a360 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
1a370 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20  t->iSDParm..**  
1a380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a390 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20     But also use 
1a3a0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
1a3b0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31  pDest->iSDParm+1
1a3c0 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   as.**          
1a3d0 20 20 20 20 20 20 20 20 20 20 20 61 20 72 65 63             a rec
1a3e0 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72  ord of all prior
1a3f0 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e   results and ign
1a400 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74  ore any duplicat
1a410 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1a420 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20           rows.  
1a430 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69  Name means:  "Di
1a440 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a  stinct Fifo"..**
1a450 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75  .**     SRT_Queu
1a460 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65  e       Store re
1a470 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74  sults in priorit
1a480 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69  y queue pDest->i
1a490 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a  SDParm (really.*
1a4a0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1a4b0 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e        an index).
1a4c0 20 20 41 70 70 65 6e 64 20 61 20 73 65 71 75 65    Append a seque
1a4d0 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68  nce number so th
1a4e0 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a  at all entries.*
1a4f0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1a500 20 20 20 20 20 20 61 72 65 20 64 69 73 74 69 6e        are distin
1a510 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  ct..**.**     SR
1a520 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 53 74  T_DistQueue   St
1a530 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70  ore results in p
1a540 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44  riority queue pD
1a550 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c  est->iSDParm onl
1a560 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20  y if.**         
1a570 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1a580 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20  same record has 
1a590 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65  never been store
1a5a0 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a  d before.  The.*
1a5b0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1a5c0 20 20 20 20 20 20 69 6e 64 65 78 20 61 74 20 70        index at p
1a5d0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20  Dest->iSDParm+1 
1a5e0 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73  hold all prior s
1a5f0 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tores..*/.#defin
1a600 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20  e SRT_Union     
1a610 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72     1  /* Store r
1a620 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e  esult as keys in
1a630 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65   an index */.#de
1a640 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20  fine SRT_Except 
1a650 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f        2  /* Remo
1a660 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61  ve result from a
1a670 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a   UNION index */.
1a680 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73  #define SRT_Exis
1a690 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53  ts       3  /* S
1a6a0 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65  tore 1 if the re
1a6b0 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74  sult is not empt
1a6c0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  y */.#define SRT
1a6d0 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20  _Discard      4 
1a6e0 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20   /* Do not save 
1a6f0 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77  the results anyw
1a700 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  here */.#define 
1a710 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20  SRT_Fifo        
1a720 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   5  /* Store res
1a730 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68  ult as data with
1a740 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f   an automatic ro
1a750 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  wid */.#define S
1a760 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20  RT_DistFifo     
1a770 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46  6  /* Like SRT_F
1a780 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20  ifo, but unique 
1a790 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a  results only */.
1a7a0 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75  #define SRT_Queu
1a7b0 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53  e        7  /* S
1a7c0 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61  tore result in a
1a7d0 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69  n queue */.#defi
1a7e0 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65 75 65  ne SRT_DistQueue
1a7f0 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53      8  /* Like S
1a800 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e  RT_Queue, but un
1a810 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c  ique results onl
1a820 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44  y */../* The ORD
1a830 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ER BY clause is 
1a840 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20  ignored for all 
1a850 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a  of the above */.
1a860 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c  #define Ignorabl
1a870 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d  eOrderby(X) ((X-
1a880 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73  >eDest)<=SRT_Dis
1a890 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65  tQueue)..#define
1a8a0 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20   SRT_Output     
1a8b0 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65    9  /* Output e
1a8c0 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  ach row of resul
1a8d0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
1a8e0 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30 20  _Mem         10 
1a8f0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1a900 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c   in a memory cel
1a910 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  l */.#define SRT
1a920 5f 53 65 74 20 20 20 20 20 20 20 20 20 31 31 20  _Set         11 
1a930 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1a940 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20  s as keys in an 
1a950 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
1a960 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20   SRT_EphemTab   
1a970 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74   12  /* Create t
1a980 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64  ransient tab and
1a990 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f   store like SRT_
1a9a0 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  Table */.#define
1a9b0 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20   SRT_Coroutine  
1a9c0 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65   13  /* Generate
1a9d0 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66   a single row of
1a9e0 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69   result */.#defi
1a9f0 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20  ne SRT_Table    
1aa00 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20     14  /* Store 
1aa10 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77  result as data w
1aa20 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63  ith an automatic
1aa30 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   rowid */../*.**
1aa40 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1aa50 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63  this object desc
1aa60 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70  ribes where to p
1aa70 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ut of the result
1aa80 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54  s of.** a SELECT
1aa90 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73   statement..*/.s
1aaa0 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74  truct SelectDest
1aab0 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20   {.  u8 eDest;  
1aac0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77            /* How
1aad0 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74   to dispose of t
1aae0 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20  he results.  On 
1aaf0 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20  of SRT_* above. 
1ab00 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 53 64 73  */.  char affSds
1ab10 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 66 66  t;        /* Aff
1ab20 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e 20  inity used when 
1ab30 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a  eDest==SRT_Set *
1ab40 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b  /.  int iSDParm;
1ab50 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61           /* A pa
1ab60 72 61 6d 65 74 65 72 20 75 73 65 64 20 62 79 20  rameter used by 
1ab70 74 68 65 20 65 44 65 73 74 20 64 69 73 70 6f 73  the eDest dispos
1ab80 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69  al method */.  i
1ab90 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20 20 20  nt iSdst;       
1aba0 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69      /* Base regi
1abb0 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75 6c  ster where resul
1abc0 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a  ts are written *
1abd0 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20  /.  int nSdst;  
1abe0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1abf0 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  er of registers 
1ac00 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 45  allocated */.  E
1ac10 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
1ac20 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d  y;  /* Key colum
1ac30 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65  ns for SRT_Queue
1ac40 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65   and SRT_DistQue
1ac50 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ue */.};../*.** 
1ac60 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65  During code gene
1ac70 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d  ration of statem
1ac80 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73  ents that do ins
1ac90 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e  erts into AUTOIN
1aca0 43 52 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62 6c  CREMENT .** tabl
1acb0 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  es, the followin
1acc0 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  g information is
1acd0 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
1ace0 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63   Table.u.autoInc
1acf0 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66  .p.** pointer of
1ad00 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d   each autoincrem
1ad10 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63  ent table to rec
1ad20 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e  ord some side in
1ad30 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a  formation that.*
1ad40 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  * the code gener
1ad50 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20  ator needs.  We 
1ad60 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72  have to keep per
1ad70 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65  -table autoincre
1ad80 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  ment.** informat
1ad90 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65  ion in case inse
1ada0 72 74 73 20 61 72 65 20 64 6f 77 6e 20 77 69 74  rts are down wit
1adb0 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54  hin triggers.  T
1adc0 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a  riggers do not.*
1add0 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64  * normally coord
1ade0 69 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69  inate their acti
1adf0 76 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64  vities, but we d
1ae00 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69  o need to coordi
1ae10 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64  nate the.** load
1ae20 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f  ing and saving o
1ae30 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  f autoincrement 
1ae40 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
1ae50 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e  struct AutoincIn
1ae60 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e  fo {.  AutoincIn
1ae70 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20  fo *pNext;   /* 
1ae80 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20  Next info block 
1ae90 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65  in a list of the
1aea0 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65  m all */.  Table
1aeb0 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
1aec0 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69   /* Table this i
1aed0 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73  nfo block refers
1aee0 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62   to */.  int iDb
1aef0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1af00 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74  * Index in sqlit
1af10 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61  e3.aDb[] of data
1af20 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61  base holding pTa
1af30 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74  b */.  int regCt
1af40 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
1af50 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20  Memory register 
1af60 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69  holding the rowi
1af70 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a  d counter */.};.
1af80 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74  ./*.** Size of t
1af90 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a  he column cache.
1afa0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
1afb0 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64  E_N_COLCACHE.# d
1afc0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43  efine SQLITE_N_C
1afd0 4f 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69  OLCACHE 10.#endi
1afe0 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73  f../*.** At leas
1aff0 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  t one instance o
1b000 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1b010 73 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65  structure is cre
1b020 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 0a 2a  ated for each .*
1b030 2a 20 74 72 69 67 67 65 72 20 74 68 61 74 20 6d  * trigger that m
1b040 61 79 20 62 65 20 66 69 72 65 64 20 77 68 69 6c  ay be fired whil
1b050 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53  e parsing an INS
1b060 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44  ERT, UPDATE or D
1b070 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65  ELETE.** stateme
1b080 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a  nt. All such obj
1b090 65 63 74 73 20 61 72 65 20 73 74 6f 72 65 64 20  ects are stored 
1b0a0 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69  in the linked li
1b0b0 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20  st headed at.** 
1b0c0 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
1b0d0 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e  g and deleted on
1b0e0 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d  ce statement com
1b0f0 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65  pilation has bee
1b100 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a  n.** completed..
1b110 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62  **.** A Vdbe sub
1b120 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d  -program that im
1b130 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64  plements the bod
1b140 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73  y and WHEN claus
1b150 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20  e of trigger.** 
1b160 54 72 69 67 67 65 72 50 72 67 2e 70 54 72 69 67  TriggerPrg.pTrig
1b170 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20  ger, assuming a 
1b180 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  default ON CONFL
1b190 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a  ICT clause of.**
1b1a0 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f   TriggerPrg.orco
1b1b0 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e  nf, is stored in
1b1c0 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   the TriggerPrg.
1b1d0 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c  pProgram variabl
1b1e0 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e  e..** The Parse.
1b1f0 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74  pTriggerPrg list
1b200 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20   never contains 
1b210 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68  two entries with
1b220 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c   the same.** val
1b230 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72  ues for both pTr
1b240 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66  igger and orconf
1b250 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67  ..**.** The Trig
1b260 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b  gerPrg.aColmask[
1b270 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  0] variable is s
1b280 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20  et to a mask of 
1b290 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a  old.* columns.**
1b2a0 20 61 63 63 65 73 73 65 64 20 28 6f 72 20 73 65   accessed (or se
1b2b0 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67  t to 0 for trigg
1b2c0 65 72 73 20 66 69 72 65 64 20 61 73 20 61 20 72  ers fired as a r
1b2d0 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 20  esult of INSERT 
1b2e0 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e  .** statements).
1b2f0 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20   Similarly, the 
1b300 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d  TriggerPrg.aColm
1b310 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20  ask[1] variable 
1b320 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d  is set to.** a m
1b330 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c  ask of new.* col
1b340 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68 65  umns used by the
1b350 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72   program..*/.str
1b360 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20 7b  uct TriggerPrg {
1b370 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69  .  Trigger *pTri
1b380 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72  gger;      /* Tr
1b390 69 67 67 65 72 20 74 68 69 73 20 70 72 6f 67 72  igger this progr
1b3a0 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f  am was coded fro
1b3b0 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72  m */.  TriggerPr
1b3c0 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f  g *pNext;      /
1b3d0 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20  * Next entry in 
1b3e0 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
1b3f0 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50  g list */.  SubP
1b400 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d  rogram *pProgram
1b410 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69  ;   /* Program i
1b420 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69  mplementing pTri
1b430 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20  gger/orconf */. 
1b440 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20   int orconf;    
1b450 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
1b460 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ult ON CONFLICT 
1b470 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20  policy */.  u32 
1b480 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20  aColmask[2];    
1b490 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20      /* Masks of 
1b4a0 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c  old.*, new.* col
1b4b0 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f  umns accessed */
1b4c0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79  .};../*.** The y
1b4d0 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20  DbMask datatype 
1b4e0 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20  for the bitmask 
1b4f0 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  of all attached 
1b500 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69  databases..*/.#i
1b510 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  f SQLITE_MAX_ATT
1b520 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64  ACHED>30.  typed
1b530 65 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  ef unsigned char
1b540 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45   yDbMask[(SQLITE
1b550 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29  _MAX_ATTACHED+9)
1b560 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62  /8];.# define Db
1b570 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20  MaskTest(M,I)   
1b580 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31   (((M)[(I)/8]&(1
1b590 3c 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a  <<((I)&7)))!=0).
1b5a0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a  # define DbMaskZ
1b5b0 65 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73  ero(M)      mems
1b5c0 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28  et((M),0,sizeof(
1b5d0 4d 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  M)).# define DbM
1b5e0 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20  askSet(M,I)     
1b5f0 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c  (M)[(I)/8]|=(1<<
1b600 28 28 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e  ((I)&7)).# defin
1b610 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e DbMaskAllZero(
1b620 4d 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61  M)   sqlite3DbMa
1b630 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64  skAllZero(M).# d
1b640 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a  efine DbMaskNonZ
1b650 65 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65  ero(M)   (sqlite
1b660 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d  3DbMaskAllZero(M
1b670 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79  )==0).#else.  ty
1b680 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69  pedef unsigned i
1b690 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65  nt yDbMask;.# de
1b6a0 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28  fine DbMaskTest(
1b6b0 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28 28  M,I)    (((M)&((
1b6c0 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29  (yDbMask)1)<<(I)
1b6d0 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  ))!=0).# define 
1b6e0 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20  DbMaskZero(M)   
1b6f0 20 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e     (M)=0.# defin
1b700 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29  e DbMaskSet(M,I)
1b710 20 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62       (M)|=(((yDb
1b720 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20  Mask)1)<<(I)).# 
1b730 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c  define DbMaskAll
1b740 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30  Zero(M)   (M)==0
1b750 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1b760 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29  NonZero(M)   (M)
1b770 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  !=0.#endif../*.*
1b780 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20  * An SQL parser 
1b790 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79  context.  A copy
1b7a0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
1b7b0 72 65 20 69 73 20 70 61 73 73 65 64 20 74 68 72  re is passed thr
1b7c0 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73  ough.** the pars
1b7d0 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f  er and down into
1b7e0 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20   all the parser 
1b7f0 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69  action routine i
1b800 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61  n order to.** ca
1b810 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72  rry around infor
1b820 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67  mation that is g
1b830 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74  lobal to the ent
1b840 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a  ire parse..**.**
1b850 20 54 68 65 20 73 74 72 75 63 74 75 72 65 20 69   The structure i
1b860 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74  s divided into t
1b870 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20  wo parts.  When 
1b880 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 63  the parser and c
1b890 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20  ode.** generate 
1b8a0 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20  call themselves 
1b8b0 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65  recursively, the
1b8c0 20 66 69 72 73 74 20 70 61 72 74 20 6f 66 20 74   first part of t
1b8d0 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  he structure.** 
1b8e0 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20  is constant but 
1b8f0 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20  the second part 
1b900 69 73 20 72 65 73 65 74 20 61 74 20 74 68 65 20  is reset at the 
1b910 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e  beginning and en
1b920 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63  d of.** each rec
1b930 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  ursion..**.** Th
1b940 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64  e nTableLock and
1b950 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69   aTableLock vari
1b960 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75  ables are only u
1b970 73 65 64 20 69 66 20 74 68 65 20 73 68 61 72 65  sed if the share
1b980 64 2d 63 61 63 68 65 20 0a 2a 2a 20 66 65 61 74  d-cache .** feat
1b990 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28  ure is enabled (
1b9a0 69 66 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d  if sqlite3Tsd()-
1b9b0 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 20 69  >useSharedData i
1b9c0 73 20 74 72 75 65 29 2e 20 54 68 65 79 20 61 72  s true). They ar
1b9d0 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f  e.** used to sto
1b9e0 72 65 20 74 68 65 20 73 65 74 20 6f 66 20 74 61  re the set of ta
1b9f0 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72  ble-locks requir
1ba00 65 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d  ed by the statem
1ba10 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d  ent being.** com
1ba20 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20  piled. Function 
1ba30 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
1ba40 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 64  () is used to ad
1ba50 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65  d entries to the
1ba60 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72  .** list..*/.str
1ba70 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71  uct Parse {.  sq
1ba80 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
1ba90 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64     /* The main d
1baa0 61 74 61 62 61 73 65 20 73 74 72 75 63 74 75 72  atabase structur
1bab0 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72  e */.  char *zEr
1bac0 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41  rMsg;       /* A
1bad0 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
1bae0 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65  */.  Vdbe *pVdbe
1baf0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  ;         /* An 
1bb00 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75  engine for execu
1bb10 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 62 79  ting database by
1bb20 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20  tecode */.  int 
1bb30 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rc;             
1bb40 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20   /* Return code 
1bb50 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a  from execution *
1bb60 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53  /.  u8 colNamesS
1bb70 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45  et;      /* TRUE
1bb80 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e   after OP_Column
1bb90 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73  Name has been is
1bba0 73 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f  sued to pVdbe */
1bbb0 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d  .  u8 checkSchem
1bbc0 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65  a;      /* Cause
1bbd0 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  s schema cookie 
1bbe0 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65  check after an e
1bbf0 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73  rror */.  u8 nes
1bc00 74 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ted;           /
1bc10 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
1bc20 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20  ed calls to the 
1bc30 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65  parser/code gene
1bc40 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54  rator */.  u8 nT
1bc50 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20  empReg;         
1bc60 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d  /* Number of tem
1bc70 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73  porary registers
1bc80 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a   in aTempReg[] *
1bc90 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72  /.  u8 isMultiWr
1bca0 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65  ite;     /* True
1bcb0 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61   if statement ma
1bcc0 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20  y modify/insert 
1bcd0 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
1bce0 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20  .  u8 mayAbort; 
1bcf0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1bd00 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  if statement may
1bd10 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20   throw an ABORT 
1bd20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75  exception */.  u
1bd30 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20  8 hasCompound;  
1bd40 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69      /* Need to i
1bd50 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d  nvoke convertCom
1bd60 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
1bd70 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20  query() */.  u8 
1bd80 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20  okConstFactor;  
1bd90 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f    /* OK to facto
1bda0 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20  r out constants 
1bdb0 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65  */.  int aTempRe
1bdc0 67 5b 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c  g[8];     /* Hol
1bdd0 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65  ding area for te
1bde0 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
1bdf0 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67  s */.  int nRang
1be00 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53  eReg;       /* S
1be10 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f  ize of the tempo
1be20 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c  rary register bl
1be30 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61  ock */.  int iRa
1be40 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a  ngeReg;       /*
1be50 20 46 69 72 73 74 20 72 65 67 69 73 74 65 72 20   First register 
1be60 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  in temporary reg
1be70 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20  ister block */. 
1be80 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
1be90 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1bea0 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a  of errors seen *
1beb0 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20  /.  int nTab;   
1bec0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1bed0 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79  er of previously
1bee0 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20   allocated VDBE 
1bef0 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74  cursors */.  int
1bf00 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   nMem;          
1bf10 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d    /* Number of m
1bf20 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64  emory cells used
1bf30 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1bf40 20 6e 53 65 74 3b 20 20 20 20 20 20 20 20 20 20   nSet;          
1bf50 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
1bf60 65 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  ets used so far 
1bf70 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20  */.  int nOnce; 
1bf80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1bf90 62 65 72 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69  ber of OP_Once i
1bfa0 6e 73 74 72 75 63 74 69 6f 6e 73 20 73 6f 20 66  nstructions so f
1bfb0 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41  ar */.  int nOpA
1bfc0 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  lloc;        /* 
1bfd0 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20  Number of slots 
1bfe0 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64  allocated for Vd
1bff0 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e  be.aOp[] */.  in
1c000 74 20 69 46 69 78 65 64 4f 70 3b 20 20 20 20 20  t iFixedOp;     
1c010 20 20 20 2f 2a 20 4e 65 76 65 72 20 62 61 63 6b     /* Never back
1c020 20 6f 75 74 20 6f 70 63 6f 64 65 73 20 69 46 69   out opcodes iFi
1c030 78 65 64 4f 70 2d 31 20 6f 72 20 65 61 72 6c 69  xedOp-1 or earli
1c040 65 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61  er */.  int ckBa
1c050 73 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  se;          /* 
1c060 42 61 73 65 20 72 65 67 69 73 74 65 72 20 6f 66  Base register of
1c070 20 64 61 74 61 20 64 75 72 69 6e 67 20 63 68 65   data during che
1c080 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ck constraints *
1c090 2f 0a 20 20 69 6e 74 20 69 50 61 72 74 49 64 78  /.  int iPartIdx
1c0a0 54 61 62 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c  Tab;     /* Tabl
1c0b0 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
1c0c0 74 6f 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64  to a partial ind
1c0d0 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63  ex */.  int iCac
1c0e0 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20  heLevel;     /* 
1c0f0 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77  ColCache valid w
1c100 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e  hen aColCache[].
1c110 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65  iLevel<=iCacheLe
1c120 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61  vel */.  int iCa
1c130 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a  cheCnt;       /*
1c140 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f   Counter used to
1c150 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61   generate aColCa
1c160 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73  che[].lru values
1c170 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c   */.  int nLabel
1c180 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ;          /* Nu
1c190 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75  mber of labels u
1c1a0 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c  sed */.  int *aL
1c1b0 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  abel;         /*
1c1c0 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74   Space to hold t
1c1d0 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 73  he labels */.  s
1c1e0 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20  truct yColCache 
1c1f0 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65  {.    int iTable
1c200 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
1c210 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62  able cursor numb
1c220 65 72 20 2a 2f 0a 20 20 20 20 69 31 36 20 69 43  er */.    i16 iC
1c230 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
1c240 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20  /* Table column 
1c250 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38  number */.    u8
1c260 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20   tempReg;       
1c270 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61      /* iReg is a
1c280 20 74 65 6d 70 20 72 65 67 69 73 74 65 72 20 74   temp register t
1c290 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20  hat needs to be 
1c2a0 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74  freed */.    int
1c2b0 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20   iLevel;        
1c2c0 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65     /* Nesting le
1c2d0 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  vel */.    int i
1c2e0 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Reg;            
1c2f0 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c   /* Reg with val
1c300 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  ue of this colum
1c310 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e  n. 0 means none.
1c320 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b   */.    int lru;
1c330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1c340 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20   Least recently 
1c350 75 73 65 64 20 65 6e 74 72 79 20 68 61 73 20 74  used entry has t
1c360 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75  he smallest valu
1c370 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63  e */.  } aColCac
1c380 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43  he[SQLITE_N_COLC
1c390 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66  ACHE];  /* One f
1c3a0 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63  or each column c
1c3b0 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20  ache entry */.  
1c3c0 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74  ExprList *pConst
1c3d0 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74  Expr;/* Constant
1c3e0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
1c3f0 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69    Token constrai
1c400 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f  ntName;/* Name o
1c410 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  f the constraint
1c420 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67   currently being
1c430 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62   parsed */.  yDb
1c440 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20  Mask writeMask; 
1c450 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69    /* Start a wri
1c460 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f  te transaction o
1c470 6e 20 74 68 65 73 65 20 64 61 74 61 62 61 73 65  n these database
1c480 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63  s */.  yDbMask c
1c490 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42  ookieMask;  /* B
1c4a0 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61  itmask of schema
1c4b0 20 76 65 72 69 66 69 65 64 20 64 61 74 61 62 61   verified databa
1c4c0 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f  ses */.  int coo
1c4d0 6b 69 65 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f  kieValue[SQLITE_
1c4e0 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b  MAX_ATTACHED+2];
1c4f0 20 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20 63    /* Values of c
1c500 6f 6f 6b 69 65 73 20 74 6f 20 76 65 72 69 66 79  ookies to verify
1c510 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77   */.  int regRow
1c520 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65  id;        /* Re
1c530 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72  gister holding r
1c540 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45 20 54  owid of CREATE T
1c550 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20  ABLE entry */.  
1c560 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20  int regRoot;    
1c570 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
1c580 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61   holding root pa
1c590 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65  ge number for ne
1c5a0 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69  w objects */.  i
1c5b0 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20  nt nMaxArg;     
1c5c0 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20      /* Max args 
1c5d0 70 61 73 73 65 64 20 74 6f 20 75 73 65 72 20 66  passed to user f
1c5e0 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70  unction by sub-p
1c5f0 72 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45  rogram */.#if SE
1c600 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
1c610 44 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b  D.  int nSelect;
1c620 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1c630 65 72 20 6f 66 20 53 45 4c 45 43 54 20 73 74 61  er of SELECT sta
1c640 74 65 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a  tements seen */.
1c650 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 49 6e 64    int nSelectInd
1c660 65 6e 74 3b 20 20 20 2f 2a 20 48 6f 77 20 66 61  ent;   /* How fa
1c670 72 20 74 6f 20 69 6e 64 65 6e 74 20 53 45 4c 45  r to indent SELE
1c680 43 54 54 52 41 43 45 28 29 20 6f 75 74 70 75 74  CTTRACE() output
1c690 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
1c6a0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
1c6b0 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e  HARED_CACHE.  in
1c6c0 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20  t nTableLock;   
1c6d0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1c6e0 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c  f locks in aTabl
1c6f0 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65  eLock */.  Table
1c700 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b  Lock *aTableLock
1c710 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61  ; /* Required ta
1c720 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68  ble locks for sh
1c730 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20  ared-cache mode 
1c740 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f  */.#endif.  Auto
1c750 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20  incInfo *pAinc; 
1c760 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
1c770 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d  about AUTOINCREM
1c780 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a  ENT counters */.
1c790 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f  .  /* Informatio
1c7a0 6e 20 75 73 65 64 20 77 68 69 6c 65 20 63 6f 64  n used while cod
1c7b0 69 6e 67 20 74 72 69 67 67 65 72 20 70 72 6f 67  ing trigger prog
1c7c0 72 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65  rams. */.  Parse
1c7d0 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20   *pToplevel;    
1c7e0 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63 74 75  /* Parse structu
1c7f0 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67  re for main prog
1c800 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f  ram (or NULL) */
1c810 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67  .  Table *pTrigg
1c820 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65  erTab;  /* Table
1c830 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62 65   triggers are be
1c840 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f  ing coded for */
1c850 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54 61 62  .  int addrCrTab
1c860 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65  ;       /* Addre
1c870 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 54  ss of OP_CreateT
1c880 61 62 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43  able opcode on C
1c890 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20  REATE TABLE */. 
1c8a0 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b   u32 nQueryLoop;
1c8b0 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d        /* Est num
1c8c0 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e  ber of iteration
1c8d0 73 20 6f 66 20 61 20 71 75 65 72 79 20 28 31 30  s of a query (10
1c8e0 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75  *log2(N)) */.  u
1c8f0 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20  32 oldmask;     
1c900 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f      /* Mask of o
1c910 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66  ld.* columns ref
1c920 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32  erenced */.  u32
1c930 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20   newmask;       
1c940 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77    /* Mask of new
1c950 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
1c960 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54  enced */.  u8 eT
1c970 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20  riggerOp;       
1c980 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  /* TK_UPDATE, TK
1c990 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45  _INSERT or TK_DE
1c9a0 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72  LETE */.  u8 eOr
1c9b0 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f  conf;          /
1c9c0 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  * Default ON CON
1c9d0 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72  FLICT policy for
1c9e0 20 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a   trigger steps *
1c9f0 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72  /.  u8 disableTr
1ca00 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65  iggers;  /* True
1ca10 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67   to disable trig
1ca20 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a  gers */..  /****
1ca30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ca40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ca50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ca60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ca70 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20  ****.  ** Above 
1ca80 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77  is constant betw
1ca90 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20  een recursions. 
1caa0 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20   Below is reset 
1cab0 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72  before and after
1cac0 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72  .  ** each recur
1cad0 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64  sion.  The bound
1cae0 61 72 79 20 62 65 74 77 65 65 6e 20 74 68 65 73  ary between thes
1caf0 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73  e two regions is
1cb00 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a   determined.  **
1cb10 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28   using offsetof(
1cb20 50 61 72 73 65 2c 6e 56 61 72 29 20 73 6f 20 74  Parse,nVar) so t
1cb30 68 65 20 6e 56 61 72 20 66 69 65 6c 64 20 6d 75  he nVar field mu
1cb40 73 74 20 62 65 20 74 68 65 20 66 69 72 73 74 20  st be the first 
1cb50 66 69 65 6c 64 0a 20 20 2a 2a 20 69 6e 20 74 68  field.  ** in th
1cb60 65 20 72 65 63 75 72 73 69 76 65 20 72 65 67 69  e recursive regi
1cb70 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  on..  **********
1cb80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1cb90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1cba0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1cbb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
1cbc0 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20 20 20 20  .  int nVar;    
1cbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1cbe0 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61  Number of '?' va
1cbf0 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20  riables seen in 
1cc00 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a  the SQL so far *
1cc10 2f 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20  /.  int nzVar;  
1cc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1cc30 20 4e 75 6d 62 65 72 20 6f 66 20 61 76 61 69 6c   Number of avail
1cc40 61 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a  able slots in az
1cc50 56 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 50  Var[] */.  u8 iP
1cc60 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20  kSortOrder;     
1cc70 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44       /* ASC or D
1cc80 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20  ESC for INTEGER 
1cc90 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20  PRIMARY KEY */. 
1cca0 20 75 38 20 62 46 72 65 65 57 69 74 68 3b 20 20   u8 bFreeWith;  
1ccb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1ccc0 75 65 20 69 66 20 70 57 69 74 68 20 73 68 6f 75  ue if pWith shou
1ccd0 6c 64 20 62 65 20 66 72 65 65 64 20 77 69 74 68  ld be freed with
1cce0 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 75 38 20   parser */.  u8 
1ccf0 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20  explain;        
1cd00 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
1cd10 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c  f the EXPLAIN fl
1cd20 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74  ag is found on t
1cd30 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e  he query */.#ifn
1cd40 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1cd50 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 75  VIRTUALTABLE.  u
1cd60 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20 20  8 declareVtab;  
1cd70 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1cd80 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69 74   if inside sqlit
1cd90 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28  e3_declare_vtab(
1cda0 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62  ) */.  int nVtab
1cdb0 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20  Lock;           
1cdc0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69   /* Number of vi
1cdd0 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20  rtual tables to 
1cde0 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  lock */.#endif. 
1cdf0 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20 20 20   int nAlias;    
1ce00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1ce10 6d 62 65 72 20 6f 66 20 61 6c 69 61 73 65 64 20  mber of aliased 
1ce20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d  result set colum
1ce30 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 69  ns */.  int nHei
1ce40 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ght;            
1ce50 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
1ce60 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63  tree height of c
1ce70 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63  urrent sub-selec
1ce80 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  t */.#ifndef SQL
1ce90 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
1cea0 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49 64  .  int iSelectId
1ceb0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1cec0 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73 65  ID of current se
1ced0 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49 4e  lect for EXPLAIN
1cee0 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74   output */.  int
1cef0 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b 20   iNextSelectId; 
1cf00 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 61         /* Next a
1cf10 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74 20  vailable select 
1cf20 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f  ID for EXPLAIN o
1cf30 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  utput */.#endif.
1cf40 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20    char **azVar; 
1cf50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
1cf60 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d 65 73  ointers to names
1cf70 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20 2a   of parameters *
1cf80 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72 65  /.  Vdbe *pRepre
1cf90 70 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  pare;         /*
1cfa0 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70   VM being reprep
1cfb0 61 72 65 64 20 28 73 71 6c 69 74 65 33 52 65 70  ared (sqlite3Rep
1cfc0 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63  repare()) */.  c
1cfd0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c  onst char *zTail
1cfe0 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
1cff0 53 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68  SQL text past th
1d000 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e  e last semicolon
1d010 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62   parsed */.  Tab
1d020 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20  le *pNewTable;  
1d030 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c         /* A tabl
1d040 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63  e being construc
1d050 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41  ted by CREATE TA
1d060 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  BLE */.  Trigger
1d070 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20   *pNewTrigger;  
1d080 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e     /* Trigger un
1d090 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79  der construct by
1d0a0 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45   a CREATE TRIGGE
1d0b0 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  R */.  const cha
1d0c0 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
1d0d0 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61   /* The 6th para
1d0e0 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75  meter to db->xAu
1d0f0 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a  th callbacks */.
1d100 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b    Token sNameTok
1d110 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  en;         /* T
1d120 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c  oken with unqual
1d130 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a  ified schema obj
1d140 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f  ect name */.  To
1d150 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20  ken sLastToken; 
1d160 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c          /* The l
1d170 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64  ast token parsed
1d180 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
1d190 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
1d1a0 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72  ABLE.  Token sAr
1d1b0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
1d1c0 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78   /* Complete tex
1d1d0 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72  t of a module ar
1d1e0 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c  gument */.  Tabl
1d1f0 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20  e **apVtabLock; 
1d200 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
1d210 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c   to virtual tabl
1d220 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69  es needing locki
1d230 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54  ng */.#endif.  T
1d240 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62  able *pZombieTab
1d250 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
1d260 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74   of Table object
1d270 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65  s to delete afte
1d280 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20  r code gen */.  
1d290 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72 69  TriggerPrg *pTri
1d2a0 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e  ggerPrg;  /* Lin
1d2b0 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65  ked list of code
1d2c0 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20  d triggers */.  
1d2d0 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20  With *pWith;    
1d2e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
1d2f0 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73 65  rent WITH clause
1d300 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 7d 3b 0a  , or NULL */.};.
1d310 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72  ./*.** Return tr
1d320 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20  ue if currently 
1d330 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65  inside an sqlite
1d340 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29  3_declare_vtab()
1d350 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66   call..*/.#ifdef
1d360 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
1d370 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66  TUALTABLE.  #def
1d380 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56  ine IN_DECLARE_V
1d390 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64  TAB 0.#else.  #d
1d3a0 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45  efine IN_DECLARE
1d3b0 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64  _VTAB (pParse->d
1d3c0 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64  eclareVtab).#end
1d3d0 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  if../*.** An ins
1d3e0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
1d3f0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1d400 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64   can be declared
1d410 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20   on a stack and 
1d420 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20  used.** to save 
1d430 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43  the Parse.zAuthC
1d440 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20  ontext value so 
1d450 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72  that it can be r
1d460 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a  estored later..*
1d470 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  /.struct AuthCon
1d480 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63  text {.  const c
1d490 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78  har *zAuthContex
1d4a0 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65  t;   /* Put save
1d4b0 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e  d Parse.zAuthCon
1d4c0 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50  text here */.  P
1d4d0 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
1d4e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
1d4f0 65 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72  e Parse structur
1d500 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42  e */.};../*.** B
1d510 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f  itfield flags fo
1d520 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61  r P5 value in va
1d530 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a  rious opcodes..*
1d540 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 74  *.** Note that t
1d550 68 65 20 76 61 6c 75 65 73 20 66 6f 72 20 49 53  he values for IS
1d560 4e 4f 4f 50 20 61 6e 64 20 4c 45 4e 47 54 48 41  NOOP and LENGTHA
1d570 52 47 20 61 72 65 20 74 68 65 20 73 61 6d 65 2e  RG are the same.
1d580 20 20 42 75 74 20 61 73 20 0a 2a 2a 20 74 68 6f    But as .** tho
1d590 73 65 20 62 69 74 73 20 61 72 65 20 6e 65 76 65  se bits are neve
1d5a0 72 20 75 73 65 64 20 6f 6e 20 74 68 65 20 73 61  r used on the sa
1d5b0 6d 65 20 6f 70 63 6f 64 65 2c 20 74 68 65 20 6f  me opcode, the o
1d5c0 76 65 72 6c 61 70 20 69 73 20 68 61 72 6d 6c 65  verlap is harmle
1d5d0 73 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ss..*/.#define O
1d5e0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20  PFLAG_NCHANGE   
1d5f0 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 53      0x01    /* S
1d600 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d  et to update db-
1d610 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 23 64 65 66  >nChange */.#def
1d620 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d  ine OPFLAG_EPHEM
1d630 20 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20           0x01   
1d640 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45   /* OP_Column: E
1d650 70 68 65 6d 65 72 61 6c 20 6f 75 74 70 75 74 20  phemeral output 
1d660 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65  is ok */.#define
1d670 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
1d680 44 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a  D     0x02    /*
1d690 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64   Set to update d
1d6a0 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a  b->lastRowid */.
1d6b0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49  #define OPFLAG_I
1d6c0 53 55 50 44 41 54 45 20 20 20 20 20 20 30 78 30  SUPDATE      0x0
1d6d0 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f  4    /* This OP_
1d6e0 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c  Insert is an sql
1d6f0 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69   UPDATE */.#defi
1d700 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44  ne OPFLAG_APPEND
1d710 20 20 20 20 20 20 20 20 30 78 30 38 20 20 20 20          0x08    
1d720 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c  /* This is likel
1d730 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e  y to be an appen
1d740 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  d */.#define OPF
1d750 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
1d760 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79  T 0x10    /* Try
1d770 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b   to avoid a seek
1d780 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28   in BtreeInsert(
1d790 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ) */.#define OPF
1d7a0 4c 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20 20  LAG_ISNOOP      
1d7b0 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f    0x40    /* OP_
1d7c0 44 65 6c 65 74 65 20 64 6f 65 73 20 70 72 65 2d  Delete does pre-
1d7d0 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79  update-hook only
1d7e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1d7f0 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20  AG_LENGTHARG    
1d800 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43   0x40    /* OP_C
1d810 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20  olumn only used 
1d820 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a  for length() */.
1d830 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54  #define OPFLAG_T
1d840 59 50 45 4f 46 41 52 47 20 20 20 20 20 30 78 38  YPEOFARG     0x8
1d850 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  0    /* OP_Colum
1d860 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20  n only used for 
1d870 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66  typeof() */.#def
1d880 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  ine OPFLAG_BULKC
1d890 53 52 20 20 20 20 20 20 20 30 78 30 31 20 20 20  SR       0x01   
1d8a0 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73   /* OP_Open** us
1d8b0 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20  ed to open bulk 
1d8c0 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  cursor */.#defin
1d8d0 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20  e OPFLAG_SEEKEQ 
1d8e0 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f         0x02    /
1d8f0 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73  * OP_Open** curs
1d900 6f 72 20 75 73 65 73 20 45 51 20 73 65 65 6b 20  or uses EQ seek 
1d910 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
1d920 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20  OPFLAG_P2ISREG  
1d930 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20       0x04    /* 
1d940 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20  P2 to OP_Open** 
1d950 69 73 20 61 20 72 65 67 69 73 74 65 72 20 6e 75  is a register nu
1d960 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mber */.#define 
1d970 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20  OPFLAG_PERMUTE  
1d980 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
1d990 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20  OP_Compare: use 
1d9a0 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  the permutation 
1d9b0 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74  */../*. * Each t
1d9c0 72 69 67 67 65 72 20 70 72 65 73 65 6e 74 20 69  rigger present i
1d9d0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  n the database s
1d9e0 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20  chema is stored 
1d9f0 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  as an instance o
1da00 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69 67  f. * struct Trig
1da10 67 65 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69 6e  ger. . *. * Poin
1da20 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63 65  ters to instance
1da30 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  s of struct Trig
1da40 67 65 72 20 61 72 65 20 73 74 6f 72 65 64 20 69  ger are stored i
1da50 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31  n two ways.. * 1
1da60 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67 48 61  . In the "trigHa
1da70 73 68 22 20 68 61 73 68 20 74 61 62 6c 65 20 28  sh" hash table (
1da80 70 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c 69  part of the sqli
1da90 74 65 33 2a 20 74 68 61 74 20 72 65 70 72 65 73  te3* that repres
1daa0 65 6e 74 73 20 74 68 65 20 0a 20 2a 20 20 20 20  ents the . *    
1dab0 64 61 74 61 62 61 73 65 29 2e 20 54 68 69 73 20  database). This 
1dac0 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20 73  allows Trigger s
1dad0 74 72 75 63 74 75 72 65 73 20 74 6f 20 62 65 20  tructures to be 
1dae0 72 65 74 72 69 65 76 65 64 20 62 79 20 6e 61 6d  retrieved by nam
1daf0 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69  e.. * 2. All tri
1db00 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65 64  ggers associated
1db10 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 74   with a single t
1db20 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b  able form a link
1db30 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20 74  ed list, using t
1db40 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20 6d  he. *    pNext m
1db50 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74 20  ember of struct 
1db60 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e 74  Trigger. A point
1db70 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  er to the first 
1db80 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20  element of the. 
1db90 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74  *    linked list
1dba0 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 74 68   is stored as th
1dbb0 65 20 22 70 54 72 69 67 67 65 72 22 20 6d 65 6d  e "pTrigger" mem
1dbc0 62 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f 63  ber of the assoc
1dbd0 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72 75  iated. *    stru
1dbe0 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20  ct Table.. *. * 
1dbf0 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20  The "step_list" 
1dc00 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f  member points to
1dc10 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
1dc20 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c  nt of a linked l
1dc30 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e  ist. * containin
1dc40 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  g the SQL statem
1dc50 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 61  ents specified a
1dc60 73 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  s the trigger pr
1dc70 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63  ogram.. */.struc
1dc80 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63 68  t Trigger {.  ch
1dc90 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
1dca0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d        /* The nam
1dcb0 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72  e of the trigger
1dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dcd0 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68 61          */.  cha
1dce0 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20 20  r *table;       
1dcf0 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c       /* The tabl
1dd00 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69  e or view to whi
1dd10 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20 61  ch the trigger a
1dd20 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f  pplies */.  u8 o
1dd30 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
1dd40 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b      /* One of TK
1dd50 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41  _DELETE, TK_UPDA
1dd60 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20 20  TE, TK_INSERT   
1dd70 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74 72        */.  u8 tr
1dd80 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  _tm;            
1dd90 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49     /* One of TRI
1dda0 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52 49  GGER_BEFORE, TRI
1ddb0 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20  GGER_AFTER */.  
1ddc0 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20 20  Expr *pWhen;    
1ddd0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
1dde0 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 68  HEN clause of th
1ddf0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d 61  e expression (ma
1de00 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20  y be NULL) */.  
1de10 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73  IdList *pColumns
1de20 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ;       /* If th
1de30 69 73 20 69 73 20 61 6e 20 55 50 44 41 54 45 20  is is an UPDATE 
1de40 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e  OF <column-list>
1de50 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20 20   trigger,.      
1de60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de70 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c 75         the <colu
1de80 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f 72  mn-list> is stor
1de90 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68  ed here */.  Sch
1dea0 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
1deb0 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
1dec0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72  ontaining the tr
1ded0 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d  igger */.  Schem
1dee0 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20 20  a *pTabSchema;  
1def0 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
1df00 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c  taining the tabl
1df10 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  e */.  TriggerSt
1df20 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f  ep *step_list; /
1df30 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74  * Link list of t
1df40 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 73  rigger program s
1df50 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20 20  teps            
1df60 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
1df70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
1df80 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61 73   Next trigger as
1df90 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
1dfa0 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e table */.};../
1dfb0 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20 69  *.** A trigger i
1dfc0 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f 52  s either a BEFOR
1dfd0 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74 72  E or an AFTER tr
1dfe0 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c  igger.  The foll
1dff0 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a  owing constants.
1e000 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69  ** determine whi
1e010 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ch. .**.** If th
1e020 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65  ere are multiple
1e030 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d   triggers, you m
1e040 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46  ight of some BEF
1e050 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54  ORE and some AFT
1e060 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63  ER..** In that c
1e070 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61  ases, the consta
1e080 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65  nts below can be
1e090 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a   ORed together..
1e0a0 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47  */.#define TRIGG
1e0b0 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65  ER_BEFORE  1.#de
1e0c0 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54  fine TRIGGER_AFT
1e0d0 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e  ER   2../*. * An
1e0e0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72   instance of str
1e0f0 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
1e100 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
1e110 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74   a single SQL st
1e120 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20  atement. * that 
1e130 69 73 20 61 20 70 61 72 74 20 6f 66 20 61 20 74  is a part of a t
1e140 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 20  rigger-program. 
1e150 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73  . *. * Instances
1e160 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
1e170 65 72 53 74 65 70 20 61 72 65 20 73 74 6f 72 65  erStep are store
1e180 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69  d in a singly li
1e190 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65  nked list (linke
1e1a0 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22  d. * using the "
1e1b0 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72  pNext" member) r
1e1c0 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65  eferenced by the
1e1d0 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d   "step_list" mem
1e1e0 62 65 72 20 6f 66 20 74 68 65 20 0a 20 2a 20 61  ber of the . * a
1e1f0 73 73 6f 63 69 61 74 65 64 20 73 74 72 75 63 74  ssociated struct
1e200 20 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63   Trigger instanc
1e210 65 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65  e. The first ele
1e220 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b  ment of the link
1e230 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68  ed list is. * th
1e240 65 20 66 69 72 73 74 20 73 74 65 70 20 6f 66 20  e first step of 
1e250 74 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67  the trigger-prog
1e260 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68 65 20  ram.. * . * The 
1e270 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69  "op" member indi
1e280 63 61 74 65 73 20 77 68 65 74 68 65 72 20 74 68  cates whether th
1e290 69 73 20 69 73 20 61 20 22 44 45 4c 45 54 45 22  is is a "DELETE"
1e2a0 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44  , "INSERT", "UPD
1e2b0 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45  ATE" or. * "SELE
1e2c0 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54  CT" statement. T
1e2d0 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74  he meanings of t
1e2e0 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73  he other members
1e2f0 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
1e300 79 20 74 68 65 20 0a 20 2a 20 76 61 6c 75 65 20  y the . * value 
1e310 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f  of "op" as follo
1e320 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  ws:. *. * (op ==
1e330 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f   TK_INSERT). * o
1e340 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72  rconf    -> stor
1e350 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  es the ON CONFLI
1e360 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20  CT algorithm. * 
1e370 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20  pSelect   -> If 
1e380 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
1e390 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43  T INTO ... SELEC
1e3a0 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c  T ... statement,
1e3b0 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20   then. *        
1e3c0 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65        this store
1e3d0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
1e3e0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
1e3f0 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e  ent. Otherwise N
1e400 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72 67 65 74 20  ULL.. * zTarget 
1e410 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61    -> Dequoted na
1e420 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
1e430 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a  to insert into..
1e440 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20   * pExprList -> 
1e450 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
1e460 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41  SERT INTO ... VA
1e470 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65  LUES ... stateme
1e480 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20  nt, then. *     
1e490 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74           this st
1e4a0 6f 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62  ores values to b
1e4b0 65 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65  e inserted. Othe
1e4c0 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70  rwise NULL.. * p
1e4d0 49 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74  IdList   -> If t
1e4e0 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
1e4f0 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75   INTO ... (<colu
1e500 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45  mn-names>) VALUE
1e510 53 20 2e 2e 2e 20 0a 20 2a 20 20 20 20 20 20 20  S ... . *       
1e520 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
1e530 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72  , then this stor
1e540 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61  es the column-na
1e550 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20  mes to be. *    
1e560 20 20 20 20 20 20 20 20 20 20 69 6e 73 65 72 74            insert
1e570 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28  ed into.. *. * (
1e580 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29  op == TK_DELETE)
1e590 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e  . * zTarget   ->
1e5a0 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f   Dequoted name o
1e5b0 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64  f the table to d
1e5c0 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70  elete from.. * p
1e5d0 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20  Where    -> The 
1e5e0 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
1e5f0 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65  the DELETE state
1e600 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73  ment if one is s
1e610 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20  pecified.. *    
1e620 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77            Otherw
1e630 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a  ise NULL.. * . *
1e640 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54   (op == TK_UPDAT
1e650 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20  E). * zTarget   
1e660 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65  -> Dequoted name
1e670 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
1e680 20 75 70 64 61 74 65 2e 0a 20 2a 20 70 57 68 65   update.. * pWhe
1e690 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45  re    -> The WHE
1e6a0 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
1e6b0 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
1e6c0 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63  t if one is spec
1e6d0 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20  ified.. *       
1e6e0 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65         Otherwise
1e6f0 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c   NULL.. * pExprL
1e700 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66  ist -> A list of
1e710 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20   the columns to 
1e720 75 70 64 61 74 65 20 61 6e 64 20 74 68 65 20 65  update and the e
1e730 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70  xpressions to up
1e740 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20  date. *         
1e750 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65       them to. Se
1e760 65 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28  e sqlite3Update(
1e770 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  ) documentation 
1e780 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a  of "pChanges". *
1e790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
1e7a0 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a  gument.. * . */.
1e7b0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
1e7c0 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20  ep {.  u8 op;   
1e7d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1e7e0 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c  ne of TK_DELETE,
1e7f0 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
1e800 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54  NSERT, TK_SELECT
1e810 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b   */.  u8 orconf;
1e820 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45             /* OE
1e830 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a  _Rollback etc. *
1e840 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  /.  Trigger *pTr
1e850 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ig;      /* The 
1e860 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68 69  trigger that thi
1e870 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72 74  s step is a part
1e880 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20   of */.  Select 
1e890 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
1e8a0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1e8b0 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45  t or RHS of INSE
1e8c0 52 54 20 49 4e 54 4f 20 53 45 4c 45 43 54 20 2e  RT INTO SELECT .
1e8d0 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  .. */.  char *zT
1e8e0 61 72 67 65 74 3b 20 20 20 20 20 20 20 2f 2a 20  arget;       /* 
1e8f0 54 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f 72  Target table for
1e900 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45 2c   DELETE, UPDATE,
1e910 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78 70   INSERT */.  Exp
1e920 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20  r *pWhere;      
1e930 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63    /* The WHERE c
1e940 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54 45  lause for DELETE
1e950 20 6f 72 20 55 50 44 41 54 45 20 73 74 65 70 73   or UPDATE steps
1e960 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1e970 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45  pExprList; /* SE
1e980 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44  T clause for UPD
1e990 41 54 45 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74  ATE. */.  IdList
1e9a0 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f   *pIdList;     /
1e9b0 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66  * Column names f
1e9c0 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54  or INSERT */.  T
1e9d0 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78  riggerStep *pNex
1e9e0 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74  t;  /* Next in t
1e9f0 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a  he link-list */.
1ea00 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70    TriggerStep *p
1ea10 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65  Last;  /* Last e
1ea20 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c  lement in link-l
1ea30 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31  ist. Valid for 1
1ea40 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a  st elem only */.
1ea50 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
1ea60 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1ea70 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  e contains infor
1ea80 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74  mation used by t
1ea90 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a  he sqliteFix....
1eaa0 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74  ** routines as t
1eab0 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72  hey walk the par
1eac0 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20  se tree to make 
1ead0 64 61 74 61 62 61 73 65 20 72 65 66 65 72 65 6e  database referen
1eae0 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e  ces.** explicit.
1eaf0 20 20 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74    .*/.typedef st
1eb00 72 75 63 74 20 44 62 46 69 78 65 72 20 44 62 46  ruct DbFixer DbF
1eb10 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46  ixer;.struct DbF
1eb20 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a  ixer {.  Parse *
1eb30 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20  pParse;      /* 
1eb40 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74  The parsing cont
1eb50 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73  ext.  Error mess
1eb60 61 67 65 73 20 77 72 69 74 74 65 6e 20 68 65 72  ages written her
1eb70 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
1eb80 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69  Schema;    /* Fi
1eb90 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20  x items to this 
1eba0 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20  schema */.  int 
1ebb0 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20  bVarOnly;       
1ebc0 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72  /* Check for var
1ebd0 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73  iable references
1ebe0 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74   only */.  const
1ebf0 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f   char *zDb;    /
1ec00 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20  * Make sure all 
1ec10 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74  objects are cont
1ec20 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61  ained in this da
1ec30 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73  tabase */.  cons
1ec40 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20  t char *zType;  
1ec50 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 63  /* Type of the c
1ec60 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20  ontainer - used 
1ec70 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67  for error messag
1ec80 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f  es */.  const To
1ec90 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e  ken *pName; /* N
1eca0 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61  ame of the conta
1ecb0 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20  iner - used for 
1ecc0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a  error messages *
1ecd0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f  /.};../*.** An o
1ece0 62 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f 20  bjected used to 
1ecf0 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74  accumulate the t
1ed00 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20  ext of a string 
1ed10 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e  where we.** do n
1ed20 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b  ot necessarily k
1ed30 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65 20  now how big the 
1ed40 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69  string will be i
1ed50 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74  n the end..*/.st
1ed60 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a  ruct StrAccum {.
1ed70 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
1ed80 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e         /* Option
1ed90 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72 20  al database for 
1eda0 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20  lookaside.  Can 
1edb0 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61  be NULL */.  cha
1edc0 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20  r *zBase;       
1edd0 20 20 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f    /* A base allo
1ede0 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f  cation.  Not fro
1edf0 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63  m malloc. */.  c
1ee00 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20  har *zText;     
1ee10 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e      /* The strin
1ee20 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66  g collected so f
1ee30 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68  ar */.  int  nCh
1ee40 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ar;          /* 
1ee50 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74  Length of the st
1ee60 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20  ring so far */. 
1ee70 20 69 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20   int  nAlloc;   
1ee80 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20        /* Amount 
1ee90 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74  of space allocat
1eea0 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20  ed in zText */. 
1eeb0 20 69 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20   int  mxAlloc;  
1eec0 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
1eed0 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74   allowed allocat
1eee0 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d  ion.  0 for no m
1eef0 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20  alloc usage */. 
1ef00 20 75 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20   u8   accError; 
1ef10 20 20 20 20 20 20 2f 2a 20 53 54 52 41 43 43 55        /* STRACCU
1ef20 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43  M_NOMEM or STRAC
1ef30 43 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a 7d 3b  CUM_TOOBIG */.};
1ef40 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43 43 55  .#define STRACCU
1ef50 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66  M_NOMEM   1.#def
1ef60 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f  ine STRACCUM_TOO
1ef70 42 49 47 20 20 32 0a 0a 2f 2a 0a 2a 2a 20 41 20  BIG  2../*.** A 
1ef80 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
1ef90 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
1efa0 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65  d to communicate
1efb0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20   information.** 
1efc0 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69 74  from sqlite3Init
1efd0 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63 68   and OP_ParseSch
1efe0 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71 6c  ema into the sql
1eff0 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
1f000 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
1f010 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  uct {.  sqlite3 
1f020 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  *db;        /* T
1f030 68 65 20 64 61 74 61 62 61 73 65 20 62 65 69 6e  he database bein
1f040 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
1f050 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d  .  char **pzErrM
1f060 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72 20  sg;    /* Error 
1f070 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64 20 68  message stored h
1f080 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  ere */.  int iDb
1f090 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1f0a0 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62  0 for main datab
1f0b0 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50  ase.  1 for TEMP
1f0c0 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48  , 2.. for ATTACH
1f0d0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  ed */.  int rc; 
1f0e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
1f0f0 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72 65  esult code store
1f100 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74  d here */.} Init
1f110 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72  Data;../*.** Str
1f120 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e  ucture containin
1f130 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75  g global configu
1f140 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f 72 20  ration data for 
1f150 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61  the SQLite libra
1f160 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73  ry..**.** This s
1f170 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20 63 6f  tructure also co
1f180 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74 61 74  ntains some stat
1f190 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  e information..*
1f1a0 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74 65 33  /.struct Sqlite3
1f1b0 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20 62  Config {.  int b
1f1c0 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20 20 20  Memstat;        
1f1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f1e0 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d  True to enable m
1f1f0 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a 2f 0a  emory status */.
1f200 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74 65 78    int bCoreMutex
1f210 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f220 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
1f230 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74 65 78  nable core mutex
1f240 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75  ing */.  int bFu
1f250 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  llMutex;        
1f260 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1f270 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c  ue to enable ful
1f280 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20  l mutexing */.  
1f290 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20 20 20  int bOpenUri;   
1f2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2b0 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e 74    /* True to int
1f2c0 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d 65 73  erpret filenames
1f2d0 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e   as URIs */.  in
1f2e0 74 20 62 55 73 65 43 69 73 3b 20 20 20 20 20 20  t bUseCis;      
1f2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f300 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e 67 20  /* Use covering 
1f310 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75 6c 6c  indices for full
1f320 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  -scans */.  int 
1f330 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20 20 20  mxStrlen;       
1f340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f350 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e 67 20   Maximum string 
1f360 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20  length */.  int 
1f370 6e 65 76 65 72 43 6f 72 72 75 70 74 3b 20 20 20  neverCorrupt;   
1f380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f390 20 44 61 74 61 62 61 73 65 20 69 73 20 61 6c 77   Database is alw
1f3a0 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  ays well-formed 
1f3b0 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61  */.  int szLooka
1f3c0 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  side;           
1f3d0 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1f3e0 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66  t lookaside buff
1f3f0 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74  er size */.  int
1f400 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20   nLookaside;    
1f410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f420 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73  * Default lookas
1f430 69 64 65 20 62 75 66 66 65 72 20 63 6f 75 6e 74  ide buffer count
1f440 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65   */.  sqlite3_me
1f450 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20  m_methods m;    
1f460 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c          /* Low-l
1f470 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  evel memory allo
1f480 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65  cation interface
1f490 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
1f4a0 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65  tex_methods mute
1f4b0 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c  x;      /* Low-l
1f4c0 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72  evel mutex inter
1f4d0 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  face */.  sqlite
1f4e0 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73  3_pcache_methods
1f4f0 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c  2 pcache2;  /* L
1f500 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61  ow-level page-ca
1f510 63 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  che interface */
1f520 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20  .  void *pHeap; 
1f530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f540 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f       /* Heap sto
1f550 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20  rage space */.  
1f560 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20  int nHeap;      
1f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f580 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65    /* Size of pHe
1f590 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e  ap[] */.  int mn
1f5a0 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20  Req, mxReq;     
1f5b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
1f5c0 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20  in and max heap 
1f5d0 72 65 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a  requests sizes *
1f5e0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  /.  sqlite3_int6
1f5f0 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 szMmap;       
1f600 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20        /* mmap() 
1f610 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e 20 66  space per open f
1f620 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ile */.  sqlite3
1f630 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20  _int64 mxMmap;  
1f640 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
1f650 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72 20  ximum value for 
1f660 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64  szMmap */.  void
1f670 20 2a 70 53 63 72 61 74 63 68 3b 20 20 20 20 20   *pScratch;     
1f680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f690 20 53 63 72 61 74 63 68 20 6d 65 6d 6f 72 79 20   Scratch memory 
1f6a0 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72 61 74  */.  int szScrat
1f6b0 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ch;             
1f6c0 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
1f6d0 66 20 65 61 63 68 20 73 63 72 61 74 63 68 20 62  f each scratch b
1f6e0 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  uffer */.  int n
1f6f0 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20  Scratch;        
1f700 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f710 4e 75 6d 62 65 72 20 6f 66 20 73 63 72 61 74 63  Number of scratc
1f720 68 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76  h buffers */.  v
1f730 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20  oid *pPage;     
1f740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f750 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d   /* Page cache m
1f760 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73  emory */.  int s
1f770 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  zPage;          
1f780 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f790 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67  Size of each pag
1f7a0 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a  e in pPage[] */.
1f7b0 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20    int nPage;    
1f7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7d0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1f7e0 20 70 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b   pages in pPage[
1f7f0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72  ] */.  int mxPar
1f800 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20  serStack;       
1f810 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69           /* maxi
1f820 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65  mum depth of the
1f830 20 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f   parser stack */
1f840 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43 61 63  .  int sharedCac
1f850 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20  heEnabled;      
1f860 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20       /* true if 
1f870 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
1f880 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 75  e enabled */.  u
1f890 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20 20 20  32 szPma;       
1f8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8b0 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72 74   /* Maximum Sort
1f8c0 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a 20  er PMA size */. 
1f8d0 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69   /* The above mi
1f8e0 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ght be initializ
1f8f0 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20  ed to non-zero. 
1f900 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e   The following n
1f910 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20  eed to always.  
1f920 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20  ** initially be 
1f930 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a  zero, however. *
1f940 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20  /.  int isInit; 
1f950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f960 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
1f970 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ter initializati
1f980 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64 20  on has finished 
1f990 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72  */.  int inProgr
1f9a0 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ess;            
1f9b0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77         /* True w
1f9c0 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74  hile initializat
1f9d0 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
1f9e0 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78  */.  int isMutex
1f9f0 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
1fa00 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
1fa10 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72 65  fter mutexes are
1fa20 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
1fa30 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e    int isMallocIn
1fa40 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
1fa50 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
1fa60 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
1fa70 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
1fa80 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20   isPCacheInit;  
1fa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1faa0 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c  * True after mal
1fab0 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  loc is initializ
1fac0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  ed */.  int nRef
1fad0 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
1fae0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1faf0 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20  ber of users of 
1fb00 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20  pInitMutex */.  
1fb10 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70  sqlite3_mutex *p
1fb20 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
1fb30 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20    /* Mutex used 
1fb40 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69  by sqlite3_initi
1fb50 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69  alize() */.  voi
1fb60 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c  d (*xLog)(void*,
1fb70 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
1fb80 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f  ; /* Function fo
1fb90 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76  r logging */.  v
1fba0 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20  oid *pLogArg;   
1fbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fbc0 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
1fbd0 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20  ument to xLog() 
1fbe0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
1fbf0 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20  _ENABLE_SQLLOG. 
1fc00 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28   void(*xSqllog)(
1fc10 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
1fc20 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
1fc30 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f  ;.  void *pSqllo
1fc40 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66  gArg;.#endif.#if
1fc50 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45 5f  def SQLITE_VDBE_
1fc60 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54 68  COVERAGE.  /* Th
1fc70 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c  e following call
1fc80 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c  back (if not NUL
1fc90 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e  L) is invoked on
1fca0 20 65 76 65 72 79 20 56 44 42 45 20 62 72 61 6e   every VDBE bran
1fcb0 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f  ch.  ** operatio
1fcc0 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c 6c  n.  Set the call
1fcd0 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49 54  back using SQLIT
1fce0 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45 5f  E_TESTCTRL_VDBE_
1fcf0 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20  COVERAGE..  */. 
1fd00 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72 61   void (*xVdbeBra
1fd10 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74 20 69  nch)(void*,int i
1fd20 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68 69 73  SrcLine,u8 eThis
1fd30 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61  ,u8 eMx);  /* Ca
1fd40 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
1fd50 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41 72 67   *pVdbeBranchArg
1fd60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1fd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd80 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67        /* 1st arg
1fd90 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  ument */.#endif.
1fda0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1fdb0 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
1fdc0 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61  .  int (*xTestCa
1fdd0 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20  llback)(int);   
1fde0 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20       /* Invoked 
1fdf0 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  by sqlite3FaultS
1fe00 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  im() */.#endif. 
1fe10 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46   int bLocaltimeF
1fe20 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20  ault;           
1fe30 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61     /* True to fa
1fe40 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63  il localtime() c
1fe50 61 6c 6c 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  alls */.};../*.*
1fe60 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20  * This macro is 
1fe70 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20 61  used inside of a
1fe80 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
1fe90 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74  ts to indicate t
1fea0 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73 65 72  hat.** the asser
1feb0 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20  t is only valid 
1fec0 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64  on a well-formed
1fed0 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e 73 74   database.  Inst
1fee0 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20  ead of:.**.**   
1fef0 20 20 61 73 73 65 72 74 28 20 58 20 29 3b 0a 2a    assert( X );.*
1ff00 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a  *.** One writes:
1ff10 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72  .**.**     asser
1ff20 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f  t( X || CORRUPT_
1ff30 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52  DB );.**.** CORR
1ff40 55 50 54 5f 44 42 20 69 73 20 74 72 75 65 20 64  UPT_DB is true d
1ff50 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65  uring normal ope
1ff60 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54  ration.  CORRUPT
1ff70 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64  _DB does not ind
1ff80 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20 74 68  icate.** that th
1ff90 65 20 64 61 74 61 62 61 73 65 20 69 73 20 64 65  e database is de
1ffa0 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75 70 74  finitely corrupt
1ffb0 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74 20 6d  , only that it m
1ffc0 69 67 68 74 20 62 65 20 63 6f 72 72 75 70 74 2e  ight be corrupt.
1ffd0 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65 73  .** For most tes
1ffe0 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55 50 54  t cases, CORRUPT
1fff0 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20 66 61  _DB is set to fa
20000 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70 65 63  lse using a spec
20010 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74  ial.** sqlite3_t
20020 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20  est_control().  
20030 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61 73 73  This enables ass
20040 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
20050 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69   to prove.** thi
20060 6e 67 73 20 74 68 61 74 20 61 72 65 20 61 6c 77  ngs that are alw
20070 61 79 73 20 74 72 75 65 20 66 6f 72 20 77 65 6c  ays true for wel
20080 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73  l-formed databas
20090 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  es..*/.#define C
200a0 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71 6c 69  ORRUPT_DB  (sqli
200b0 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43  te3Config.neverC
200c0 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a  orrupt==0)../*.*
200d0 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65  * Context pointe
200e0 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68  r passed down th
200f0 72 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d 77  rough the tree-w
20100 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57  alk..*/.struct W
20110 61 6c 6b 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a  alker {.  int (*
20120 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57  xExprCallback)(W
20130 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20  alker*, Expr*); 
20140 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20      /* Callback 
20150 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20  for expressions 
20160 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65  */.  int (*xSele
20170 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b  ctCallback)(Walk
20180 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f  er*,Select*);  /
20190 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53  * Callback for S
201a0 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64  ELECTs */.  void
201b0 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61   (*xSelectCallba
201c0 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c  ck2)(Walker*,Sel
201d0 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20  ect*);/* Second 
201e0 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c  callback for SEL
201f0 45 43 54 73 20 2a 2f 0a 20 20 50 61 72 73 65 20  ECTs */.  Parse 
20200 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
20210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20220 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f      /* Parser co
20230 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74  ntext.  */.  int
20240 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20   walkerDepth;   
20250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20260 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
20270 20 6f 66 20 73 75 62 71 75 65 72 69 65 73 20 2a   of subqueries *
20280 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b 20 20 20  /.  u8 eCode;   
20290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
202b0 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65 73 73   A small process
202c0 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20 75 6e  ing code */.  un
202d0 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20  ion {           
202e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202f0 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61          /* Extra
20300 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61   data for callba
20310 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f  ck */.    NameCo
20320 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20  ntext *pNC;     
20330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20340 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63       /* Naming c
20350 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e  ontext */.    in
20360 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  t n;            
20370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20380 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 6f           /* A co
20390 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74  unter */.    int
203a0 20 69 43 75 72 3b 20 20 20 20 20 20 20 20 20 20   iCur;          
203b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203c0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 75 72          /* A cur
203d0 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  sor number */.  
203e0 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c    SrcList *pSrcL
203f0 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ist;            
20400 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20410 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
20420 20 20 20 73 74 72 75 63 74 20 53 72 63 43 6f 75     struct SrcCou
20430 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20  nt *pSrcCount;  
20440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20450 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e   Counting column
20460 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20   references */. 
20470 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72   } u;.};../* For
20480 77 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e  ward declaration
20490 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  s */.int sqlite3
204a0 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a  WalkExpr(Walker*
204b0 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
204c0 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73  lite3WalkExprLis
204d0 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c  t(Walker*, ExprL
204e0 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
204f0 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c  e3WalkSelect(Wal
20500 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
20510 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
20520 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72  electExpr(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 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20  ctFrom(Walker*, 
20560 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a  Select*);../*.**
20570 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f   Return code fro
20580 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65  m the parse-tree
20590 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69   walking primiti
205a0 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a  ves and their.**
205b0 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23   callbacks..*/.#
205c0 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69  define WRC_Conti
205d0 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f  nue    0   /* Co
205e0 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f  ntinue down into
205f0 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65   children */.#de
20600 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20  fine WRC_Prune  
20610 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74       1   /* Omit
20620 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f   children but co
20630 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73  ntinue walking s
20640 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69  iblings */.#defi
20650 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20  ne WRC_Abort    
20660 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f     2   /* Abando
20670 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20  n the tree walk 
20680 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
20690 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
206a0 72 75 63 74 75 72 65 20 72 65 70 72 65 73 65 6e  ructure represen
206b0 74 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20  ts a set of one 
206c0 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20  or more CTEs.** 
206d0 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78  (common table ex
206e0 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74  pressions) creat
206f0 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57  ed by a single W
20700 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73  ITH clause..*/.s
20710 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69  truct With {.  i
20720 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20  nt nCte;        
20730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20740 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73  * Number of CTEs
20750 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61   in the WITH cla
20760 75 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  use */.  With *p
20770 4f 75 74 65 72 3b 20 20 20 20 20 20 20 20 20 20  Outer;          
20780 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74           /* Cont
20790 61 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75  aining WITH clau
207a0 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  se, or NULL */. 
207b0 20 73 74 72 75 63 74 20 43 74 65 20 7b 20 20 20   struct Cte {   
207c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207d0 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45   /* For each CTE
207e0 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61   in the WITH cla
207f0 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63  use.... */.    c
20800 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
20810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20820 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43  * Name of this C
20830 54 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69  TE */.    ExprLi
20840 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20  st *pCols;      
20850 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73            /* Lis
20860 74 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f  t of explicit co
20870 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e  lumn names, or N
20880 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  ULL */.    Selec
20890 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
208a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
208b0 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  e definition of 
208c0 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20  this CTE */.    
208d0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 72 72  const char *zErr
208e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
208f0 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  /* Error message
20900 20 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65   for circular re
20910 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20  ferences */.  } 
20920 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66  a[1];.};..#ifdef
20930 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a   SQLITE_DEBUG./*
20940 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
20950 6f 66 20 74 68 65 20 54 72 65 65 56 69 65 77 20  of the TreeView 
20960 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64 20 66  object is used f
20970 6f 72 20 70 72 69 6e 74 69 6e 67 20 74 68 65 20  or printing the 
20980 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61  content of.** da
20990 74 61 20 73 74 72 75 63 74 75 72 65 73 20 6f 6e  ta structures on
209a0 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
209b0 6e 74 66 28 29 20 75 73 69 6e 67 20 61 20 74 72  ntf() using a tr
209c0 65 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f  ee-like view..*/
209d0 0a 73 74 72 75 63 74 20 54 72 65 65 56 69 65 77  .struct TreeView
209e0 20 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b   {.  int iLevel;
209f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20a00 57 68 69 63 68 20 6c 65 76 65 6c 20 6f 66 20 74  Which level of t
20a10 68 65 20 74 72 65 65 20 77 65 20 61 72 65 20 6f  he tree we are o
20a20 6e 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65  n */.  u8  bLine
20a30 5b 31 30 30 5d 3b 20 20 20 20 20 20 20 20 20 2f  [100];         /
20a40 2a 20 44 72 61 77 20 76 65 72 74 69 63 61 6c 20  * Draw vertical 
20a50 69 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62  in column i if b
20a60 4c 69 6e 65 5b 69 5d 20 69 73 20 74 72 75 65 20  Line[i] is true 
20a70 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  */.};.#endif /* 
20a80 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
20a90 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20  ./*.** Assuming 
20aa0 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  zIn points to th
20ab0 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20  e first byte of 
20ac0 61 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65  a UTF-8 characte
20ad0 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49  r,.** advance zI
20ae0 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68  n to point to th
20af0 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20  e first byte of 
20b00 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63  the next UTF-8 c
20b10 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65  haracter..*/.#de
20b20 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50  fine SQLITE_SKIP
20b30 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20  _UTF8(zIn) {    
20b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b50 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a      \.  if( (*(z
20b60 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20  In++))>=0xc0 ){ 
20b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b80 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
20b90 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20     while( (*zIn 
20ba0 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b  & 0xc0)==0x80 ){
20bb0 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20   zIn++; }       
20bc0 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20        \.  }     
20bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
20c00 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  .}../*.** The SQ
20c10 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72  LITE_*_BKPT macr
20c20 6f 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74  os are substitut
20c30 65 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72  es for the error
20c40 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74   codes with.** t
20c50 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74  he same name but
20c60 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b   without the _BK
20c70 50 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73  PT suffix.  Thes
20c80 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a  e macros invoke.
20c90 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74  ** routines that
20ca0 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65   report the line
20cb0 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68  -number on which
20cc0 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69   the error origi
20cd0 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73  nated.** using s
20ce0 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54  qlite3_log().  T
20cf0 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f  he routines also
20d00 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65   provide a conve
20d10 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74  nient place.** t
20d20 6f 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72  o set a debugger
20d30 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a   breakpoint..*/.
20d40 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75  int sqlite3Corru
20d50 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e  ptError(int);.in
20d60 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45  t sqlite3MisuseE
20d70 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rror(int);.int s
20d80 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72  qlite3CantopenEr
20d90 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e  ror(int);.#defin
20da0 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  e SQLITE_CORRUPT
20db0 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72  _BKPT sqlite3Cor
20dc0 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  ruptError(__LINE
20dd0 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  __).#define SQLI
20de0 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73  TE_MISUSE_BKPT s
20df0 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f  qlite3MisuseErro
20e00 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66  r(__LINE__).#def
20e10 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f  ine SQLITE_CANTO
20e20 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  PEN_BKPT sqlite3
20e30 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f  CantopenError(__
20e40 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20  LINE__).../*.** 
20e50 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61  FTS4 is really a
20e60 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20  n extension for 
20e70 46 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61  FTS3.  It is ena
20e80 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a  bled using the.*
20e90 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
20ea0 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74  FTS3 macro.  But
20eb0 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73   to avoid confus
20ec0 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c  ion we also call
20ed0 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45  .** the SQLITE_E
20ee0 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f  NABLE_FTS4 macro
20ef0 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20   to serve as an 
20f00 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45  alias for SQLITE
20f10 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f  _ENABLE_FTS3..*/
20f20 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
20f30 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29  ITE_ENABLE_FTS4)
20f40 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
20f50 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
20f60 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
20f70 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a 23  _ENABLE_FTS3 1.#
20f80 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
20f90 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72 20   ctype.h header 
20fa0 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f  is needed for no
20fb0 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e  n-ASCII systems.
20fc0 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20    It is also.** 
20fd0 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20 77  needed by FTS3 w
20fe0 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c  hen FTS3 is incl
20ff0 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c  uded in the amal
21000 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66  gamation..*/.#if
21010 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
21020 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20  _ASCII) || \.   
21030 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   (defined(SQLITE
21040 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26  _ENABLE_FTS3) &&
21050 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
21060 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23  AMALGAMATION)).#
21070 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e   include <ctype.
21080 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  h>.#endif../*.**
21090 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
210a0 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20  acros mimic the 
210b0 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79  standard library
210c0 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70   functions toupp
210d0 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65  er(),.** isspace
210e0 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69  (), isalnum(), i
210f0 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73 78  sdigit() and isx
21100 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63 74  digit(), respect
21110 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71  ively. The.** sq
21120 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e  lite versions on
21130 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49  ly work for ASCI
21140 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72 65  I characters, re
21150 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61  gardless of loca
21160 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  le..*/.#ifdef SQ
21170 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66  LITE_ASCII.# def
21180 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70  ine sqlite3Toupp
21190 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73 71  er(x)  ((x)&~(sq
211a0 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
211b0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
211c0 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e  ]&0x20)).# defin
211d0 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65  e sqlite3Isspace
211e0 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
211f0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
21200 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31 29   char)(x)]&0x01)
21210 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
21220 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73  3Isalnum(x)   (s
21230 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
21240 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
21250 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e  )]&0x06).# defin
21260 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61  e sqlite3Isalpha
21270 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
21280 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
21290 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32 29   char)(x)]&0x02)
212a0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
212b0 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28 73  3Isdigit(x)   (s
212c0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
212d0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
212e0 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e  )]&0x04).# defin
212f0 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  e sqlite3Isxdigi
21300 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43 74  t(x)  (sqlite3Ct
21310 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
21320 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38 29   char)(x)]&0x08)
21330 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
21340 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73  3Tolower(x)   (s
21350 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
21360 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er[(unsigned cha
21370 72 29 28 78 29 5d 29 0a 23 65 6c 73 65 0a 23 20  r)(x)]).#else.# 
21380 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
21390 75 70 70 65 72 28 78 29 20 20 20 74 6f 75 70 70  upper(x)   toupp
213a0 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er((unsigned cha
213b0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
213c0 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78  sqlite3Isspace(x
213d0 29 20 20 20 69 73 73 70 61 63 65 28 28 75 6e 73  )   isspace((uns
213e0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
213f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
21400 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61  Isalnum(x)   isa
21410 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63  lnum((unsigned c
21420 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
21430 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61  e sqlite3Isalpha
21440 28 78 29 20 20 20 69 73 61 6c 70 68 61 28 28 75  (x)   isalpha((u
21450 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
21460 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
21470 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20 69  e3Isdigit(x)   i
21480 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64  sdigit((unsigned
21490 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
214a0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69  ine sqlite3Isxdi
214b0 67 69 74 28 78 29 20 20 69 73 78 64 69 67 69 74  git(x)  isxdigit
214c0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
214d0 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
214e0 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20  lite3Tolower(x) 
214f0 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67    tolower((unsig
21500 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 65  ned char)(x)).#e
21510 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
21520 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45  ITE_OMIT_COMPILE
21530 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 69 6e 74  OPTION_DIAGS.int
21540 20 73 71 6c 69 74 65 33 49 73 49 64 43 68 61 72   sqlite3IsIdChar
21550 28 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (u8);.#endif../*
21560 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e  .** Internal fun
21570 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73  ction prototypes
21580 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  .*/.#define sqli
21590 74 65 33 53 74 72 49 43 6d 70 20 73 71 6c 69 74  te3StrICmp sqlit
215a0 65 33 5f 73 74 72 69 63 6d 70 0a 69 6e 74 20 73  e3_stricmp.int s
215b0 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63  qlite3Strlen30(c
215c0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65  onst char*);.#de
215d0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e  fine sqlite3StrN
215e0 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72  ICmp sqlite3_str
215f0 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74  nicmp..int sqlit
21600 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69  e3MallocInit(voi
21610 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
21620 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b  MallocEnd(void);
21630 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
21640 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20  lloc(u64);.void 
21650 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65  *sqlite3MallocZe
21660 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  ro(u64);.void *s
21670 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
21680 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34  ro(sqlite3*, u64
21690 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
216a0 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69  DbMallocRaw(sqli
216b0 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72  te3*, u64);.char
216c0 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75   *sqlite3DbStrDu
216d0 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  p(sqlite3*,const
216e0 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73   char*);.char *s
216f0 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28  qlite3DbStrNDup(
21700 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
21710 68 61 72 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  har*, u64);.void
21720 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63   *sqlite3Realloc
21730 28 76 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f  (void*, u64);.vo
21740 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61  id *sqlite3DbRea
21750 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74  llocOrFree(sqlit
21760 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36  e3 *, void *, u6
21770 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
21780 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74  3DbRealloc(sqlit
21790 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36  e3 *, void *, u6
217a0 34 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  4);.void sqlite3
217b0 44 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c  DbFree(sqlite3*,
217c0 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c   void*);.int sql
217d0 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76  ite3MallocSize(v
217e0 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
217f0 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73  e3DbMallocSize(s
21800 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
21810 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63  .void *sqlite3Sc
21820 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29  ratchMalloc(int)
21830 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63  ;.void sqlite3Sc
21840 72 61 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29  ratchFree(void*)
21850 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50  ;.void *sqlite3P
21860 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  ageMalloc(int);.
21870 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65  void sqlite3Page
21880 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  Free(void*);.voi
21890 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44  d sqlite3MemSetD
218a0 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69  efault(void);.#i
218b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
218c0 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 76  T_BUILTIN_TEST.v
218d0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67  oid sqlite3Benig
218e0 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69  nMallocHooks(voi
218f0 64 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69  d (*)(void), voi
21900 64 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 23 65  d (*)(void));.#e
21910 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
21920 48 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76  HeapNearlyFull(v
21930 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20  oid);../*.** On 
21940 73 79 73 74 65 6d 73 20 77 69 74 68 20 61 6d 70  systems with amp
21950 6c 65 20 73 74 61 63 6b 20 73 70 61 63 65 20 61  le stack space a
21960 6e 64 20 74 68 61 74 20 73 75 70 70 6f 72 74 20  nd that support 
21970 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a  alloca(), make.*
21980 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28  * use of alloca(
21990 29 20 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63  ) to obtain spac
219a0 65 20 66 6f 72 20 6c 61 72 67 65 20 61 75 74 6f  e for large auto
219b0 6d 61 74 69 63 20 6f 62 6a 65 63 74 73 2e 20 20  matic objects.  
219c0 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f  By default,.** o
219d0 62 74 61 69 6e 20 73 70 61 63 65 20 66 72 6f 6d  btain space from
219e0 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a   malloc()..**.**
219f0 20 54 68 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f   The alloca() ro
21a00 75 74 69 6e 65 20 6e 65 76 65 72 20 72 65 74 75  utine never retu
21a10 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20  rns NULL.  This 
21a20 77 69 6c 6c 20 63 61 75 73 65 20 63 6f 64 65 20  will cause code 
21a30 70 61 74 68 73 0a 2a 2a 20 74 68 61 74 20 64 65  paths.** that de
21a40 61 6c 20 77 69 74 68 20 73 71 6c 69 74 65 33 53  al with sqlite3S
21a50 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c  tackAlloc() fail
21a60 75 72 65 73 20 74 6f 20 62 65 20 75 6e 72 65 61  ures to be unrea
21a70 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65  chable..*/.#ifde
21a80 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c  f SQLITE_USE_ALL
21a90 4f 43 41 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  OCA.# define sql
21aa0 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61  ite3StackAllocRa
21ab0 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28  w(D,N)   alloca(
21ac0 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
21ad0 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72  te3StackAllocZer
21ae0 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61  o(D,N)  memset(a
21af0 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a  lloca(N), 0, N).
21b00 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
21b10 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20  StackFree(D,P)  
21b20 20 20 20 20 20 0a 23 65 6c 73 65 0a 23 20 64 65       .#else.# de
21b30 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
21b40 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
21b50 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
21b60 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  Raw(D,N).# defin
21b70 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
21b80 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71  locZero(D,N)  sq
21b90 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
21ba0 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20  o(D,N).# define 
21bb0 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
21bc0 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69  (D,P)       sqli
21bd0 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23  te3DbFree(D,P).#
21be0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
21bf0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
21c00 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65  YS3.const sqlite
21c10 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73  3_mem_methods *s
21c20 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73  qlite3MemGetMems
21c30 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  ys3(void);.#endi
21c40 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
21c50 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63  ENABLE_MEMSYS5.c
21c60 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d  onst sqlite3_mem
21c70 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65  _methods *sqlite
21c80 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76  3MemGetMemsys5(v
21c90 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23  oid);.#endif...#
21ca0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55  ifndef SQLITE_MU
21cb0 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74  TEX_OMIT.  sqlit
21cc0 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
21cd0 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44   const *sqlite3D
21ce0 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64  efaultMutex(void
21cf0 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  );.  sqlite3_mut
21d00 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74  ex_methods const
21d10 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74   *sqlite3NoopMut
21d20 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69  ex(void);.  sqli
21d30 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
21d40 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74  e3MutexAlloc(int
21d50 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
21d60 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b  MutexInit(void);
21d70 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  .  int sqlite3Mu
21d80 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65  texEnd(void);.#e
21d90 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e  ndif..sqlite3_in
21da0 74 36 34 20 73 71 6c 69 74 65 33 53 74 61 74 75  t64 sqlite3Statu
21db0 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69  sValue(int);.voi
21dc0 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 55  d sqlite3StatusU
21dd0 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  p(int, int);.voi
21de0 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 44  d sqlite3StatusD
21df0 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  own(int, int);.v
21e00 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
21e10 73 53 65 74 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  sSet(int, int);.
21e20 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f 20 6d 75  ./* Access to mu
21e30 74 65 78 65 73 20 75 73 65 64 20 62 79 20 73 71  texes used by sq
21e40 6c 69 74 65 33 5f 73 74 61 74 75 73 28 29 20 2a  lite3_status() *
21e50 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20  /.sqlite3_mutex 
21e60 2a 73 71 6c 69 74 65 33 50 63 61 63 68 65 31 4d  *sqlite3Pcache1M
21e70 75 74 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69  utex(void);.sqli
21e80 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
21e90 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f  e3MallocMutex(vo
21ea0 69 64 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  id);..#ifndef SQ
21eb0 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
21ec0 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73  NG_POINT.  int s
21ed0 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62  qlite3IsNaN(doub
21ee0 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  le);.#else.# def
21ef0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  ine sqlite3IsNaN
21f00 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  (X)  0.#endif../
21f10 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
21f20 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
21f30 67 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  g structure hold
21f40 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  s information ab
21f50 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74  out SQL.** funct
21f60 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73 20 74  ions arguments t
21f70 68 61 74 20 61 72 65 20 74 68 65 20 70 61 72 61  hat are the para
21f80 6d 65 74 65 72 73 20 74 6f 20 74 68 65 20 70 72  meters to the pr
21f90 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e  intf() function.
21fa0 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72 69 6e 74  .*/.struct Print
21fb0 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69  fArguments {.  i
21fc0 6e 74 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20  nt nArg;        
21fd0 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c          /* Total
21fe0 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
21ff0 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55  ents */.  int nU
22000 73 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  sed;            
22010 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
22020 61 72 67 75 6d 65 6e 74 73 20 75 73 65 64 20 73  arguments used s
22030 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74  o far */.  sqlit
22040 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72 67  e3_value **apArg
22050 3b 20 20 20 2f 2a 20 54 68 65 20 61 72 67 75 6d  ;   /* The argum
22060 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b  ent values */.};
22070 0a 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ..#define SQLITE
22080 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c  _PRINTF_INTERNAL
22090 20 30 78 30 31 0a 23 64 65 66 69 6e 65 20 53 51   0x01.#define SQ
220a0 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46  LITE_PRINTF_SQLF
220b0 55 4e 43 20 20 30 78 30 32 0a 76 6f 69 64 20 73  UNC  0x02.void s
220c0 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28 53  qlite3VXPrintf(S
220d0 74 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c 20 63  trAccum*, u32, c
220e0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c  onst char*, va_l
220f0 69 73 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ist);.void sqlit
22100 65 33 58 50 72 69 6e 74 66 28 53 74 72 41 63 63  e3XPrintf(StrAcc
22110 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20  um*, u32, const 
22120 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61  char*, ...);.cha
22130 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74  r *sqlite3MPrint
22140 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  f(sqlite3*,const
22150 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68   char*, ...);.ch
22160 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69  ar *sqlite3VMPri
22170 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ntf(sqlite3*,con
22180 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73  st char*, va_lis
22190 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  t);.#if defined(
221a0 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c  SQLITE_DEBUG) ||
221b0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
221c0 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20  HAVE_OS_TRACE). 
221d0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62   void sqlite3Deb
221e0 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63  ugPrintf(const c
221f0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64  har*, ...);.#end
22200 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
22210 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f  QLITE_TEST).  vo
22220 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54  id *sqlite3TestT
22230 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63  extToPtr(const c
22240 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  har*);.#endif..#
22250 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
22260 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20  E_DEBUG).  void 
22270 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45  sqlite3TreeViewE
22280 78 70 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63  xpr(TreeView*, c
22290 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b  onst Expr*, u8);
222a0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
222b0 72 65 65 56 69 65 77 45 78 70 72 4c 69 73 74 28  reeViewExprList(
222c0 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
222d0 20 45 78 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20   ExprList*, u8, 
222e0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
222f0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
22300 56 69 65 77 53 65 6c 65 63 74 28 54 72 65 65 56  ViewSelect(TreeV
22310 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c 65  iew*, const Sele
22320 63 74 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66  ct*, u8);.#endif
22330 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  ...void sqlite3S
22340 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a  etString(char **
22350 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73  , sqlite3*, cons
22360 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
22370 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50  qlite3ErrorMsg(P
22380 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
22390 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71  r*, ...);.int sq
223a0 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68 61  lite3Dequote(cha
223b0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
223c0 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73  KeywordCode(cons
223d0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  t unsigned char*
223e0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
223f0 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61 72  te3RunParser(Par
22400 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
22410 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64  , char **);.void
22420 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f   sqlite3FinishCo
22430 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e  ding(Parse*);.in
22440 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70  t sqlite3GetTemp
22450 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  Reg(Parse*);.voi
22460 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65  d sqlite3Release
22470 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69  TempReg(Parse*,i
22480 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
22490 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72  GetTempRange(Par
224a0 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  se*,int);.void s
224b0 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d  qlite3ReleaseTem
224c0 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e  pRange(Parse*,in
224d0 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  t,int);.void sql
224e0 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65 67  ite3ClearTempReg
224f0 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a 45  Cache(Parse*);.E
22500 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
22510 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69  Alloc(sqlite3*,i
22520 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c  nt,const Token*,
22530 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
22540 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a  te3Expr(sqlite3*
22550 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
22560 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
22570 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65 65  xprAttachSubtree
22580 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  s(sqlite3*,Expr*
22590 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45  ,Expr*,Expr*);.E
225a0 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70  xpr *sqlite3PExp
225b0 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45  r(Parse*, int, E
225c0 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f 6e  xpr*, Expr*, con
225d0 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72  st Token*);.Expr
225e0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64   *sqlite3ExprAnd
225f0 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
22600 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73   Expr*);.Expr *s
22610 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74 69  qlite3ExprFuncti
22620 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  on(Parse*,ExprLi
22630 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  st*, Token*);.vo
22640 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 73  id sqlite3ExprAs
22650 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61  signVarNumber(Pa
22660 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  rse*, Expr*);.vo
22670 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44 65  id sqlite3ExprDe
22680 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45  lete(sqlite3*, E
22690 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20  xpr*);.ExprList 
226a0 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
226b0 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78  Append(Parse*,Ex
226c0 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a  prList*,Expr*);.
226d0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
226e0 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73  ListSetName(Pars
226f0 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b  e*,ExprList*,Tok
22700 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  en*,int);.void s
22710 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65  qlite3ExprListSe
22720 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70  tSpan(Parse*,Exp
22730 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a  rList*,ExprSpan*
22740 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
22750 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71  xprListDelete(sq
22760 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74  lite3*, ExprList
22770 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 45  *);.u32 sqlite3E
22780 78 70 72 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e  xprListFlags(con
22790 73 74 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  st ExprList*);.i
227a0 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73  nt sqlite3Init(s
227b0 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29  qlite3*, char**)
227c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69  ;.int sqlite3Ini
227d0 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c  tCallback(void*,
227e0 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68   int, char**, ch
227f0 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar**);.void sqli
22800 74 65 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a  te3Pragma(Parse*
22810 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54  ,Token*,Token*,T
22820 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  oken*,int);.void
22830 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
22840 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
22850 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ion(sqlite3*);.v
22860 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74  oid sqlite3Reset
22870 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65  OneSchema(sqlite
22880 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
22890 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44 61 74  lite3CollapseDat
228a0 61 62 61 73 65 41 72 72 61 79 28 73 71 6c 69 74  abaseArray(sqlit
228b0 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
228c0 65 33 42 65 67 69 6e 50 61 72 73 65 28 50 61 72  e3BeginParse(Par
228d0 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  se*,int);.void s
228e0 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65  qlite3CommitInte
228f0 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69  rnalChanges(sqli
22900 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
22910 74 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e  te3DeleteColumnN
22920 61 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c 54 61  ames(sqlite3*,Ta
22930 62 6c 65 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  ble*);.Table *sq
22940 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74 4f 66  lite3ResultSetOf
22950 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 53 65  Select(Parse*,Se
22960 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  lect*);.void sql
22970 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61  ite3OpenMasterTa
22980 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74  ble(Parse *, int
22990 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
229a0 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78  3PrimaryKeyIndex
229b0 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71  (Table*);.i16 sq
229c0 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64  lite3ColumnOfInd
229d0 65 78 28 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b  ex(Index*, i16);
229e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
229f0 72 74 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  rtTable(Parse*,T
22a00 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
22a10 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76  ,int,int,int);.v
22a20 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
22a30 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65  lumn(Parse*,Toke
22a40 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
22a50 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73  3AddNotNull(Pars
22a60 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
22a70 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72 79  qlite3AddPrimary
22a80 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Key(Parse*, Expr
22a90 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  List*, int, int,
22aa0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
22ab0 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74  te3AddCheckConst
22ac0 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78  raint(Parse*, Ex
22ad0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
22ae0 65 33 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 28  e3AddColumnType(
22af0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a  Parse*,Token*);.
22b00 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 44  void sqlite3AddD
22b10 65 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73  efaultValue(Pars
22b20 65 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76  e*,ExprSpan*);.v
22b30 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
22b40 6c 6c 61 74 65 54 79 70 65 28 50 61 72 73 65 2a  llateType(Parse*
22b50 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
22b60 73 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28  sqlite3EndTable(
22b70 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
22b80 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29  ken*,u8,Select*)
22b90 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72  ;.int sqlite3Par
22ba0 73 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72  seUri(const char
22bb0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e  *,const char*,un
22bc0 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20  signed int*,.   
22bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22be0 20 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63   sqlite3_vfs**,c
22bf0 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a  har**,char **);.
22c00 42 74 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62  Btree *sqlite3Db
22c10 4e 61 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69  NameToBtree(sqli
22c20 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
22c30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  );.int sqlite3Co
22c40 64 65 4f 6e 63 65 28 50 61 72 73 65 20 2a 29 3b  deOnce(Parse *);
22c50 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
22c60 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
22c70 54 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  T.# define sqlit
22c80 65 33 46 61 75 6c 74 53 69 6d 28 58 29 20 53 51  e3FaultSim(X) SQ
22c90 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20  LITE_OK.#else.  
22ca0 69 6e 74 20 73 71 6c 69 74 65 33 46 61 75 6c 74  int sqlite3Fault
22cb0 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66  Sim(int);.#endif
22cc0 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65  ..Bitvec *sqlite
22cd0 33 42 69 74 76 65 63 43 72 65 61 74 65 28 75 33  3BitvecCreate(u3
22ce0 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  2);.int sqlite3B
22cf0 69 74 76 65 63 54 65 73 74 28 42 69 74 76 65 63  itvecTest(Bitvec
22d00 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c  *, u32);.int sql
22d10 69 74 65 33 42 69 74 76 65 63 54 65 73 74 4e 6f  ite3BitvecTestNo
22d20 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c 20 75  tNull(Bitvec*, u
22d30 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  32);.int sqlite3
22d40 42 69 74 76 65 63 53 65 74 28 42 69 74 76 65 63  BitvecSet(Bitvec
22d50 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71  *, u32);.void sq
22d60 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65 61 72  lite3BitvecClear
22d70 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76  (Bitvec*, u32, v
22d80 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  oid*);.void sqli
22d90 74 65 33 42 69 74 76 65 63 44 65 73 74 72 6f 79  te3BitvecDestroy
22da0 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73  (Bitvec*);.u32 s
22db0 71 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a 65  qlite3BitvecSize
22dc0 28 42 69 74 76 65 63 2a 29 3b 0a 23 69 66 6e 64  (Bitvec*);.#ifnd
22dd0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
22de0 55 49 4c 54 49 4e 5f 54 45 53 54 0a 69 6e 74 20  UILTIN_TEST.int 
22df0 73 71 6c 69 74 65 33 42 69 74 76 65 63 42 75 69  sqlite3BitvecBui
22e00 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74  ltinTest(int,int
22e10 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53  *);.#endif..RowS
22e20 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65  et *sqlite3RowSe
22e30 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20  tInit(sqlite3*, 
22e40 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20  void*, unsigned 
22e50 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22e60 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28 52 6f  e3RowSetClear(Ro
22e70 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  wSet*);.void sql
22e80 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
22e90 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a  (RowSet*, i64);.
22ea0 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65  int sqlite3RowSe
22eb0 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20 69  tTest(RowSet*, i
22ec0 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34 29 3b  nt iBatch, i64);
22ed0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53  .int sqlite3RowS
22ee0 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c 20  etNext(RowSet*, 
22ef0 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  i64*);..void sql
22f00 69 74 65 33 43 72 65 61 74 65 56 69 65 77 28 50  ite3CreateView(P
22f10 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
22f20 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63  en*,Token*,Selec
22f30 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69  t*,int,int);..#i
22f40 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
22f50 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20  E_OMIT_VIEW) || 
22f60 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
22f70 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
22f80 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  E).  int sqlite3
22f90 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d  ViewGetColumnNam
22fa0 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  es(Parse*,Table*
22fb0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
22fc0 65 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74  e sqlite3ViewGet
22fd0 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29  ColumnNames(A,B)
22fe0 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53   0.#endif..#if S
22ff0 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
23000 45 44 3e 33 30 0a 20 20 69 6e 74 20 73 71 6c 69  ED>30.  int sqli
23010 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  te3DbMaskAllZero
23020 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e 64 69  (yDbMask);.#endi
23030 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72  f.void sqlite3Dr
23040 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  opTable(Parse*, 
23050 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  SrcList*, int, i
23060 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
23070 33 43 6f 64 65 44 72 6f 70 54 61 62 6c 65 28 50  3CodeDropTable(P
23080 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
23090 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
230a0 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61 62 6c  qlite3DeleteTabl
230b0 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c  e(sqlite3*, Tabl
230c0 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  e*);.#ifndef SQL
230d0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
230e0 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71  REMENT.  void sq
230f0 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
23100 6e 74 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70  ntBegin(Parse *p
23110 50 61 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73  Parse);.  void s
23120 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
23130 65 6e 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50  entEnd(Parse *pP
23140 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64  arse);.#else.# d
23150 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
23160 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28  oincrementBegin(
23170 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  X).# define sqli
23180 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
23190 45 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f  End(X).#endif.vo
231a0 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74  id sqlite3Insert
231b0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
231c0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69  *, Select*, IdLi
231d0 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  st*, int);.void 
231e0 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c  *sqlite3ArrayAll
231f0 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76  ocate(sqlite3*,v
23200 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e  oid*,int,int*,in
23210 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c  t*);.IdList *sql
23220 69 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64  ite3IdListAppend
23230 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73  (sqlite3*, IdLis
23240 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  t*, Token*);.int
23250 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e   sqlite3IdListIn
23260 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73  dex(IdList*,cons
23270 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73  t char*);.SrcLis
23280 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
23290 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33  tEnlarge(sqlite3
232a0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
232b0 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20  , int);.SrcList 
232c0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41  *sqlite3SrcListA
232d0 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20  ppend(sqlite3*, 
232e0 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
232f0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69  , Token*);.SrcLi
23300 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
23310 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d  stAppendFromTerm
23320 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
23330 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
23340 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
23350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23360 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c           Token*,
23370 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c   Select*, Expr*,
23380 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20   IdList*);.void 
23390 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e  sqlite3SrcListIn
233a0 64 65 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c  dexedBy(Parse *,
233b0 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65   SrcList *, Toke
233c0 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  n *);.void sqlit
233d0 65 33 53 72 63 4c 69 73 74 46 75 6e 63 41 72 67  e3SrcListFuncArg
233e0 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  s(Parse*, SrcLis
233f0 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  t*, ExprList*);.
23400 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78  int sqlite3Index
23410 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65  edByLookup(Parse
23420 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69   *, struct SrcLi
23430 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64  st_item *);.void
23440 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53   sqlite3SrcListS
23450 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63  hiftJoinType(Src
23460 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
23470 69 74 65 33 53 72 63 4c 69 73 74 41 73 73 69 67  ite3SrcListAssig
23480 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c  nCursors(Parse*,
23490 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64   SrcList*);.void
234a0 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65   sqlite3IdListDe
234b0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49  lete(sqlite3*, I
234c0 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  dList*);.void sq
234d0 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65  lite3SrcListDele
234e0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  te(sqlite3*, Src
234f0 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73  List*);.Index *s
23500 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e  qlite3AllocateIn
23510 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65  dexObject(sqlite
23520 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a  3*,i16,int,char*
23530 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  *);.Index *sqlit
23540 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50 61  e3CreateIndex(Pa
23550 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
23560 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  n*,SrcList*,Expr
23570 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a  List*,int,Token*
23580 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
23590 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
235a0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
235b0 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e  id sqlite3DropIn
235c0 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  dex(Parse*, SrcL
235d0 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ist*, int);.int 
235e0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61  sqlite3Select(Pa
235f0 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53  rse*, Select*, S
23600 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c  electDest*);.Sel
23610 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65  ect *sqlite3Sele
23620 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70  ctNew(Parse*,Exp
23630 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  rList*,SrcList*,
23640 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
23650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23660 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
23670 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45 78  ExprList*,u16,Ex
23680 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64  pr*,Expr*);.void
23690 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65   sqlite3SelectDe
236a0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  lete(sqlite3*, S
236b0 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a  elect*);.Table *
236c0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f  sqlite3SrcListLo
236d0 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63  okup(Parse*, Src
236e0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
236f0 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61  te3IsReadOnly(Pa
23700 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
23710 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
23720 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a  OpenTable(Parse*
23730 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20  , int iCur, int 
23740 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  iDb, Table*, int
23750 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
23760 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44  QLITE_ENABLE_UPD
23770 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54  ATE_DELETE_LIMIT
23780 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
23790 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45  LITE_OMIT_SUBQUE
237a0 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  RY).Expr *sqlite
237b0 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72 73  3LimitWhere(Pars
237c0 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  e*,SrcList*,Expr
237d0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
237e0 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a  *,Expr*,char*);.
237f0 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
23800 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61  te3DeleteFrom(Pa
23810 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
23820 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
23830 69 74 65 33 55 70 64 61 74 65 28 50 61 72 73 65  ite3Update(Parse
23840 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
23850 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69  rList*, Expr*, i
23860 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a  nt);.WhereInfo *
23870 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69  sqlite3WhereBegi
23880 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  n(Parse*,SrcList
23890 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
238a0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c  *,ExprList*,u16,
238b0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
238c0 65 33 57 68 65 72 65 45 6e 64 28 57 68 65 72 65  e3WhereEnd(Where
238d0 49 6e 66 6f 2a 29 3b 0a 75 36 34 20 73 71 6c 69  Info*);.u64 sqli
238e0 74 65 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f  te3WhereOutputRo
238f0 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f  wCount(WhereInfo
23900 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
23910 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 57  hereIsDistinct(W
23920 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
23930 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72  sqlite3WhereIsOr
23940 64 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a  dered(WhereInfo*
23950 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
23960 65 72 65 49 73 53 6f 72 74 65 64 28 57 68 65 72  ereIsSorted(Wher
23970 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
23980 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75  ite3WhereContinu
23990 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  eLabel(WhereInfo
239a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
239b0 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57  hereBreakLabel(W
239c0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
239d0 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e  sqlite3WhereOkOn
239e0 65 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a  ePass(WhereInfo*
239f0 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
23a00 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
23a10 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61  olumn(Parse*, Ta
23a20 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
23a30 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  int, u8);.void s
23a40 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
23a50 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56  tColumnOfTable(V
23a60 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  dbe*, Table*, in
23a70 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
23a80 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
23a90 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69  deMove(Parse*, i
23aa0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
23ab0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
23ac0 61 63 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a  acheStore(Parse*
23ad0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
23ae0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
23af0 70 72 43 61 63 68 65 50 75 73 68 28 50 61 72 73  prCachePush(Pars
23b00 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
23b10 33 45 78 70 72 43 61 63 68 65 50 6f 70 28 50 61  3ExprCachePop(Pa
23b20 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
23b30 74 65 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f  te3ExprCacheRemo
23b40 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  ve(Parse*, int, 
23b50 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
23b60 65 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72  e3ExprCacheClear
23b70 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
23b80 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 41  qlite3ExprCacheA
23b90 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61  ffinityChange(Pa
23ba0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
23bb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
23bc0 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78  rCode(Parse*, Ex
23bd0 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
23be0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46  sqlite3ExprCodeF
23bf0 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a  actorable(Parse*
23c00 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
23c10 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
23c20 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a  odeAtInit(Parse*
23c30 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38  , Expr*, int, u8
23c40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
23c50 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65  prCodeTemp(Parse
23c60 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  *, Expr*, int*);
23c70 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
23c80 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65  CodeTarget(Parse
23c90 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
23ca0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23cb0 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72  CodeAndCache(Par
23cc0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
23cd0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
23ce0 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61  rCodeExprList(Pa
23cf0 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
23d00 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69   int, u8);.#defi
23d10 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44  ne SQLITE_ECEL_D
23d20 55 50 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a  UP      0x01  /*
23d30 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c   Deep, not shall
23d40 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65  ow copies */.#de
23d50 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
23d60 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32 20 20  _FACTOR   0x02  
23d70 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f  /* Factor out co
23d80 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a  nstant terms */.
23d90 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23da0 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45  IfTrue(Parse*, E
23db0 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
23dc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
23dd0 72 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c  rIfFalse(Parse*,
23de0 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
23df0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
23e00 78 70 72 49 66 46 61 6c 73 65 44 75 70 28 50 61  xprIfFalseDup(Pa
23e10 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
23e20 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73  , int);.Table *s
23e30 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28  qlite3FindTable(
23e40 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
23e50 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
23e60 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
23e70 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61  e3LocateTable(Pa
23e80 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c  rse*,int isView,
23e90 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
23ea0 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65  st char*);.Table
23eb0 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54   *sqlite3LocateT
23ec0 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c  ableItem(Parse*,
23ed0 69 6e 74 20 69 73 56 69 65 77 2c 73 74 72 75 63  int isView,struc
23ee0 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a  t SrcList_item *
23ef0 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
23f00 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74  3FindIndex(sqlit
23f10 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
23f20 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
23f30 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
23f40 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28  kAndDeleteTable(
23f50 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
23f60 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
23f70 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
23f80 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69  DeleteIndex(sqli
23f90 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
23fa0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
23fb0 74 65 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a  te3Vacuum(Parse*
23fc0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75  );.int sqlite3Ru
23fd0 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20  nVacuum(char**, 
23fe0 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68 61 72 20  sqlite3*);.char 
23ff0 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d  *sqlite3NameFrom
24000 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20  Token(sqlite3*, 
24010 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
24020 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28  ite3ExprCompare(
24030 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
24040 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
24050 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45  xprListCompare(E
24060 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  xprList*, ExprLi
24070 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  st*, int);.int s
24080 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65  qlite3ExprImplie
24090 73 45 78 70 72 28 45 78 70 72 2a 2c 20 45 78 70  sExpr(Expr*, Exp
240a0 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
240b0 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
240c0 65 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65  eAggregates(Name
240d0 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
240e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
240f0 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74  prAnalyzeAggList
24100 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78  (NameContext*,Ex
24110 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
24120 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65  lite3FunctionUse
24130 73 54 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20  sThisSrc(Expr*, 
24140 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20  SrcList*);.Vdbe 
24150 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28  *sqlite3GetVdbe(
24160 50 61 72 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66  Parse*);.#ifndef
24170 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
24180 4c 54 49 4e 5f 54 45 53 54 0a 76 6f 69 64 20 73  LTIN_TEST.void s
24190 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53 74  qlite3PrngSaveSt
241a0 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ate(void);.void 
241b0 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f  sqlite3PrngResto
241c0 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 23  reState(void);.#
241d0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
241e0 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71  e3RollbackAll(sq
241f0 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
24200 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72  d sqlite3CodeVer
24210 69 66 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a  ifySchema(Parse*
24220 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
24230 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61  ite3CodeVerifyNa
24240 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a  medSchema(Parse*
24250 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44  , const char *zD
24260 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  b);.void sqlite3
24270 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e  BeginTransaction
24280 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
24290 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69  oid sqlite3Commi
242a0 74 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  tTransaction(Par
242b0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
242c0 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61  e3RollbackTransa
242d0 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76  ction(Parse*);.v
242e0 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70  oid sqlite3Savep
242f0 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  oint(Parse*, int
24300 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
24310 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65  sqlite3CloseSave
24320 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a  points(sqlite3 *
24330 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c  );.void sqlite3L
24340 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73  eaveMutexAndClos
24350 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a  eZombie(sqlite3*
24360 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
24370 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70  prIsConstant(Exp
24380 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
24390 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f  ExprIsConstantNo
243a0 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e  tJoin(Expr*);.in
243b0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
243c0 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f  onstantOrFunctio
243d0 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e  n(Expr*, u8);.in
243e0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 54  t sqlite3ExprIsT
243f0 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70  ableConstant(Exp
24400 72 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  r*,int);.int sql
24410 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67 65  ite3ExprIsIntege
24420 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  r(Expr*, int*);.
24430 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
24440 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45  anBeNull(const E
24450 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
24460 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66  e3ExprNeedsNoAff
24470 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73  inityChange(cons
24480 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a  t Expr*, char);.
24490 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77  int sqlite3IsRow
244a0 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  id(const char*);
244b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
244c0 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28 50  erateRowDelete(P
244d0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69  arse*,Table*,Tri
244e0 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  gger*,int,int,in
244f0 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 29 3b  t,i16,u8,u8,u8);
24500 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
24510 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c  erateRowIndexDel
24520 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ete(Parse*, Tabl
24530 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
24540 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
24550 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79  GenerateIndexKey
24560 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c  (Parse*, Index*,
24570 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20   int, int, int, 
24580 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29  int*,Index*,int)
24590 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
245a0 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65  solvePartIdxLabe
245b0 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76  l(Parse*,int);.v
245c0 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
245d0 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65  ateConstraintChe
245e0 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  cks(Parse*,Table
245f0 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69  *,int*,int,int,i
24600 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20  nt,int,.        
24610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24620 20 20 20 20 20 20 20 20 20 20 20 20 20 75 38 2c               u8,
24630 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f  u8,int,int*);.vo
24640 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65  id sqlite3Comple
24650 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73  teInsertion(Pars
24660 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e  e*,Table*,int,in
24670 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69  t,int,int*,int,i
24680 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  nt,int);.int sql
24690 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64  ite3OpenTableAnd
246a0 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20  Indices(Parse*, 
246b0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
246c0 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74  , u8*, int*, int
246d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
246e0 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74  BeginWriteOperat
246f0 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ion(Parse*, int,
24700 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
24710 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61  te3MultiWrite(Pa
24720 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
24730 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73  te3MayAbort(Pars
24740 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
24750 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28  3HaltConstraint(
24760 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
24770 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29  , char*, i8, u8)
24780 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
24790 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50  iqueConstraint(P
247a0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65  arse*, int, Inde
247b0 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
247c0 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74  3RowidConstraint
247d0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61  (Parse*, int, Ta
247e0 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ble*);.Expr *sql
247f0 69 74 65 33 45 78 70 72 44 75 70 28 73 71 6c 69  ite3ExprDup(sqli
24800 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b  te3*,Expr*,int);
24810 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
24820 65 33 45 78 70 72 4c 69 73 74 44 75 70 28 73 71  e3ExprListDup(sq
24830 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a  lite3*,ExprList*
24840 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a  ,int);.SrcList *
24850 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75  sqlite3SrcListDu
24860 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69  p(sqlite3*,SrcLi
24870 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74  st*,int);.IdList
24880 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44   *sqlite3IdListD
24890 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69  up(sqlite3*,IdLi
248a0 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
248b0 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70 28 73  lite3SelectDup(s
248c0 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c  qlite3*,Select*,
248d0 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c 45 43 54  int);.#if SELECT
248e0 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f  TRACE_ENABLED.vo
248f0 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
24900 53 65 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c  SetName(Select*,
24910 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
24920 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
24930 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d  ite3SelectSetNam
24940 65 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f  e(A,B).#endif.vo
24950 69 64 20 73 71 6c 69 74 65 33 46 75 6e 63 44 65  id sqlite3FuncDe
24960 66 49 6e 73 65 72 74 28 46 75 6e 63 44 65 66 48  fInsert(FuncDefH
24970 61 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b  ash*, FuncDef*);
24980 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65  .FuncDef *sqlite
24990 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71  3FindFunction(sq
249a0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
249b0 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38  r*,int,int,u8,u8
249c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
249d0 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75  egisterBuiltinFu
249e0 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  nctions(sqlite3*
249f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
24a00 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46  egisterDateTimeF
24a10 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
24a20 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
24a30 73 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69  sterGlobalFuncti
24a40 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73  ons(void);.int s
24a50 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
24a60 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  kOk(sqlite3*);.i
24a70 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
24a80 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71  CheckSickOrOk(sq
24a90 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
24aa0 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69  lite3ChangeCooki
24ab0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  e(Parse*, int);.
24ac0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
24ad0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
24ae0 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
24af0 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29  TE_OMIT_TRIGGER)
24b00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74  .void sqlite3Mat
24b10 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72  erializeView(Par
24b20 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
24b30 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66  r*, int);.#endif
24b40 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
24b50 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20  _OMIT_TRIGGER.  
24b60 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
24b70 6e 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  nTrigger(Parse*,
24b80 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69   Token*,Token*,i
24b90 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53  nt,int,IdList*,S
24ba0 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  rcList*,.       
24bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bc0 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69      Expr*,int, i
24bd0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
24be0 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72  te3FinishTrigger
24bf0 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
24c00 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  Step*, Token*);.
24c10 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
24c20 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  opTrigger(Parse*
24c30 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
24c40 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
24c50 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50  DropTriggerPtr(P
24c60 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29  arse*, Trigger*)
24c70 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c  ;.  Trigger *sql
24c80 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73  ite3TriggersExis
24c90 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
24ca0 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
24cb0 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a  *, int *pMask);.
24cc0 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
24cd0 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61  e3TriggerList(Pa
24ce0 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b  rse *, Table *);
24cf0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
24d00 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61  odeRowTrigger(Pa
24d10 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  rse*, Trigger *,
24d20 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
24d30 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20   int, Table *,. 
24d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d50 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20             int, 
24d60 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
24d70 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
24d80 54 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61  TriggerDirect(Pa
24d90 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a  rse *, Trigger *
24da0 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20  , Table *, int, 
24db0 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
24dc0 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67  d sqliteViewTrig
24dd0 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62  gers(Parse*, Tab
24de0 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  le*, Expr*, int,
24df0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76   ExprList*);.  v
24e00 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
24e10 65 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c  eTriggerStep(sql
24e20 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74  ite3*, TriggerSt
24e30 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ep*);.  TriggerS
24e40 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
24e50 67 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71  gerSelectStep(sq
24e60 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b  lite3*,Select*);
24e70 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
24e80 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e  sqlite3TriggerIn
24e90 73 65 72 74 53 74 65 70 28 73 71 6c 69 74 65 33  sertStep(sqlite3
24ea0 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74  *,Token*, IdList
24eb0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
24ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ed0 20 20 20 20 20 20 20 20 20 20 20 53 65 6c 65 63             Selec
24ee0 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67 67 65  t*,u8);.  Trigge
24ef0 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
24f00 69 67 67 65 72 55 70 64 61 74 65 53 74 65 70 28  iggerUpdateStep(
24f10 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c  sqlite3*,Token*,
24f20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a  ExprList*, Expr*
24f30 2c 20 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72  , u8);.  Trigger
24f40 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
24f50 67 67 65 72 44 65 6c 65 74 65 53 74 65 70 28 73  ggerDeleteStep(s
24f60 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20  qlite3*,Token*, 
24f70 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  Expr*);.  void s
24f80 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
24f90 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72  ger(sqlite3*, Tr
24fa0 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20  igger*);.  void 
24fb0 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
24fc0 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71  DeleteTrigger(sq
24fd0 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
24fe0 20 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73   char*);.  u32 s
24ff0 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c  qlite3TriggerCol
25000 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67  mask(Parse*,Trig
25010 67 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  ger*,ExprList*,i
25020 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e  nt,int,Table*,in
25030 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  t);.# define sql
25040 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65  ite3ParseTopleve
25050 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c  l(p) ((p)->pTopl
25060 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70  evel ? (p)->pTop
25070 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 65 6c  level : (p)).#el
25080 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
25090 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74  te3TriggersExist
250a0 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20  (B,C,D,E,F) 0.# 
250b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65  define sqlite3De
250c0 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 29  leteTrigger(A,B)
250d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
250e0 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28  3DropTriggerPtr(
250f0 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
25100 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
25110 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c  leteTrigger(A,B,
25120 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  C).# define sqli
25130 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
25140 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c  r(A,B,C,D,E,F,G,
25150 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71  H,I).# define sq
25160 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
25170 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c  gerDirect(A,B,C,
25180 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20  D,E,F).# define 
25190 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69  sqlite3TriggerLi
251a0 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66  st(X, Y) 0.# def
251b0 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65  ine sqlite3Parse
251c0 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20  Toplevel(p) p.# 
251d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
251e0 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42  iggerColmask(A,B
251f0 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65  ,C,D,E,F,G) 0.#e
25200 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65  ndif..int sqlite
25210 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a  3JoinType(Parse*
25220 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
25230 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
25240 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72  sqlite3CreateFor
25250 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20  eignKey(Parse*, 
25260 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  ExprList*, Token
25270 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
25280 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25290 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28  DeferForeignKey(
252a0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69  Parse*, int);.#i
252b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
252c0 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
252d0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
252e0 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78  thRead(Parse*,Ex
252f0 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c  pr*,Schema*,SrcL
25300 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ist*);.  int sql
25310 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 50 61  ite3AuthCheck(Pa
25320 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  rse*,int, const 
25330 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
25340 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
25350 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
25360 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28  AuthContextPush(
25370 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74  Parse*, AuthCont
25380 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ext*, const char
25390 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
253a0 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70  e3AuthContextPop
253b0 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a  (AuthContext*);.
253c0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74    int sqlite3Aut
253d0 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c  hReadCol(Parse*,
253e0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63   const char *, c
253f0 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
25400 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
25410 65 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  e sqlite3AuthRea
25420 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66  d(a,b,c,d).# def
25430 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
25440 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20  heck(a,b,c,d,e) 
25450 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64     SQLITE_OK.# d
25460 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
25470 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62  hContextPush(a,b
25480 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,c).# define sql
25490 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
254a0 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29 28 61  op(a)  ((void)(a
254b0 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  )).#endif.void s
254c0 71 6c 69 74 65 33 41 74 74 61 63 68 28 50 61 72  qlite3Attach(Par
254d0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  se*, Expr*, Expr
254e0 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
254f0 73 71 6c 69 74 65 33 44 65 74 61 63 68 28 50 61  sqlite3Detach(Pa
25500 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  rse*, Expr*);.vo
25510 69 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69  id sqlite3FixIni
25520 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73  t(DbFixer*, Pars
25530 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  e*, int, const c
25540 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  har*, const Toke
25550 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
25560 46 69 78 53 72 63 4c 69 73 74 28 44 62 46 69 78  FixSrcList(DbFix
25570 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  er*, SrcList*);.
25580 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 65  int sqlite3FixSe
25590 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53  lect(DbFixer*, S
255a0 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
255b0 69 74 65 33 46 69 78 45 78 70 72 28 44 62 46 69  ite3FixExpr(DbFi
255c0 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  xer*, Expr*);.in
255d0 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72  t sqlite3FixExpr
255e0 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45  List(DbFixer*, E
255f0 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
25600 71 6c 69 74 65 33 46 69 78 54 72 69 67 67 65 72  qlite3FixTrigger
25610 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54  Step(DbFixer*, T
25620 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e  riggerStep*);.in
25630 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f  t sqlite3AtoF(co
25640 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75  nst char *z, dou
25650 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  ble*, int, u8);.
25660 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e  int sqlite3GetIn
25670 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  t32(const char *
25680 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
25690 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63  ite3Atoi(const c
256a0 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
256b0 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63  e3Utf16ByteLen(c
256c0 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61  onst void *pData
256d0 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69 6e  , int nChar);.in
256e0 74 20 73 71 6c 69 74 65 33 55 74 66 38 43 68 61  t sqlite3Utf8Cha
256f0 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20  rLen(const char 
25700 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74  *pData, int nByt
25710 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55  e);.u32 sqlite3U
25720 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38  tf8Read(const u8
25730 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69  **);.LogEst sqli
25740 74 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a  te3LogEst(u64);.
25750 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
25760 67 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c  gEstAdd(LogEst,L
25770 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20  ogEst);.#ifndef 
25780 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
25790 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20  UALTABLE.LogEst 
257a0 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f  sqlite3LogEstFro
257b0 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b  mDouble(double);
257c0 0a 23 65 6e 64 69 66 0a 75 36 34 20 73 71 6c 69  .#endif.u64 sqli
257d0 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c  te3LogEstToInt(L
257e0 6f 67 45 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52  ogEst);../*.** R
257f0 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20  outines to read 
25800 61 6e 64 20 77 72 69 74 65 20 76 61 72 69 61 62  and write variab
25810 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65  le-length intege
25820 72 73 2e 20 20 54 68 65 73 65 20 75 73 65 64 20  rs.  These used 
25830 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64  to.** be defined
25840 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f   locally, but no
25850 77 20 77 65 20 75 73 65 20 74 68 65 20 76 61 72  w we use the var
25860 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20  int routines in 
25870 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69  the util.c.** fi
25880 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  le..*/.int sqlit
25890 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69  e3PutVarint(unsi
258a0 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29  gned char*, u64)
258b0 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56  ;.u8 sqlite3GetV
258c0 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69  arint(const unsi
258d0 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34  gned char *, u64
258e0 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47   *);.u8 sqlite3G
258f0 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74  etVarint32(const
25900 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
25910 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71  , u32 *);.int sq
25920 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75  lite3VarintLen(u
25930 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68  64 v);../*.** Th
25940 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73  e common case is
25950 20 66 6f 72 20 61 20 76 61 72 69 6e 74 20 74 6f   for a varint to
25960 20 62 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74   be a single byt
25970 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69  e.  They followi
25980 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e  ng.** macros han
25990 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63  dle the common c
259a0 61 73 65 20 77 69 74 68 6f 75 74 20 61 20 70 72  ase without a pr
259b0 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c 20 62 75  ocedure call, bu
259c0 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74  t then call.** t
259d0 68 65 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72  he procedure for
259e0 20 6c 61 72 67 65 72 20 76 61 72 69 6e 74 73 2e   larger varints.
259f0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56  .*/.#define getV
25a00 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a  arint32(A,B)  \.
25a10 20 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38    (u8)((*(A)<(u8
25a20 29 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32  )0x80)?((B)=(u32
25a30 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33  )*(A)),1:sqlite3
25a40 47 65 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c  GetVarint32((A),
25a50 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64  (u32 *)&(B))).#d
25a60 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33  efine putVarint3
25a70 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29  2(A,B)  \.  (u8)
25a80 28 28 28 75 33 32 29 28 42 29 3c 28 75 33 32 29  (((u32)(B)<(u32)
25a90 30 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73  0x80)?(*(A)=(uns
25aa0 69 67 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c  igned char)(B)),
25ab0 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74  1:\.  sqlite3Put
25ac0 56 61 72 69 6e 74 28 28 41 29 2c 28 42 29 29 29  Varint((A),(B)))
25ad0 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69  .#define getVari
25ae0 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47 65 74  nt    sqlite3Get
25af0 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70  Varint.#define p
25b00 75 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69  utVarint    sqli
25b10 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63  te3PutVarint...c
25b20 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
25b30 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53  e3IndexAffinityS
25b40 74 72 28 56 64 62 65 20 2a 2c 20 49 6e 64 65 78  tr(Vdbe *, Index
25b50 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
25b60 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56  3TableAffinity(V
25b70 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  dbe*, Table*, in
25b80 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  t);.char sqlite3
25b90 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28  CompareAffinity(
25ba0 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
25bb0 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c  r aff2);.int sql
25bc0 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74  ite3IndexAffinit
25bd0 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c  yOk(Expr *pExpr,
25be0 20 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69   char idx_affini
25bf0 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  ty);.char sqlite
25c00 33 45 78 70 72 41 66 66 69 6e 69 74 79 28 45 78  3ExprAffinity(Ex
25c10 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20  pr *pExpr);.int 
25c20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f  sqlite3Atoi64(co
25c30 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c  nst char*, i64*,
25c40 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
25c50 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f  qlite3DecOrHexTo
25c60 49 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  I64(const char*,
25c70 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c   i64*);.void sql
25c80 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73 67  ite3ErrorWithMsg
25c90 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
25ca0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
25cb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
25cc0 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ror(sqlite3*,int
25cd0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
25ce0 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65  HexToBlob(sqlite
25cf0 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  3*, const char *
25d00 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71  z, int n);.u8 sq
25d10 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e  lite3HexToInt(in
25d20 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  t h);.int sqlite
25d30 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72  3TwoPartName(Par
25d40 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54  se *, Token *, T
25d50 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a  oken *, Token **
25d60 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  );..#if defined(
25d70 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f  SQLITE_NEED_ERR_
25d80 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72  NAME).const char
25d90 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65   *sqlite3ErrName
25da0 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63  (int);.#endif..c
25db0 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
25dc0 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69  e3ErrStr(int);.i
25dd0 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63  nt sqlite3ReadSc
25de0 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72  hema(Parse *pPar
25df0 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  se);.CollSeq *sq
25e00 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71  lite3FindCollSeq
25e10 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63  (sqlite3*,u8 enc
25e20 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  , const char*,in
25e30 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  t);.CollSeq *sql
25e40 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65  ite3LocateCollSe
25e50 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
25e60 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d   const char*zNam
25e70 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  e);.CollSeq *sql
25e80 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28  ite3ExprCollSeq(
25e90 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
25ea0 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70  xpr *pExpr);.Exp
25eb0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64  r *sqlite3ExprAd
25ec0 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61  dCollateToken(Pa
25ed0 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
25ee0 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
25ef0 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  , int);.Expr *sq
25f00 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c  lite3ExprAddColl
25f10 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a  ateString(Parse*
25f20 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61  ,Expr*,const cha
25f30 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
25f40 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74  e3ExprSkipCollat
25f50 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  e(Expr*);.int sq
25f60 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65  lite3CheckCollSe
25f70 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53  q(Parse *, CollS
25f80 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  eq *);.int sqlit
25f90 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d  e3CheckObjectNam
25fa0 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74  e(Parse *, const
25fb0 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73   char *);.void s
25fc0 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61  qlite3VdbeSetCha
25fd0 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20  nges(sqlite3 *, 
25fe0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
25ff0 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69  3AddInt64(i64*,i
26000 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
26010 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  SubInt64(i64*,i6
26020 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  4);.int sqlite3M
26030 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ulInt64(i64*,i64
26040 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62  );.int sqlite3Ab
26050 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66  sInt32(int);.#if
26060 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
26070 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64  E_8_3_NAMES.void
26080 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66   sqlite3FileSuff
26090 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ix3(const char*,
260a0 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23   char*);.#else.#
260b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46   define sqlite3F
260c0 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a  ileSuffix3(X,Y).
260d0 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65  #endif.u8 sqlite
260e0 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73  3GetBoolean(cons
260f0 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a  t char *z,u8);..
26100 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69  const void *sqli
26110 74 65 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c  te3ValueText(sql
26120 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29  ite3_value*, u8)
26130 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c  ;.int sqlite3Val
26140 75 65 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f  ueBytes(sqlite3_
26150 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69  value*, u8);.voi
26160 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65  d sqlite3ValueSe
26170 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c  tStr(sqlite3_val
26180 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  ue*, int, const 
26190 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20 20 20 20  void *,u8, .    
261a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261b0 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64      void(*)(void
261c0 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  *));.void sqlite
261d0 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71  3ValueSetNull(sq
261e0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76  lite3_value*);.v
261f0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
26200 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  Free(sqlite3_val
26210 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61  ue*);.sqlite3_va
26220 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75  lue *sqlite3Valu
26230 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b  eNew(sqlite3 *);
26240 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74  .char *sqlite3Ut
26250 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a  f16to8(sqlite3 *
26260 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
26270 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
26280 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70  ite3ValueFromExp
26290 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70  r(sqlite3 *, Exp
262a0 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c  r *, u8, u8, sql
262b0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a  ite3_value **);.
262c0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
262d0 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73  eApplyAffinity(s
262e0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20  qlite3_value *, 
262f0 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66  u8, u8);.#ifndef
26300 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
26310 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73  TION.extern cons
26320 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
26330 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f  sqlite3OpcodePro
26340 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20  perty[];.extern 
26350 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
26360 68 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72  har sqlite3Upper
26370 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72  ToLower[];.exter
26380 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
26390 20 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79   char sqlite3Cty
263a0 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20  peMap[];.extern 
263b0 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69  const Token sqli
263c0 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a  te3IntTokens[];.
263d0 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53  extern SQLITE_WS
263e0 44 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33  D struct Sqlite3
263f0 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f  Config sqlite3Co
26400 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c  nfig;.extern SQL
26410 49 54 45 5f 57 53 44 20 46 75 6e 63 44 65 66 48  ITE_WSD FuncDefH
26420 61 73 68 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  ash sqlite3Globa
26430 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e  lFunctions;.#ifn
26440 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
26450 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73  WSD.extern int s
26460 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74  qlite3PendingByt
26470 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66  e;.#endif.#endif
26480 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f  .void sqlite3Roo
26490 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74  tPageMoved(sqlit
264a0 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e3*, int, int, i
264b0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
264c0 33 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c  3Reindex(Parse*,
264d0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
264e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
264f0 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  terFunctions(voi
26500 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
26510 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65  AlterRenameTable
26520 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
26530 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
26540 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28  sqlite3GetToken(
26550 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
26560 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76  har *, int *);.v
26570 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65  oid sqlite3Neste
26580 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63  dParse(Parse*, c
26590 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
265a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
265b0 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
265c0 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29  ements(sqlite3*)
265d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64  ;.int sqlite3Cod
265e0 65 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65  eSubselect(Parse
265f0 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c   *, Expr *, int,
26600 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
26610 74 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61  te3SelectPrep(Pa
26620 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e  rse*, Select*, N
26630 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f  ameContext*);.vo
26640 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
26650 57 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72  WrongNumTermsErr
26660 6f 72 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  or(Parse *pParse
26670 2c 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e  , Select *p);.in
26680 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70  t sqlite3MatchSp
26690 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61  anName(const cha
266a0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
266b0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
266c0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
266d0 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78  sqlite3ResolveEx
266e0 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74  prNames(NameCont
266f0 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  ext*, Expr*);.in
26700 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
26710 45 78 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e 61  ExprListNames(Na
26720 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72  meContext*, Expr
26730 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
26740 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63  ite3ResolveSelec
26750 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53  tNames(Parse*, S
26760 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74  elect*, NameCont
26770 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ext*);.void sqli
26780 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65  te3ResolveSelfRe
26790 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54  ference(Parse*,T
267a0 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c  able*,int,Expr*,
267b0 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
267c0 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72  sqlite3ResolveOr
267d0 64 65 72 47 72 6f 75 70 42 79 28 50 61 72 73 65  derGroupBy(Parse
267e0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72  *, Select*, Expr
267f0 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  List*, const cha
26800 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
26810 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56  3ColumnDefault(V
26820 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20  dbe *, Table *, 
26830 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
26840 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69  sqlite3AlterFini
26850 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  shAddColumn(Pars
26860 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76  e *, Token *);.v
26870 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
26880 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50  BeginAddColumn(P
26890 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20  arse *, SrcList 
268a0 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  *);.CollSeq *sql
268b0 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 50  ite3GetCollSeq(P
268c0 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53  arse*, u8, CollS
268d0 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  eq *, const char
268e0 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  *);.char sqlite3
268f0 41 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e  AffinityType(con
26900 73 74 20 63 68 61 72 2a 2c 20 75 38 2a 29 3b 0a  st char*, u8*);.
26910 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c  void sqlite3Anal
26920 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  yze(Parse*, Toke
26930 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  n*, Token*);.int
26940 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75   sqlite3InvokeBu
26950 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61  syHandler(BusyHa
26960 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  ndler*);.int sql
26970 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74  ite3FindDb(sqlit
26980 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  e3*, Token*);.in
26990 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e  t sqlite3FindDbN
269a0 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  ame(sqlite3 *, c
269b0 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
269c0 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69  t sqlite3Analysi
269d0 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69  sLoad(sqlite3*,i
269e0 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71  nt iDB);.void sq
269f0 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78  lite3DeleteIndex
26a00 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a  Samples(sqlite3*
26a10 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  ,Index*);.void s
26a20 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77  qlite3DefaultRow
26a30 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  Est(Index*);.voi
26a40 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
26a50 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73  rLikeFunctions(s
26a60 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69  qlite3*, int);.i
26a70 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65  nt sqlite3IsLike
26a80 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
26a90 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61  *,Expr*,int*,cha
26aa0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
26ab0 33 4d 69 6e 69 6d 75 6d 46 69 6c 65 46 6f 72 6d  3MinimumFileForm
26ac0 61 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  at(Parse*, int, 
26ad0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
26ae0 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f  e3SchemaClear(vo
26af0 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73  id *);.Schema *s
26b00 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28  qlite3SchemaGet(
26b10 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65  sqlite3 *, Btree
26b20 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
26b30 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71  SchemaToIndex(sq
26b40 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d  lite3 *db, Schem
26b50 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  a *);.KeyInfo *s
26b60 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c  qlite3KeyInfoAll
26b70 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  oc(sqlite3*,int,
26b80 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
26b90 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b  e3KeyInfoUnref(K
26ba0 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66  eyInfo*);.KeyInf
26bb0 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
26bc0 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  oRef(KeyInfo*);.
26bd0 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
26be0 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50  KeyInfoOfIndex(P
26bf0 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a  arse*, Index*);.
26c00 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
26c10 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b  BUG.int sqlite3K
26c20 65 79 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c  eyInfoIsWriteabl
26c30 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e  e(KeyInfo*);.#en
26c40 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  dif.int sqlite3C
26c50 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65  reateFunc(sqlite
26c60 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
26c70 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69  *, int, int, voi
26c80 64 20 2a 2c 20 0a 20 20 76 6f 69 64 20 28 2a 29  d *, .  void (*)
26c90 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
26ca0 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
26cb0 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20  lue **),.  void 
26cc0 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
26cd0 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
26ce0 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64  _value **), void
26cf0 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
26d00 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65  text*),.  FuncDe
26d10 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72  structor *pDestr
26d20 75 63 74 6f 72 0a 29 3b 0a 69 6e 74 20 73 71 6c  uctor.);.int sql
26d30 69 74 65 33 41 70 69 45 78 69 74 28 73 71 6c 69  ite3ApiExit(sqli
26d40 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69  te3 *db, int);.i
26d50 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65  nt sqlite3OpenTe
26d60 6d 70 44 61 74 61 62 61 73 65 28 50 61 72 73 65  mpDatabase(Parse
26d70 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74   *);..void sqlit
26d80 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53  e3StrAccumInit(S
26d90 74 72 41 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65  trAccum*, sqlite
26da0 33 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20  3*, char*, int, 
26db0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
26dc0 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
26dd0 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74  (StrAccum*,const
26de0 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69   char*,int);.voi
26df0 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
26e00 6d 41 70 70 65 6e 64 41 6c 6c 28 53 74 72 41 63  mAppendAll(StrAc
26e10 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  cum*,const char*
26e20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
26e30 70 70 65 6e 64 43 68 61 72 28 53 74 72 41 63 63  ppendChar(StrAcc
26e40 75 6d 2a 2c 69 6e 74 2c 63 68 61 72 29 3b 0a 63  um*,int,char);.c
26e50 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41  har *sqlite3StrA
26e60 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63  ccumFinish(StrAc
26e70 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
26e80 74 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74  te3StrAccumReset
26e90 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69  (StrAccum*);.voi
26ea0 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
26eb0 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65  estInit(SelectDe
26ec0 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78  st*,int,int);.Ex
26ed0 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  pr *sqlite3Creat
26ee0 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69  eColumnExpr(sqli
26ef0 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  te3 *, SrcList *
26f00 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f  , int, int);..vo
26f10 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70  id sqlite3Backup
26f20 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f  Restart(sqlite3_
26f30 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20  backup *);.void 
26f40 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64  sqlite3BackupUpd
26f50 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  ate(sqlite3_back
26f60 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73  up *, Pgno, cons
26f70 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 64 65 66  t u8 *);..#ifdef
26f80 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
26f90 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f  TAT3_OR_STAT4.vo
26fa0 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a  id sqlite3Analyz
26fb0 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  eFunctions(void)
26fc0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61  ;.int sqlite3Sta
26fd0 74 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28  t4ProbeSetValue(
26fe0 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e  Parse*,Index*,Un
26ff0 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45  packedRecord**,E
27000 78 70 72 2a 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a  xpr*,u8,int,int*
27010 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
27020 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  at4ValueFromExpr
27030 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
27040 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  u8, sqlite3_valu
27050 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e**);.void sqlit
27060 65 33 53 74 61 74 34 50 72 6f 62 65 46 72 65 65  e3Stat4ProbeFree
27070 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a  (UnpackedRecord*
27080 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
27090 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65  at4Column(sqlite
270a0 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  3*, const void*,
270b0 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74   int, int, sqlit
270c0 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 23 65 6e  e3_value**);.#en
270d0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69  dif../*.** The i
270e0 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
270f0 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20  LEMON-generated 
27100 70 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a  parser.*/.void *
27110 73 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c  sqlite3ParserAll
27120 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75 36 34 29  oc(void*(*)(u64)
27130 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
27140 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c  arserFree(void*,
27150 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29   void(*)(void*))
27160 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
27170 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  rser(void*, int,
27180 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b   Token, Parse*);
27190 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d  .#ifdef YYTRACKM
271a0 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69  AXSTACKDEPTH.  i
271b0 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  nt sqlite3Parser
271c0 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29  StackPeak(void*)
271d0 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73  ;.#endif..void s
271e0 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78  qlite3AutoLoadEx
271f0 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33  tensions(sqlite3
27200 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
27210 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54  TE_OMIT_LOAD_EXT
27220 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ENSION.  void sq
27230 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73  lite3CloseExtens
27240 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
27250 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
27260 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
27270 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a  sions(X).#endif.
27280 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
27290 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
272a0 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  E.  void sqlite3
272b0 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20  TableLock(Parse 
272c0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c  *, int, int, u8,
272d0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
272e0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
272f0 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
27300 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64  (v,w,x,y,z).#end
27310 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
27320 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c  E_TEST.  int sql
27330 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69  ite3Utf8To8(unsi
27340 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e  gned char*);.#en
27350 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
27360 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
27370 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73  ABLE.#  define s
27380 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28  qlite3VtabClear(
27390 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  Y).#  define sql
273a0 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59  ite3VtabSync(X,Y
273b0 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64  ) SQLITE_OK.#  d
273c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
273d0 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20  bRollback(X).#  
273e0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
273f0 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64  abCommit(X).#  d
27400 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
27410 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20  bInSync(db) 0.# 
27420 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
27430 74 61 62 4c 6f 63 6b 28 58 29 20 0a 23 20 20 64  tabLock(X) .#  d
27440 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
27450 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65  bUnlock(X).#  de
27460 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
27470 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20  UnlockList(X).# 
27480 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
27490 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20  tabSavepoint(X, 
274a0 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  Y, Z) SQLITE_OK.
274b0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
274c0 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20  3GetVTable(X,Y) 
274d0 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65   ((VTable*)0).#e
274e0 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  lse.   void sqli
274f0 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c  te3VtabClear(sql
27500 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a  ite3 *db, Table*
27510 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
27520 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74  e3VtabDisconnect
27530 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61  (sqlite3 *db, Ta
27540 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20  ble *p);.   int 
27550 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28  sqlite3VtabSync(
27560 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62  sqlite3 *db, Vdb
27570 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  e*);.   int sqli
27580 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
27590 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
275a0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
275b0 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a  Commit(sqlite3 *
275c0 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  db);.   void sql
275d0 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61  ite3VtabLock(VTa
275e0 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
275f0 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
27600 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
27610 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
27620 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74  UnlockList(sqlit
27630 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  e3*);.   int sql
27640 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
27650 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  t(sqlite3 *, int
27660 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20  , int);.   void 
27670 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
27680 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73  tErrmsg(Vdbe*, s
27690 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20  qlite3_vtab*);. 
276a0 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65    VTable *sqlite
276b0 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74  3GetVTable(sqlit
276c0 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 20  e3*, Table*);.# 
276d0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
276e0 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28  tabInSync(db) ((
276f0 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26  db)->nVTrans>0 &
27700 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d  & (db)->aVTrans=
27710 3d 30 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  =0).#endif.int s
27720 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d  qlite3VtabEponym
27730 6f 75 73 54 61 62 6c 65 49 6e 69 74 28 50 61 72  ousTableInit(Par
27740 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f  se*,Module*);.vo
27750 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 45 70  id sqlite3VtabEp
27760 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65 61  onymousTableClea
27770 72 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c  r(sqlite3*,Modul
27780 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
27790 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c  3VtabMakeWritabl
277a0 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29  e(Parse*,Table*)
277b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
277c0 61 62 42 65 67 69 6e 50 61 72 73 65 28 50 61 72  abBeginParse(Par
277d0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
277e0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74  en*, Token*, int
277f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
27800 74 61 62 46 69 6e 69 73 68 50 61 72 73 65 28 50  tabFinishParse(P
27810 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
27820 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
27830 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b  ArgInit(Parse*);
27840 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
27850 62 41 72 67 45 78 74 65 6e 64 28 50 61 72 73 65  bArgExtend(Parse
27860 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
27870 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
27880 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  reate(sqlite3*, 
27890 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  int, const char 
278a0 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74  *, char **);.int
278b0 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
278c0 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20  Connect(Parse*, 
278d0 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Table*);.int sql
278e0 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74  ite3VtabCallDest
278f0 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  roy(sqlite3*, in
27900 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  t, const char *)
27910 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
27920 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a  bBegin(sqlite3 *
27930 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e  , VTable *);.Fun
27940 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61  cDef *sqlite3Vta
27950 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f  bOverloadFunctio
27960 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63  n(sqlite3 *,Func
27970 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20  Def*, int nArg, 
27980 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
27990 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74  ite3InvalidFunct
279a0 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ion(sqlite3_cont
279b0 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
279c0 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69 74  _value**);.sqlit
279d0 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33  e3_int64 sqlite3
279e0 53 74 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28  StmtCurrentTime(
279f0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
27a00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  );.int sqlite3Vd
27a10 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78  beParameterIndex
27a20 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68  (Vdbe*, const ch
27a30 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  ar*, int);.int s
27a40 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42 69  qlite3TransferBi
27a50 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73  ndings(sqlite3_s
27a60 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73  tmt *, sqlite3_s
27a70 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  tmt *);.void sql
27a80 69 74 65 33 50 61 72 73 65 72 52 65 73 65 74 28  ite3ParserReset(
27a90 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
27aa0 69 74 65 33 52 65 70 72 65 70 61 72 65 28 56 64  ite3Reprepare(Vd
27ab0 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  be*);.void sqlit
27ac0 65 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c  e3ExprListCheckL
27ad0 65 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78  ength(Parse*, Ex
27ae0 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63  prList*, const c
27af0 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  har*);.CollSeq *
27b00 73 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d  sqlite3BinaryCom
27b10 70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73  pareCollSeq(Pars
27b20 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70  e *, Expr *, Exp
27b30 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r *);.int sqlite
27b40 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f  3TempInMemory(co
27b50 6e 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63  nst sqlite3*);.c
27b60 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
27b70 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d  e3JournalModenam
27b80 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  e(int);.#ifndef 
27b90 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
27ba0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65    int sqlite3Che
27bb0 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a  ckpoint(sqlite3*
27bc0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
27bd0 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73  , int*);.  int s
27be0 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74  qlite3WalDefault
27bf0 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74  Hook(void*,sqlit
27c00 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
27c10 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  int);.#endif.#if
27c20 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
27c30 5f 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c  _CTE.  With *sql
27c40 69 74 65 33 57 69 74 68 41 64 64 28 50 61 72 73  ite3WithAdd(Pars
27c50 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c  e*,With*,Token*,
27c60 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74  ExprList*,Select
27c70 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
27c80 65 33 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c  e3WithDelete(sql
27c90 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20  ite3*,With*);.  
27ca0 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68  void sqlite3With
27cb0 50 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74  Push(Parse*, Wit
27cc0 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23  h*, u8);.#else.#
27cd0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69  define sqlite3Wi
27ce0 74 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64  thPush(x,y,z).#d
27cf0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74  efine sqlite3Wit
27d00 68 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e  hDelete(x,y).#en
27d10 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74  dif../* Declarat
27d20 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f  ions for functio
27d30 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c  ns in fkey.c. Al
27d40 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72  l of these are r
27d50 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f  eplaced by.** no
27d60 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d  -op macros if OM
27d70 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
27d80 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68  s defined. In th
27d90 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69  is case no forei
27da0 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69  gn.** key functi
27db0 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c  onality is avail
27dc0 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52  able. If OMIT_TR
27dd0 49 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64  IGGER is defined
27de0 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52   but.** OMIT_FOR
27df0 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c  EIGN_KEY is not,
27e00 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68   only some of th
27e10 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
27e20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74  no-oped. In.** t
27e30 68 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e  his case foreign
27e40 20 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64   keys are parsed
27e50 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66  , but no other f
27e60 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20  unctionality is 
27e70 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e  .** provided (en
27e80 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20  forcement of FK 
27e90 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75  constraints requ
27ea0 69 72 65 73 20 74 68 65 20 74 72 69 67 67 65 72  ires the trigger
27eb0 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a  s sub-system)..*
27ec0 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
27ed0 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
27ee0 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69  GN_KEY) && !defi
27ef0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
27f00 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20  TRIGGER).  void 
27f10 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50  sqlite3FkCheck(P
27f20 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
27f30 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
27f40 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
27f50 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50  te3FkDropTable(P
27f60 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a  arse*, SrcList *
27f70 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69  , Table*);.  voi
27f80 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f  d sqlite3FkActio
27f90 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ns(Parse*, Table
27fa0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
27fb0 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  t, int*, int);. 
27fc0 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65   int sqlite3FkRe
27fd0 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54  quired(Parse*, T
27fe0 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74  able*, int*, int
27ff0 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33  );.  u32 sqlite3
28000 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a  FkOldmask(Parse*
28010 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65  , Table*);.  FKe
28020 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65  y *sqlite3FkRefe
28030 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b  rences(Table *);
28040 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
28050 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e   sqlite3FkAction
28060 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20  s(a,b,c,d,e,f). 
28070 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
28080 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c  FkCheck(a,b,c,d,
28090 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
280a0 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c  qlite3FkDropTabl
280b0 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69  e(a,b,c).  #defi
280c0 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d  ne sqlite3FkOldm
280d0 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20  ask(a,b)        
280e0 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
280f0 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 61  ite3FkRequired(a
28100 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a 23 65 6e  ,b,c,d)    0.#en
28110 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
28120 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
28130 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  KEY.  void sqlit
28140 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74  e3FkDelete(sqlit
28150 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  e3 *, Table*);. 
28160 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f   int sqlite3FkLo
28170 63 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a  cateIndex(Parse*
28180 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e  ,Table*,FKey*,In
28190 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65  dex**,int**);.#e
281a0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
281b0 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c  lite3FkDelete(a,
281c0 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  b).  #define sql
281d0 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
281e0 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e  x(a,b,c,d,e).#en
281f0 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69  dif.../*.** Avai
28200 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65  lable fault inje
28210 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62  ctors.  Should b
28220 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e  e numbered begin
28230 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a  ning with 0..*/.
28240 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
28250 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c  AULTINJECTOR_MAL
28260 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e  LOC     0.#defin
28270 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e  e SQLITE_FAULTIN
28280 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20  JECTOR_COUNT    
28290 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69    1../*.** The i
282a0 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
282b0 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20  code in fault.c 
282c0 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66  used for identif
282d0 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a  ying "benign".**
282e0 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73   malloc failures
282f0 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70  . This is only p
28300 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45  resent if SQLITE
28310 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
28320 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66  ST.** is not def
28330 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ined..*/.#ifndef
28340 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
28350 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f 69 64  LTIN_TEST.  void
28360 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
28370 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ignMalloc(void);
28380 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
28390 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76  ndBenignMalloc(v
283a0 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  oid);.#else.  #d
283b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67  efine sqlite3Beg
283c0 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  inBenignMalloc()
283d0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
283e0 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
283f0 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  c().#endif../*.*
28400 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e  * Allowed return
28410 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c   values from sql
28420 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
28430 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  ).*/.#define IN_
28440 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20  INDEX_ROWID     
28450 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72 63 68     1   /* Search
28460 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
28470 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  e table */.#defi
28480 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20  ne IN_INDEX_EPH 
28490 20 20 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20           2   /* 
284a0 53 65 61 72 63 68 20 61 6e 20 65 70 68 65 6d 65  Search an epheme
284b0 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64  ral b-tree */.#d
284c0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49  efine IN_INDEX_I
284d0 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20 20 20  NDEX_ASC    3   
284e0 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65  /* Existing inde
284f0 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23  x ASCENDING */.#
28500 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
28510 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34 20 20  INDEX_DESC   4  
28520 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64   /* Existing ind
28530 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f  ex DESCENDING */
28540 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
28550 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20 20 35  X_NOOP         5
28560 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61     /* No table a
28570 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f  vailable. Use co
28580 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a  mparisons */./*.
28590 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73  ** Allowed flags
285a0 20 66 6f 72 20 74 68 65 20 33 72 64 20 70 61 72   for the 3rd par
285b0 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
285c0 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a  3FindInIndex()..
285d0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
285e0 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20  DEX_NOOP_OK     
285f0 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f  0x0001  /* OK to
28600 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58   return IN_INDEX
28610 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65  _NOOP */.#define
28620 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52   IN_INDEX_MEMBER
28630 53 48 49 50 20 20 30 78 30 30 30 32 20 20 2f 2a  SHIP  0x0002  /*
28640 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65   IN operator use
28650 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68 69 70  d for membership
28660 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65   test */.#define
28670 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20   IN_INDEX_LOOP  
28680 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
28690 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65   IN operator use
286a0 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69  d as a loop */.i
286b0 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  nt sqlite3FindIn
286c0 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45  Index(Parse *, E
286d0 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a  xpr *, u32, int*
286e0 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
286f0 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f  E_ENABLE_ATOMIC_
28700 57 52 49 54 45 0a 20 20 69 6e 74 20 73 71 6c 69  WRITE.  int sqli
28710 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  te3JournalOpen(s
28720 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f  qlite3_vfs *, co
28730 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69  nst char *, sqli
28740 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c  te3_file *, int,
28750 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c   int);.  int sql
28760 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28  ite3JournalSize(
28770 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a  sqlite3_vfs *);.
28780 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
28790 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74  rnalCreate(sqlit
287a0 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 20 20 69 6e  e3_file *);.  in
287b0 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
287c0 45 78 69 73 74 73 28 73 71 6c 69 74 65 33 5f 66  Exists(sqlite3_f
287d0 69 6c 65 20 2a 70 29 3b 0a 23 65 6c 73 65 0a 20  ile *p);.#else. 
287e0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
287f0 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 70 56 66 73  JournalSize(pVfs
28800 29 20 28 28 70 56 66 73 29 2d 3e 73 7a 4f 73 46  ) ((pVfs)->szOsF
28810 69 6c 65 29 0a 20 20 23 64 65 66 69 6e 65 20 73  ile).  #define s
28820 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69  qlite3JournalExi
28830 73 74 73 28 70 29 20 31 0a 23 65 6e 64 69 66 0a  sts(p) 1.#endif.
28840 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d  .void sqlite3Mem
28850 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69  JournalOpen(sqli
28860 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e 74  te3_file *);.int
28870 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e   sqlite3MemJourn
28880 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b 0a 69 6e  alSize(void);.in
28890 74 20 73 71 6c 69 74 65 33 49 73 4d 65 6d 4a 6f  t sqlite3IsMemJo
288a0 75 72 6e 61 6c 28 73 71 6c 69 74 65 33 5f 66 69  urnal(sqlite3_fi
288b0 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  le *);..void sql
288c0 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68  ite3ExprSetHeigh
288d0 74 41 6e 64 46 6c 61 67 73 28 50 61 72 73 65 20  tAndFlags(Parse 
288e0 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
288f0 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  );.#if SQLITE_MA
28900 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20  X_EXPR_DEPTH>0. 
28910 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65   int sqlite3Sele
28920 63 74 45 78 70 72 48 65 69 67 68 74 28 53 65 6c  ctExprHeight(Sel
28930 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  ect *);.  int sq
28940 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65  lite3ExprCheckHe
28950 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  ight(Parse*, int
28960 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
28970 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  ne sqlite3Select
28980 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30 0a  ExprHeight(x) 0.
28990 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
289a0 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74  3ExprCheckHeight
289b0 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33  (x,y).#endif..u3
289c0 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79 74  2 sqlite3Get4byt
289d0 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f  e(const u8*);.vo
289e0 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62 79  id sqlite3Put4by
289f0 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23  te(u8*, u32);..#
28a00 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
28a10 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
28a20 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  Y.  void sqlite3
28a30 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65  ConnectionBlocke
28a40 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c  d(sqlite3 *, sql
28a50 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20  ite3 *);.  void 
28a60 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
28a70 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65  nUnlocked(sqlite
28a80 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73  3 *db);.  void s
28a90 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
28aa0 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a  Closed(sqlite3 *
28ab0 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  db);.#else.  #de
28ac0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
28ad0 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c  ectionBlocked(x,
28ae0 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  y).  #define sql
28af0 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e  ite3ConnectionUn
28b00 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66  locked(x).  #def
28b10 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
28b20 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23  ctionClosed(x).#
28b30 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
28b40 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69  LITE_DEBUG.  voi
28b50 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54  d sqlite3ParserT
28b60 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72  race(FILE*, char
28b70 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a   *);.#endif../*.
28b80 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  ** If the SQLITE
28b90 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45 20  _ENABLE IOTRACE 
28ba0 65 78 69 73 74 73 20 74 68 65 6e 20 74 68 65 20  exists then the 
28bb0 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0a  global variable.
28bc0 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  ** sqlite3IoTrac
28bd0 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  e is a pointer t
28be0 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20  o a printf-like 
28bf0 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f 0a  routine used to.
28c00 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72 61  ** print I/O tra
28c10 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 20 0a  cing messages. .
28c20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
28c30 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a  _ENABLE_IOTRACE.
28c40 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45  # define IOTRACE
28c50 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65 33  (A)  if( sqlite3
28c60 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69 74  IoTrace ){ sqlit
28c70 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20  e3IoTrace A; }. 
28c80 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62   void sqlite3Vdb
28c90 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65  eIOTraceSql(Vdbe
28ca0 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49 20 53  *);.SQLITE_API S
28cb0 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f 69  QLITE_EXTERN voi
28cc0 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43 4c 20  d (SQLITE_CDECL 
28cd0 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29  *sqlite3IoTrace)
28ce0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e  (const char*,...
28cf0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
28d00 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64  e IOTRACE(A).# d
28d10 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62  efine sqlite3Vdb
28d20 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23  eIOTraceSql(X).#
28d30 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
28d40 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20  se routines are 
28d50 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68  available for th
28d60 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69  e mem2.c debuggi
28d70 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ng memory alloca
28d80 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68  tor.** only.  Th
28d90 65 79 20 61 72 65 20 75 73 65 64 20 74 6f 20 76  ey are used to v
28da0 65 72 69 66 79 20 74 68 61 74 20 64 69 66 66 65  erify that diffe
28db0 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20  rent "types" of 
28dc0 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61  memory.** alloca
28dd0 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72  tions are proper
28de0 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20 74 68  ly tracked by th
28df0 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20  e system..**.** 
28e00 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
28e10 65 74 54 79 70 65 28 29 20 73 65 74 73 20 74 68  etType() sets th
28e20 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61  e "type" of an a
28e30 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65  llocation to one
28e40 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59   of.** the MEMTY
28e50 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  PE_* macros defi
28e60 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20  ned below.  The 
28e70 74 79 70 65 20 6d 75 73 74 20 62 65 20 61 20 62  type must be a b
28e80 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61  itmask with.** a
28e90 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e   single bit set.
28ea0 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
28eb0 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20  mdebugHasType() 
28ec0 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20  returns true if 
28ed0 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73 20  any of the bits 
28ee0 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
28ef0 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
28f00 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
28f10 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
28f20 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
28f30 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65  ype()..** sqlite
28f40 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
28f50 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66  () is intended f
28f60 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 61 73  or use inside as
28f70 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
28f80 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  s..**.** sqlite3
28f90 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29  MemdebugNoType()
28fa0 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
28fb0 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74   none of the bit
28fc0 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
28fd0 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
28fe0 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
28ff0 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
29000 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
29010 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50  tType()..**.** P
29020 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20  erhaps the most 
29030 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20  important point 
29040 69 73 20 74 68 65 20 64 69 66 66 65 72 65 6e 63  is the differenc
29050 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50  e between MEMTYP
29060 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45  E_HEAP.** and ME
29070 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e  MTYPE_LOOKASIDE.
29080 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69    If an allocati
29090 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f  on is MEMTYPE_LO
290a0 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65  OKASIDE, that me
290b0 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20  ans.** it might 
290c0 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61  have been alloca
290d0 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ted by lookaside
290e0 2c 20 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c  , except the all
290f0 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74  ocation was.** t
29100 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b  oo large or look
29110 61 73 69 64 65 20 77 61 73 20 61 6c 72 65 61 64  aside was alread
29120 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69  y full.  It is i
29130 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69  mportant to veri
29140 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63  fy.** that alloc
29150 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68  ations that migh
29160 74 20 68 61 76 65 20 62 65 65 6e 20 73 61 74 69  t have been sati
29170 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  sfied by lookasi
29180 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61  de are not.** pa
29190 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e  ssed back to non
291a0 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
291b0 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73  ) routines.  Ass
291c0 65 72 74 73 20 73 75 63 68 20 61 73 20 74 68 65  erts such as the
291d0 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76  .** example abov
291e0 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20  e are placed on 
291f0 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64  the non-lookasid
29200 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65  e free() routine
29210 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  s to verify.** t
29220 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20  his constraint. 
29230 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68  .**.** All of th
29240 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20  is is no-op for 
29250 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69  a production bui
29260 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d  ld.  It only com
29270 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20  es into.** play 
29280 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  when the SQLITE_
29290 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65  MEMDEBUG compile
292a0 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is 
292b0 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  used..*/.#ifdef 
292c0 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a  SQLITE_MEMDEBUG.
292d0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65    void sqlite3Me
292e0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76 6f  mdebugSetType(vo
292f0 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73  id*,u8);.  int s
29300 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
29310 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  sType(void*,u8);
29320 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  .  int sqlite3Me
29330 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69  mdebugNoType(voi
29340 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20  d*,u8);.#else.# 
29350 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
29360 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58 2c  mdebugSetType(X,
29370 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a  Y)  /* no-op */.
29380 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
29390 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
293a0 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65  X,Y)  1.# define
293b0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
293c0 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a  NoType(X,Y)   1.
293d0 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d  #endif.#define M
293e0 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20 20  EMTYPE_HEAP     
293f0 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72    0x01  /* Gener
29400 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69  al heap allocati
29410 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ons */.#define M
29420 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
29430 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70 20    0x02  /* Heap 
29440 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20  that might have 
29450 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a  been lookaside *
29460 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
29470 45 5f 53 43 52 41 54 43 48 20 20 20 20 30 78 30  E_SCRATCH    0x0
29480 34 20 20 2f 2a 20 53 63 72 61 74 63 68 20 61 6c  4  /* Scratch al
29490 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  locations */.#de
294a0 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41  fine MEMTYPE_PCA
294b0 43 48 45 20 20 20 20 20 30 78 30 38 20 20 2f 2a  CHE     0x08  /*
294c0 20 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f   Page cache allo
294d0 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a  cations */../*.*
294e0 2a 20 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65  * Threading inte
294f0 72 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c  rface.*/.#if SQL
29500 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
29510 48 52 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c  HREADS>0.int sql
29520 69 74 65 33 54 68 72 65 61 64 43 72 65 61 74 65  ite3ThreadCreate
29530 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c  (SQLiteThread**,
29540 76 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c  void*(*)(void*),
29550 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
29560 74 65 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51  te3ThreadJoin(SQ
29570 4c 69 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69  LiteThread*, voi
29580 64 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  d**);.#endif..#i
29590 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
295a0 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f 56  _ENABLE_DBSTAT_V
295b0 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  TAB) || defined(
295c0 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74  SQLITE_TEST).int
295d0 20 73 71 6c 69 74 65 33 44 62 73 74 61 74 52 65   sqlite3DbstatRe
295e0 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29  gister(sqlite3*)
295f0 3b 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66  ;.#endif..#endif
29600 20 2f 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48   /* _SQLITEINT_H
29610 5f 20 2a 2f 0a                                   _ */.