/ Hex Artifact Content
Login

Artifact c622684344dd0f008ba5198342426aacec36d9f2:


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 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72 69   Needed for vari
08c0: 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e  ous definitions.
08d0: 2e 2e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  .. */.#if define
08e0: 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21  d(__GNUC__) && !
08f0: 64 65 66 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55  defined(_GNU_SOU
0900: 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 47  RCE).# define _G
0910: 4e 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66  NU_SOURCE.#endif
0920: 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  ..#if defined(__
0930: 4f 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21 64  OpenBSD__) && !d
0940: 65 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52  efined(_BSD_SOUR
0950: 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42 53  CE).# define _BS
0960: 44 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a  D_SOURCE.#endif.
0970: 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57  ./*.** For MinGW
0980: 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20 69  , check to see i
0990: 66 20 77 65 20 63 61 6e 20 69 6e 63 6c 75 64 65  f we can include
09a0: 20 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65   the header file
09b0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a   containing its.
09c0: 2a 2a 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72  ** version infor
09d0: 6d 61 74 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74  mation, among ot
09e0: 68 65 72 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72  her things.  Nor
09f0: 6d 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 74 65  mally, this inte
0a00: 72 6e 61 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65  rnal MinGW.** he
0a10: 61 64 65 72 20 66 69 6c 65 20 77 6f 75 6c 64 20  ader file would 
0a20: 5b 6f 6e 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64  [only] be includ
0a30: 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
0a40: 20 62 79 20 6f 74 68 65 72 20 4d 69 6e 47 57 20   by other MinGW 
0a50: 68 65 61 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b  header.** files;
0a60: 20 68 6f 77 65 76 65 72 2c 20 74 68 65 20 63 6f   however, the co
0a70: 6e 74 61 69 6e 65 64 20 76 65 72 73 69 6f 6e 20  ntained version 
0a80: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e  information is n
0a90: 6f 77 20 72 65 71 75 69 72 65 64 20 62 79 20 74  ow required by t
0aa0: 68 69 73 0a 2a 2a 20 68 65 61 64 65 72 20 66 69  his.** header fi
0ab0: 6c 65 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e  le to work aroun
0ac0: 64 20 62 69 6e 61 72 79 20 63 6f 6d 70 61 74 69  d binary compati
0ad0: 62 69 6c 69 74 79 20 69 73 73 75 65 73 20 28 73  bility issues (s
0ae0: 65 65 20 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a  ee below) and.**
0af0: 20 74 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c   this is the onl
0b00: 79 20 6b 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72  y known way to r
0b10: 65 6c 69 61 62 6c 79 20 6f 62 74 61 69 6e 20 69  eliably obtain i
0b20: 74 2e 20 20 54 68 69 73 20 65 6e 74 69 72 65 20  t.  This entire 
0b30: 23 69 66 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75  #if block.** wou
0b40: 6c 64 20 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79  ld be completely
0b50: 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69 66 20   unnecessary if 
0b60: 74 68 65 72 65 20 77 61 73 20 61 6e 79 20 6f 74  there was any ot
0b70: 68 65 72 20 77 61 79 20 6f 66 20 64 65 74 65 63  her way of detec
0b80: 74 69 6e 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69  ting.** MinGW vi
0b90: 61 20 74 68 65 69 72 20 70 72 65 70 72 6f 63 65  a their preproce
0ba0: 73 73 6f 72 20 28 65 2e 67 2e 20 69 66 20 74 68  ssor (e.g. if th
0bb0: 65 79 20 63 75 73 74 6f 6d 69 7a 65 64 20 74 68  ey customized th
0bc0: 65 69 72 20 47 43 43 20 74 6f 20 64 65 66 69 6e  eir GCC to defin
0bd0: 65 0a 2a 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d  e.** some MinGW-
0be0: 73 70 65 63 69 66 69 63 20 6d 61 63 72 6f 73 29  specific macros)
0bf0: 2e 20 20 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e  .  When compilin
0c00: 67 20 66 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74  g for MinGW, eit
0c10: 68 65 72 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45  her the.** _HAVE
0c20: 5f 4d 49 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56  _MINGW_H or _HAV
0c30: 45 5f 5f 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65  E__MINGW_H (note
0c40: 20 74 68 65 20 65 78 74 72 61 20 75 6e 64 65 72   the extra under
0c50: 73 63 6f 72 65 29 20 6d 61 63 72 6f 20 6d 75 73  score) macro mus
0c60: 74 20 62 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b  t be.** defined;
0c70: 20 6f 74 68 65 72 77 69 73 65 2c 20 64 65 74 65   otherwise, dete
0c80: 63 74 69 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69  ction of conditi
0c90: 6f 6e 73 20 73 70 65 63 69 66 69 63 20 74 6f 20  ons specific to 
0ca0: 4d 69 6e 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a  MinGW will be.**
0cb0: 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69   disabled..*/.#i
0cc0: 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f  f defined(_HAVE_
0cd0: 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75  MINGW_H).# inclu
0ce0: 64 65 20 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c  de "mingw.h".#el
0cf0: 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56 45  if defined(_HAVE
0d00: 5f 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63  __MINGW_H).# inc
0d10: 6c 75 64 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a  lude "_mingw.h".
0d20: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f  #endif../*.** Fo
0d30: 72 20 4d 69 6e 47 57 20 76 65 72 73 69 6f 6e 20  r MinGW version 
0d40: 34 2e 78 20 28 61 6e 64 20 68 69 67 68 65 72 29  4.x (and higher)
0d50: 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20 69  , check to see i
0d60: 66 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54  f the _USE_32BIT
0d70: 5f 54 49 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e  _TIME_T.** defin
0d80: 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f  e is required to
0d90: 20 6d 61 69 6e 74 61 69 6e 20 62 69 6e 61 72 79   maintain binary
0da0: 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77   compatibility w
0db0: 69 74 68 20 74 68 65 20 4d 53 56 43 20 72 75 6e  ith the MSVC run
0dc0: 74 69 6d 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20  time.** library 
0dd0: 69 6e 20 75 73 65 20 28 65 2e 67 2e 20 66 6f 72  in use (e.g. for
0de0: 20 57 69 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f   Windows XP)..*/
0df0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 55  .#if !defined(_U
0e00: 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54 29  SE_32BIT_TIME_T)
0e10: 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 55 53   && !defined(_US
0e20: 45 5f 36 34 42 49 54 5f 54 49 4d 45 5f 54 29 20  E_64BIT_TIME_T) 
0e30: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
0e40: 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65 66  (_WIN32) && !def
0e50: 69 6e 65 64 28 5f 57 49 4e 36 34 29 20 26 26 20  ined(_WIN64) && 
0e60: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f  \.    defined(__
0e70: 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53  MINGW_MAJOR_VERS
0e80: 49 4f 4e 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f  ION) && __MINGW_
0e90: 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d  MAJOR_VERSION >=
0ea0: 20 34 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69   4 && \.    defi
0eb0: 6e 65 64 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a  ned(__MSVCRT__).
0ec0: 23 20 64 65 66 69 6e 65 20 5f 55 53 45 5f 33 32  # define _USE_32
0ed0: 42 49 54 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69  BIT_TIME_T.#endi
0ee0: 66 0a 0a 2f 2a 20 54 68 65 20 70 75 62 6c 69 63  f../* The public
0ef0: 20 53 51 4c 69 74 65 20 69 6e 74 65 72 66 61 63   SQLite interfac
0f00: 65 2e 20 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46  e.  The _FILE_OF
0f10: 46 53 45 54 5f 42 49 54 53 20 6d 61 63 72 6f 20  FSET_BITS macro 
0f20: 6d 75 73 74 20 61 70 70 65 61 72 0a 2a 2a 20 66  must appear.** f
0f30: 69 72 73 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c  irst in QNX.  Al
0f40: 73 6f 2c 20 74 68 65 20 5f 55 53 45 5f 33 32 42  so, the _USE_32B
0f50: 49 54 5f 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20  IT_TIME_T macro 
0f60: 6d 75 73 74 20 61 70 70 65 61 72 20 66 69 72 73  must appear firs
0f70: 74 20 66 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a  t for.** MinGW..
0f80: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c  */.#include "sql
0f90: 69 74 65 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49  ite3.h"../*.** I
0fa0: 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e 66 69  nclude the confi
0fb0: 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65 72 20  guration header 
0fc0: 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e 66 69  output by 'confi
0fd0: 67 75 72 65 27 20 69 66 20 77 65 27 72 65 20 75  gure' if we're u
0fe0: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f  sing the.** auto
0ff0: 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69 6c 64  conf-based build
1000: 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 48 41 56 45  .*/.#ifdef _HAVE
1010: 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48  _SQLITE_CONFIG_H
1020: 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69  .#include "confi
1030: 67 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 23 69 6e  g.h".#endif..#in
1040: 63 6c 75 64 65 20 22 73 71 6c 69 74 65 4c 69 6d  clude "sqliteLim
1050: 69 74 2e 68 22 0a 0a 2f 2a 20 44 69 73 61 62 6c  it.h"../* Disabl
1060: 65 20 6e 75 69 73 61 6e 63 65 20 77 61 72 6e 69  e nuisance warni
1070: 6e 67 73 20 6f 6e 20 42 6f 72 6c 61 6e 64 20 63  ngs on Borland c
1080: 6f 6d 70 69 6c 65 72 73 20 2a 2f 0a 23 69 66 20  ompilers */.#if 
1090: 64 65 66 69 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e  defined(__BORLAN
10a0: 44 43 5f 5f 29 0a 23 70 72 61 67 6d 61 20 77 61  DC__).#pragma wa
10b0: 72 6e 20 2d 72 63 68 20 2f 2a 20 75 6e 72 65 61  rn -rch /* unrea
10c0: 63 68 61 62 6c 65 20 63 6f 64 65 20 2a 2f 0a 23  chable code */.#
10d0: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 63 63  pragma warn -ccc
10e0: 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 20 69 73   /* Condition is
10f0: 20 61 6c 77 61 79 73 20 74 72 75 65 20 6f 72 20   always true or 
1100: 66 61 6c 73 65 20 2a 2f 0a 23 70 72 61 67 6d 61  false */.#pragma
1110: 20 77 61 72 6e 20 2d 61 75 73 20 2f 2a 20 41 73   warn -aus /* As
1120: 73 69 67 6e 65 64 20 76 61 6c 75 65 20 69 73 20  signed value is 
1130: 6e 65 76 65 72 20 75 73 65 64 20 2a 2f 0a 23 70  never used */.#p
1140: 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 73 75 20  ragma warn -csu 
1150: 2f 2a 20 43 6f 6d 70 61 72 69 6e 67 20 73 69 67  /* Comparing sig
1160: 6e 65 64 20 61 6e 64 20 75 6e 73 69 67 6e 65 64  ned and unsigned
1170: 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72 6e   */.#pragma warn
1180: 20 2d 73 70 61 20 2f 2a 20 53 75 73 70 69 63 69   -spa /* Suspici
1190: 6f 75 73 20 70 6f 69 6e 74 65 72 20 61 72 69 74  ous pointer arit
11a0: 68 6d 65 74 69 63 20 2a 2f 0a 23 65 6e 64 69 66  hmetic */.#endif
11b0: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
11c0: 73 74 61 6e 64 61 72 64 20 68 65 61 64 65 72 20  standard header 
11d0: 66 69 6c 65 73 20 61 73 20 6e 65 63 65 73 73 61  files as necessa
11e0: 72 79 0a 2a 2f 0a 23 69 66 64 65 66 20 48 41 56  ry.*/.#ifdef HAV
11f0: 45 5f 53 54 44 49 4e 54 5f 48 0a 23 69 6e 63 6c  E_STDINT_H.#incl
1200: 75 64 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a 23  ude <stdint.h>.#
1210: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41 56  endif.#ifdef HAV
1220: 45 5f 49 4e 54 54 59 50 45 53 5f 48 0a 23 69 6e  E_INTTYPES_H.#in
1230: 63 6c 75 64 65 20 3c 69 6e 74 74 79 70 65 73 2e  clude <inttypes.
1240: 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  h>.#endif../*.**
1250: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
1260: 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20 74  acros are used t
1270: 6f 20 63 61 73 74 20 70 6f 69 6e 74 65 72 73 20  o cast pointers 
1280: 74 6f 20 69 6e 74 65 67 65 72 73 20 61 6e 64 0a  to integers and.
1290: 2a 2a 20 69 6e 74 65 67 65 72 73 20 74 6f 20 70  ** integers to p
12a0: 6f 69 6e 74 65 72 73 2e 20 20 54 68 65 20 77 61  ointers.  The wa
12b0: 79 20 79 6f 75 20 64 6f 20 74 68 69 73 20 76 61  y you do this va
12c0: 72 69 65 73 20 66 72 6f 6d 20 6f 6e 65 20 63 6f  ries from one co
12d0: 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 74 68 65  mpiler.** to the
12e0: 20 6e 65 78 74 2c 20 73 6f 20 77 65 20 68 61 76   next, so we hav
12f0: 65 20 64 65 76 65 6c 6f 70 65 64 20 74 68 65 20  e developed the 
1300: 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 74 20 6f 66  following set of
1310: 20 23 69 66 20 73 74 61 74 65 6d 65 6e 74 73 0a   #if statements.
1320: 2a 2a 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ** to generate a
1330: 70 70 72 6f 70 72 69 61 74 65 20 6d 61 63 72 6f  ppropriate macro
1340: 73 20 66 6f 72 20 61 20 77 69 64 65 20 72 61 6e  s for a wide ran
1350: 67 65 20 6f 66 20 63 6f 6d 70 69 6c 65 72 73 2e  ge of compilers.
1360: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 72 72 65  .**.** The corre
1370: 63 74 20 22 41 4e 53 49 22 20 77 61 79 20 74 6f  ct "ANSI" way to
1380: 20 64 6f 20 74 68 69 73 20 69 73 20 74 6f 20 75   do this is to u
1390: 73 65 20 74 68 65 20 69 6e 74 70 74 72 5f 74 20  se the intptr_t 
13a0: 74 79 70 65 2e 20 0a 2a 2a 20 55 6e 66 6f 72 74  type. .** Unfort
13b0: 75 6e 61 74 65 6c 79 2c 20 74 68 61 74 20 74 79  unately, that ty
13c0: 70 65 64 65 66 20 69 73 20 6e 6f 74 20 61 76 61  pedef is not ava
13d0: 69 6c 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f  ilable on all co
13e0: 6d 70 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69  mpilers, or.** i
13f0: 66 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c  f it is availabl
1400: 65 2c 20 69 74 20 72 65 71 75 69 72 65 73 20 61  e, it requires a
1410: 6e 20 23 69 6e 63 6c 75 64 65 20 6f 66 20 73 70  n #include of sp
1420: 65 63 69 66 69 63 20 68 65 61 64 65 72 73 0a 2a  ecific headers.*
1430: 2a 20 74 68 61 74 20 76 61 72 79 20 66 72 6f 6d  * that vary from
1440: 20 6f 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f 20   one machine to 
1450: 74 68 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  the next..**.** 
1460: 54 69 63 6b 65 74 20 23 33 38 36 30 3a 20 20 54  Ticket #3860:  T
1470: 68 65 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20  he llvm-gcc-4.2 
1480: 63 6f 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41 70  compiler from Ap
1490: 70 6c 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a  ple chokes on.**
14a0: 20 74 68 65 20 28 28 76 6f 69 64 2a 29 26 28 28   the ((void*)&((
14b0: 63 68 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e  char*)0)[X]) con
14c0: 73 74 72 75 63 74 2e 20 20 42 75 74 20 4d 53 56  struct.  But MSV
14d0: 43 20 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f  C chokes on ((vo
14e0: 69 64 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20  id*)(X))..** So 
14f0: 77 65 20 68 61 76 65 20 74 6f 20 64 65 66 69 6e  we have to defin
1500: 65 20 74 68 65 20 6d 61 63 72 6f 73 20 69 6e 20  e the macros in 
1510: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 64  different ways d
1520: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a  epending on the.
1530: 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a  ** compiler..*/.
1540: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 50 54  #if defined(__PT
1550: 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f  RDIFF_TYPE__)  /
1560: 2a 20 54 68 69 73 20 63 61 73 65 20 73 68 6f 75  * This case shou
1570: 6c 64 20 77 6f 72 6b 20 66 6f 72 20 47 43 43 20  ld work for GCC 
1580: 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  */.# define SQLI
1590: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29  TE_INT_TO_PTR(X)
15a0: 20 20 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52    ((void*)(__PTR
15b0: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
15c0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
15d0: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
15e0: 28 28 69 6e 74 29 28 5f 5f 50 54 52 44 49 46 46  ((int)(__PTRDIFF
15f0: 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c  _TYPE__)(X)).#el
1600: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e  if !defined(__GN
1610: 55 43 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20 57  UC__)       /* W
1620: 6f 72 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65  orks for compile
1630: 72 73 20 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c  rs other than LL
1640: 56 4d 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53  VM */.# define S
1650: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
1660: 28 58 29 20 20 28 28 76 6f 69 64 2a 29 26 28 28  (X)  ((void*)&((
1670: 63 68 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64  char*)0)[X]).# d
1680: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
1690: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
16a0: 74 29 28 28 28 63 68 61 72 2a 29 58 29 2d 28 63  t)(((char*)X)-(c
16b0: 68 61 72 2a 29 30 29 29 0a 23 65 6c 69 66 20 64  har*)0)).#elif d
16c0: 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49  efined(HAVE_STDI
16d0: 4e 54 5f 48 29 20 20 20 2f 2a 20 55 73 65 20 74  NT_H)   /* Use t
16e0: 68 69 73 20 63 61 73 65 20 69 66 20 77 65 20 68  his case if we h
16f0: 61 76 65 20 41 4e 53 49 20 68 65 61 64 65 72 73  ave ANSI headers
1700: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
1710: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
1720: 29 20 20 28 28 76 6f 69 64 2a 29 28 69 6e 74 70  )  ((void*)(intp
1730: 74 72 5f 74 29 28 58 29 29 0a 23 20 64 65 66 69  tr_t)(X)).# defi
1740: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
1750: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
1760: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 65  intptr_t)(X)).#e
1770: 6c 73 65 20 20 20 20 20 20 20 20 20 20 20 20 20  lse             
1780: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1790: 47 65 6e 65 72 61 74 65 73 20 61 20 77 61 72 6e  Generates a warn
17a0: 69 6e 67 20 2d 20 62 75 74 20 69 74 20 61 6c 77  ing - but it alw
17b0: 61 79 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64  ays works */.# d
17c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
17d0: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
17e0: 69 64 2a 29 28 58 29 29 0a 23 20 64 65 66 69 6e  id*)(X)).# defin
17f0: 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f  e SQLITE_PTR_TO_
1800: 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 58  INT(X)  ((int)(X
1810: 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  )).#endif../*.**
1820: 20 41 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e 74   A macro to hint
1830: 20 74 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   to the compiler
1840: 20 74 68 61 74 20 61 20 66 75 6e 63 74 69 6f 6e   that a function
1850: 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a   should not be.*
1860: 2a 20 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23 69  * inlined..*/.#i
1870: 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43  f defined(__GNUC
1880: 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 53 51  __).#  define SQ
1890: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f  LITE_NOINLINE  _
18a0: 5f 61 74 74 72 69 62 75 74 65 5f 5f 28 28 6e 6f  _attribute__((no
18b0: 69 6e 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20 64  inline)).#elif d
18c0: 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29  efined(_MSC_VER)
18d0: 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33   && _MSC_VER>=13
18e0: 31 30 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c  10.#  define SQL
18f0: 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f  ITE_NOINLINE  __
1900: 64 65 63 6c 73 70 65 63 28 6e 6f 69 6e 6c 69 6e  declspec(noinlin
1910: 65 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  e).#else.#  defi
1920: 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49  ne SQLITE_NOINLI
1930: 4e 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  NE.#endif../*.**
1940: 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48 52 45   The SQLITE_THRE
1950: 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d 75 73  ADSAFE macro mus
1960: 74 20 62 65 20 64 65 66 69 6e 65 64 20 61 73 20  t be defined as 
1970: 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a 20 30  0, 1, or 2..** 0
1980: 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73 20 61   means mutexes a
1990: 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64  re permanently d
19a0: 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65 20 6c  isable and the l
19b0: 69 62 72 61 72 79 20 69 73 20 6e 65 76 65 72 0a  ibrary is never.
19c0: 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e 20 20  ** threadsafe.  
19d0: 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72  1 means the libr
19e0: 61 72 79 20 69 73 20 73 65 72 69 61 6c 69 7a 65  ary is serialize
19f0: 64 20 77 68 69 63 68 20 69 73 20 74 68 65 20 68  d which is the h
1a00: 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65 6c 20  ighest.** level 
1a10: 6f 66 20 74 68 72 65 61 64 73 61 66 65 74 79 2e  of threadsafety.
1a20: 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    2 means the li
1a30: 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69 74 68  brary is multith
1a40: 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69 70 6c  readed - multipl
1a50: 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63 61 6e  e.** threads can
1a60: 20 75 73 65 20 53 51 4c 69 74 65 20 61 73 20 6c   use SQLite as l
1a70: 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20 74 68  ong as no two th
1a80: 72 65 61 64 73 20 74 72 79 20 74 6f 20 75 73 65  reads try to use
1a90: 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64 61 74   the same.** dat
1aa0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
1ab0: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
1ac0: 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72 20 76  e..**.** Older v
1ad0: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
1ae0: 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69 6f 6e  e used an option
1af0: 61 6c 20 54 48 52 45 41 44 53 41 46 45 20 6d 61  al THREADSAFE ma
1b00: 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70 70 6f  cro..** We suppo
1b10: 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65 67 61  rt that for lega
1b20: 63 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  cy..*/.#if !defi
1b30: 6e 65 64 28 53 51 4c 49 54 45 5f 54 48 52 45 41  ned(SQLITE_THREA
1b40: 44 53 41 46 45 29 0a 23 20 69 66 20 64 65 66 69  DSAFE).# if defi
1b50: 6e 65 64 28 54 48 52 45 41 44 53 41 46 45 29 0a  ned(THREADSAFE).
1b60: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
1b70: 45 5f 54 48 52 45 41 44 53 41 46 45 20 54 48 52  E_THREADSAFE THR
1b80: 45 41 44 53 41 46 45 0a 23 20 65 6c 73 65 0a 23  EADSAFE.# else.#
1b90: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
1ba0: 5f 54 48 52 45 41 44 53 41 46 45 20 31 20 2f 2a  _THREADSAFE 1 /*
1bb0: 20 49 4d 50 3a 20 52 2d 30 37 32 37 32 2d 32 32   IMP: R-07272-22
1bc0: 33 30 39 20 2a 2f 0a 23 20 65 6e 64 69 66 0a 23  309 */.# endif.#
1bd0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77  endif../*.** Pow
1be0: 65 72 73 61 66 65 20 6f 76 65 72 77 72 69 74 65  ersafe overwrite
1bf0: 20 69 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c   is on by defaul
1c00: 74 2e 20 20 42 75 74 20 63 61 6e 20 62 65 20 74  t.  But can be t
1c10: 75 72 6e 65 64 20 6f 66 66 20 75 73 69 6e 67 0a  urned off using.
1c20: 2a 2a 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f  ** the -DSQLITE_
1c30: 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52  POWERSAFE_OVERWR
1c40: 49 54 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69  ITE=0 command-li
1c50: 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69  ne option..*/.#i
1c60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 50 4f 57  fndef SQLITE_POW
1c70: 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45  ERSAFE_OVERWRITE
1c80: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1c90: 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57  _POWERSAFE_OVERW
1ca0: 52 49 54 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  RITE 1.#endif../
1cb0: 2a 0a 2a 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46  *.** EVIDENCE-OF
1cc0: 3a 20 52 2d 32 35 37 31 35 2d 33 37 30 37 32 20  : R-25715-37072 
1cd0: 4d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  Memory allocatio
1ce0: 6e 20 73 74 61 74 69 73 74 69 63 73 20 61 72 65  n statistics are
1cf0: 20 65 6e 61 62 6c 65 64 20 62 79 0a 2a 2a 20 64   enabled by.** d
1d00: 65 66 61 75 6c 74 20 75 6e 6c 65 73 73 20 53 51  efault unless SQ
1d10: 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64  Lite is compiled
1d20: 20 77 69 74 68 20 53 51 4c 49 54 45 5f 44 45 46   with SQLITE_DEF
1d30: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 3d 30  AULT_MEMSTATUS=0
1d40: 20 69 6e 0a 2a 2a 20 77 68 69 63 68 20 63 61 73   in.** which cas
1d50: 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
1d60: 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20 61  ion statistics a
1d70: 72 65 20 64 69 73 61 62 6c 65 64 20 62 79 20 64  re disabled by d
1d80: 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 21  efault..*/.#if !
1d90: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
1da0: 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53  EFAULT_MEMSTATUS
1db0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
1dc0: 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41  E_DEFAULT_MEMSTA
1dd0: 54 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  TUS 1.#endif../*
1de0: 0a 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20  .** Exactly one 
1df0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1e00: 20 6d 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20   macros must be 
1e10: 64 65 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72  defined in order
1e20: 20 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77   to.** specify w
1e30: 68 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  hich memory allo
1e40: 63 61 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d  cation subsystem
1e50: 20 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   to use..**.**  
1e60: 20 20 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d     SQLITE_SYSTEM
1e70: 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20  _MALLOC         
1e80: 20 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73   // Use normal s
1e90: 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a  ystem malloc().*
1ea0: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e  *     SQLITE_WIN
1eb0: 33 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20  32_MALLOC       
1ec0: 20 20 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32      // Use Win32
1ed0: 20 6e 61 74 69 76 65 20 68 65 61 70 20 41 50 49   native heap API
1ee0: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a  .**     SQLITE_Z
1ef0: 45 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20  ERO_MALLOC      
1f00: 20 20 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73        // Use a s
1f10: 74 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68  tub allocator th
1f20: 61 74 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a  at always fails.
1f30: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45  **     SQLITE_ME
1f40: 4d 44 45 42 55 47 20 20 20 20 20 20 20 20 20 20  MDEBUG          
1f50: 20 20 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e       // Debuggin
1f60: 67 20 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73  g version of sys
1f70: 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a  tem malloc().**.
1f80: 2a 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69  ** On Windows, i
1f90: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e  f the SQLITE_WIN
1fa0: 33 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41  32_MALLOC_VALIDA
1fb0: 54 45 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69  TE macro is defi
1fc0: 6e 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61  ned and the.** a
1fd0: 73 73 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73  ssert() macro is
1fe0: 20 65 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63   enabled, each c
1ff0: 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e  all into the Win
2000: 33 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 73  32 native heap s
2010: 75 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c  ubsystem.** will
2020: 20 63 61 75 73 65 20 48 65 61 70 56 61 6c 69 64   cause HeapValid
2030: 61 74 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64  ate to be called
2040: 2e 20 20 49 66 20 68 65 61 70 20 76 61 6c 69 64  .  If heap valid
2050: 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69  ation should fai
2060: 6c 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69  l, an.** asserti
2070: 6f 6e 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67  on will be trigg
2080: 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e  ered..**.** If n
2090: 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65  one of the above
20a0: 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68   are defined, th
20b0: 65 6e 20 73 65 74 20 53 51 4c 49 54 45 5f 53 59  en set SQLITE_SY
20c0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a  STEM_MALLOC as.*
20d0: 2a 20 74 68 65 20 64 65 66 61 75 6c 74 2e 0a 2a  * the default..*
20e0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
20f0: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
2100: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
2110: 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d  d(SQLITE_WIN32_M
2120: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2130: 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f  ined(SQLITE_ZERO
2140: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
2150: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45  efined(SQLITE_ME
2160: 4d 44 45 42 55 47 29 3e 31 0a 23 20 65 72 72 6f  MDEBUG)>1.# erro
2170: 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20 6f  r "Two or more o
2180: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
2190: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e  compile-time con
21a0: 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f  figuration optio
21b0: 6e 73 5c 0a 20 61 72 65 20 64 65 66 69 6e 65 64  ns\. are defined
21c0: 20 62 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e 65   but at most one
21d0: 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53   is allowed:\. S
21e0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
21f0: 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e 33  LOC, SQLITE_WIN3
2200: 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45  2_MALLOC, SQLITE
2210: 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51 4c  _MEMDEBUG,\. SQL
2220: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22  ITE_ZERO_MALLOC"
2230: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
2240: 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45  ned(SQLITE_SYSTE
2250: 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  M_MALLOC) \.  + 
2260: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57  defined(SQLITE_W
2270: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  IN32_MALLOC) \. 
2280: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
2290: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c  E_ZERO_MALLOC) \
22a0: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
22b0: 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d 30  ITE_MEMDEBUG)==0
22c0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
22d0: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31  _SYSTEM_MALLOC 1
22e0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
22f0: 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f  f SQLITE_MALLOC_
2300: 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f  SOFT_LIMIT is no
2310: 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79  t zero, then try
2320: 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20   to keep the.** 
2330: 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20  sizes of memory 
2340: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f  allocations belo
2350: 77 20 74 68 69 73 20 76 61 6c 75 65 20 77 68 65  w this value whe
2360: 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a  re possible..*/.
2370: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2380: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
2390: 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20  LIMIT).# define 
23a0: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
23b0: 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65  FT_LIMIT 1024.#e
23c0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e  ndif../*.** We n
23d0: 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58  eed to define _X
23e0: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66  OPEN_SOURCE as f
23f0: 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20  ollows in order 
2400: 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63  to enable.** rec
2410: 75 72 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f  ursive mutexes o
2420: 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74  n most Unix syst
2430: 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64 28 29  ems and fchmod()
2440: 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20   on OpenBSD..** 
2450: 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  But _XOPEN_SOURC
2460: 45 20 64 65 66 69 6e 65 20 63 61 75 73 65 73 20  E define causes 
2470: 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63  problems for Mac
2480: 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a   OS X, so omit.*
2490: 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  * it..*/.#if !de
24a0: 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55  fined(_XOPEN_SOU
24b0: 52 43 45 29 20 26 26 20 21 64 65 66 69 6e 65 64  RCE) && !defined
24c0: 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20  (__DARWIN__) && 
24d0: 21 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45  !defined(__APPLE
24e0: 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 5f 58  __).#  define _X
24f0: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a  OPEN_SOURCE 600.
2500: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44  #endif../*.** ND
2510: 45 42 55 47 20 61 6e 64 20 53 51 4c 49 54 45 5f  EBUG and SQLITE_
2520: 44 45 42 55 47 20 61 72 65 20 6f 70 70 6f 73 69  DEBUG are opposi
2530: 74 65 73 2e 20 20 49 74 20 73 68 6f 75 6c 64 20  tes.  It should 
2540: 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20 74  always be true t
2550: 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e  hat.** defined(N
2560: 44 45 42 55 47 29 3d 3d 21 64 65 66 69 6e 65 64  DEBUG)==!defined
2570: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 2e 20  (SQLITE_DEBUG). 
2580: 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20   If this is not 
2590: 63 75 72 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a  currently true,.
25a0: 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72 75 65 20  ** make it true 
25b0: 62 79 20 64 65 66 69 6e 69 6e 67 20 6f 72 20 75  by defining or u
25c0: 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45 42 55 47  ndefining NDEBUG
25d0: 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20  ..**.** Setting 
25e0: 4e 44 45 42 55 47 20 6d 61 6b 65 73 20 74 68 65  NDEBUG makes the
25f0: 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e   code smaller an
2600: 64 20 66 61 73 74 65 72 20 62 79 20 64 69 73 61  d faster by disa
2610: 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73  bling the.** ass
2620: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
2630: 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53   in the code.  S
2640: 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20 64 65  o we want the de
2650: 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20  fault action.** 
2660: 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47  to be for NDEBUG
2670: 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e   to be set and N
2680: 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65  DEBUG to be unde
2690: 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51  fined only if SQ
26a0: 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73  LITE_DEBUG.** is
26b0: 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42   set.  Thus NDEB
26c0: 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70  UG becomes an op
26d0: 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e  t-in rather than
26e0: 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66   an opt-out.** f
26f0: 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21  eature..*/.#if !
2700: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20  defined(NDEBUG) 
2710: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
2720: 54 45 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66  TE_DEBUG) .# def
2730: 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e  ine NDEBUG 1.#en
2740: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
2750: 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e  NDEBUG) && defin
2760: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
2770: 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a  .# undef NDEBUG.
2780: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e  #endif../*.** En
2790: 61 62 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  able SQLITE_ENAB
27a0: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
27b0: 4e 54 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45  NTS if SQLITE_DE
27c0: 42 55 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e  BUG is turned on
27d0: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
27e0: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
27f0: 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53  EXPLAIN_COMMENTS
2800: 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
2810: 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66  ITE_DEBUG).# def
2820: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
2830: 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e  E_EXPLAIN_COMMEN
2840: 54 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  TS 1.#endif../*.
2850: 2a 2a 20 54 68 65 20 74 65 73 74 63 61 73 65 28  ** The testcase(
2860: 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  ) macro is used 
2870: 74 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61  to aid in covera
2880: 67 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65  ge testing.  Whe
2890: 6e 20 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65  n .** doing cove
28a0: 72 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68  rage testing, th
28b0: 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69  e condition insi
28c0: 64 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  de the argument 
28d0: 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29  to.** testcase()
28e0: 20 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61 74   must be evaluat
28f0: 65 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64  ed both true and
2900: 20 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20   false in order 
2910: 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62  to.** get full b
2920: 72 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20  ranch coverage. 
2930: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
2940: 6d 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65  macro is inserte
2950: 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73  d.** to help ens
2960: 75 72 65 20 61 64 65 71 75 61 74 65 20 74 65 73  ure adequate tes
2970: 74 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c  t coverage in pl
2980: 61 63 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c  aces where simpl
2990: 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64  e.** condition/d
29a0: 65 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65  ecision coverage
29b0: 20 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20   is inadequate. 
29c0: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65   For example, te
29d0: 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20  stcase().** can 
29e0: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
29f0: 73 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61  sure boundary va
2a00: 6c 75 65 73 20 61 72 65 20 74 65 73 74 65 64 2e  lues are tested.
2a10: 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b    For.** bitmask
2a20: 20 74 65 73 74 73 2c 20 74 65 73 74 63 61 73 65   tests, testcase
2a30: 28 29 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  () can be used t
2a40: 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68  o make sure each
2a50: 20 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69   bit.** is signi
2a60: 66 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20  ficant and used 
2a70: 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20  at least once.  
2a80: 4f 6e 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  On switch statem
2a90: 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75  ents.** where mu
2aa0: 6c 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20  ltiple cases go 
2ab0: 74 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63  to the same bloc
2ac0: 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63  k of code, testc
2ad0: 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73  ase().** can ins
2ae0: 75 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73  ure that all cas
2af0: 65 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  es are evaluated
2b00: 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ..**.*/.#ifdef S
2b10: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
2b20: 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  EST.  void sqlit
2b30: 65 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b  e3Coverage(int);
2b40: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
2b50: 73 65 28 58 29 20 20 69 66 28 20 58 20 29 7b 20  se(X)  if( X ){ 
2b60: 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28  sqlite3Coverage(
2b70: 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c  __LINE__); }.#el
2b80: 73 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74  se.# define test
2b90: 63 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a  case(X).#endif..
2ba0: 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e  /*.** The TESTON
2bb0: 4c 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  LY macro is used
2bc0: 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69   to enclose vari
2bd0: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
2be0: 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69  s or.** other bi
2bf0: 74 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  ts of code that 
2c00: 61 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75  are needed to su
2c10: 70 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65  pport the argume
2c20: 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65  nts.** within te
2c30: 73 74 63 61 73 65 28 29 20 61 6e 64 20 61 73 73  stcase() and ass
2c40: 65 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f  ert() macros..*/
2c50: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  .#if !defined(ND
2c60: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
2c70: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
2c80: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
2c90: 54 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23  TESTONLY(X)  X.#
2ca0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45  else.# define TE
2cb0: 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66  STONLY(X).#endif
2cc0: 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65  ../*.** Sometime
2cd0: 73 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c  s we need a smal
2ce0: 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65  l amount of code
2cf0: 20 73 75 63 68 20 61 73 20 61 20 76 61 72 69 61   such as a varia
2d00: 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ble initializati
2d10: 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66  on.** to setup f
2d20: 6f 72 20 61 20 6c 61 74 65 72 20 61 73 73 65 72  or a later asser
2d30: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  t() statement.  
2d40: 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  We do not want t
2d50: 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61  his code to.** a
2d60: 70 70 65 61 72 20 77 68 65 6e 20 61 73 73 65 72  ppear when asser
2d70: 74 28 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e  t() is disabled.
2d80: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
2d90: 6d 61 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f  macro is therefo
2da0: 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f  re.** used to co
2db0: 6e 74 61 69 6e 20 74 68 61 74 20 73 65 74 75 70  ntain that setup
2dc0: 20 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41   code.  The "VVA
2dd0: 22 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73  " acronym stands
2de0: 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63   for.** "Verific
2df0: 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f  ation, Validatio
2e00: 6e 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74 61  n, and Accredita
2e10: 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72  tion".  In other
2e20: 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63   words, the.** c
2e30: 6f 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f  ode within VVA_O
2e40: 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20  NLY() will only 
2e50: 72 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66  run during verif
2e60: 69 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65  ication processe
2e70: 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44  s..*/.#ifndef ND
2e80: 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56  EBUG.# define VV
2e90: 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  A_ONLY(X)  X.#el
2ea0: 73 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  se.# define VVA_
2eb0: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
2ec0: 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53  /*.** The ALWAYS
2ed0: 20 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f   and NEVER macro
2ee0: 73 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65  s surround boole
2ef0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77  an expressions w
2f00: 68 69 63 68 20 0a 2a 2a 20 61 72 65 20 69 6e 74  hich .** are int
2f10: 65 6e 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20  ended to always 
2f20: 62 65 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  be true or false
2f30: 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
2f40: 20 53 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73   Such.** express
2f50: 69 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d  ions could be om
2f60: 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63  itted from the c
2f70: 6f 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20  ode completely. 
2f80: 20 42 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65   But they.** are
2f90: 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66   included in a f
2fa0: 65 77 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65  ew cases in orde
2fb0: 72 20 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65  r to enhance the
2fc0: 20 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f   resilience.** o
2fd0: 66 20 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78  f SQLite to unex
2fe0: 70 65 63 74 65 64 20 62 65 68 61 76 69 6f 72 20  pected behavior 
2ff0: 2d 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f  - to make the co
3000: 64 65 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67  de "self-healing
3010: 22 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65  ".** or "ductile
3020: 22 20 72 61 74 68 65 72 20 74 68 61 6e 20 62 65  " rather than be
3030: 69 6e 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e  ing "brittle" an
3040: 64 20 63 72 61 73 68 69 6e 67 20 61 74 20 74 68  d crashing at th
3050: 65 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20  e first.** hint 
3060: 6f 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68  of unplanned beh
3070: 61 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  avior..**.** In 
3080: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57  other words, ALW
3090: 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72  AYS and NEVER ar
30a0: 65 20 61 64 64 65 64 20 66 6f 72 20 64 65 66 65  e added for defe
30b0: 6e 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a  nsive code..**.*
30c0: 2a 20 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76  * When doing cov
30d0: 65 72 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c  erage testing AL
30e0: 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61  WAYS and NEVER a
30f0: 72 65 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f  re hard-coded to
3100: 0a 2a 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20  .** be true and 
3110: 66 61 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68  false so that th
3120: 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f  e unreachable co
3130: 64 65 20 74 68 65 79 20 73 70 65 63 69 66 79 20  de they specify 
3140: 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63  will.** not be c
3150: 6f 75 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74  ounted as untest
3160: 65 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20  ed code..*/.#if 
3170: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43  defined(SQLITE_C
3180: 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20  OVERAGE_TEST).# 
3190: 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29  define ALWAYS(X)
31a0: 20 20 20 20 20 20 28 31 29 0a 23 20 64 65 66 69        (1).# defi
31b0: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
31c0: 20 20 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66    (0).#elif !def
31d0: 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64  ined(NDEBUG).# d
31e0: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
31f0: 20 20 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73       ((X)?1:(ass
3200: 65 72 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66  ert(0),0)).# def
3210: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
3220: 20 20 20 28 28 58 29 3f 28 61 73 73 65 72 74 28     ((X)?(assert(
3230: 30 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23  0),1):0).#else.#
3240: 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58   define ALWAYS(X
3250: 29 20 20 20 20 20 20 28 58 29 0a 23 20 64 65 66  )      (X).# def
3260: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
3270: 20 20 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f     (X).#endif../
3280: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
3290: 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74   (non-zero) if t
32a0: 68 65 20 69 6e 70 75 74 20 69 73 20 61 6e 20 69  he input is an i
32b0: 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20 74  nteger that is t
32c0: 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66  oo large.** to f
32d0: 69 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20  it in 32-bits.  
32e0: 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73  This macro is us
32f0: 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72  ed inside of var
3300: 69 6f 75 73 20 74 65 73 74 63 61 73 65 28 29 0a  ious testcase().
3310: 2a 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72  ** macros to ver
3320: 69 66 79 20 74 68 61 74 20 77 65 20 68 61 76 65  ify that we have
3330: 20 74 65 73 74 65 64 20 53 51 4c 69 74 65 20 66   tested SQLite f
3340: 6f 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75  or large-file su
3350: 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  pport..*/.#defin
3360: 65 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20  e IS_BIG_INT(X) 
3370: 20 28 28 28 58 29 26 7e 28 69 36 34 29 30 78 66   (((X)&~(i64)0xf
3380: 66 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a  fffffff)!=0)../*
3390: 0a 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e  .** The macro un
33a0: 6c 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69  likely() is a hi
33b0: 6e 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64  nt that surround
33c0: 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65  s a boolean.** e
33d0: 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
33e0: 73 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e  s usually false.
33f0: 20 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29    Macro likely()
3400: 20 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20   surrounds.** a 
3410: 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
3420: 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c  on that is usual
3430: 6c 79 20 74 72 75 65 2e 20 20 54 68 65 73 65 20  ly true.  These 
3440: 68 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20  hints could,.** 
3450: 69 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73  in theory, be us
3460: 65 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c  ed by the compil
3470: 65 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62  er to generate b
3480: 65 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a  etter code, but.
3490: 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65  ** currently the
34a0: 79 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65  y are just comme
34b0: 6e 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65  nts for human re
34c0: 61 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  aders..*/.#defin
34d0: 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28  e likely(X)    (
34e0: 58 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b  X).#define unlik
34f0: 65 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e  ely(X)  (X)..#in
3500: 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23  clude "hash.h".#
3510: 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68  include "parse.h
3520: 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69  ".#include <stdi
3530: 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73  o.h>.#include <s
3540: 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64  tdlib.h>.#includ
3550: 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e  e <string.h>.#in
3560: 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e  clude <assert.h>
3570: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65  .#include <stdde
3580: 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63  f.h>../*.** If c
3590: 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70  ompiling for a p
35a0: 72 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61  rocessor that la
35b0: 63 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  cks floating poi
35c0: 6e 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73  nt support,.** s
35d0: 75 62 73 74 69 74 75 74 65 20 69 6e 74 65 67 65  ubstitute intege
35e0: 72 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70  r for floating-p
35f0: 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53  oint.*/.#ifdef S
3600: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
3610: 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69  ING_POINT.# defi
3620: 6e 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65  ne double sqlite
3630: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
3640: 66 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74  float sqlite_int
3650: 36 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47  64.# define LONG
3660: 44 4f 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69  DOUBLE_TYPE sqli
3670: 74 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65  te_int64.# ifnde
3680: 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c  f SQLITE_BIG_DBL
3690: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
36a0: 54 45 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71  TE_BIG_DBL (((sq
36b0: 6c 69 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c  lite3_int64)1)<<
36c0: 35 30 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65  50).# endif.# de
36d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fine SQLITE_OMIT
36e0: 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20  _DATETIME_FUNCS 
36f0: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
3700: 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23  E_OMIT_TRACE 1.#
3710: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49   undef SQLITE_MI
3720: 58 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54  XED_ENDIAN_64BIT
3730: 5f 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53  _FLOAT.# undef S
3740: 51 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e  QLITE_HAVE_ISNAN
3750: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
3760: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23  SQLITE_BIG_DBL.#
3770: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
3780: 49 47 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65  IG_DBL (1e99).#e
3790: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54  ndif../*.** OMIT
37a0: 5f 54 45 4d 50 44 42 20 69 73 20 73 65 74 20 74  _TEMPDB is set t
37b0: 6f 20 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d  o 1 if SQLITE_OM
37c0: 49 54 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66  IT_TEMPDB is def
37d0: 69 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66  ined, or 0.** af
37e0: 74 65 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20  terward. Having 
37f0: 74 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77  this macro allow
3800: 73 20 75 73 20 74 6f 20 63 61 75 73 65 20 74 68  s us to cause th
3810: 65 20 43 20 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a  e C compiler .**
3820: 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75 73   to omit code us
3830: 65 64 20 62 79 20 54 45 4d 50 20 74 61 62 6c 65  ed by TEMP table
3840: 73 20 77 69 74 68 6f 75 74 20 6d 65 73 73 79 20  s without messy 
3850: 23 69 66 6e 64 65 66 20 73 74 61 74 65 6d 65 6e  #ifndef statemen
3860: 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ts..*/.#ifdef SQ
3870: 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42  LITE_OMIT_TEMPDB
3880: 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45  .#define OMIT_TE
3890: 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a 23 64 65  MPDB 1.#else.#de
38a0: 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42  fine OMIT_TEMPDB
38b0: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
38c0: 20 54 68 65 20 22 66 69 6c 65 20 66 6f 72 6d 61   The "file forma
38d0: 74 22 20 6e 75 6d 62 65 72 20 69 73 20 61 6e 20  t" number is an 
38e0: 69 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20  integer that is 
38f0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e  incremented when
3900: 65 76 65 72 0a 2a 2a 20 74 68 65 20 56 44 42 45  ever.** the VDBE
3910: 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d  -level file form
3920: 61 74 20 63 68 61 6e 67 65 73 2e 20 20 54 68 65  at changes.  The
3930: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
3940: 73 20 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20  s define the.** 
3950: 74 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65  the default file
3960: 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77 20   format for new 
3970: 64 61 74 61 62 61 73 65 73 20 61 6e 64 20 74 68  databases and th
3980: 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 66  e maximum file f
3990: 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74 68  ormat.** that th
39a0: 65 20 6c 69 62 72 61 72 79 20 63 61 6e 20 72 65  e library can re
39b0: 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ad..*/.#define S
39c0: 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46  QLITE_MAX_FILE_F
39d0: 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64 65 66 20  ORMAT 4.#ifndef 
39e0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46  SQLITE_DEFAULT_F
39f0: 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66  ILE_FORMAT.# def
3a00: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
3a10: 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34  LT_FILE_FORMAT 4
3a20: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
3a30: 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
3a40: 20 74 72 69 67 67 65 72 73 20 61 72 65 20 72 65   triggers are re
3a50: 63 75 72 73 69 76 65 20 62 79 20 64 65 66 61 75  cursive by defau
3a60: 6c 74 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65  lt.  This can be
3a70: 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61 74 20 72  .** changed at r
3a80: 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67 20 61 20  un-time using a 
3a90: 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64  pragma..*/.#ifnd
3aa0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
3ab0: 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47  T_RECURSIVE_TRIG
3ac0: 47 45 52 53 0a 23 20 64 65 66 69 6e 65 20 53 51  GERS.# define SQ
3ad0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43  LITE_DEFAULT_REC
3ae0: 55 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 20  URSIVE_TRIGGERS 
3af0: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
3b00: 50 72 6f 76 69 64 65 20 61 20 64 65 66 61 75 6c  Provide a defaul
3b10: 74 20 76 61 6c 75 65 20 66 6f 72 20 53 51 4c 49  t value for SQLI
3b20: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e  TE_TEMP_STORE in
3b30: 20 63 61 73 65 20 69 74 20 69 73 20 6e 6f 74 20   case it is not 
3b40: 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20  specified.** on 
3b50: 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  the command-line
3b60: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
3b70: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20  TE_TEMP_STORE.# 
3b80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45  define SQLITE_TE
3b90: 4d 50 5f 53 54 4f 52 45 20 31 0a 23 20 64 65 66  MP_STORE 1.# def
3ba0: 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  ine SQLITE_TEMP_
3bb0: 53 54 4f 52 45 5f 78 63 20 31 20 20 2f 2a 20 45  STORE_xc 1  /* E
3bc0: 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d  xclude from ctim
3bd0: 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  e.c */.#endif../
3be0: 2a 0a 2a 2a 20 49 66 20 6e 6f 20 76 61 6c 75 65  *.** If no value
3bf0: 20 68 61 73 20 62 65 65 6e 20 70 72 6f 76 69 64   has been provid
3c00: 65 64 20 66 6f 72 20 53 51 4c 49 54 45 5f 4d 41  ed for SQLITE_MA
3c10: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
3c20: 2c 20 6f 72 20 69 66 0a 2a 2a 20 53 51 4c 49 54  , or if.** SQLIT
3c30: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 73 20  E_TEMP_STORE is 
3c40: 73 65 74 20 74 6f 20 33 20 28 6e 65 76 65 72 20  set to 3 (never 
3c50: 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69  use temporary fi
3c60: 6c 65 73 29 2c 20 73 65 74 20 69 74 20 0a 2a 2a  les), set it .**
3c70: 20 74 6f 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66   to zero..*/.#if
3c80: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
3c90: 52 45 3d 3d 33 20 7c 7c 20 53 51 4c 49 54 45 5f  RE==3 || SQLITE_
3ca0: 54 48 52 45 41 44 53 41 46 45 3d 3d 30 0a 23 20  THREADSAFE==0.# 
3cb0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58  undef SQLITE_MAX
3cc0: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a  _WORKER_THREADS.
3cd0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3ce0: 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
3cf0: 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e  DS 0.#endif.#ifn
3d00: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  def SQLITE_MAX_W
3d10: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
3d20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
3d30: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
3d40: 20 38 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   8.#endif.#ifnde
3d50: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
3d60: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a  _WORKER_THREADS.
3d70: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3d80: 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54  DEFAULT_WORKER_T
3d90: 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69 66 0a  HREADS 0.#endif.
3da0: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  #if SQLITE_DEFAU
3db0: 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  LT_WORKER_THREAD
3dc0: 53 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  S>SQLITE_MAX_WOR
3dd0: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 75 6e  KER_THREADS.# un
3de0: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  def SQLITE_MAX_W
3df0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
3e00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
3e10: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
3e20: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
3e30: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23  WORKER_THREADS.#
3e40: 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 47 43  endif.../*.** GC
3e50: 43 20 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e  C does not defin
3e60: 65 20 74 68 65 20 6f 66 66 73 65 74 6f 66 28 29  e the offsetof()
3e70: 20 6d 61 63 72 6f 20 73 6f 20 77 65 27 6c 6c 20   macro so we'll 
3e80: 68 61 76 65 20 74 6f 20 64 6f 20 69 74 0a 2a 2a  have to do it.**
3e90: 20 6f 75 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23   ourselves..*/.#
3ea0: 69 66 6e 64 65 66 20 6f 66 66 73 65 74 6f 66 0a  ifndef offsetof.
3eb0: 23 64 65 66 69 6e 65 20 6f 66 66 73 65 74 6f 66  #define offsetof
3ec0: 28 53 54 52 55 43 54 55 52 45 2c 46 49 45 4c 44  (STRUCTURE,FIELD
3ed0: 29 20 28 28 69 6e 74 29 28 28 63 68 61 72 2a 29  ) ((int)((char*)
3ee0: 26 28 28 53 54 52 55 43 54 55 52 45 2a 29 30 29  &((STRUCTURE*)0)
3ef0: 2d 3e 46 49 45 4c 44 29 29 0a 23 65 6e 64 69 66  ->FIELD)).#endif
3f00: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
3f10: 6f 20 63 6f 6d 70 75 74 65 20 6d 69 6e 69 6d 75  o compute minimu
3f20: 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d 20 6f 66  m and maximum of
3f30: 20 74 77 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f   two numbers..*/
3f40: 0a 23 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c 42  .#define MIN(A,B
3f50: 29 20 28 28 41 29 3c 28 42 29 3f 28 41 29 3a 28  ) ((A)<(B)?(A):(
3f60: 42 29 29 0a 23 64 65 66 69 6e 65 20 4d 41 58 28  B)).#define MAX(
3f70: 41 2c 42 29 20 28 28 41 29 3e 28 42 29 3f 28 41  A,B) ((A)>(B)?(A
3f80: 29 3a 28 42 29 29 0a 0a 2f 2a 0a 2a 2a 20 53 77  ):(B))../*.** Sw
3f90: 61 70 20 74 77 6f 20 6f 62 6a 65 63 74 73 20 6f  ap two objects o
3fa0: 66 20 74 79 70 65 20 54 59 50 45 2e 0a 2a 2f 0a  f type TYPE..*/.
3fb0: 23 64 65 66 69 6e 65 20 53 57 41 50 28 54 59 50  #define SWAP(TYP
3fc0: 45 2c 41 2c 42 29 20 7b 54 59 50 45 20 74 3d 41  E,A,B) {TYPE t=A
3fd0: 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a  ; A=B; B=t;}../*
3fe0: 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65  .** Check to see
3ff0: 20 69 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65   if this machine
4000: 20 75 73 65 73 20 45 42 43 44 49 43 2e 20 20 28   uses EBCDIC.  (
4010: 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20  Yes, believe it 
4020: 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65  or.** not, there
4030: 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69   are still machi
4040: 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20 74 68  nes out there th
4050: 61 74 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a  at use EBCDIC.).
4060: 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c  */.#if 'A' == '\
4070: 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51  301'.# define SQ
4080: 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65  LITE_EBCDIC 1.#e
4090: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  lse.# define SQL
40a0: 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64  ITE_ASCII 1.#end
40b0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65  if../*.** Intege
40c0: 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65  rs of known size
40d0: 73 2e 20 20 54 68 65 73 65 20 74 79 70 65 64 65  s.  These typede
40e0: 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  fs might change 
40f0: 66 6f 72 20 61 72 63 68 69 74 65 63 74 75 72 65  for architecture
4100: 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73  s.** where the s
4110: 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72 65 70  izes very.  Prep
4120: 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20  rocessor macros 
4130: 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f  are available so
4140: 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70   that the.** typ
4150: 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e  es can be conven
4160: 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64  iently redefined
4170: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65   at compile-type
4180: 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a  .  Like this:.**
4190: 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63 20 27  .**         cc '
41a0: 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c  -DUINTPTR_TYPE=l
41b0: 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e  ong long int' ..
41c0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e  ..*/.#ifndef UIN
41d0: 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T32_TYPE.# ifdef
41e0: 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23   HAVE_UINT32_T.#
41f0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f    define UINT32_
4200: 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20  TYPE uint32_t.# 
4210: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
4220: 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67  INT32_TYPE unsig
4230: 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ned int.# endif.
4240: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
4250: 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64  INT16_TYPE.# ifd
4260: 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54  ef HAVE_UINT16_T
4270: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31  .#  define UINT1
4280: 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a  6_TYPE uint16_t.
4290: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
42a0: 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73   UINT16_TYPE uns
42b0: 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a  igned short int.
42c0: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
42d0: 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50  ifndef INT16_TYP
42e0: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 49  E.# ifdef HAVE_I
42f0: 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65  NT16_T.#  define
4300: 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31   INT16_TYPE int1
4310: 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  6_t.# else.#  de
4320: 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20  fine INT16_TYPE 
4330: 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69  short int.# endi
4340: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
4350: 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66   UINT8_TYPE.# if
4360: 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54  def HAVE_UINT8_T
4370: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38  .#  define UINT8
4380: 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20  _TYPE uint8_t.# 
4390: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
43a0: 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e  INT8_TYPE unsign
43b0: 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a  ed char.# endif.
43c0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49  #endif.#ifndef I
43d0: 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66  NT8_TYPE.# ifdef
43e0: 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20   HAVE_INT8_T.#  
43f0: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
4400: 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23   int8_t.# else.#
4410: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
4420: 50 45 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23  PE signed char.#
4430: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
4440: 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45  fndef LONGDOUBLE
4450: 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c  _TYPE.# define L
4460: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c  ONGDOUBLE_TYPE l
4470: 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69  ong double.#endi
4480: 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65  f.typedef sqlite
4490: 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20  _int64 i64;     
44a0: 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73       /* 8-byte s
44b0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
44c0: 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f  .typedef sqlite_
44d0: 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20  uint64 u64;     
44e0: 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e      /* 8-byte un
44f0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
4500: 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 33 32  /.typedef UINT32
4510: 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20 20 20  _TYPE u32;      
4520: 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75       /* 4-byte u
4530: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
4540: 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31  */.typedef UINT1
4550: 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20 20 20  6_TYPE u16;     
4560: 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20        /* 2-byte 
4570: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
4580: 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31   */.typedef INT1
4590: 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20 20 20  6_TYPE i16;     
45a0: 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65         /* 2-byte
45b0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
45c0: 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38  */.typedef UINT8
45d0: 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20 20 20  _TYPE u8;       
45e0: 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20        /* 1-byte 
45f0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
4600: 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38   */.typedef INT8
4610: 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20 20 20  _TYPE i8;       
4620: 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65         /* 1-byte
4630: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
4640: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45  */../*.** SQLITE
4650: 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20 75 36  _MAX_U32 is a u6
4660: 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20  4 constant that 
4670: 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75  is the maximum u
4680: 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74  64 value.** that
4690: 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69   can be stored i
46a0: 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75 74 20  n a u32 without 
46b0: 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54  loss of data.  T
46c0: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30  he value.** is 0
46d0: 78 30 30 30 30 30 30 30 30 66 66 66 66 66 66 66  x00000000fffffff
46e0: 66 2e 20 20 42 75 74 20 62 65 63 61 75 73 65 20  f.  But because 
46f0: 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d  of quirks of som
4700: 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a  e compilers, we.
4710: 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65 63 69  ** have to speci
4720: 66 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  fy the value in 
4730: 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69  the less intuiti
4740: 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a  ve manner shown:
4750: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
4760: 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28  TE_MAX_U32  ((((
4770: 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a  u64)1)<<32)-1)..
4780: 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79  /*.** The dataty
4790: 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  pe used to store
47a0: 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68   estimates of th
47b0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
47c0: 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f   in a.** table o
47d0: 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69  r index.  This i
47e0: 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e  s an unsigned in
47f0: 74 65 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72  teger type.  For
4800: 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65   99.9% of.** the
4810: 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74   world, a 32-bit
4820: 20 69 6e 74 65 67 65 72 20 69 73 20 73 75 66 66   integer is suff
4830: 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36  icient.  But a 6
4840: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a  4-bit integer.**
4850: 20 63 61 6e 20 62 65 20 75 73 65 64 20 61 74 20   can be used at 
4860: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20  compile-time if 
4870: 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64  desired..*/.#ifd
4880: 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f  ef SQLITE_64BIT_
4890: 53 54 41 54 53 0a 20 74 79 70 65 64 65 66 20 75  STATS. typedef u
48a0: 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  64 tRowcnt;    /
48b0: 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66  * 64-bit only if
48c0: 20 72 65 71 75 65 73 74 65 64 20 61 74 20 63 6f   requested at co
48d0: 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65  mpile-time */.#e
48e0: 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75 33 32  lse. typedef u32
48f0: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
4900: 33 32 2d 62 69 74 20 69 73 20 74 68 65 20 64 65  32-bit is the de
4910: 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  fault */.#endif.
4920: 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64  ./*.** Estimated
4930: 20 71 75 61 6e 74 69 74 69 65 73 20 75 73 65 64   quantities used
4940: 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61 6e 6e   for query plann
4950: 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64 20 61  ing are stored a
4960: 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61  s 16-bit.** loga
4970: 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71 75 61  rithms.  For qua
4980: 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76 61 6c  ntity X, the val
4990: 75 65 20 73 74 6f 72 65 64 20 69 73 20 31 30 2a  ue stored is 10*
49a0: 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73 0a 2a  log2(X).  This.*
49b0: 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73 69 62  * gives a possib
49c0: 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61 6c 75  le range of valu
49d0: 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74  es of approximat
49e0: 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f 20 31  ely 1.0e986 to 1
49f0: 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68  e-986..** But th
4a00: 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  e allowed values
4a10: 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e 20 20   are "grainy".  
4a20: 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75 65 20  Not every value 
4a30: 69 73 20 72 65 70 72 65 73 65 6e 74 61 62 6c 65  is representable
4a40: 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65  ..** For example
4a50: 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31 36 20  , quantities 16 
4a60: 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74 68 20  and 17 are both 
4a70: 72 65 70 72 65 73 65 6e 74 65 64 20 62 79 20 61  represented by a
4a80: 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30   LogEst.** of 40
4a90: 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69 6e 63  .  However, sinc
4aa0: 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74 69 74  e LogEst quantit
4ab0: 69 65 73 20 61 72 65 20 73 75 70 70 6f 73 65 20  ies are suppose 
4ac0: 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65 73 2c  to be estimates,
4ad0: 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20 76 61  .** not exact va
4ae0: 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70 72 65  lues, this impre
4af0: 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20  cision is not a 
4b00: 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22  problem..**.** "
4b10: 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f 72 74  LogEst" is short
4b20: 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68 6d 69   for "Logarithmi
4b30: 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a  c Estimate"..**.
4b40: 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20  ** Examples:.** 
4b50: 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20 20 20       1 -> 0     
4b60: 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e 20 34           20 -> 4
4b70: 33 20 20 20 20 20 20 20 20 20 20 31 30 30 30 30  3          10000
4b80: 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20 20 20   -> 132.**      
4b90: 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20 20 20  2 -> 10         
4ba0: 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20 20 20      25 -> 46    
4bb0: 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e 20 31        25000 -> 1
4bc0: 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20  46.**      3 -> 
4bd0: 31 36 20 20 20 20 20 20 20 20 20 20 20 20 31 30  16            10
4be0: 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20 20 31  0 -> 66        1
4bf0: 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a  000000 -> 199.**
4c00: 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20 20 20        4 -> 20   
4c10: 20 20 20 20 20 20 20 20 31 30 30 30 20 2d 3e 20          1000 -> 
4c20: 39 39 20 20 20 20 20 20 20 20 31 30 34 38 35 37  99        104857
4c30: 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20  6 -> 200.**     
4c40: 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20 20 20  10 -> 33        
4c50: 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30 20 20     1024 -> 100  
4c60: 20 20 34 32 39 34 39 36 37 32 39 36 20 2d 3e 20    4294967296 -> 
4c70: 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f  320.**.** The Lo
4c80: 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65 67 61  gEst can be nega
4c90: 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61 74 65  tive to indicate
4ca0: 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75   fractional valu
4cb0: 65 73 2e 20 0a 2a 2a 20 45 78 61 6d 70 6c 65 73  es. .** Examples
4cc0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d  :.**.**    0.5 -
4cd0: 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20 20  > -10           
4ce0: 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20 20  0.1 -> -33      
4cf0: 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a    0.0625 -> -40.
4d00: 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36  */.typedef INT16
4d10: 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f  _TYPE LogEst;../
4d20: 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 51 4c  *.** Set the SQL
4d30: 49 54 45 5f 50 54 52 53 49 5a 45 20 6d 61 63 72  ITE_PTRSIZE macr
4d40: 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  o to the number 
4d50: 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 70 6f  of bytes in a po
4d60: 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66  inter.*/.#ifndef
4d70: 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 0a   SQLITE_PTRSIZE.
4d80: 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 53  # if defined(__S
4d90: 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 29  IZEOF_POINTER__)
4da0: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
4db0: 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49 5a  TE_PTRSIZE __SIZ
4dc0: 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23 20  EOF_POINTER__.# 
4dd0: 65 6c 69 66 20 64 65 66 69 6e 65 64 28 69 33 38  elif defined(i38
4de0: 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  6)     || define
4df0: 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c  d(__i386__)   ||
4e00: 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36   defined(_M_IX86
4e10: 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 20  ) ||    \.      
4e20: 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29   defined(_M_ARM)
4e30: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
4e40: 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65 66  arm__)    || def
4e50: 69 6e 65 64 28 5f 5f 78 38 36 29 0a 23 20 20 20  ined(__x86).#   
4e60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
4e70: 52 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23  RSIZE 4.# else.#
4e80: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
4e90: 5f 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64  _PTRSIZE 8.# end
4ea0: 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  if.#endif../*.**
4eb0: 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72   Macros to deter
4ec0: 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68 65  mine whether the
4ed0: 20 6d 61 63 68 69 6e 65 20 69 73 20 62 69 67 20   machine is big 
4ee0: 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e  or little endian
4ef0: 2c 0a 2a 2a 20 61 6e 64 20 77 68 65 74 68 65 72  ,.** and whether
4f00: 20 6f 72 20 6e 6f 74 20 74 68 61 74 20 64 65 74   or not that det
4f10: 65 72 6d 69 6e 61 74 69 6f 6e 20 69 73 20 72 75  ermination is ru
4f20: 6e 2d 74 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c  n-time or compil
4f30: 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f  e-time..**.** Fo
4f40: 72 20 62 65 73 74 20 70 65 72 66 6f 72 6d 61 6e  r best performan
4f50: 63 65 2c 20 61 6e 20 61 74 74 65 6d 70 74 20 69  ce, an attempt i
4f60: 73 20 6d 61 64 65 20 74 6f 20 67 75 65 73 73 20  s made to guess 
4f70: 61 74 20 74 68 65 20 62 79 74 65 2d 6f 72 64 65  at the byte-orde
4f80: 72 0a 2a 2a 20 75 73 69 6e 67 20 43 2d 70 72 65  r.** using C-pre
4f90: 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73  processor macros
4fa0: 2e 20 20 49 66 20 74 68 61 74 20 69 73 20 75 6e  .  If that is un
4fb0: 73 75 63 63 65 73 73 66 75 6c 2c 20 6f 72 20 69  successful, or i
4fc0: 66 0a 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 52 55  f.** -DSQLITE_RU
4fd0: 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 3d  NTIME_BYTEORDER=
4fe0: 31 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 62  1 is set, then b
4ff0: 79 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65 74  yte-order is det
5000: 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72 75  ermined.** at ru
5010: 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65  n-time..*/.#ifde
5020: 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
5030: 41 54 49 4f 4e 0a 63 6f 6e 73 74 20 69 6e 74 20  ATION.const int 
5040: 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a  sqlite3one = 1;.
5050: 23 65 6c 73 65 0a 65 78 74 65 72 6e 20 63 6f 6e  #else.extern con
5060: 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e  st int sqlite3on
5070: 65 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 28 64  e;.#endif.#if (d
5080: 65 66 69 6e 65 64 28 69 33 38 36 29 20 20 20 20  efined(i386)    
5090: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33   || defined(__i3
50a0: 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e  86__)   || defin
50b0: 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20  ed(_M_IX86) ||  
50c0: 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64    \.     defined
50d0: 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64 65  (__x86_64) || de
50e0: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f  fined(__x86_64__
50f0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f  ) || defined(_M_
5100: 58 36 34 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20  X64)  ||    \.  
5110: 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d     defined(_M_AM
5120: 44 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  D64) || defined(
5130: 5f 4d 5f 41 52 4d 29 20 20 20 20 20 7c 7c 20 64  _M_ARM)     || d
5140: 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20  efined(__x86)   
5150: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66  ||    \.     def
5160: 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 29 20 26  ined(__arm__)) &
5170: 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
5180: 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52  E_RUNTIME_BYTEOR
5190: 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51  DER).# define SQ
51a0: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20  LITE_BYTEORDER  
51b0: 20 20 31 32 33 34 0a 23 20 64 65 66 69 6e 65 20    1234.# define 
51c0: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
51d0: 20 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53      0.# define S
51e0: 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49  QLITE_LITTLEENDI
51f0: 41 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51  AN 1.# define SQ
5200: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
5210: 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45    SQLITE_UTF16LE
5220: 0a 23 65 6e 64 69 66 0a 23 69 66 20 28 64 65 66  .#endif.#if (def
5230: 69 6e 65 64 28 73 70 61 72 63 29 20 20 20 20 7c  ined(sparc)    |
5240: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f  | defined(__ppc_
5250: 5f 29 29 20 20 5c 0a 20 20 20 20 26 26 20 21 64  _))  \.    && !d
5260: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 52 55  efined(SQLITE_RU
5270: 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 29  NTIME_BYTEORDER)
5280: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5290: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 34 33  _BYTEORDER    43
52a0: 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  21.# define SQLI
52b0: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
52c0: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
52d0: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30  E_LITTLEENDIAN 0
52e0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
52f0: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51  _UTF16NATIVE  SQ
5300: 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6e  LITE_UTF16BE.#en
5310: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
5320: 28 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45  (SQLITE_BYTEORDE
5330: 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  R).# define SQLI
5340: 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20  TE_BYTEORDER    
5350: 30 20 20 20 20 20 2f 2a 20 30 20 6d 65 61 6e 73  0     /* 0 means
5360: 20 22 75 6e 6b 6e 6f 77 6e 20 61 74 20 63 6f 6d   "unknown at com
5370: 70 69 6c 65 2d 74 69 6d 65 22 20 2a 2f 0a 23 20  pile-time" */.# 
5380: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
5390: 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68  GENDIAN    (*(ch
53a0: 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e  ar *)(&sqlite3on
53b0: 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  e)==0).# define 
53c0: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
53d0: 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26  IAN (*(char *)(&
53e0: 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a  sqlite3one)==1).
53f0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5400: 55 54 46 31 36 4e 41 54 49 56 45 20 20 28 53 51  UTF16NATIVE  (SQ
5410: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53  LITE_BIGENDIAN?S
5420: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51  QLITE_UTF16BE:SQ
5430: 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65  LITE_UTF16LE).#e
5440: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73  ndif../*.** Cons
5450: 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61  tants for the la
5460: 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65  rgest and smalle
5470: 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62  st possible 64-b
5480: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
5490: 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  rs..** These mac
54a0: 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e 65 64  ros are designed
54b0: 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74   to work correct
54c0: 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69  ly on both 32-bi
54d0: 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20  t and 64-bit.** 
54e0: 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64  compilers..*/.#d
54f0: 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e  efine LARGEST_IN
5500: 54 36 34 20 20 28 30 78 66 66 66 66 66 66 66 66  T64  (0xffffffff
5510: 7c 28 28 28 69 36 34 29 30 78 37 66 66 66 66 66  |(((i64)0x7fffff
5520: 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e  ff)<<32)).#defin
5530: 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  e SMALLEST_INT64
5540: 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41   (((i64)-1) - LA
5550: 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a  RGEST_INT64)../*
5560: 20 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20   .** Round up a 
5570: 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65  number to the ne
5580: 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70  xt larger multip
5590: 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69  le of 8.  This i
55a0: 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72  s used.** to for
55b0: 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d  ce 8-byte alignm
55c0: 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72  ent on 64-bit ar
55d0: 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a  chitectures..*/.
55e0: 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78  #define ROUND8(x
55f0: 29 20 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e  )     (((x)+7)&~
5600: 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20  7)../*.** Round 
5610: 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72  down to the near
5620: 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20  est multiple of 
5630: 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55  8.*/.#define ROU
5640: 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26  NDDOWN8(x) ((x)&
5650: 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72  ~7)../*.** Asser
5660: 74 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74  t that the point
5670: 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20  er X is aligned 
5680: 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75  to an 8-byte bou
5690: 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20  ndary.  This.** 
56a0: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e  macro is used on
56b0: 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65 72 74  ly within assert
56c0: 28 29 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  () to verify tha
56d0: 74 20 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a  t the code gets.
56e0: 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74  ** all alignment
56f0: 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f   restrictions co
5700: 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63  rrect..**.** Exc
5710: 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34  ept, if SQLITE_4
5720: 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41  _BYTE_ALIGNED_MA
5730: 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c  LLOC is defined,
5740: 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64   then the.** und
5750: 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29  erlying malloc()
5760: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
5770: 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75 73 20  might return us 
5780: 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a  4-byte aligned.*
5790: 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20  * pointers.  In 
57a0: 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20  that case, only 
57b0: 76 65 72 69 66 79 20 34 2d 62 79 74 65 20 61 6c  verify 4-byte al
57c0: 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64  ignment..*/.#ifd
57d0: 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45  ef SQLITE_4_BYTE
57e0: 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a  _ALIGNED_MALLOC.
57f0: 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42  # define EIGHT_B
5800: 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29  YTE_ALIGNMENT(X)
5810: 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29     ((((char*)(X)
5820: 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29 3d   - (char*)0)&3)=
5830: 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  =0).#else.# defi
5840: 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c  ne EIGHT_BYTE_AL
5850: 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28  IGNMENT(X)   (((
5860: 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68  (char*)(X) - (ch
5870: 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23 65  ar*)0)&7)==0).#e
5880: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61  ndif../*.** Disa
5890: 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74  ble MMAP on plat
58a0: 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20 69  forms where it i
58b0: 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77  s known to not w
58c0: 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ork.*/.#if defin
58d0: 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20  ed(__OpenBSD__) 
58e0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58  || defined(__QNX
58f0: 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53  NTO__).# undef S
5900: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
5910: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
5920: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
5930: 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  E 0.#endif../*.*
5940: 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d 75  * Default maximu
5950: 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79  m size of memory
5960: 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d   used by memory-
5970: 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74 68  mapped I/O in th
5980: 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20  e VFS.*/.#ifdef 
5990: 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c  __APPLE__.# incl
59a0: 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64 69  ude <TargetCondi
59b0: 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 20 69 66 20  tionals.h>.# if 
59c0: 54 41 52 47 45 54 5f 4f 53 5f 49 50 48 4f 4e 45  TARGET_OS_IPHONE
59d0: 0a 23 20 20 20 75 6e 64 65 66 20 53 51 4c 49 54  .#   undef SQLIT
59e0: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
59f0: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
5a00: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
5a10: 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  0.# endif.#endif
5a20: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5a30: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
5a40: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e  if defined(__lin
5a50: 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66  ux__) \.  || def
5a60: 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20  ined(_WIN32) \. 
5a70: 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 41   || (defined(__A
5a80: 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66 69 6e  PPLE__) && defin
5a90: 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a  ed(__MACH__)) \.
5aa0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73    || defined(__s
5ab0: 75 6e 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  un).#   define S
5ac0: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
5ad0: 49 5a 45 20 30 78 37 66 66 66 30 30 30 30 20 20  IZE 0x7fff0000  
5ae0: 2f 2a 20 32 31 34 37 34 31 38 31 31 32 20 2a 2f  /* 2147418112 */
5af0: 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69  .# else.#   defi
5b00: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
5b10: 41 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64 69  AP_SIZE 0.# endi
5b20: 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  f.# define SQLIT
5b30: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f  E_MAX_MMAP_SIZE_
5b40: 78 63 20 31 20 2f 2a 20 65 78 63 6c 75 64 65 20  xc 1 /* exclude 
5b50: 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a  from ctime.c */.
5b60: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
5b70: 65 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53  e default MMAP_S
5b80: 49 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61  IZE is zero on a
5b90: 6c 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f  ll platforms.  O
5ba0: 72 2c 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72  r, even if a lar
5bb0: 67 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d  ger.** default M
5bc0: 4d 41 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63  MAP_SIZE is spec
5bd0: 69 66 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65  ified at compile
5be0: 2d 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65  -time, make sure
5bf0: 20 74 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a   that it does.**
5c00: 20 6e 6f 74 20 65 78 63 65 65 64 20 74 68 65 20   not exceed the 
5c10: 6d 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a  maximum mmap siz
5c20: 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  e..*/.#ifndef SQ
5c30: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
5c40: 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20  P_SIZE.# define 
5c50: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
5c60: 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 64 65 66  MAP_SIZE 0.# def
5c70: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
5c80: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20  LT_MMAP_SIZE_xc 
5c90: 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20 66 72  1  /* Exclude fr
5ca0: 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65  om ctime.c */.#e
5cb0: 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f  ndif.#if SQLITE_
5cc0: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
5cd0: 45 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  E>SQLITE_MAX_MMA
5ce0: 50 5f 53 49 5a 45 0a 23 20 75 6e 64 65 66 20 53  P_SIZE.# undef S
5cf0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
5d00: 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65  AP_SIZE.# define
5d10: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
5d20: 4d 4d 41 50 5f 53 49 5a 45 20 53 51 4c 49 54 45  MMAP_SIZE SQLITE
5d30: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
5d40: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c  endif../*.** Onl
5d50: 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f  y one of SQLITE_
5d60: 45 4e 41 42 4c 45 5f 53 54 41 54 33 20 6f 72 20  ENABLE_STAT3 or 
5d70: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
5d80: 41 54 34 20 63 61 6e 20 62 65 20 64 65 66 69 6e  AT4 can be defin
5d90: 65 64 2e 0a 2a 2a 20 50 72 69 6f 72 69 74 79 20  ed..** Priority 
5da0: 69 73 20 67 69 76 65 6e 20 74 6f 20 53 51 4c 49  is given to SQLI
5db0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 2e  TE_ENABLE_STAT4.
5dc0: 20 20 49 66 20 65 69 74 68 65 72 20 61 72 65 20    If either are 
5dd0: 64 65 66 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a  defined, also.**
5de0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
5df0: 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
5e00: 54 41 54 34 0a 2a 2f 0a 23 69 66 64 65 66 20 53  TAT4.*/.#ifdef S
5e10: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
5e20: 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  T4.# undef SQLIT
5e30: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23  E_ENABLE_STAT3.#
5e40: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
5e50: 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
5e60: 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c  TAT4 1.#elif SQL
5e70: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
5e80: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5e90: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
5ea0: 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53  _STAT4 1.#elif S
5eb0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
5ec0: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 20 75 6e  T3_OR_STAT4.# un
5ed0: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
5ee0: 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
5ef0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53  .#endif../*.** S
5f00: 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
5f10: 45 44 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65  ED will be eithe
5f20: 72 20 31 20 6f 72 20 30 20 64 65 70 65 6e 64 69  r 1 or 0 dependi
5f30: 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72  ng on whether or
5f40: 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 53 65 6c 65   not.** the Sele
5f50: 63 74 20 71 75 65 72 79 20 67 65 6e 65 72 61 74  ct query generat
5f60: 6f 72 20 74 72 61 63 69 6e 67 20 6c 6f 67 69 63  or tracing logic
5f70: 20 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a   is turned on..*
5f80: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
5f90: 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64  LITE_DEBUG) || d
5fa0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
5fb0: 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45  ABLE_SELECTTRACE
5fc0: 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43  ).# define SELEC
5fd0: 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 31  TTRACE_ENABLED 1
5fe0: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
5ff0: 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42  SELECTTRACE_ENAB
6000: 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LED 0.#endif../*
6010: 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
6020: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
6030: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
6040: 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
6050: 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20  busy-handler.** 
6060: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67  callback for a g
6070: 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64  iven sqlite hand
6080: 6c 65 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  le. .**.** The s
6090: 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65  qlite.busyHandle
60a0: 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  r member of the 
60b0: 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f  sqlite struct co
60c0: 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a  ntains the busy.
60d0: 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  ** callback for 
60e0: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
60f0: 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20  dle. Each pager 
6100: 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73  opened via the s
6110: 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20  qlite.** handle 
6120: 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e  is passed a poin
6130: 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75  ter to sqlite.bu
6140: 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62  syHandler. The b
6150: 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63  usy-handler.** c
6160: 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65  allback is curre
6170: 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c  ntly invoked onl
6180: 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61  y from within pa
6190: 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65  ger.c..*/.typede
61a0: 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  f struct BusyHan
61b0: 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72  dler BusyHandler
61c0: 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  ;.struct BusyHan
61d0: 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78  dler {.  int (*x
61e0: 46 75 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74  Func)(void *,int
61f0: 29 3b 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20  );  /* The busy 
6200: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  callback */.  vo
6210: 69 64 20 2a 70 41 72 67 3b 20 20 20 20 20 20 20  id *pArg;       
6220: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
6230: 74 20 61 72 67 20 74 6f 20 62 75 73 79 20 63 61  t arg to busy ca
6240: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20  llback */.  int 
6250: 6e 42 75 73 79 3b 20 20 20 20 20 20 20 20 20 20  nBusy;          
6260: 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d         /* Increm
6270: 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20  ented with each 
6280: 62 75 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a  busy call */.};.
6290: 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74  ./*.** Name of t
62a0: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
62b0: 73 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d  se table.  The m
62c0: 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74  aster database t
62d0: 61 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65  able.** is a spe
62e0: 63 69 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20  cial table that 
62f0: 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20  holds the names 
6300: 61 6e 64 20 61 74 74 72 69 62 75 74 65 73 20 6f  and attributes o
6310: 66 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61  f all.** user ta
6320: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
6330: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  ..*/.#define MAS
6340: 54 45 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22  TER_NAME       "
6350: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23  sqlite_master".#
6360: 64 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54  define TEMP_MAST
6370: 45 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65  ER_NAME  "sqlite
6380: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f  _temp_master"../
6390: 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61  *.** The root-pa
63a0: 67 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72  ge of the master
63b0: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e   database table.
63c0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54  .*/.#define MAST
63d0: 45 52 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a  ER_ROOT       1.
63e0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20  ./*.** The name 
63f0: 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 74 61  of the schema ta
6400: 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ble..*/.#define 
6410: 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20  SCHEMA_TABLE(x) 
6420: 20 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29   ((!OMIT_TEMPDB)
6430: 26 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41  &&(x==1)?TEMP_MA
6440: 53 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52  STER_NAME:MASTER
6450: 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20  _NAME)../*.** A 
6460: 63 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63 72  convenience macr
6470: 6f 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 74  o that returns t
6480: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65  he number of ele
6490: 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61  ments in.** an a
64a0: 72 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  rray..*/.#define
64b0: 20 41 72 72 61 79 53 69 7a 65 28 58 29 20 20 20   ArraySize(X)   
64c0: 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 58   ((int)(sizeof(X
64d0: 29 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29  )/sizeof(X[0])))
64e0: 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e  ../*.** Determin
64f0: 65 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e  e if the argumen
6500: 74 20 69 73 20 61 20 70 6f 77 65 72 20 6f 66 20  t is a power of 
6510: 74 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  two.*/.#define I
6520: 73 50 6f 77 65 72 4f 66 54 77 6f 28 58 29 20 28  sPowerOfTwo(X) (
6530: 28 28 58 29 26 28 28 58 29 2d 31 29 29 3d 3d 30  ((X)&((X)-1))==0
6540: 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  )../*.** The fol
6550: 6c 6f 77 69 6e 67 20 76 61 6c 75 65 20 61 73 20  lowing value as 
6560: 61 20 64 65 73 74 72 75 63 74 6f 72 20 6d 65 61  a destructor mea
6570: 6e 73 20 74 6f 20 75 73 65 20 73 71 6c 69 74 65  ns to use sqlite
6580: 33 44 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68  3DbFree()..** Th
6590: 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  e sqlite3DbFree(
65a0: 29 20 72 6f 75 74 69 6e 65 20 72 65 71 75 69 72  ) routine requir
65b0: 65 73 20 74 77 6f 20 70 61 72 61 6d 65 74 65 72  es two parameter
65c0: 73 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65  s instead of the
65d0: 20 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74   .** one paramet
65e0: 65 72 20 74 68 61 74 20 64 65 73 74 72 75 63 74  er that destruct
65f0: 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e  ors normally wan
6600: 74 2e 20 20 53 6f 20 77 65 20 68 61 76 65 20 74  t.  So we have t
6610: 6f 20 69 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20  o introduce .** 
6620: 74 68 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65  this magic value
6630: 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b   that the code k
6640: 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64  nows to handle d
6650: 69 66 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79  ifferently.  Any
6660: 20 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c   .** pointer wil
6670: 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c  l work here as l
6680: 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64 69 73  ong as it is dis
6690: 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54  tinct from SQLIT
66a0: 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20  E_STATIC.** and 
66b0: 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
66c0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
66d0: 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28  ITE_DYNAMIC   ((
66e0: 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74  sqlite3_destruct
66f0: 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d  or_type)sqlite3M
6700: 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a  allocSize)../*.*
6710: 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d  * When SQLITE_OM
6720: 49 54 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65  IT_WSD is define
6730: 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  d, it means that
6740: 20 74 68 65 20 74 61 72 67 65 74 20 70 6c 61 74   the target plat
6750: 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  form does.** not
6760: 20 73 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c   support Writabl
6770: 65 20 53 74 61 74 69 63 20 44 61 74 61 20 28 57  e Static Data (W
6780: 53 44 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62  SD) such as glob
6790: 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20 76 61  al and static va
67a0: 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20  riables..** All 
67b0: 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65  variables must e
67c0: 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20  ither be on the 
67d0: 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63  stack or dynamic
67e0: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66  ally allocated f
67f0: 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e  rom.** the heap.
6800: 20 20 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e    When WSD is un
6810: 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76  supported, the v
6820: 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74  ariable declarat
6830: 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a  ions scattered.*
6840: 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65  * throughout the
6850: 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73   SQLite code mus
6860: 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e  t become constan
6870: 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65  ts instead.  The
6880: 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d   SQLITE_WSD.** m
6890: 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72  acro is used for
68a0: 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20   this purpose.  
68b0: 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72  And instead of r
68c0: 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76  eferencing the v
68d0: 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63  ariable.** direc
68e0: 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74 73 20  tly, we use its 
68f0: 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65  constant as a ke
6900: 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20  y to lookup the 
6910: 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74  run-time allocat
6920: 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61  ed.** buffer tha
6930: 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72  t holds real var
6940: 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73  iable.  The cons
6950: 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65  tant is also the
6960: 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20   initializer.** 
6970: 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65  for the run-time
6980: 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65   allocated buffe
6990: 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20  r..**.** In the 
69a0: 75 73 75 61 6c 20 63 61 73 65 20 77 68 65 72 65  usual case where
69b0: 20 57 53 44 20 69 73 20 73 75 70 70 6f 72 74 65   WSD is supporte
69c0: 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53  d, the SQLITE_WS
69d0: 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20  D and GLOBAL.** 
69e0: 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f  macros become no
69f0: 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65  -ops and have ze
6a00: 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69  ro performance i
6a10: 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66  mpact..*/.#ifdef
6a20: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
6a30: 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54  .  #define SQLIT
6a40: 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64  E_WSD const.  #d
6a50: 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76  efine GLOBAL(t,v
6a60: 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f  ) (*(t*)sqlite3_
6a70: 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29  wsd_find((void*)
6a80: 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29  &(v), sizeof(v))
6a90: 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
6aa0: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20  te3GlobalConfig 
6ab0: 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71  GLOBAL(struct Sq
6ac0: 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c  lite3Config, sql
6ad0: 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e  ite3Config).  in
6ae0: 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e  t sqlite3_wsd_in
6af0: 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29  it(int N, int J)
6b00: 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  ;.  void *sqlite
6b10: 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20  3_wsd_find(void 
6b20: 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73  *K, int L);.#els
6b30: 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49  e.  #define SQLI
6b40: 54 45 5f 57 53 44 20 0a 20 20 23 64 65 66 69 6e  TE_WSD .  #defin
6b50: 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a  e GLOBAL(t,v) v.
6b60: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
6b70: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71  3GlobalConfig sq
6b80: 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64  lite3Config.#end
6b90: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
6ba0: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61  llowing macros a
6bb0: 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  re used to suppr
6bc0: 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  ess compiler war
6bd0: 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20  nings and to.** 
6be0: 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f  make it clear to
6bf0: 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77   human readers w
6c00: 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70  hen a function p
6c10: 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69  arameter is deli
6c20: 62 65 72 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66  berately .** lef
6c30: 74 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20  t unused within 
6c40: 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75  the body of a fu
6c50: 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75  nction. This usu
6c60: 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65  ally happens whe
6c70: 6e 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20  n.** a function 
6c80: 69 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20  is called via a 
6c90: 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
6ca0: 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68  . For example th
6cb0: 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61  e .** implementa
6cc0: 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61  tion of an SQL a
6cd0: 67 67 72 65 67 61 74 65 20 73 74 65 70 20 63 61  ggregate step ca
6ce0: 6c 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75  llback may not u
6cf0: 73 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65  se the.** parame
6d00: 74 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74  ter indicating t
6d10: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  he number of arg
6d20: 75 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f  uments passed to
6d30: 20 74 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a   the aggregate,.
6d40: 2a 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74  ** if it knows t
6d50: 68 61 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f  hat this is enfo
6d60: 72 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a  rced elsewhere..
6d70: 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e  **.** When a fun
6d80: 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20  ction parameter 
6d90: 69 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61  is not used at a
6da0: 6c 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f  ll within the bo
6db0: 64 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  dy of a function
6dc0: 2c 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72  ,.** it is gener
6dd0: 61 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55  ally named "NotU
6de0: 73 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64  sed" or "NotUsed
6df0: 32 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67  2" to make thing
6e00: 73 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a  s even clearer..
6e10: 2a 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73  ** However, thes
6e20: 65 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73  e macros may als
6e30: 6f 20 62 65 20 75 73 65 64 20 74 6f 20 73 75 70  o be used to sup
6e40: 70 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72  press warnings r
6e50: 65 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72  elated to.** par
6e60: 61 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79  ameters that may
6e70: 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75   or may not be u
6e80: 73 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  sed depending on
6e90: 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74   compilation opt
6ea0: 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61  ions..** For exa
6eb0: 6d 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d  mple those param
6ec0: 65 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20  eters only used 
6ed0: 69 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74  in assert() stat
6ee0: 65 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65  ements. In these
6ef0: 0a 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70 61  .** cases the pa
6f00: 72 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d  rameters are nam
6f10: 65 64 20 61 73 20 70 65 72 20 74 68 65 20 75 73  ed as per the us
6f20: 75 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e  ual conventions.
6f30: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53  .*/.#define UNUS
6f40: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20  ED_PARAMETER(x) 
6f50: 28 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e  (void)(x).#defin
6f60: 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54  e UNUSED_PARAMET
6f70: 45 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f  ER2(x,y) UNUSED_
6f80: 50 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55  PARAMETER(x),UNU
6f90: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29  SED_PARAMETER(y)
6fa0: 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20  ../*.** Forward 
6fb0: 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74  references to st
6fc0: 72 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65  ructures.*/.type
6fd0: 64 65 66 20 73 74 72 75 63 74 20 41 67 67 49 6e  def struct AggIn
6fe0: 66 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65  fo AggInfo;.type
6ff0: 64 65 66 20 73 74 72 75 63 74 20 41 75 74 68 43  def struct AuthC
7000: 6f 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65  ontext AuthConte
7010: 78 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  xt;.typedef stru
7020: 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41  ct AutoincInfo A
7030: 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65  utoincInfo;.type
7040: 64 65 66 20 73 74 72 75 63 74 20 42 69 74 76 65  def struct Bitve
7050: 63 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65  c Bitvec;.typede
7060: 66 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71  f struct CollSeq
7070: 20 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65   CollSeq;.typede
7080: 66 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20  f struct Column 
7090: 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20  Column;.typedef 
70a0: 73 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79  struct Db Db;.ty
70b0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 63 68  pedef struct Sch
70c0: 65 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65  ema Schema;.type
70d0: 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20  def struct Expr 
70e0: 45 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74  Expr;.typedef st
70f0: 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78  ruct ExprList Ex
7100: 70 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20  prList;.typedef 
7110: 73 74 72 75 63 74 20 45 78 70 72 53 70 61 6e 20  struct ExprSpan 
7120: 45 78 70 72 53 70 61 6e 3b 0a 74 79 70 65 64 65  ExprSpan;.typede
7130: 66 20 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b  f struct FKey FK
7140: 65 79 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ey;.typedef stru
7150: 63 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  ct FuncDestructo
7160: 72 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  r FuncDestructor
7170: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7180: 20 46 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66   FuncDef FuncDef
7190: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
71a0: 20 46 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e   FuncDefHash Fun
71b0: 63 44 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65  cDefHash;.typede
71c0: 66 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 20  f struct IdList 
71d0: 49 64 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20  IdList;.typedef 
71e0: 73 74 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64  struct Index Ind
71f0: 65 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ex;.typedef stru
7200: 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49  ct IndexSample I
7210: 6e 64 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65  ndexSample;.type
7220: 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c  def struct KeyCl
7230: 61 73 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79  ass KeyClass;.ty
7240: 70 65 64 65 66 20 73 74 72 75 63 74 20 4b 65 79  pedef struct Key
7250: 49 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79  Info KeyInfo;.ty
7260: 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f  pedef struct Loo
7270: 6b 61 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65  kaside Lookaside
7280: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7290: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c   LookasideSlot L
72a0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79  ookasideSlot;.ty
72b0: 70 65 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64  pedef struct Mod
72c0: 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65  ule Module;.type
72d0: 64 65 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43  def struct NameC
72e0: 6f 6e 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65  ontext NameConte
72f0: 78 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  xt;.typedef stru
7300: 63 74 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a  ct Parse Parse;.
7310: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50  typedef struct P
7320: 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50  rintfArguments P
7330: 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a  rintfArguments;.
7340: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 52  typedef struct R
7350: 6f 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79  owSet RowSet;.ty
7360: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 61 76  pedef struct Sav
7370: 65 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74  epoint Savepoint
7380: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7390: 20 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a   Select Select;.
73a0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
73b0: 51 4c 69 74 65 54 68 72 65 61 64 20 53 51 4c 69  QLiteThread SQLi
73c0: 74 65 54 68 72 65 61 64 3b 0a 74 79 70 65 64 65  teThread;.typede
73d0: 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 44  f struct SelectD
73e0: 65 73 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a  est SelectDest;.
73f0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
7400: 72 63 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a  rcList SrcList;.
7410: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
7420: 74 72 41 63 63 75 6d 20 53 74 72 41 63 63 75 6d  trAccum StrAccum
7430: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7440: 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79   Table Table;.ty
7450: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62  pedef struct Tab
7460: 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b  leLock TableLock
7470: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7480: 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79   Token Token;.ty
7490: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 65  pedef struct Tre
74a0: 65 56 69 65 77 20 54 72 65 65 56 69 65 77 3b 0a  eView TreeView;.
74b0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
74c0: 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a  rigger Trigger;.
74d0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
74e0: 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67 65  riggerPrg Trigge
74f0: 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74  rPrg;.typedef st
7500: 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
7510: 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79   TriggerStep;.ty
7520: 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e 70  pedef struct Unp
7530: 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61  ackedRecord Unpa
7540: 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65  ckedRecord;.type
7550: 64 65 66 20 73 74 72 75 63 74 20 56 54 61 62 6c  def struct VTabl
7560: 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65  e VTable;.typede
7570: 66 20 73 74 72 75 63 74 20 56 74 61 62 43 74 78  f struct VtabCtx
7580: 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65   VtabCtx;.typede
7590: 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20  f struct Walker 
75a0: 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20  Walker;.typedef 
75b0: 73 74 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f  struct WhereInfo
75c0: 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65   WhereInfo;.type
75d0: 64 65 66 20 73 74 72 75 63 74 20 57 69 74 68 20  def struct With 
75e0: 57 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  With;../*.** Def
75f0: 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65  er sourcing vdbe
7600: 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75  .h and btree.h u
7610: 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65 20 22  ntil after the "
7620: 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73  u8" and .** "Bus
7630: 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64 65  yHandler" typede
7640: 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f 20  fs. vdbe.h also 
7650: 72 65 71 75 69 72 65 73 20 61 20 66 65 77 20 6f  requires a few o
7660: 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20  f the opaque.** 
7670: 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28 69  pointer types (i
7680: 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65 66  .e. FuncDef) def
7690: 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23  ined above..*/.#
76a0: 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e 68  include "btree.h
76b0: 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62 65  ".#include "vdbe
76c0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61  .h".#include "pa
76d0: 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  ger.h".#include 
76e0: 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e 63  "pcache.h"..#inc
76f0: 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63  lude "os.h".#inc
7700: 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a  lude "mutex.h"..
7710: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61  ./*.** Each data
7720: 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20  base file to be 
7730: 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65 20  accessed by the 
7740: 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73  system is an ins
7750: 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20  tance.** of the 
7760: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
7770: 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65 20  ure.  There are 
7780: 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20  normally two of 
7790: 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73  these structures
77a0: 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74  .** in the sqlit
77b0: 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20  e.aDb[] array.  
77c0: 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61  aDb[0] is the ma
77d0: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
77e0: 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69   and.** aDb[1] i
77f0: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
7800: 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64  ile used to hold
7810: 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
7820: 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a  s.  Additional.*
7830: 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79 20  * databases may 
7840: 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a  be attached..*/.
7850: 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68  struct Db {.  ch
7860: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
7870: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
7880: 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  is database */. 
7890: 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20   Btree *pBt;    
78a0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54        /* The B*T
78b0: 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66 6f  ree structure fo
78c0: 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  r this database 
78d0: 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66  file */.  u8 saf
78e0: 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f  ety_level;     /
78f0: 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65  * How aggressive
7900: 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61   at syncing data
7910: 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63   to disk */.  Sc
7920: 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
7930: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
7940: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
7950: 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65   (possibly share
7960: 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  d) */.};../*.** 
7970: 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
7980: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
7990: 75 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20  ucture stores a 
79a0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
79b0: 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65  .**.** Most Sche
79c0: 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61  ma objects are a
79d0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
79e0: 20 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63   Btree.  The exc
79f0: 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65  eption is.** the
7a00: 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20   Schema for the 
7a10: 54 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73  TEMP databaes (s
7a20: 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77  qlite3.aDb[1]) w
7a30: 68 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61  hich is free-sta
7a40: 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61  nding..** In sha
7a50: 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20  red cache mode, 
7a60: 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20  a single Schema 
7a70: 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68  object can be sh
7a80: 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65  ared by multiple
7a90: 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20  .** Btrees that 
7aa0: 72 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d  refer to the sam
7ab0: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53  e underlying BtS
7ac0: 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a  hared object..**
7ad0: 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65   .** Schema obje
7ae0: 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69  cts are automati
7af0: 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65  cally deallocate
7b00: 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20  d when the last 
7b10: 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65  Btree that.** re
7b20: 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73  ferences them is
7b30: 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68   destroyed.   Th
7b40: 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73  e TEMP Schema is
7b50: 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20   manually freed 
7b60: 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c  by.** sqlite3_cl
7b70: 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68  ose()..*.** A th
7b80: 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c  read must be hol
7b90: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
7ba0: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
7bb0: 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72  g Btree in order
7bc0: 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63  .** to access Sc
7bd0: 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54  hema content.  T
7be0: 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74  his implies that
7bf0: 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73 74   the thread must
7c00: 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64   also be.** hold
7c10: 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74  ing a mutex on t
7c20: 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65  he sqlite3 conne
7c30: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68  ction pointer th
7c40: 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65  at owns the Btre
7c50: 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50  e..** For a TEMP
7c60: 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68   Schema, only th
7c70: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74  e connection mut
7c80: 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a  ex is required..
7c90: 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61  */.struct Schema
7ca0: 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f   {.  int schema_
7cb0: 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74  cookie;   /* Dat
7cc0: 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65 72  abase schema ver
7cd0: 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20  sion number for 
7ce0: 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69  this file */.  i
7cf0: 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20  nt iGeneration; 
7d00: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f      /* Generatio
7d10: 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72  n counter.  Incr
7d20: 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63  emented with eac
7d30: 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61  h change */.  Ha
7d40: 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20  sh tblHash;     
7d50: 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73     /* All tables
7d60: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
7d70: 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61   */.  Hash idxHa
7d80: 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  sh;        /* Al
7d90: 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65  l (named) indice
7da0: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
7db0: 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67  e */.  Hash trig
7dc0: 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41  Hash;       /* A
7dd0: 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64 65  ll triggers inde
7de0: 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20  xed by name */. 
7df0: 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20   Hash fkeyHash; 
7e00: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72        /* All for
7e10: 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66  eign keys by ref
7e20: 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61  erenced table na
7e30: 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  me */.  Table *p
7e40: 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20  SeqTab;      /* 
7e50: 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  The sqlite_seque
7e60: 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20 62  nce table used b
7e70: 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  y AUTOINCREMENT 
7e80: 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72  */.  u8 file_for
7e90: 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68  mat;      /* Sch
7ea0: 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69  ema format versi
7eb0: 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65  on for this file
7ec0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
7ed0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
7ee0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64  xt encoding used
7ef0: 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61 73   by this databas
7f00: 65 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65 6d  e */.  u16 schem
7f10: 61 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46  aFlags;     /* F
7f20: 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20  lags associated 
7f30: 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d 61  with this schema
7f40: 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f   */.  int cache_
7f50: 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75  size;      /* Nu
7f60: 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f  mber of pages to
7f70: 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63 68   use in the cach
7f80: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  e */.};../*.** T
7f90: 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20  hese macros can 
7fa0: 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c  be used to test,
7fb0: 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62   set, or clear b
7fc0: 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44  its in the .** D
7fd0: 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73  b.pSchema->flags
7fe0: 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
7ff0: 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  ne DbHasProperty
8000: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44  (D,I,P)     (((D
8010: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
8020: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28  a->schemaFlags&(
8030: 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e  P))==(P)).#defin
8040: 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72  e DbHasAnyProper
8050: 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29  ty(D,I,P)  (((D)
8060: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
8070: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50  ->schemaFlags&(P
8080: 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 44  ))!=0).#define D
8090: 62 53 65 74 50 72 6f 70 65 72 74 79 28 44 2c 49  bSetProperty(D,I
80a0: 2c 50 29 20 20 20 20 20 28 44 29 2d 3e 61 44 62  ,P)     (D)->aDb
80b0: 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68  [I].pSchema->sch
80c0: 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64  emaFlags|=(P).#d
80d0: 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f  efine DbClearPro
80e0: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28  perty(D,I,P)   (
80f0: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
8100: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26  ma->schemaFlags&
8110: 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  =~(P)../*.** All
8120: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
8130: 74 68 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e  the DB.pSchema->
8140: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a  flags field..**.
8150: 2a 2a 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61  ** The DB_Schema
8160: 4c 6f 61 64 65 64 20 66 6c 61 67 20 69 73 20 73  Loaded flag is s
8170: 65 74 20 61 66 74 65 72 20 74 68 65 20 64 61 74  et after the dat
8180: 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
8190: 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e   been.** read in
81a0: 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68  to internal hash
81b0: 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44   tables..**.** D
81c0: 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d  B_UnresetViews m
81d0: 65 61 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72  eans that one or
81e0: 20 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76 65   more views have
81f0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68   column names th
8200: 61 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20  at.** have been 
8210: 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20  filled out.  If 
8220: 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  the schema chang
8230: 65 73 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e  es, these column
8240: 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20   names might.** 
8250: 63 68 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74  changes and so t
8260: 68 65 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65  he view will nee
8270: 64 20 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a  d to be reset..*
8280: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68  /.#define DB_Sch
8290: 65 6d 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30  emaLoaded    0x0
82a0: 30 30 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65  001  /* The sche
82b0: 6d 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64  ma has been load
82c0: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  ed */.#define DB
82d0: 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 20 20  _UnresetViews   
82e0: 20 30 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65   0x0002  /* Some
82f0: 20 76 69 65 77 73 20 68 61 76 65 20 64 65 66 69   views have defi
8300: 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ned column names
8310: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45   */.#define DB_E
8320: 6d 70 74 79 20 20 20 20 20 20 20 20 20 20 20 30  mpty           0
8330: 78 30 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69  x0004  /* The fi
8340: 6c 65 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e  le is empty (len
8350: 67 74 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a  gth 0 bytes) */.
8360: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
8370: 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b  r of different k
8380: 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74  inds of things t
8390: 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74  hat can be limit
83a0: 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20  ed.** using the 
83b0: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20  sqlite3_limit() 
83c0: 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64  interface..*/.#d
83d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c  efine SQLITE_N_L
83e0: 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d  IMIT (SQLITE_LIM
83f0: 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  IT_WORKER_THREAD
8400: 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b  S+1)../*.** Look
8410: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20  aside malloc is 
8420: 61 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73  a set of fixed-s
8430: 69 7a 65 20 62 75 66 66 65 72 73 20 74 68 61 74  ize buffers that
8440: 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20   can be used.** 
8450: 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c  to satisfy small
8460: 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72   transient memor
8470: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71  y allocation req
8480: 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74  uests for object
8490: 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20  s.** associated 
84a0: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
84b0: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
84c0: 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20  ction.  The use 
84d0: 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  of.** lookaside 
84e0: 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20  malloc provides 
84f0: 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65  a significant pe
8500: 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63  rformance enhanc
8510: 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78  ement.** (approx
8520: 20 31 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e   10%) by avoidin
8530: 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f  g numerous mallo
8540: 63 2f 66 72 65 65 20 72 65 71 75 65 73 74 73 20  c/free requests 
8550: 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a  while parsing.**
8560: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e   SQL statements.
8570: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61  .**.** The Looka
8580: 73 69 64 65 20 73 74 72 75 63 74 75 72 65 20 68  side structure h
8590: 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69  olds configurati
85a0: 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  on information a
85b0: 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b  bout the.** look
85c0: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62  aside malloc sub
85d0: 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76  system.  Each av
85e0: 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61  ailable memory a
85f0: 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20  llocation in.** 
8600: 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75  the lookaside su
8610: 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65  bsystem is store
8620: 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d on a linked li
8630: 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53  st of LookasideS
8640: 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a  lot.** objects..
8650: 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20  **.** Lookaside 
8660: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
8670: 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72  only allowed for
8680: 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61 72   objects that ar
8690: 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20  e associated.** 
86a0: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
86b0: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
86c0: 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73  ction.  Hence, s
86d0: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
86e0: 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73  n cannot.** be s
86f0: 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69  tored in lookasi
8700: 64 65 20 62 65 63 61 75 73 65 20 69 6e 20 73 68  de because in sh
8710: 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20  ared cache mode 
8720: 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  the schema infor
8730: 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61  mation.** is sha
8740: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20  red by multiple 
8750: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
8760: 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65  ions.  Therefore
8770: 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a  , while parsing.
8780: 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  ** schema inform
8790: 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61  ation, the Looka
87a0: 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c  side.bEnabled fl
87b0: 61 67 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f  ag is cleared so
87c0: 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69   that.** lookasi
87d0: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  de allocations a
87e0: 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63  re not used to c
87f0: 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73 63 68  onstruct the sch
8800: 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a  ema objects..*/.
8810: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
8820: 20 7b 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20   {.  u16 sz;    
8830: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8840: 53 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66  Size of each buf
8850: 66 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  fer in bytes */.
8860: 20 20 75 38 20 62 45 6e 61 62 6c 65 64 3b 20 20    u8 bEnabled;  
8870: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 61 6c            /* Fal
8880: 73 65 20 74 6f 20 64 69 73 61 62 6c 65 20 6e 65  se to disable ne
8890: 77 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f  w lookaside allo
88a0: 63 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20  cations */.  u8 
88b0: 62 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20  bMalloced;      
88c0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
88d0: 70 53 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20  pStart obtained 
88e0: 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c  from sqlite3_mal
88f0: 6c 6f 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  loc() */.  int n
8900: 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Out;            
8910: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
8920: 62 75 66 66 65 72 73 20 63 75 72 72 65 6e 74 6c  buffers currentl
8930: 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f  y checked out */
8940: 0a 20 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20  .  int mxOut;   
8950: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 69             /* Hi
8960: 67 68 77 61 74 65 72 20 6d 61 72 6b 20 66 6f 72  ghwater mark for
8970: 20 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61   nOut */.  int a
8980: 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20  nStat[3];       
8990: 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20     /* 0: hits.  
89a0: 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20  1: size misses. 
89b0: 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20   2: full misses 
89c0: 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  */.  LookasideSl
89d0: 6f 74 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20  ot *pFree;   /* 
89e0: 4c 69 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c  List of availabl
89f0: 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76  e buffers */.  v
8a00: 6f 69 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20  oid *pStart;    
8a10: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
8a20: 62 79 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c  byte of availabl
8a30: 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a  e memory space *
8a40: 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20  /.  void *pEnd; 
8a50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
8a60: 69 72 73 74 20 62 79 74 65 20 70 61 73 74 20 65  irst byte past e
8a70: 6e 64 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  nd of available 
8a80: 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75  space */.};.stru
8a90: 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  ct LookasideSlot
8aa0: 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c   {.  LookasideSl
8ab0: 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a  ot *pNext;    /*
8ac0: 20 4e 65 78 74 20 62 75 66 66 65 72 20 69 6e 20   Next buffer in 
8ad0: 74 68 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65  the list of free
8ae0: 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a   buffers */.};..
8af0: 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74 61 62  /*.** A hash tab
8b00: 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20  le for function 
8b10: 64 65 66 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a  definitions..**.
8b20: 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75 6e  ** Hash each Fun
8b30: 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20 69  cDef structure i
8b40: 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 46  nto one of the F
8b50: 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20 73  uncDefHash.a[] s
8b60: 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69  lots..** Collisi
8b70: 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20 46  ons are on the F
8b80: 75 6e 63 44 65 66 2e 70 48 61 73 68 20 63 68 61  uncDef.pHash cha
8b90: 69 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  in..*/.struct Fu
8ba0: 6e 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75  ncDefHash {.  Fu
8bb0: 6e 63 44 65 66 20 2a 61 5b 32 33 5d 3b 20 20 20  ncDef *a[23];   
8bc0: 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c      /* Hash tabl
8bd0: 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  e for functions 
8be0: 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51  */.};..#ifdef SQ
8bf0: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
8c00: 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49  TICATION./*.** I
8c10: 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20  nformation held 
8c20: 69 6e 20 74 68 65 20 22 73 71 6c 69 74 65 33 22  in the "sqlite3"
8c30: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
8c40: 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20  tion object and 
8c50: 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67  used.** to manag
8c60: 65 20 75 73 65 72 20 61 75 74 68 65 6e 74 69 63  e user authentic
8c70: 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65  ation..*/.typede
8c80: 66 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  f struct sqlite3
8c90: 5f 75 73 65 72 61 75 74 68 20 73 71 6c 69 74 65  _userauth sqlite
8ca0: 33 5f 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75  3_userauth;.stru
8cb0: 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  ct sqlite3_usera
8cc0: 75 74 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c  uth {.  u8 authL
8cd0: 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20  evel;           
8ce0: 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
8cf0: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   authentication 
8d00: 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e  level */.  int n
8d10: 41 75 74 68 50 57 3b 20 20 20 20 20 20 20 20 20  AuthPW;         
8d20: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
8d30: 20 6f 66 20 74 68 65 20 7a 41 75 74 68 50 57 20   of the zAuthPW 
8d40: 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68  in bytes */.  ch
8d50: 61 72 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20  ar *zAuthPW;    
8d60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
8d70: 61 73 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20  assword used to 
8d80: 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a  authenticate */.
8d90: 20 20 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65    char *zAuthUse
8da0: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
8db0: 2f 2a 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65  /* User name use
8dc0: 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74  d to authenticat
8dd0: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f  e */.};../* Allo
8de0: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73  wed values for s
8df0: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e  qlite3_userauth.
8e00: 61 75 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65  authLevel */.#de
8e10: 66 69 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f  fine UAUTH_Unkno
8e20: 77 6e 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20  wn     0     /* 
8e30: 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e  Authentication n
8e40: 6f 74 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a  ot yet checked *
8e50: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
8e60: 46 61 69 6c 20 20 20 20 20 20 20 20 31 20 20 20  Fail        1   
8e70: 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e    /* User authen
8e80: 74 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20  tication failed 
8e90: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48  */.#define UAUTH
8ea0: 5f 55 73 65 72 20 20 20 20 20 20 20 20 32 20 20  _User        2  
8eb0: 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61     /* Authentica
8ec0: 74 65 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20  ted as a normal 
8ed0: 75 73 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  user */.#define 
8ee0: 55 41 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20  UAUTH_Admin     
8ef0: 20 20 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65    3     /* Authe
8f00: 6e 74 69 63 61 74 65 64 20 61 73 20 61 6e 20 61  nticated as an a
8f10: 64 6d 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a  dministrator */.
8f20: 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73  ./* Functions us
8f30: 65 64 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20  ed only by user 
8f40: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f  authorization lo
8f50: 67 69 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  gic */.int sqlit
8f60: 65 33 55 73 65 72 41 75 74 68 54 61 62 6c 65 28  e3UserAuthTable(
8f70: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
8f80: 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74  t sqlite3UserAut
8f90: 68 43 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69  hCheckLogin(sqli
8fa0: 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
8fb0: 2c 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,u8*);.void sqli
8fc0: 74 65 33 55 73 65 72 41 75 74 68 49 6e 69 74 28  te3UserAuthInit(
8fd0: 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
8fe0: 73 71 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63  sqlite3CryptFunc
8ff0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
9000: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
9010: 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20  lue**);..#endif 
9020: 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  /* SQLITE_USER_A
9030: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f  UTHENTICATION */
9040: 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20  ../*.** typedef 
9050: 66 6f 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a  for the authoriz
9060: 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66  ation callback f
9070: 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64  unction..*/.#ifd
9080: 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  ef SQLITE_USER_A
9090: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20  UTHENTICATION.  
90a0: 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71  typedef int (*sq
90b0: 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69  lite3_xauth)(voi
90c0: 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  d*,int,const cha
90d0: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  r*,const char*,c
90e0: 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20  onst char*,.    
90f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9100: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74             const
9110: 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
9120: 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79  ar*);.#else.  ty
9130: 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69  pedef int (*sqli
9140: 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a  te3_xauth)(void*
9150: 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
9160: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
9170: 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20  st char*,.      
9180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9190: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
91a0: 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a  har*);.#endif...
91b0: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
91c0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ase connection i
91d0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
91e0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
91f0: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
9200: 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20  uct sqlite3 {.  
9210: 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66  sqlite3_vfs *pVf
9220: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
9230: 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f   OS Interface */
9240: 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a  .  struct Vdbe *
9250: 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20  pVdbe;          
9260: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69   /* List of acti
9270: 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ve virtual machi
9280: 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71  nes */.  CollSeq
9290: 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20   *pDfltColl;    
92a0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
92b0: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20  fault collating 
92c0: 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59  sequence (BINARY
92d0: 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  ) */.  sqlite3_m
92e0: 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20  utex *mutex;    
92f0: 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69       /* Connecti
9300: 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62  on mutex */.  Db
9310: 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20   *aDb;          
9320: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
9330: 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  ll backends */. 
9340: 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20   int nDb;       
9350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9360: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b  * Number of back
9370: 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69  ends currently i
9380: 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66  n use */.  int f
9390: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
93a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63           /* Misc
93b0: 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e  ellaneous flags.
93c0: 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
93d0: 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20  i64 lastRowid;  
93e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
93f0: 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72   ROWID of most r
9400: 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65  ecent insert (se
9410: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36  e above) */.  i6
9420: 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 szMmap;       
9430: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
9440: 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65  efault mmap_size
9450: 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e   setting */.  un
9460: 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46  signed int openF
9470: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46  lags;       /* F
9480: 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73  lags passed to s
9490: 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e  qlite3_vfs.xOpen
94a0: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43  () */.  int errC
94b0: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
94c0: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
94d0: 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20  cent error code 
94e0: 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20  (SQLITE_*) */.  
94f0: 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20  int errMask;    
9500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9510: 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20   & result codes 
9520: 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65  with this before
9530: 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20   returning */.  
9540: 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20  u16 dbOptFlags; 
9550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9560: 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65   Flags to enable
9570: 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a  /disable optimiz
9580: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 65  ations */.  u8 e
9590: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
95a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
95b0: 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  t encoding */.  
95c0: 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20  u8 autoCommit;  
95d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
95e0: 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74   The auto-commit
95f0: 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74   flag. */.  u8 t
9600: 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20  emp_store;      
9610: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20            /* 1: 
9620: 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30  file 2: memory 0
9630: 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75  : default */.  u
9640: 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20  8 mallocFailed; 
9650: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9660: 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65 20  True if we have 
9670: 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61  seen a malloc fa
9680: 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 64 66  ilure */.  u8 df
9690: 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20  ltLockMode;     
96a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
96b0: 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65  ult locking-mode
96c0: 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64 62   for attached db
96d0: 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68  s */.  signed ch
96e0: 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20  ar nextAutovac; 
96f0: 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20       /* Autovac 
9700: 73 65 74 74 69 6e 67 20 61 66 74 65 72 20 56 41  setting after VA
9710: 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20  CUUM if >=0 */. 
9720: 20 75 38 20 73 75 70 70 72 65 73 73 45 72 72 3b   u8 suppressErr;
9730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9740: 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65  * Do not issue e
9750: 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66  rror messages if
9760: 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74   true */.  u8 vt
9770: 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20  abOnConflict;   
9780: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
9790: 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20  e to return for 
97a0: 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c  s3_vtab_on_confl
97b0: 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73  ict() */.  u8 is
97c0: 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
97d0: 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65  oint;    /* True
97e0: 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73   if the outermos
97f0: 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61  t savepoint is a
9800: 20 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78   TS */.  int nex
9810: 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20  tPagesize;      
9820: 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69         /* Pagesi
9830: 7a 65 20 61 66 74 65 72 20 56 41 43 55 55 4d 20  ze after VACUUM 
9840: 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d  if >0 */.  u32 m
9850: 61 67 69 63 3b 20 20 20 20 20 20 20 20 20 20 20  agic;           
9860: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69           /* Magi
9870: 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74  c number for det
9880: 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75  ect library misu
9890: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61  se */.  int nCha
98a0: 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nge;            
98b0: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72        /* Value r
98c0: 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
98d0: 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a  e3_changes() */.
98e0: 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e    int nTotalChan
98f0: 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
9900: 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65  /* Value returne
9910: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74  d by sqlite3_tot
9920: 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a  al_changes() */.
9930: 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c    int aLimit[SQL
9940: 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20  ITE_N_LIMIT];   
9950: 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69  /* Limits */.  i
9960: 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61  nt nMaxSorterMma
9970: 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p;           /* 
9980: 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20  Maximum size of 
9990: 72 65 67 69 6f 6e 73 20 6d 61 70 70 65 64 20 62  regions mapped b
99a0: 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74  y sorter */.  st
99b0: 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74  ruct sqlite3Init
99c0: 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49  Info {      /* I
99d0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
99e0: 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a  during initializ
99f0: 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74  ation */.    int
9a00: 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20   newTnum;       
9a10: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74           /* Root
9a20: 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65  page of table be
9a30: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
9a40: 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20  */.    u8 iDb;  
9a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a60: 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66     /* Which db f
9a70: 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69  ile is being ini
9a80: 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20  tialized */.    
9a90: 75 38 20 62 75 73 79 3b 20 20 20 20 20 20 20 20  u8 busy;        
9aa0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
9ab0: 52 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79  RUE if currently
9ac0: 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f   initializing */
9ad0: 0a 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54 72  .    u8 orphanTr
9ae0: 69 67 67 65 72 3b 20 20 20 20 20 20 20 20 20 20  igger;          
9af0: 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65   /* Last stateme
9b00: 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54  nt is orphaned T
9b10: 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20  EMP trigger */. 
9b20: 20 20 20 75 38 20 69 6d 70 6f 73 74 65 72 54 61     u8 imposterTa
9b30: 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ble;           /
9b40: 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d  * Building an im
9b50: 70 6f 73 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a  poster table */.
9b60: 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20    } init;.  int 
9b70: 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20 20 20  nVdbeActive;    
9b80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
9b90: 62 65 72 20 6f 66 20 56 44 42 45 73 20 63 75 72  ber of VDBEs cur
9ba0: 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a  rently running *
9bb0: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61  /.  int nVdbeRea
9bc0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
9bd0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
9be0: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
9bf0: 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a   read or write *
9c00: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69  /.  int nVdbeWri
9c10: 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
9c20: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
9c30: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
9c40: 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20   read and write 
9c50: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78  */.  int nVdbeEx
9c60: 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ec;             
9c70: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
9c80: 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20  nested calls to 
9c90: 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20  VdbeExec() */.  
9ca0: 69 6e 74 20 6e 56 44 65 73 74 72 6f 79 3b 20 20  int nVDestroy;  
9cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9cc0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
9cd0: 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f 70  e OP_VDestroy op
9ce0: 65 72 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e  erations */.  in
9cf0: 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20  t nExtension;   
9d00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
9d10: 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20  umber of loaded 
9d20: 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20  extensions */.  
9d30: 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f  void **aExtensio
9d40: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
9d50: 20 41 72 72 61 79 20 6f 66 20 73 68 61 72 65 64   Array of shared
9d60: 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73   library handles
9d70: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54 72   */.  void (*xTr
9d80: 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74  ace)(void*,const
9d90: 20 63 68 61 72 2a 29 3b 20 20 20 20 20 20 20 20   char*);        
9da0: 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f  /* Trace functio
9db0: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72  n */.  void *pTr
9dc0: 61 63 65 41 72 67 3b 20 20 20 20 20 20 20 20 20  aceArg;         
9dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9de0: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
9df0: 74 68 65 20 74 72 61 63 65 20 66 75 6e 63 74 69  the trace functi
9e00: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  on */.  void (*x
9e10: 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63  Profile)(void*,c
9e20: 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b  onst char*,u64);
9e30: 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66    /* Profiling f
9e40: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
9e50: 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20  d *pProfileArg; 
9e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e70: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
9e80: 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75  nt to profile fu
9e90: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
9ea0: 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20   *pCommitArg;   
9eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9ec0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f   Argument to xCo
9ed0: 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a  mmitCallback() *
9ee0: 2f 20 20 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f  /   .  int (*xCo
9ef0: 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f  mmitCallback)(vo
9f00: 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f  id*);    /* Invo
9f10: 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d  ked at every com
9f20: 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mit. */.  void *
9f30: 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20  pRollbackArg;   
9f40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
9f50: 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c  rgument to xRoll
9f60: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a  backCallback() *
9f70: 2f 20 20 20 0a 20 20 76 6f 69 64 20 28 2a 78 52  /   .  void (*xR
9f80: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29  ollbackCallback)
9f90: 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f  (void*); /* Invo
9fa0: 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d  ked at every com
9fb0: 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mit. */.  void *
9fc0: 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f  pUpdateArg;.  vo
9fd0: 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c  id (*xUpdateCall
9fe0: 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  back)(void*,int,
9ff0: 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e   const char*,con
a000: 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f  st char*,sqlite_
a010: 69 6e 74 36 34 29 3b 0a 23 69 66 6e 64 65 66 20  int64);.#ifndef 
a020: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
a030: 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c    int (*xWalCall
a040: 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71  back)(void *, sq
a050: 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
a060: 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76  har *, int);.  v
a070: 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65  oid *pWalArg;.#e
a080: 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f  ndif.  void(*xCo
a090: 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c  llNeeded)(void*,
a0a0: 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65  sqlite3*,int eTe
a0b0: 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72  xtRep,const char
a0c0: 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c  *);.  void(*xCol
a0d0: 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a  lNeeded16)(void*
a0e0: 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54  ,sqlite3*,int eT
a0f0: 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69  extRep,const voi
a100: 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f  d*);.  void *pCo
a110: 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73  llNeededArg;.  s
a120: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45  qlite3_value *pE
a130: 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  rr;          /* 
a140: 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f  Most recent erro
a150: 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75  r message */.  u
a160: 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74  nion {.    volat
a170: 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72  ile int isInterr
a180: 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69  upted; /* True i
a190: 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  f sqlite3_interr
a1a0: 75 70 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c  upt has been cal
a1b0: 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c  led */.    doubl
a1c0: 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20  e notUsed1;     
a1d0: 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72         /* Spacer
a1e0: 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f   */.  } u1;.  Lo
a1f0: 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64  okaside lookasid
a200: 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  e;          /* L
a210: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
a220: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f  configuration */
a230: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
a240: 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49  OMIT_AUTHORIZATI
a250: 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 78 61 75  ON.  sqlite3_xau
a260: 74 68 20 78 41 75 74 68 3b 20 20 20 20 20 20 20  th xAuth;       
a270: 20 20 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74     /* Access aut
a280: 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74  horization funct
a290: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
a2a0: 41 75 74 68 41 72 67 3b 20 20 20 20 20 20 20 20  AuthArg;        
a2b0: 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72         /* 1st ar
a2c0: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63  gument to the ac
a2d0: 63 65 73 73 20 61 75 74 68 20 66 75 6e 63 74 69  cess auth functi
a2e0: 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  on */.#endif.#if
a2f0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
a300: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
a310: 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67  CK.  int (*xProg
a320: 72 65 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20  ress)(void *);  
a330: 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65     /* The progre
a340: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ss callback */. 
a350: 20 76 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73   void *pProgress
a360: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Arg;           /
a370: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
a380: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
a390: 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ack */.  unsigne
a3a0: 64 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20  d nProgressOps; 
a3b0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
a3c0: 20 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20   of opcodes for 
a3d0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
a3e0: 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  k */.#endif.#ifn
a3f0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
a400: 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69  VIRTUALTABLE.  i
a410: 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20  nt nVTrans;     
a420: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a430: 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f  Allocated size o
a440: 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48  f aVTrans */.  H
a450: 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20  ash aModule;    
a460: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a470: 70 6f 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c  populated by sql
a480: 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75  ite3_create_modu
a490: 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74  le() */.  VtabCt
a4a0: 78 20 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20  x *pVtabCtx;    
a4b0: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65          /* Conte
a4c0: 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 76 74  xt for active vt
a4d0: 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74  ab connect/creat
a4e0: 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a  e */.  VTable **
a4f0: 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20  aVTrans;        
a500: 20 20 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20       /* Virtual 
a510: 74 61 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e  tables with open
a520: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f   transactions */
a530: 0a 20 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63  .  VTable *pDisc
a540: 6f 6e 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44 69  onnect;    /* Di
a550: 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69  sconnect these i
a560: 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70  n next sqlite3_p
a570: 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64  repare() */.#end
a580: 69 66 0a 20 20 46 75 6e 63 44 65 66 48 61 73 68  if.  FuncDefHash
a590: 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20   aFunc;         
a5a0: 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65     /* Hash table
a5b0: 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66   of connection f
a5c0: 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61  unctions */.  Ha
a5d0: 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20  sh aCollSeq;    
a5e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
a5f0: 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ll collating seq
a600: 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79  uences */.  Busy
a610: 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64  Handler busyHand
a620: 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73  ler;      /* Bus
a630: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
a640: 44 62 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b  Db aDbStatic[2];
a650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a660: 20 53 74 61 74 69 63 20 73 70 61 63 65 20 66 6f   Static space fo
a670: 72 20 74 68 65 20 32 20 64 65 66 61 75 6c 74 20  r the 2 default 
a680: 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61  backends */.  Sa
a690: 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f  vepoint *pSavepo
a6a0: 69 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  int;        /* L
a6b0: 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 73 61  ist of active sa
a6c0: 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  vepoints */.  in
a6d0: 74 20 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20  t busyTimeout;  
a6e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
a6f0: 75 73 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65  usy handler time
a700: 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a  out, in msec */.
a710: 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74    int nSavepoint
a720: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a730: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e  /* Number of non
a740: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76  -transaction sav
a750: 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  epoints */.  int
a760: 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20   nStatement;    
a770: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
a780: 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73  mber of nested s
a790: 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63  tatement-transac
a7a0: 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20  tions  */.  i64 
a7b0: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
a7c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74            /* Net
a7d0: 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
a7e0: 61 69 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73  aints this trans
a7f0: 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34  action. */.  i64
a800: 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e   nDeferredImmCon
a810: 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  s;         /* Ne
a820: 74 20 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64  t deferred immed
a830: 69 61 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  iate constraints
a840: 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74   */.  int *pnByt
a850: 65 73 46 72 65 65 64 3b 20 20 20 20 20 20 20 20  esFreed;        
a860: 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55      /* If not NU
a870: 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68  LL, increment th
a880: 69 73 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a  is in DbFree() *
a890: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
a8a0: 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f  ENABLE_UNLOCK_NO
a8b0: 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f  TIFY.  /* The fo
a8c0: 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65  llowing variable
a8d0: 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63  s are all protec
a8e0: 74 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49  ted by the STATI
a8f0: 43 5f 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d  C_MASTER .  ** m
a900: 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c  utex, not by sql
a910: 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79  ite3.mutex. They
a920: 20 61 72 65 20 75 73 65 64 20 62 79 20 63 6f 64   are used by cod
a930: 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a  e in notify.c. .
a940: 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58    **.  ** When X
a950: 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69  .pUnlockConnecti
a960: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
a970: 73 20 74 68 61 74 20 58 20 69 73 20 77 61 69 74  s that X is wait
a980: 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a  ing for Y to.  *
a990: 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74  * unlock so that
a9a0: 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e   it can proceed.
a9b0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20  .  **.  ** When 
a9c0: 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65  X.pBlockingConne
a9d0: 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d  ction==Y, that m
a9e0: 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68  eans that someth
a9f0: 69 6e 67 20 74 68 61 74 20 58 20 74 72 69 65 64  ing that X tried
aa00: 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64  .  ** tried to d
aa10: 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65  o recently faile
aa20: 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45  d with an SQLITE
aa30: 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75  _LOCKED error du
aa40: 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20  e to locks.  ** 
aa50: 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a  held by Y..  */.
aa60: 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63    sqlite3 *pBloc
aa70: 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20  kingConnection; 
aa80: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68  /* Connection th
aa90: 61 74 20 63 61 75 73 65 64 20 53 51 4c 49 54 45  at caused SQLITE
aaa0: 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c  _LOCKED */.  sql
aab0: 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e  ite3 *pUnlockCon
aac0: 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20  nection;        
aad0: 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e     /* Connection
aae0: 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e   to watch for un
aaf0: 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  lock */.  void *
ab00: 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20  pUnlockArg;     
ab10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab20: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
ab30: 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a  UnlockNotify */.
ab40: 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b    void (*xUnlock
ab50: 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c  Notify)(void **,
ab60: 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63   int);  /* Unloc
ab70: 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63  k notify callbac
ab80: 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  k */.  sqlite3 *
ab90: 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20  pNextBlocked;   
aba0: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20       /* Next in 
abb0: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63  list of all bloc
abc0: 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20  ked connections 
abd0: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  */.#endif.#ifdef
abe0: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
abf0: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71  HENTICATION.  sq
ac00: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 61  lite3_userauth a
ac10: 75 74 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 55  uth;        /* U
ac20: 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69  ser authenticati
ac30: 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a  on information *
ac40: 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a  /.#endif.};../*.
ac50: 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69  ** A macro to di
ac60: 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64  scover the encod
ac70: 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61 73  ing of a databas
ac80: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43  e..*/.#define SC
ac90: 48 45 4d 41 5f 45 4e 43 28 64 62 29 20 28 28 64  HEMA_ENC(db) ((d
aca0: 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65  b)->aDb[0].pSche
acb0: 6d 61 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65  ma->enc).#define
acc0: 20 45 4e 43 28 64 62 29 20 20 20 20 20 20 20 20   ENC(db)        
acd0: 28 28 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a  ((db)->enc)../*.
ace0: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
acf0: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
ad00: 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65  e3.flags..*/.#de
ad10: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
ad20: 54 72 61 63 65 20 20 20 20 20 20 30 78 30 30 30  Trace      0x000
ad30: 30 30 30 30 31 20 20 2f 2a 20 54 72 75 65 20 74  00001  /* True t
ad40: 6f 20 74 72 61 63 65 20 56 44 42 45 20 65 78 65  o trace VDBE exe
ad50: 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  cution */.#defin
ad60: 65 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  e SQLITE_InternC
ad70: 68 61 6e 67 65 73 20 20 30 78 30 30 30 30 30 30  hanges  0x000000
ad80: 30 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74  02  /* Uncommitt
ad90: 65 64 20 48 61 73 68 20 74 61 62 6c 65 20 63 68  ed Hash table ch
ada0: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
adb0: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e   SQLITE_FullFSyn
adc0: 63 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30  c      0x0000000
add0: 34 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66  4  /* Use full f
ade0: 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b  sync on the back
adf0: 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  end */.#define S
ae00: 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53  QLITE_CkptFullFS
ae10: 79 6e 63 20 20 30 78 30 30 30 30 30 30 30 38 20  ync  0x00000008 
ae20: 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79   /* Use full fsy
ae30: 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e  nc for checkpoin
ae40: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
ae50: 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20  ITE_CacheSpill  
ae60: 20 20 20 30 78 30 30 30 30 30 30 31 30 20 20 2f     0x00000010  /
ae70: 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61  * OK to spill pa
ae80: 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65  ger cache */.#de
ae90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
aea0: 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30  ColNames   0x000
aeb0: 30 30 30 32 30 20 20 2f 2a 20 53 68 6f 77 20 66  00020  /* Show f
aec0: 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ull column names
aed0: 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64   on SELECT */.#d
aee0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f  efine SQLITE_Sho
aef0: 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30  rtColNames  0x00
af00: 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20  000040  /* Show 
af10: 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61  short columns na
af20: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  mes */.#define S
af30: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
af40: 20 20 20 20 20 30 78 30 30 30 30 30 30 38 30 20       0x00000080 
af50: 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63   /* Count rows c
af60: 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54  hanged by INSERT
af70: 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  , */.           
af80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
afa0: 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55  *   DELETE, or U
afb0: 50 44 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e  PDATE and return
afc0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
afd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
afe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
aff0: 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69     the count usi
b000: 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a  ng a callback. *
b010: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b020: 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20  _NullCallback   
b030: 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49  0x00000100  /* I
b040: 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61  nvoke the callba
b050: 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a  ck once if the *
b060: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
b070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b080: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
b090: 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
b0a0: 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
b0b0: 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20  SQLITE_SqlTrace 
b0c0: 20 20 20 20 20 20 30 78 30 30 30 30 30 32 30 30        0x00000200
b0d0: 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74    /* Debug print
b0e0: 20 53 51 4c 20 61 73 20 69 74 20 65 78 65 63 75   SQL as it execu
b0f0: 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  tes */.#define S
b100: 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e  QLITE_VdbeListin
b110: 67 20 20 20 20 30 78 30 30 30 30 30 34 30 30 20  g    0x00000400 
b120: 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e   /* Debug listin
b130: 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72  gs of VDBE progr
b140: 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ams */.#define S
b150: 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d  QLITE_WriteSchem
b160: 61 20 20 20 20 30 78 30 30 30 30 30 38 30 30 20  a    0x00000800 
b170: 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65   /* OK to update
b180: 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a   SQLITE_MASTER *
b190: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b1a0: 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63 65 20  _VdbeAddopTrace 
b1b0: 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20 54  0x00001000  /* T
b1c0: 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62 65  race sqlite3Vdbe
b1d0: 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f  AddOp() calls */
b1e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b1f0: 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30  IgnoreChecks   0
b200: 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20 44 6f  x00002000  /* Do
b210: 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65   not enforce che
b220: 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ck constraints *
b230: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b240: 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64  _ReadUncommitted
b250: 20 30 78 30 30 30 34 30 30 30 20 20 2f 2a 20 46   0x0004000  /* F
b260: 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  or shared-cache 
b270: 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mode */.#define 
b280: 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c  SQLITE_LegacyFil
b290: 65 46 6d 74 20 20 30 78 30 30 30 30 38 30 30 30  eFmt  0x00008000
b2a0: 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20    /* Create new 
b2b0: 64 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72  databases in for
b2c0: 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65  mat 1 */.#define
b2d0: 20 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79   SQLITE_Recovery
b2e0: 4d 6f 64 65 20 20 20 30 78 30 30 30 31 30 30 30  Mode   0x0001000
b2f0: 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68  0  /* Ignore sch
b300: 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64  ema errors */.#d
b310: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76  efine SQLITE_Rev
b320: 65 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 30  erseOrder   0x00
b330: 30 32 30 30 30 30 20 20 2f 2a 20 52 65 76 65 72  020000  /* Rever
b340: 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c  se unordered SEL
b350: 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ECTs */.#define 
b360: 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65  SQLITE_RecTrigge
b370: 72 73 20 20 20 20 30 78 30 30 30 34 30 30 30 30  rs    0x00040000
b380: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75    /* Enable recu
b390: 72 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a  rsive triggers *
b3a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b3b0: 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20  _ForeignKeys    
b3c0: 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20 45  0x00080000  /* E
b3d0: 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b  nforce foreign k
b3e0: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20  ey constraints  
b3f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b400: 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20  E_AutoIndex     
b410: 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20   0x00100000  /* 
b420: 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63  Enable automatic
b430: 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66   indexes */.#def
b440: 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 65 66 65  ine SQLITE_Prefe
b450: 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30 32 30  rBuiltin  0x0020
b460: 30 30 30 30 20 20 2f 2a 20 50 72 65 66 65 72 65  0000  /* Prefere
b470: 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20  nce to built-in 
b480: 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65  funcs */.#define
b490: 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65   SQLITE_LoadExte
b4a0: 6e 73 69 6f 6e 20 20 30 78 30 30 34 30 30 30 30  nsion  0x0040000
b4b0: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61  0  /* Enable loa
b4c0: 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23  d_extension */.#
b4d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e  define SQLITE_En
b4e0: 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78 30  ableTrigger  0x0
b4f0: 30 38 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65  0800000  /* True
b500: 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67   to enable trigg
b510: 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ers */.#define S
b520: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20  QLITE_DeferFKs  
b530: 20 20 20 20 20 30 78 30 31 30 30 30 30 30 30 20       0x01000000 
b540: 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b   /* Defer all FK
b550: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
b560: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
b570: 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78  ueryOnly      0x
b580: 30 32 30 30 30 30 30 30 20 20 2f 2a 20 44 69 73  02000000  /* Dis
b590: 61 62 6c 65 20 64 61 74 61 62 61 73 65 20 63 68  able database ch
b5a0: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
b5b0: 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20   SQLITE_VdbeEQP 
b5c0: 20 20 20 20 20 20 20 30 78 30 34 30 30 30 30 30         0x0400000
b5d0: 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c  0  /* Debug EXPL
b5e0: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a  AIN QUERY PLAN *
b5f0: 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f  /.../*.** Bits o
b600: 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62  f the sqlite3.db
b610: 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74  OptFlags field t
b620: 68 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20  hat are used by 
b630: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74  the.** sqlite3_t
b640: 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49  est_control(SQLI
b650: 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49  TE_TESTCTRL_OPTI
b660: 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69  MIZATIONS,...) i
b670: 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73  nterface to.** s
b680: 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62  electively disab
b690: 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d  le various optim
b6a0: 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65  izations..*/.#de
b6b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72  fine SQLITE_Quer
b6c0: 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30  yFlattener 0x000
b6d0: 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61  1   /* Query fla
b6e0: 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69  ttening */.#defi
b6f0: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e  ne SQLITE_Column
b700: 43 61 63 68 65 20 20 20 20 30 78 30 30 30 32 20  Cache    0x0002 
b710: 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68    /* Column cach
b720: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
b730: 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72  ITE_GroupByOrder
b740: 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47     0x0004   /* G
b750: 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20  ROUPBY cover of 
b760: 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69  ORDERBY */.#defi
b770: 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72  ne SQLITE_Factor
b780: 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20  OutConst 0x0008 
b790: 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61    /* Constant fa
b7a0: 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20  ctoring */./*   
b7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 74               not
b7c0: 20 75 73 65 64 20 20 20 20 30 78 30 30 31 30 20   used    0x0010 
b7d0: 20 20 2f 2f 20 57 61 73 3a 20 53 51 4c 49 54 45    // Was: SQLITE
b7e0: 5f 49 64 78 52 65 61 6c 41 73 49 6e 74 20 2a 2f  _IdxRealAsInt */
b7f0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b800: 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30  DistinctOpt    0
b810: 78 30 30 32 30 20 20 20 2f 2a 20 44 49 53 54 49  x0020   /* DISTI
b820: 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65  NCT using indexe
b830: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b840: 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e  ITE_CoverIdxScan
b850: 20 20 20 30 78 30 30 34 30 20 20 20 2f 2a 20 43     0x0040   /* C
b860: 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63  overing index sc
b870: 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ans */.#define S
b880: 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78  QLITE_OrderByIdx
b890: 4a 6f 69 6e 20 30 78 30 30 38 30 20 20 20 2f 2a  Join 0x0080   /*
b8a0: 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69   ORDER BY of joi
b8b0: 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a  ns via index */.
b8c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
b8d0: 75 62 71 43 6f 72 6f 75 74 69 6e 65 20 20 30 78  ubqCoroutine  0x
b8e0: 30 31 30 30 20 20 20 2f 2a 20 45 76 61 6c 75 61  0100   /* Evalua
b8f0: 74 65 20 73 75 62 71 75 65 72 69 65 73 20 61 73  te subqueries as
b900: 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a 2f 0a 23   coroutines */.#
b910: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72  define SQLITE_Tr
b920: 61 6e 73 69 74 69 76 65 20 20 20 20 20 30 78 30  ansitive     0x0
b930: 32 30 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74  200   /* Transit
b940: 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ive constraints 
b950: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b960: 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20  E_OmitNoopJoin  
b970: 20 30 78 30 34 30 30 20 20 20 2f 2a 20 4f 6d 69   0x0400   /* Omi
b980: 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20  t unused tables 
b990: 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66  in joins */.#def
b9a0: 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61 74 33  ine SQLITE_Stat3
b9b0: 34 20 20 20 20 20 20 20 20 20 30 78 30 38 30 30  4         0x0800
b9c0: 20 20 20 2f 2a 20 55 73 65 20 53 54 41 54 33 20     /* Use STAT3 
b9d0: 6f 72 20 53 54 41 54 34 20 64 61 74 61 20 2a 2f  or STAT4 data */
b9e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b9f0: 41 6c 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30  AllOpts        0
ba00: 78 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f  xffff   /* All o
ba10: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a  ptimizations */.
ba20: 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f  ./*.** Macros fo
ba30: 72 20 74 65 73 74 69 6e 67 20 77 68 65 74 68 65  r testing whethe
ba40: 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a  r or not optimiz
ba50: 61 74 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c  ations are enabl
ba60: 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a  ed or disabled..
ba70: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
ba80: 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
ba90: 45 53 54 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  EST.#define Opti
baa0: 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64  mizationDisabled
bab0: 28 64 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64  (db, mask)  (((d
bac0: 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28  b)->dbOptFlags&(
bad0: 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69  mask))!=0).#defi
bae0: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45  ne OptimizationE
baf0: 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  nabled(db, mask)
bb00: 20 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74     (((db)->dbOpt
bb10: 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30  Flags&(mask))==0
bb20: 29 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20  ).#else.#define 
bb30: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61  OptimizationDisa
bb40: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
bb50: 30 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  0.#define Optimi
bb60: 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62  zationEnabled(db
bb70: 2c 20 6d 61 73 6b 29 20 20 20 31 0a 23 65 6e 64  , mask)   1.#end
bb80: 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  if../*.** Return
bb90: 20 74 72 75 65 20 69 66 20 69 74 20 4f 4b 20 74   true if it OK t
bba0: 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e  o factor constan
bbb0: 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e  t expressions in
bbc0: 74 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  to the initializ
bbd0: 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54  ation.** code. T
bbe0: 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  he argument is a
bbf0: 20 50 61 72 73 65 20 6f 62 6a 65 63 74 20 66 6f   Parse object fo
bc00: 72 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  r the code gener
bc10: 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ator..*/.#define
bc20: 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50   ConstFactorOk(P
bc30: 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46  ) ((P)->okConstF
bc40: 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f  actor)../*.** Po
bc50: 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f  ssible values fo
bc60: 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61 67  r the sqlite.mag
bc70: 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65  ic field..** The
bc80: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f 62 74   numbers are obt
bc90: 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d 20  ained at random 
bca0: 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70 65 63  and have no spec
bcb0: 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68  ial meaning, oth
bcc0: 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67  er.** than being
bcd0: 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f   distinct from o
bce0: 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23  ne another..*/.#
bcf0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
bd00: 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30 78 61  GIC_OPEN     0xa
bd10: 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61 74 61  029a697  /* Data
bd20: 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a  base is open */.
bd30: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
bd40: 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20 30 78  AGIC_CLOSED   0x
bd50: 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44 61 74  9f3c2d33  /* Dat
bd60: 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20  abase is closed 
bd70: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bd80: 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20 20 20  E_MAGIC_SICK    
bd90: 20 30 78 34 62 37 37 31 32 39 30 20 20 2f 2a 20   0x4b771290  /* 
bda0: 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69 74 69  Error and awaiti
bdb0: 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66  ng close */.#def
bdc0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
bdd0: 5f 42 55 53 59 20 20 20 20 20 30 78 66 30 33 62  _BUSY     0xf03b
bde0: 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62 61 73  7906  /* Databas
bdf0: 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75  e currently in u
be00: 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  se */.#define SQ
be10: 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52  LITE_MAGIC_ERROR
be20: 20 20 20 20 30 78 62 35 33 35 37 39 33 30 20 20      0xb5357930  
be30: 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53  /* An SQLITE_MIS
be40: 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75 72 72  USE error occurr
be50: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
be60: 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49  LITE_MAGIC_ZOMBI
be70: 45 20 20 20 30 78 36 34 63 66 66 63 37 66 20 20  E   0x64cffc7f  
be80: 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20 6c 61  /* Close with la
be90: 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f  st statement clo
bea0: 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  se */../*.** Eac
beb0: 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69  h SQL function i
bec0: 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20  s defined by an 
bed0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
bee0: 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72  following.** str
bef0: 75 63 74 75 72 65 2e 20 20 41 20 70 6f 69 6e 74  ucture.  A point
bf00: 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  er to this struc
bf10: 74 75 72 65 20 69 73 20 73 74 6f 72 65 64 20 69  ture is stored i
bf20: 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61 46 75  n the sqlite.aFu
bf30: 6e 63 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65  nc.** hash table
bf40: 2e 20 20 57 68 65 6e 20 6d 75 6c 74 69 70 6c 65  .  When multiple
bf50: 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20   functions have 
bf60: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2c 20 74  the same name, t
bf70: 68 65 20 68 61 73 68 20 74 61 62 6c 65 0a 2a 2a  he hash table.**
bf80: 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6c 69 6e   points to a lin
bf90: 6b 65 64 20 6c 69 73 74 20 6f 66 20 74 68 65 73  ked list of thes
bfa0: 65 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2f  e structures..*/
bfb0: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20  .struct FuncDef 
bfc0: 7b 0a 20 20 69 31 36 20 6e 41 72 67 3b 20 20 20  {.  i16 nArg;   
bfd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
bfe0: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e  er of arguments.
bff0: 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d    -1 means unlim
c000: 69 74 65 64 20 2a 2f 0a 20 20 75 31 36 20 66 75  ited */.  u16 fu
c010: 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f  ncFlags;       /
c020: 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69  * Some combinati
c030: 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e  on of SQLITE_FUN
c040: 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  C_* */.  void *p
c050: 55 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f 2a  UserData;     /*
c060: 20 55 73 65 72 20 64 61 74 61 20 70 61 72 61 6d   User data param
c070: 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65  eter */.  FuncDe
c080: 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f  f *pNext;      /
c090: 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e 20  * Next function 
c0a0: 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a  with same name *
c0b0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e 63  /.  void (*xFunc
c0c0: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
c0d0: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
c0e0: 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 52 65 67 75  alue**); /* Regu
c0f0: 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  lar function */.
c100: 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29 28    void (*xStep)(
c110: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
c120: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
c130: 75 65 2a 2a 29 3b 20 2f 2a 20 41 67 67 72 65 67  ue**); /* Aggreg
c140: 61 74 65 20 73 74 65 70 20 2a 2f 0a 20 20 76 6f  ate step */.  vo
c150: 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28  id (*xFinalize)(
c160: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
c170: 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  );              
c180: 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66    /* Aggregate f
c190: 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63 68  inalizer */.  ch
c1a0: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
c1b0: 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f     /* SQL name o
c1c0: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20  f the function. 
c1d0: 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 48  */.  FuncDef *pH
c1e0: 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ash;      /* Nex
c1f0: 74 20 77 69 74 68 20 61 20 64 69 66 66 65 72 65  t with a differe
c200: 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65 20  nt name but the 
c210: 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20 46  same hash */.  F
c220: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70  uncDestructor *p
c230: 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a  Destructor;   /*
c240: 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74   Reference count
c250: 65 64 20 64 65 73 74 72 75 63 74 6f 72 20 66 75  ed destructor fu
c260: 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  nction */.};../*
c270: 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75  .** This structu
c280: 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65 73 20  re encapsulates 
c290: 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20  a user-function 
c2a0: 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c 6c 62  destructor callb
c2b0: 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69  ack (as.** confi
c2c0: 67 75 72 65 64 20 75 73 69 6e 67 20 63 72 65 61  gured using crea
c2d0: 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29  te_function_v2()
c2e0: 29 20 61 6e 64 20 61 20 72 65 66 65 72 65 6e 63  ) and a referenc
c2f0: 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a  e counter. When.
c300: 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69  ** create_functi
c310: 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c 6c 65  on_v2() is calle
c320: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 66 75  d to create a fu
c330: 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20 64 65  nction with a de
c340: 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73  structor,.** a s
c350: 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20  ingle object of 
c360: 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 6c  this type is all
c370: 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65 73 74  ocated. FuncDest
c380: 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73 20 73  ructor.nRef is s
c390: 65 74 20 74 6f 20 0a 2a 2a 20 74 68 65 20 6e 75  et to .** the nu
c3a0: 6d 62 65 72 20 6f 66 20 46 75 6e 63 44 65 66 20  mber of FuncDef 
c3b0: 6f 62 6a 65 63 74 73 20 63 72 65 61 74 65 64 20  objects created 
c3c0: 28 65 69 74 68 65 72 20 31 20 6f 72 20 33 2c 20  (either 1 or 3, 
c3d0: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
c3e0: 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74  ther.** or not t
c3f0: 68 65 20 73 70 65 63 69 66 69 65 64 20 65 6e 63  he specified enc
c400: 6f 64 69 6e 67 20 69 73 20 53 51 4c 49 54 45 5f  oding is SQLITE_
c410: 41 4e 59 29 2e 20 54 68 65 20 46 75 6e 63 44 65  ANY). The FuncDe
c420: 66 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a  f.pDestructor.**
c430: 20 6d 65 6d 62 65 72 20 6f 66 20 65 61 63 68 20   member of each 
c440: 6f 66 20 74 68 65 20 6e 65 77 20 46 75 6e 63 44  of the new FuncD
c450: 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 73 65  ef objects is se
c460: 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68  t to point to th
c470: 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46  e allocated.** F
c480: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a  uncDestructor..*
c490: 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74 65 72 2c  *.** Thereafter,
c4a0: 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65   when one of the
c4b0: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73   FuncDef objects
c4c0: 20 69 73 20 64 65 6c 65 74 65 64 2c 20 74 68 65   is deleted, the
c4d0: 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f   reference.** co
c4e0: 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65  unt on this obje
c4f0: 63 74 20 69 73 20 64 65 63 72 65 6d 65 6e 74 65  ct is decremente
c500: 64 2e 20 57 68 65 6e 20 69 74 20 72 65 61 63 68  d. When it reach
c510: 65 73 20 30 2c 20 74 68 65 20 64 65 73 74 72 75  es 0, the destru
c520: 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b  ctor.** is invok
c530: 65 64 20 61 6e 64 20 74 68 65 20 46 75 6e 63 44  ed and the FuncD
c540: 65 73 74 72 75 63 74 6f 72 20 73 74 72 75 63 74  estructor struct
c550: 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74  ure freed..*/.st
c560: 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75 63  ruct FuncDestruc
c570: 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66  tor {.  int nRef
c580: 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74  ;.  void (*xDest
c590: 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20  roy)(void *);.  
c5a0: 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b  void *pUserData;
c5b0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  .};../*.** Possi
c5c0: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 46  ble values for F
c5d0: 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e  uncDef.flags.  N
c5e0: 6f 74 65 20 74 68 61 74 20 74 68 65 20 5f 4c 45  ote that the _LE
c5f0: 4e 47 54 48 20 61 6e 64 20 5f 54 59 50 45 4f 46  NGTH and _TYPEOF
c600: 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73 74 20  .** values must 
c610: 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50  correspond to OP
c620: 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61  FLAG_LENGTHARG a
c630: 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  nd OPFLAG_TYPEOF
c640: 41 52 47 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61  ARG.  There.** a
c650: 72 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74  re assert() stat
c660: 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f  ements in the co
c670: 64 65 20 74 6f 20 76 65 72 69 66 79 20 74 68 69  de to verify thi
c680: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  s..*/.#define SQ
c690: 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53  LITE_FUNC_ENCMAS
c6a0: 4b 20 20 30 78 30 30 33 20 2f 2a 20 53 51 4c 49  K  0x003 /* SQLI
c6b0: 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
c6c0: 55 54 46 31 36 42 45 20 6f 72 20 55 54 46 31 36  UTF16BE or UTF16
c6d0: 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LE */.#define SQ
c6e0: 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20  LITE_FUNC_LIKE  
c6f0: 20 20 20 30 78 30 30 34 20 2f 2a 20 43 61 6e 64     0x004 /* Cand
c700: 69 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49  idate for the LI
c710: 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  KE optimization 
c720: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c730: 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20  E_FUNC_CASE     
c740: 30 78 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65  0x008 /* Case-se
c750: 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70  nsitive LIKE-typ
c760: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  e function */.#d
c770: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
c780: 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30 31 30  C_EPHEM    0x010
c790: 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20   /* Ephemeral.  
c7a0: 44 65 6c 65 74 65 20 77 69 74 68 20 56 44 42 45  Delete with VDBE
c7b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c7c0: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
c7d0: 20 30 78 30 32 30 20 2f 2a 20 73 71 6c 69 74 65   0x020 /* sqlite
c7e0: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
c7f0: 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65  ) might be calle
c800: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
c810: 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20  ITE_FUNC_LENGTH 
c820: 20 20 30 78 30 34 30 20 2f 2a 20 42 75 69 6c 74    0x040 /* Built
c830: 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75 6e  -in length() fun
c840: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
c850: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50   SQLITE_FUNC_TYP
c860: 45 4f 46 20 20 20 30 78 30 38 30 20 2f 2a 20 42  EOF   0x080 /* B
c870: 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28 29  uilt-in typeof()
c880: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
c890: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
c8a0: 5f 43 4f 55 4e 54 20 20 20 20 30 78 31 30 30 20  _COUNT    0x100 
c8b0: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e  /* Built-in coun
c8c0: 74 28 2a 29 20 61 67 67 72 65 67 61 74 65 20 2a  t(*) aggregate *
c8d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c8e0: 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30  _FUNC_COALESCE 0
c8f0: 78 32 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  x200 /* Built-in
c900: 20 63 6f 61 6c 65 73 63 65 28 29 20 6f 72 20 69   coalesce() or i
c910: 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69  fnull() */.#defi
c920: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55  ne SQLITE_FUNC_U
c930: 4e 4c 49 4b 45 4c 59 20 30 78 34 30 30 20 2f 2a  NLIKELY 0x400 /*
c940: 20 42 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65   Built-in unlike
c950: 6c 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ly() function */
c960: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c970: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78  FUNC_CONSTANT 0x
c980: 38 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  800 /* Constant 
c990: 69 6e 70 75 74 73 20 67 69 76 65 20 61 20 63 6f  inputs give a co
c9a0: 6e 73 74 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f  nstant output */
c9b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c9c0: 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 30 78 31  FUNC_MINMAX  0x1
c9d0: 30 30 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  000 /* True for 
c9e0: 6d 69 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20  min() and max() 
c9f0: 61 67 67 72 65 67 61 74 65 73 20 2a 2f 0a 0a 2f  aggregates */../
ca00: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
ca10: 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c  ng three macros,
ca20: 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b   FUNCTION(), LIK
ca30: 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52  EFUNC() and AGGR
ca40: 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75  EGATE() are.** u
ca50: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68  sed to create th
ca60: 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66  e initializers f
ca70: 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73  or the FuncDef s
ca80: 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a  tructures..**.**
ca90: 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d     FUNCTION(zNam
caa0: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
cab0: 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
cac0: 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
cad0: 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69   a scalar functi
cae0: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  on definition of
caf0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d   a function zNam
cb00: 65 20 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d  e .**     implem
cb10: 65 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63 74  ented by C funct
cb20: 69 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61  ion xFunc that a
cb30: 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75  ccepts nArg argu
cb40: 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20  ments. The.**   
cb50: 20 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61    value passed a
cb60: 73 20 69 41 72 67 20 69 73 20 63 61 73 74 20 74  s iArg is cast t
cb70: 6f 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20  o a (void*) and 
cb80: 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a  made available.*
cb90: 2a 20 20 20 20 20 61 73 20 74 68 65 20 75 73 65  *     as the use
cba0: 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f  r-data (sqlite3_
cbb0: 75 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72  user_data()) for
cbc0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49   the function. I
cbd0: 66 20 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65  f .**     argume
cbe0: 6e 74 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20  nt bNC is true, 
cbf0: 74 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  then the SQLITE_
cc00: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c  FUNC_NEEDCOLL fl
cc10: 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  ag is set..**.**
cc20: 20 20 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61     VFUNCTION(zNa
cc30: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
cc40: 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20  bNC, xFunc).**  
cc50: 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e     Like FUNCTION
cc60: 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73   except it omits
cc70: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
cc80: 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a  _CONSTANT flag..
cc90: 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54  **.**   AGGREGAT
cca0: 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  E(zName, nArg, i
ccb0: 41 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c  Arg, bNC, xStep,
ccc0: 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20   xFinal).**     
ccd0: 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  Used to create a
cce0: 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  n aggregate func
ccf0: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
cd00: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a  implemented by.*
cd10: 2a 20 20 20 20 20 74 68 65 20 43 20 66 75 6e 63  *     the C func
cd20: 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20  tions xStep and 
cd30: 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73  xFinal. The firs
cd40: 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72  t four parameter
cd50: 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74  s.**     are int
cd60: 65 72 70 72 65 74 65 64 20 69 6e 20 74 68 65 20  erpreted in the 
cd70: 73 61 6d 65 20 77 61 79 20 61 73 20 74 68 65 20  same way as the 
cd80: 66 69 72 73 74 20 34 20 70 61 72 61 6d 65 74 65  first 4 paramete
cd90: 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e  rs to.**     FUN
cda0: 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20  CTION()..**.**  
cdb0: 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
cdc0: 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61   nArg, pArg, fla
cdd0: 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  gs).**     Used 
cde0: 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c  to create a scal
cdf0: 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  ar function defi
ce00: 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63  nition of a func
ce10: 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20  tion zName .**  
ce20: 20 20 20 74 68 61 74 20 61 63 63 65 70 74 73 20     that accepts 
ce30: 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61  nArg arguments a
ce40: 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65  nd is implemente
ce50: 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43  d by a call to C
ce60: 20 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f   .**     functio
ce70: 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75  n likeFunc. Argu
ce80: 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63 61 73  ment pArg is cas
ce90: 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20  t to a (void *) 
cea0: 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20  and made.**     
ceb0: 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65  available as the
cec0: 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64   function user-d
ced0: 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65  ata (sqlite3_use
cee0: 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a  r_data()). The.*
cef0: 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c  *     FuncDef.fl
cf00: 61 67 73 20 76 61 72 69 61 62 6c 65 20 69 73 20  ags variable is 
cf10: 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  set to the value
cf20: 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
cf30: 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61  lags.**     para
cf40: 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  meter..*/.#defin
cf50: 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  e FUNCTION(zName
cf60: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
cf70: 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
cf80: 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
cf90: 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
cfa0: 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
cfb0: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
cfc0: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
cfd0: 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
cfe0: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
cff0: 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64  #zName, 0, 0}.#d
d000: 65 66 69 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28  efine VFUNCTION(
d010: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
d020: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
d030: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
d040: 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
d050: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
d060: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
d070: 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
d080: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
d090: 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64  #zName, 0, 0}.#d
d0a0: 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28  efine FUNCTION2(
d0b0: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
d0c0: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65  g, bNC, xFunc, e
d0d0: 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b  xtraFlags) \.  {
d0e0: 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43  nArg,SQLITE_FUNC
d0f0: 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
d100: 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
d110: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
d120: 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20  |extraFlags,\.  
d130: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
d140: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
d150: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
d160: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
d170: 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  STR_FUNCTION(zNa
d180: 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20  me, nArg, pArg, 
d190: 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
d1a0: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
d1b0: 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
d1c0: 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
d1d0: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
d1e0: 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30  L), \.   pArg, 0
d1f0: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23  , xFunc, 0, 0, #
d200: 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65  zName, 0, 0}.#de
d210: 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e  fine LIKEFUNC(zN
d220: 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20  ame, nArg, arg, 
d230: 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67  flags) \.  {nArg
d240: 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  , SQLITE_FUNC_CO
d250: 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
d260: 46 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28  F8|flags, \.   (
d270: 76 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c  void *)arg, 0, l
d280: 69 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23  ikeFunc, 0, 0, #
d290: 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65  zName, 0, 0}.#de
d2a0: 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 28 7a  fine AGGREGATE(z
d2b0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c  Name, nArg, arg,
d2c0: 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e   nc, xStep, xFin
d2d0: 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  al) \.  {nArg, S
d2e0: 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53  QLITE_UTF8|(nc*S
d2f0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
d300: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54  OLL), \.   SQLIT
d310: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67  E_INT_TO_PTR(arg
d320: 29 2c 20 30 2c 20 30 2c 20 78 53 74 65 70 2c 78  ), 0, 0, xStep,x
d330: 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30  Final,#zName,0,0
d340: 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47  }.#define AGGREG
d350: 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ATE2(zName, nArg
d360: 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70  , arg, nc, xStep
d370: 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72 61 46  , xFinal, extraF
d380: 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
d390: 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63   SQLITE_UTF8|(nc
d3a0: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
d3b0: 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67  DCOLL)|extraFlag
d3c0: 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  s, \.   SQLITE_I
d3d0: 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20  NT_TO_PTR(arg), 
d3e0: 30 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e  0, 0, xStep,xFin
d3f0: 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 0a  al,#zName,0,0}..
d400: 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e  /*.** All curren
d410: 74 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65  t savepoints are
d420: 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e   stored in a lin
d430: 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e  ked list startin
d440: 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e  g at.** sqlite3.
d450: 70 53 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20  pSavepoint. The 
d460: 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e  first element in
d470: 20 74 68 65 20 6c 69 73 74 20 69 73 20 74 68 65   the list is the
d480: 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a   most recently.*
d490: 2a 20 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69  * opened savepoi
d4a0: 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61  nt. Savepoints a
d4b0: 72 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  re added to the 
d4c0: 6c 69 73 74 20 62 79 20 74 68 65 20 76 64 62 65  list by the vdbe
d4d0: 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74  .** OP_Savepoint
d4e0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
d4f0: 0a 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e  .struct Savepoin
d500: 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  t {.  char *zNam
d510: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
d520: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76            /* Sav
d530: 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c  epoint name (nul
d540: 2d 74 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a  -terminated) */.
d550: 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43    i64 nDeferredC
d560: 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ons;            
d570: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
d580: 6f 66 20 64 65 66 65 72 72 65 64 20 66 6b 20 76  of deferred fk v
d590: 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69  iolations */.  i
d5a0: 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  64 nDeferredImmC
d5b0: 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ons;            
d5c0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
d5d0: 64 65 66 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e  deferred imm fk.
d5e0: 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
d5f0: 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
d600: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
d610: 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69  ent savepoint (i
d620: 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  f any) */.};../*
d630: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
d640: 67 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68  g are used as th
d650: 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74  e second paramet
d660: 65 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76  er to sqlite3Sav
d670: 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64  epoint(),.** and
d680: 20 61 73 20 74 68 65 20 50 31 20 61 72 67 75 6d   as the P1 argum
d690: 65 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61  ent to the OP_Sa
d6a0: 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74  vepoint instruct
d6b0: 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ion..*/.#define 
d6c0: 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20  SAVEPOINT_BEGIN 
d6d0: 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53       0.#define S
d6e0: 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
d6f0: 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41      1.#define SA
d700: 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
d710: 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63     2.../*.** Eac
d720: 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20  h SQLite module 
d730: 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64  (virtual table d
d740: 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65  efinition) is de
d750: 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69  fined by an.** i
d760: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
d770: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
d780: 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68  re, stored in th
d790: 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c  e sqlite3.aModul
d7a0: 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e  e.** hash table.
d7b0: 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c  .*/.struct Modul
d7c0: 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  e {.  const sqli
d7d0: 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
d7e0: 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61  ule;       /* Ca
d7f0: 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20  llback pointers 
d800: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
d810: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
d820: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
d830: 65 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  e passed to crea
d840: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
d850: 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20   void *pAux;    
d860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d870: 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61        /* pAux pa
d880: 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d  ssed to create_m
d890: 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69  odule() */.  voi
d8a0: 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f  d (*xDestroy)(vo
d8b0: 69 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20  id *);          
d8c0: 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74    /* Module dest
d8d0: 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ructor function 
d8e0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66  */.};../*.** inf
d8f0: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
d900: 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e  ach column of an
d910: 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65   SQL table is he
d920: 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63  ld in an instanc
d930: 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  e.** of this str
d940: 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
d950: 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61  t Column {.  cha
d960: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a  r *zName;     /*
d970: 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f   Name of this co
d980: 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a  lumn */.  Expr *
d990: 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65  pDflt;     /* De
d9a0: 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74  fault value of t
d9b0: 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  his column */.  
d9c0: 63 68 61 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20  char *zDflt;    
d9d0: 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78   /* Original tex
d9e0: 74 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74  t of the default
d9f0: 20 76 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72   value */.  char
da00: 20 2a 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a 20   *zType;     /* 
da10: 44 61 74 61 20 74 79 70 65 20 66 6f 72 20 74 68  Data type for th
da20: 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63  is column */.  c
da30: 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20  har *zColl;     
da40: 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
da50: 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c  uence.  If NULL,
da60: 20 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74   use the default
da70: 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c   */.  u8 notNull
da80: 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f  ;      /* An OE_
da90: 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69   code for handli
daa0: 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  ng a NOT NULL co
dab0: 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68  nstraint */.  ch
dac0: 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f  ar affinity;   /
dad0: 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  * One of the SQL
dae0: 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75  ITE_AFF_... valu
daf0: 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74  es */.  u8 szEst
db00: 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69  ;        /* Esti
db10: 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 74 68  mated size of th
db20: 69 73 20 63 6f 6c 75 6d 6e 2e 20 20 49 4e 54 3d  is column.  INT=
db30: 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c  =1 */.  u8 colFl
db40: 61 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c  ags;     /* Bool
db50: 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20  ean properties. 
db60: 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65   See COLFLAG_ de
db70: 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d  fines below */.}
db80: 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61  ;../* Allowed va
db90: 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e  lues for Column.
dba0: 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65  colFlags:.*/.#de
dbb0: 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49  fine COLFLAG_PRI
dbc0: 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20 20 20  MKEY  0x0001    
dbd0: 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72  /* Column is par
dbe0: 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79  t of the primary
dbf0: 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
dc00: 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20  COLFLAG_HIDDEN  
dc10: 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20   0x0002    /* A 
dc20: 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e  hidden column in
dc30: 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
dc40: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f   */../*.** A "Co
dc50: 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65  llating Sequence
dc60: 22 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  " is defined by 
dc70: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
dc80: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  he following.** 
dc90: 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65  structure. Conce
dca0: 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61  ptually, a colla
dcb0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f  ting sequence co
dcc0: 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65  nsists of a name
dcd0: 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72   and.** a compar
dce0: 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61  ison routine tha
dcf0: 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72  t defines the or
dd00: 64 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75  der of that sequ
dd10: 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43  ence..**.** If C
dd20: 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e  ollSeq.xCmp is N
dd30: 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ULL, it means th
dd40: 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74  at the.** collat
dd50: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20  ing sequence is 
dd60: 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69  undefined.  Indi
dd70: 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20  ces built on an 
dd80: 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c  undefined.** col
dd90: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
dda0: 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20  may not be read 
ddb0: 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73  or written..*/.s
ddc0: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a  truct CollSeq {.
ddd0: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
dde0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
ddf0: 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67  of the collating
de00: 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38   sequence, UTF-8
de10: 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38   encoded */.  u8
de20: 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
de30: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
de40: 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20  ding handled by 
de50: 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64  xCmp() */.  void
de60: 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20   *pUser;        
de70: 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d    /* First argum
de80: 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f  ent to xCmp() */
de90: 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76  .  int (*xCmp)(v
dea0: 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  oid*,int, const 
deb0: 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  void*, int, cons
dec0: 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64  t void*);.  void
ded0: 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b   (*xDel)(void*);
dee0: 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20    /* Destructor 
def0: 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a  for pUser */.};.
df00: 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72  ./*.** A sort or
df10: 64 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65  der can be eithe
df20: 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a  r ASC or DESC..*
df30: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
df40: 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20  _SO_ASC       0 
df50: 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65   /* Sort in asce
df60: 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23  nding order */.#
df70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
df80: 5f 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a  _DESC      1  /*
df90: 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69   Sort in ascendi
dfa0: 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 0a 2f 2a 0a  ng order */../*.
dfb0: 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  ** Column affini
dfc0: 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20  ty types..**.** 
dfd0: 54 68 65 73 65 20 75 73 65 64 20 74 6f 20 68 61  These used to ha
dfe0: 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65  ve mnemonic name
dff0: 20 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51   like 'i' for SQ
e000: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
e010: 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20   and.** 't' for 
e020: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e  SQLITE_AFF_TEXT.
e030: 20 20 42 75 74 20 77 65 20 63 61 6e 20 73 61 76    But we can sav
e040: 65 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65  e a little space
e050: 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20   and improve.** 
e060: 74 68 65 20 73 70 65 65 64 20 61 20 6c 69 74 74  the speed a litt
e070: 6c 65 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20  le by numbering 
e080: 74 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65  the values conse
e090: 63 75 74 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a  cutively.  .**.*
e0a0: 2a 20 42 75 74 20 72 61 74 68 65 72 20 74 68 61  * But rather tha
e0b0: 6e 20 73 74 61 72 74 20 77 69 74 68 20 30 20 6f  n start with 0 o
e0c0: 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69  r 1, we begin wi
e0d0: 74 68 20 27 41 27 2e 20 20 54 68 61 74 20 77 61  th 'A'.  That wa
e0e0: 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69  y,.** when multi
e0f0: 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79 70  ple affinity typ
e100: 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61  es are concatena
e110: 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ted into a strin
e120: 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73  g and.** used as
e130: 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c   the P4 operand,
e140: 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f   they will be mo
e150: 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a  re readable..**.
e160: 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61  ** Note also tha
e170: 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79  t the numeric ty
e180: 70 65 73 20 61 72 65 20 67 72 6f 75 70 65 64 20  pes are grouped 
e190: 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61 74  together so that
e1a0: 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20   testing.** for 
e1b0: 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69  a numeric type i
e1c0: 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61  s a single compa
e1d0: 72 69 73 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20  rison.  And the 
e1e0: 4e 4f 4e 45 20 74 79 70 65 20 69 73 20 66 69 72  NONE type is fir
e1f0: 73 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  st..*/.#define S
e200: 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 20  QLITE_AFF_NONE  
e210: 20 20 20 27 41 27 0a 23 64 65 66 69 6e 65 20 53     'A'.#define S
e220: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 20  QLITE_AFF_TEXT  
e230: 20 20 20 27 42 27 0a 23 64 65 66 69 6e 65 20 53     'B'.#define S
e240: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
e250: 43 20 20 27 43 27 0a 23 64 65 66 69 6e 65 20 53  C  'C'.#define S
e260: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
e270: 52 20 20 27 44 27 0a 23 64 65 66 69 6e 65 20 53  R  'D'.#define S
e280: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 20  QLITE_AFF_REAL  
e290: 20 20 20 27 45 27 0a 0a 23 64 65 66 69 6e 65 20     'E'..#define 
e2a0: 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72 69 63  sqlite3IsNumeric
e2b0: 41 66 66 69 6e 69 74 79 28 58 29 20 20 28 28 58  Affinity(X)  ((X
e2c0: 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  )>=SQLITE_AFF_NU
e2d0: 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  MERIC)../*.** Th
e2e0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
e2f0: 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f  K values masks o
e300: 66 66 20 74 68 65 20 73 69 67 6e 69 66 69 63 61  ff the significa
e310: 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a  nt bits of an.**
e320: 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75 65 2e   affinity value.
e330: 20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c   .*/.#define SQL
e340: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20  ITE_AFF_MASK    
e350: 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64   0x47../*.** Add
e360: 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75  itional bit valu
e370: 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f  es that can be O
e380: 52 65 64 20 77 69 74 68 20 61 6e 20 61 66 66 69  Red with an affi
e390: 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20  nity without.** 
e3a0: 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66  changing the aff
e3b0: 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  inity..**.** The
e3c0: 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20   SQLITE_NOTNULL 
e3d0: 66 6c 61 67 20 69 73 20 61 20 63 6f 6d 62 69 6e  flag is a combin
e3e0: 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20  ation of NULLEQ 
e3f0: 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a  and JUMPIFNULL..
e400: 2a 2a 20 49 74 20 63 61 75 73 65 73 20 61 6e 20  ** It causes an 
e410: 61 73 73 65 72 74 28 29 20 74 6f 20 66 69 72 65  assert() to fire
e420: 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
e430: 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61 72 69 73  nd to a comparis
e440: 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69  on.** operator i
e450: 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61  s NULL.  It is a
e460: 64 64 65 64 20 74 6f 20 63 65 72 74 61 69 6e 20  dded to certain 
e470: 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61  comparison opera
e480: 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65  tors to.** prove
e490: 20 74 68 61 74 20 74 68 65 20 6f 70 65 72 61 6e   that the operan
e4a0: 64 73 20 61 72 65 20 61 6c 77 61 79 73 20 4e 4f  ds are always NO
e4b0: 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69  T NULL..*/.#defi
e4c0: 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  ne SQLITE_JUMPIF
e4d0: 4e 55 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a 20  NULL   0x10  /* 
e4e0: 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65 72 20  jumps if either 
e4f0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
e500: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e510: 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20 30  E_STOREP2      0
e520: 78 32 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65  x20  /* Store re
e530: 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d 20  sult in reg[P2] 
e540: 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d 70  rather than jump
e550: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e560: 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20 20  TE_NULLEQ       
e570: 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55  0x80  /* NULL=NU
e580: 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LL */.#define SQ
e590: 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20  LITE_NOTNULL    
e5a0: 20 20 30 78 39 30 20 20 2f 2a 20 41 73 73 65 72    0x90  /* Asser
e5b0: 74 20 74 68 61 74 20 6f 70 65 72 61 6e 64 73 20  t that operands 
e5c0: 61 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a  are never NULL *
e5d0: 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65  /../*.** An obje
e5e0: 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ct of this type 
e5f0: 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65  is created for e
e600: 61 63 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ach virtual tabl
e610: 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20  e present in.** 
e620: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
e630: 65 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ema. .**.** If t
e640: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
e650: 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 74 68  ma is shared, th
e660: 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20  en there is one 
e670: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
e680: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f  .** structure fo
e690: 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  r each database 
e6a0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69  connection (sqli
e6b0: 74 65 33 2a 29 20 74 68 61 74 20 75 73 65 73 20  te3*) that uses 
e6c0: 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63  the shared.** sc
e6d0: 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65  hema. This is be
e6e0: 63 61 75 73 65 20 65 61 63 68 20 64 61 74 61 62  cause each datab
e6f0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72  ase connection r
e700: 65 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20  equires its own 
e710: 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e  unique.** instan
e720: 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ce of the sqlite
e730: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75  3_vtab* handle u
e740: 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68  sed to access th
e750: 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
e760: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
e770: 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62  on. sqlite3_vtab
e780: 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f  * handles can no
e790: 74 20 62 65 20 73 68 61 72 65 64 20 62 65 74 77  t be shared betw
e7a0: 65 65 6e 20 0a 2a 2a 20 64 61 74 61 62 61 73 65  een .** database
e7b0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76   connections, ev
e7c0: 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73 74  en when the rest
e7d0: 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72   of the in-memor
e7e0: 79 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 73  y database .** s
e7f0: 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c  chema is shared,
e800: 20 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e   as the implemen
e810: 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f  tation often sto
e820: 72 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65  res the database
e830: 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  .** connection h
e840: 61 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20  andle passed to 
e850: 69 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e  it via the xConn
e860: 65 63 74 28 29 20 6f 72 20 78 43 72 65 61 74 65  ect() or xCreate
e870: 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72  () method.** dur
e880: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ing initializati
e890: 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54  on internally. T
e8a0: 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e  his database con
e8b0: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d  nection handle m
e8c0: 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73  ay.** then be us
e8d0: 65 64 20 62 79 20 74 68 65 20 76 69 72 74 75 61  ed by the virtua
e8e0: 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e  l table implemen
e8f0: 74 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73  tation to access
e900: 20 72 65 61 6c 20 74 61 62 6c 65 73 20 0a 2a 2a   real tables .**
e910: 20 77 69 74 68 69 6e 20 74 68 65 20 64 61 74 61   within the data
e920: 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68  base. So that th
e930: 65 79 20 61 70 70 65 61 72 20 61 73 20 70 61 72  ey appear as par
e940: 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73  t of the callers
e950: 20 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e   .** transaction
e960: 2c 20 74 68 65 73 65 20 61 63 63 65 73 73 65 73  , these accesses
e970: 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65   need to be made
e980: 20 76 69 61 20 74 68 65 20 73 61 6d 65 20 64 61   via the same da
e990: 74 61 62 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65  tabase .** conne
e9a0: 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73  ction as that us
e9b0: 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 53 51  ed to execute SQ
e9c0: 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20  L operations on 
e9d0: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
e9e0: 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61  e..**.** All VTa
e9f0: 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74  ble objects that
ea00: 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61   correspond to a
ea10: 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e   single table in
ea20: 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74   a shared.** dat
ea30: 61 62 61 73 65 20 73 63 68 65 6d 61 20 61 72 65  abase schema are
ea40: 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65   initially store
ea50: 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69  d in a linked-li
ea60: 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  st pointed to by
ea70: 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56  .** the Table.pV
ea80: 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72  Table member var
ea90: 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72  iable of the cor
eaa0: 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65  responding Table
eab0: 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e   object..** When
eac0: 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70   an sqlite3_prep
ead0: 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20  are() operation 
eae0: 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 61  is required to a
eaf0: 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61  ccess the virtua
eb00: 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73  l.** table, it s
eb10: 65 61 72 63 68 65 73 20 74 68 65 20 6c 69 73 74  earches the list
eb20: 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20   for the VTable 
eb30: 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
eb40: 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62   to the.** datab
eb50: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64  ase connection d
eb60: 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61 72 69  oing the prepari
eb70: 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20  ng so as to use 
eb80: 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73  the correct.** s
eb90: 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
eba0: 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69  dle in the compi
ebb0: 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a  led query..**.**
ebc0: 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f   When an in-memo
ebd0: 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20  ry Table object 
ebe0: 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20  is deleted (for 
ebf0: 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65  example when the
ec00: 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65  .** schema is be
ec10: 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72  ing reloaded for
ec20: 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74   some reason), t
ec30: 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  he VTable object
ec40: 73 20 61 72 65 20 6e 6f 74 20 0a 2a 2a 20 64 65  s are not .** de
ec50: 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71  leted and the sq
ec60: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
ec70: 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73  les are not xDis
ec80: 63 6f 6e 6e 65 63 74 28 29 65 64 20 0a 2a 2a 20  connect()ed .** 
ec90: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73  immediately. Ins
eca0: 74 65 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d  tead, they are m
ecb0: 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61  oved from the Ta
ecc0: 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74  ble.pVTable list
ecd0: 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c   to.** another l
ece0: 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65  inked list heade
ecf0: 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33  d by the sqlite3
ed00: 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d  .pDisconnect mem
ed10: 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f  ber of the.** co
ed20: 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69  rresponding sqli
ed30: 74 65 33 20 73 74 72 75 63 74 75 72 65 2e 20 54  te3 structure. T
ed40: 68 65 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c  hey are then del
ed50: 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74  eted/xDisconnect
ed60: 65 64 20 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65  ed .** next time
ed70: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20   a statement is 
ed80: 70 72 65 70 61 72 65 64 20 75 73 69 6e 67 20 73  prepared using s
ed90: 61 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68  aid sqlite3*. Th
eda0: 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f  is is done.** to
edb0: 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20   avoid deadlock 
edc0: 69 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67  issues involving
edd0: 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65   multiple sqlite
ede0: 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e  3.mutex mutexes.
edf0: 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d  .** Refer to com
ee00: 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63  ments above func
ee10: 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62  tion sqlite3Vtab
ee20: 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72  UnlockList() for
ee30: 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69   an.** explanati
ee40: 6f 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74 20  on as to why it 
ee50: 69 73 20 73 61 66 65 20 74 6f 20 61 64 64 20 61  is safe to add a
ee60: 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71  n entry to an sq
ee70: 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63  lite3.pDisconnec
ee80: 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75  t.** list withou
ee90: 74 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f  t holding the co
eea0: 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69  rresponding sqli
eeb0: 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e  te3.mutex mutex.
eec0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72  .**.** The memor
eed0: 79 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66  y for objects of
eee0: 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c   this type is al
eef0: 77 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62  ways allocated b
ef00: 79 20 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d  y .** sqlite3DbM
ef10: 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74  alloc(), using t
ef20: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  he connection ha
ef30: 6e 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56  ndle stored in V
ef40: 54 61 62 6c 65 2e 64 62 20 61 73 20 0a 2a 2a 20  Table.db as .** 
ef50: 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65  the first argume
ef60: 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54  nt..*/.struct VT
ef70: 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33  able {.  sqlite3
ef80: 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20   *db;           
ef90: 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63     /* Database c
efa0: 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69  onnection associ
efb0: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 74  ated with this t
efc0: 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65  able */.  Module
efd0: 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20   *pMod;         
efe0: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
eff0: 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  o module impleme
f000: 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c  ntation */.  sql
f010: 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
f020: 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65  ;      /* Pointe
f030: 72 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e  r to vtab instan
f040: 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  ce */.  int nRef
f050: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
f060: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
f070: 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20  ointers to this 
f080: 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75  structure */.  u
f090: 38 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20  8 bConstraint;  
f0a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
f0b0: 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   if constraints 
f0c0: 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f  are supported */
f0d0: 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e  .  int iSavepoin
f0e0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
f0f0: 44 65 70 74 68 20 6f 66 20 74 68 65 20 53 41 56  Depth of the SAV
f100: 45 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a  EPOINT stack */.
f110: 20 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b    VTable *pNext;
f120: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
f130: 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69  ext in linked li
f140: 73 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a  st (see above) *
f150: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  /.};../*.** Each
f160: 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 72 65   SQL table is re
f170: 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
f180: 6f 72 79 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ory by an instan
f190: 63 65 20 6f 66 20 74 68 65 0a 2a 2a 20 66 6f 6c  ce of the.** fol
f1a0: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
f1b0: 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e  ..**.** Table.zN
f1c0: 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20  ame is the name 
f1d0: 6f 66 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54  of the table.  T
f1e0: 68 65 20 63 61 73 65 20 6f 66 20 74 68 65 20 6f  he case of the o
f1f0: 72 69 67 69 6e 61 6c 0a 2a 2a 20 43 52 45 41 54  riginal.** CREAT
f200: 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  E TABLE statemen
f210: 74 20 69 73 20 73 74 6f 72 65 64 2c 20 62 75 74  t is stored, but
f220: 20 63 61 73 65 20 69 73 20 6e 6f 74 20 73 69 67   case is not sig
f230: 6e 69 66 69 63 61 6e 74 20 66 6f 72 0a 2a 2a 20  nificant for.** 
f240: 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a  comparisons..**.
f250: 2a 2a 20 54 61 62 6c 65 2e 6e 43 6f 6c 20 69 73  ** Table.nCol is
f260: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
f270: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74  olumns in this t
f280: 61 62 6c 65 2e 20 20 54 61 62 6c 65 2e 61 43 6f  able.  Table.aCo
f290: 6c 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65  l is a.** pointe
f2a0: 72 20 74 6f 20 61 6e 20 61 72 72 61 79 20 6f 66  r to an array of
f2b0: 20 43 6f 6c 75 6d 6e 20 73 74 72 75 63 74 75 72   Column structur
f2c0: 65 73 2c 20 6f 6e 65 20 66 6f 72 20 65 61 63 68  es, one for each
f2d0: 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49   column..**.** I
f2e0: 66 20 74 68 65 20 74 61 62 6c 65 20 68 61 73 20  f the table has 
f2f0: 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  an INTEGER PRIMA
f300: 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 54 61 62  RY KEY, then Tab
f310: 6c 65 2e 69 50 4b 65 79 20 69 73 20 74 68 65 20  le.iPKey is the 
f320: 69 6e 64 65 78 20 6f 66 0a 2a 2a 20 74 68 65 20  index of.** the 
f330: 63 6f 6c 75 6d 6e 20 74 68 61 74 20 69 73 20 74  column that is t
f340: 68 61 74 20 6b 65 79 2e 20 20 20 4f 74 68 65 72  hat key.   Other
f350: 77 69 73 65 20 54 61 62 6c 65 2e 69 50 4b 65 79  wise Table.iPKey
f360: 20 69 73 20 6e 65 67 61 74 69 76 65 2e 20 20 4e   is negative.  N
f370: 6f 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20  ote.** that the 
f380: 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20  datatype of the 
f390: 50 52 49 4d 41 52 59 20 4b 45 59 20 6d 75 73 74  PRIMARY KEY must
f3a0: 20 62 65 20 49 4e 54 45 47 45 52 20 66 6f 72 20   be INTEGER for 
f3b0: 74 68 69 73 20 66 69 65 6c 64 20 74 6f 0a 2a 2a  this field to.**
f3c0: 20 62 65 20 73 65 74 2e 20 20 41 6e 20 49 4e 54   be set.  An INT
f3d0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
f3e0: 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20   is used as the 
f3f0: 72 6f 77 69 64 20 66 6f 72 20 65 61 63 68 20 72  rowid for each r
f400: 6f 77 20 6f 66 0a 2a 2a 20 74 68 65 20 74 61 62  ow of.** the tab
f410: 6c 65 2e 20 20 49 66 20 61 20 74 61 62 6c 65 20  le.  If a table 
f420: 68 61 73 20 6e 6f 20 49 4e 54 45 47 45 52 20 50  has no INTEGER P
f430: 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e  RIMARY KEY, then
f440: 20 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 0a   a random rowid.
f450: 2a 2a 20 69 73 20 67 65 6e 65 72 61 74 65 64 20  ** is generated 
f460: 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20  for each row of 
f470: 74 68 65 20 74 61 62 6c 65 2e 20 20 54 46 5f 48  the table.  TF_H
f480: 61 73 50 72 69 6d 61 72 79 4b 65 79 20 69 73 20  asPrimaryKey is 
f490: 73 65 74 20 69 66 0a 2a 2a 20 74 68 65 20 74 61  set if.** the ta
f4a0: 62 6c 65 20 68 61 73 20 61 6e 79 20 50 52 49 4d  ble has any PRIM
f4b0: 41 52 59 20 4b 45 59 2c 20 49 4e 54 45 47 45 52  ARY KEY, INTEGER
f4c0: 20 6f 72 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a   or otherwise..*
f4d0: 2a 0a 2a 2a 20 54 61 62 6c 65 2e 74 6e 75 6d 20  *.** Table.tnum 
f4e0: 69 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62  is the page numb
f4f0: 65 72 20 66 6f 72 20 74 68 65 20 72 6f 6f 74 20  er for the root 
f500: 42 54 72 65 65 20 70 61 67 65 20 6f 66 20 74 68  BTree page of th
f510: 65 20 74 61 62 6c 65 20 69 6e 20 74 68 65 0a 2a  e table in the.*
f520: 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  * database file.
f530: 20 20 49 66 20 54 61 62 6c 65 2e 69 44 62 20 69    If Table.iDb i
f540: 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  s the index of t
f550: 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
f560: 65 20 62 61 63 6b 65 6e 64 0a 2a 2a 20 69 6e 20  e backend.** in 
f570: 73 71 6c 69 74 65 2e 61 44 62 5b 5d 2e 20 20 30  sqlite.aDb[].  0
f580: 20 69 73 20 66 6f 72 20 74 68 65 20 6d 61 69 6e   is for the main
f590: 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 31 20   database and 1 
f5a0: 69 73 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20  is for the file 
f5b0: 74 68 61 74 0a 2a 2a 20 68 6f 6c 64 73 20 74 65  that.** holds te
f5c0: 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61  mporary tables a
f5d0: 6e 64 20 69 6e 64 69 63 65 73 2e 20 20 49 66 20  nd indices.  If 
f5e0: 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 69 73 20  TF_Ephemeral is 
f5f0: 73 65 74 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20  set.** then the 
f600: 74 61 62 6c 65 20 69 73 20 73 74 6f 72 65 64 20  table is stored 
f610: 69 6e 20 61 20 66 69 6c 65 20 74 68 61 74 20 69  in a file that i
f620: 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  s automatically 
f630: 64 65 6c 65 74 65 64 0a 2a 2a 20 77 68 65 6e 20  deleted.** when 
f640: 74 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  the VDBE cursor 
f650: 74 6f 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  to the table is 
f660: 63 6c 6f 73 65 64 2e 20 20 49 6e 20 74 68 69 73  closed.  In this
f670: 20 63 61 73 65 20 54 61 62 6c 65 2e 74 6e 75 6d   case Table.tnum
f680: 20 0a 2a 2a 20 72 65 66 65 72 73 20 56 44 42 45   .** refers VDBE
f690: 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 74   cursor number t
f6a0: 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 74 61  hat holds the ta
f6b0: 62 6c 65 20 6f 70 65 6e 2c 20 6e 6f 74 20 74 6f  ble open, not to
f6c0: 20 74 68 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67   the root.** pag
f6d0: 65 20 6e 75 6d 62 65 72 2e 20 20 54 72 61 6e 73  e number.  Trans
f6e0: 69 65 6e 74 20 74 61 62 6c 65 73 20 61 72 65 20  ient tables are 
f6f0: 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65  used to hold the
f700: 20 72 65 73 75 6c 74 73 20 6f 66 20 61 0a 2a 2a   results of a.**
f710: 20 73 75 62 2d 71 75 65 72 79 20 74 68 61 74 20   sub-query that 
f720: 61 70 70 65 61 72 73 20 69 6e 73 74 65 61 64 20  appears instead 
f730: 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20  of a real table 
f740: 6e 61 6d 65 20 69 6e 20 74 68 65 20 46 52 4f 4d  name in the FROM
f750: 20 63 6c 61 75 73 65 20 0a 2a 2a 20 6f 66 20 61   clause .** of a
f760: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
f770: 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62  t..*/.struct Tab
f780: 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  le {.  char *zNa
f790: 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  me;         /* N
f7a0: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
f7b0: 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f   or view */.  Co
f7c0: 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20  lumn *aCol;     
f7d0: 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
f7e0: 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c  n about each col
f7f0: 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a  umn */.  Index *
f800: 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a  pIndex;       /*
f810: 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64   List of SQL ind
f820: 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62  exes on this tab
f830: 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  le. */.  Select 
f840: 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
f850: 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73   NULL for tables
f860: 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66  .  Points to def
f870: 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65  inition if a vie
f880: 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46  w. */.  FKey *pF
f890: 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Key;         /* 
f8a0: 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61  Linked list of a
f8b0: 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  ll foreign keys 
f8c0: 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  in this table */
f8d0: 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66  .  char *zColAff
f8e0: 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e  ;       /* Strin
f8f0: 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
f900: 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
f910: 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 69 66 6e 64 65  column */.#ifnde
f920: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48  f SQLITE_OMIT_CH
f930: 45 43 4b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a  ECK.  ExprList *
f940: 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c  pCheck;    /* Al
f950: 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  l CHECK constrai
f960: 6e 74 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  nts */.#endif.  
f970: 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73  LogEst nRowLogEs
f980: 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65  t;   /* Estimate
f990: 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20  d rows in table 
f9a0: 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74  - from sqlite_st
f9b0: 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69  at1 table */.  i
f9c0: 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20  nt tnum;        
f9d0: 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65      /* Root BTre
f9e0: 65 20 6e 6f 64 65 20 66 6f 72 20 74 68 69 73 20  e node for this 
f9f0: 74 61 62 6c 65 20 28 73 65 65 20 6e 6f 74 65 20  table (see note 
fa00: 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 31 36 20  above) */.  i16 
fa10: 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20  iPKey;          
fa20: 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74   /* If not negat
fa30: 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50  ive, use aCol[iP
fa40: 4b 65 79 5d 20 61 73 20 74 68 65 20 70 72 69 6d  Key] as the prim
fa50: 61 72 79 20 6b 65 79 20 2a 2f 0a 20 20 69 31 36  ary key */.  i16
fa60: 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20   nCol;          
fa70: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
fa80: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74  olumns in this t
fa90: 61 62 6c 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52  able */.  u16 nR
faa0: 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ef;            /
fab0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e  * Number of poin
fac0: 74 65 72 73 20 74 6f 20 74 68 69 73 20 54 61 62  ters to this Tab
fad0: 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73  le */.  LogEst s
fae0: 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20  zTabRow;     /* 
faf0: 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f  Estimated size o
fb00: 66 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77  f each table row
fb10: 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69 66   in bytes */.#if
fb20: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
fb30: 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67  E_COSTMULT.  Log
fb40: 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20  Est costMult;   
fb50: 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70    /* Cost multip
fb60: 6c 69 65 72 20 66 6f 72 20 75 73 69 6e 67 20 74  lier for using t
fb70: 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e  his table */.#en
fb80: 64 69 66 0a 20 20 75 38 20 74 61 62 46 6c 61 67  dif.  u8 tabFlag
fb90: 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  s;         /* Ma
fba0: 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65  sk of TF_* value
fbb0: 73 20 2a 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e  s */.  u8 keyCon
fbc0: 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  f;          /* W
fbd0: 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73  hat to do in cas
fbe0: 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20  e of uniqueness 
fbf0: 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65  conflict on iPKe
fc00: 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  y */.#ifndef SQL
fc10: 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41  ITE_OMIT_ALTERTA
fc20: 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c  BLE.  int addCol
fc30: 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66  Offset;    /* Of
fc40: 66 73 65 74 20 69 6e 20 43 52 45 41 54 45 20 54  fset in CREATE T
fc50: 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64  ABLE stmt to add
fc60: 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f   a new column */
fc70: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
fc80: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
fc90: 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e  UALTABLE.  int n
fca0: 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20  ModuleArg;      
fcb0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
fcc0: 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f  uments to the mo
fcd0: 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  dule */.  char *
fce0: 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f  *azModuleArg;  /
fcf0: 2a 20 54 65 78 74 20 6f 66 20 61 6c 6c 20 6d 6f  * Text of all mo
fd00: 64 75 6c 65 20 61 72 67 73 2e 20 5b 30 5d 20 69  dule args. [0] i
fd10: 73 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 20 2a 2f  s module name */
fd20: 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62  .  VTable *pVTab
fd30: 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20  le;     /* List 
fd40: 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  of VTable object
fd50: 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54  s. */.#endif.  T
fd60: 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72  rigger *pTrigger
fd70: 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74  ;   /* List of t
fd80: 72 69 67 67 65 72 73 20 73 74 6f 72 65 64 20 69  riggers stored i
fd90: 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53  n pSchema */.  S
fda0: 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
fdb0: 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68      /* Schema th
fdc0: 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73  at contains this
fdd0: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c   table */.  Tabl
fde0: 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20  e *pNextZombie; 
fdf0: 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20   /* Next on the 
fe00: 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62  Parse.pZombieTab
fe10: 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
fe20: 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
fe30: 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62 46  s for Table.tabF
fe40: 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  lags..*/.#define
fe50: 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20   TF_Readonly    
fe60: 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 52      0x01    /* R
fe70: 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20  ead-only system 
fe80: 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
fe90: 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20   TF_Ephemeral   
fea0: 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 41      0x02    /* A
feb0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  n ephemeral tabl
fec0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
fed0: 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20  HasPrimaryKey   
fee0: 30 78 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65  0x04    /* Table
fef0: 20 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b   has a primary k
ff00: 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ey */.#define TF
ff10: 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20  _Autoincrement  
ff20: 20 30 78 30 38 20 20 20 20 2f 2a 20 49 6e 74 65   0x08    /* Inte
ff30: 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20  ger primary key 
ff40: 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  is autoincrement
ff50: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 56   */.#define TF_V
ff60: 69 72 74 75 61 6c 20 20 20 20 20 20 20 20 20 30  irtual         0
ff70: 78 31 30 20 20 20 20 2f 2a 20 49 73 20 61 20 76  x10    /* Is a v
ff80: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  irtual table */.
ff90: 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f  #define TF_Witho
ffa0: 75 74 52 6f 77 69 64 20 20 20 20 30 78 32 30 20  utRowid    0x20 
ffb0: 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 20 75     /* No rowid u
ffc0: 73 65 64 2e 20 50 52 49 4d 41 52 59 20 4b 45 59  sed. PRIMARY KEY
ffd0: 20 69 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 0a   is the key */..
ffe0: 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73  ./*.** Test to s
fff0: 65 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ee whether or no
10000 74 20 61 20 74 61 62 6c 65 20 69 73 20 61 20 76  t a table is a v
10010 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54  irtual table.  T
10020 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61  his is.** done a
10030 73 20 61 20 6d 61 63 72 6f 20 73 6f 20 74 68 61  s a macro so tha
10040 74 20 69 74 20 77 69 6c 6c 20 62 65 20 6f 70 74  t it will be opt
10050 69 6d 69 7a 65 64 20 6f 75 74 20 77 68 65 6e 20  imized out when 
10060 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
10070 20 73 75 70 70 6f 72 74 20 69 73 20 6f 6d 69 74   support is omit
10080 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69  ted from the bui
10090 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ld..*/.#ifndef S
100a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
100b0 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e  ALTABLE.#  defin
100c0 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20  e IsVirtual(X)  
100d0 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c      (((X)->tabFl
100e0 61 67 73 20 26 20 54 46 5f 56 69 72 74 75 61 6c  ags & TF_Virtual
100f0 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20  )!=0).#  define 
10100 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  IsHiddenColumn(X
10110 29 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67  ) (((X)->colFlag
10120 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44  s & COLFLAG_HIDD
10130 45 4e 29 21 3d 30 29 0a 23 65 6c 73 65 0a 23 20  EN)!=0).#else.# 
10140 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61   define IsVirtua
10150 6c 28 58 29 20 20 20 20 20 20 30 0a 23 20 20 64  l(X)      0.#  d
10160 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
10170 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66  lumn(X) 0.#endif
10180 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20 74 61  ../* Does the ta
10190 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77 69 64  ble have a rowid
101a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61 73 52   */.#define HasR
101b0 6f 77 69 64 28 58 29 20 20 20 20 20 28 28 28 58  owid(X)     (((X
101c0 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46  )->tabFlags & TF
101d0 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d  _WithoutRowid)==
101e0 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66  0)../*.** Each f
101f0 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
10200 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74  raint is an inst
10210 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
10220 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
10230 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e  .**.** A foreign
10240 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69 61 74   key is associat
10250 65 64 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c  ed with two tabl
10260 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20  es.  The "from" 
10270 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20  table is.** the 
10280 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61  table that conta
10290 69 6e 73 20 74 68 65 20 52 45 46 45 52 45 4e 43  ins the REFERENC
102a0 45 53 20 63 6c 61 75 73 65 20 74 68 61 74 20 63  ES clause that c
102b0 72 65 61 74 65 73 20 74 68 65 20 66 6f 72 65 69  reates the forei
102c0 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20  gn.** key.  The 
102d0 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68  "to" table is th
102e0 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20  e table that is 
102f0 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46  named in the REF
10300 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a  ERENCES clause..
10310 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73  ** Consider this
10320 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20   example:.**.** 
10330 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
10340 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61   ex1(.**       a
10350 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
10360 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62   KEY,.**       b
10370 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41   INTEGER CONSTRA
10380 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43  INT fk1 REFERENC
10390 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20  ES ex2(x).**    
103a0 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f   );.**.** For fo
103b0 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c  reign key "fk1",
103c0 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20   the from-table 
103d0 69 73 20 22 65 78 31 22 20 61 6e 64 20 74 68 65  is "ex1" and the
103e0 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78   to-table is "ex
103f0 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e  2"..** Equivalen
10400 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20  t names:.**.**  
10410 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d     from-table ==
10420 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20   child-table.** 
10430 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d        to-table =
10440 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a  = parent-table.*
10450 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45  *.** Each REFERE
10460 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65  NCES clause gene
10470 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63  rates an instanc
10480 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
10490 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  ng structure.** 
104a0 77 68 69 63 68 20 69 73 20 61 74 74 61 63 68 65  which is attache
104b0 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61  d to the from-ta
104c0 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62  ble.  The to-tab
104d0 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73  le need not exis
104e0 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72  t when.** the fr
104f0 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61  om-table is crea
10500 74 65 64 2e 20 20 54 68 65 20 65 78 69 73 74 65  ted.  The existe
10510 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61  nce of the to-ta
10520 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b  ble is not check
10530 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69  ed..**.** The li
10540 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74  st of all parent
10550 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61 62 6c  s for child Tabl
10560 65 20 58 20 69 73 20 68 65 6c 64 20 61 74 20 58  e X is held at X
10570 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20  .pFKey..**.** A 
10580 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c  list of all chil
10590 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62 6c 65  dren for a table
105a0 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63 68 20   named Z (which 
105b0 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e 20 65  might not even e
105c0 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64  xist).** is held
105d0 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79 48   in Schema.fkeyH
105e0 61 73 68 20 77 69 74 68 20 61 20 68 61 73 68 20  ash with a hash 
105f0 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72  key of Z..*/.str
10600 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62  uct FKey {.  Tab
10610 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f  le *pFrom;     /
10620 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69  * Table containi
10630 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  ng the REFERENCE
10640 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a 20 43  S clause (aka: C
10650 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20  hild) */.  FKey 
10660 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20  *pNextFrom;  /* 
10670 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68 20 74  Next FKey with t
10680 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d  he same in pFrom
10690 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20 6f 66  . Next parent of
106a0 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72   pFrom */.  char
106b0 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a   *zTo;        /*
106c0 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74   Name of table t
106d0 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e  hat the key poin
106e0 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65  ts to (aka: Pare
106f0 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  nt) */.  FKey *p
10700 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65  NextTo;    /* Ne
10710 78 74 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  xt with the same
10720 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64   zTo. Next child
10730 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b   of zTo. */.  FK
10740 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20 20  ey *pPrevTo;    
10750 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69 74 68  /* Previous with
10760 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f   the same zTo */
10770 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20  .  int nCol;    
10780 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
10790 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69  f columns in thi
107a0 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56  s key */.  /* EV
107b0 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20  : R-30323-21917 
107c0 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72 72  */.  u8 isDeferr
107d0 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75  ed;       /* Tru
107e0 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20  e if constraint 
107f0 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65  checking is defe
10800 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54  rred till COMMIT
10810 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e   */.  u8 aAction
10820 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f  [2];        /* O
10830 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20  N DELETE and ON 
10840 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20  UPDATE actions, 
10850 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a  respectively */.
10860 20 20 54 72 69 67 67 65 72 20 2a 61 70 54 72 69    Trigger *apTri
10870 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67  gger[2];/* Trigg
10880 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b  ers for aAction[
10890 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73  ] actions */.  s
108a0 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20  truct sColMap { 
108b0 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20       /* Mapping 
108c0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46  of columns in pF
108d0 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69  rom to columns i
108e0 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74  n zTo */.    int
108f0 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20   iFrom;         
10900 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63     /* Index of c
10910 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a  olumn in pFrom *
10920 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c  /.    char *zCol
10930 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
10940 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  ame of column in
10950 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75   zTo.  If NULL u
10960 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a  se PRIMARY KEY *
10970 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20  /.  } aCol[1];  
10980 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
10990 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20   entry for each 
109a0 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20  of nCol columns 
109b0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c  */.};../*.** SQL
109c0 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e  ite supports man
109d0 79 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73  y different ways
109e0 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f   to resolve a co
109f0 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
10a00 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f  r.  ROLLBACK pro
10a10 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
10a20 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  at a constraint 
10a30 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75  violation.** cau
10a40 73 65 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ses the operatio
10a50 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20  n in process to 
10a60 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65  fail and for the
10a70 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
10a80 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f  tion.** to be ro
10a90 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52  lled back.  ABOR
10aa0 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  T processing mea
10ab0 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ns the operation
10ac0 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66   in process.** f
10ad0 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69  ails and any pri
10ae0 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20  or changes from 
10af0 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69  that one operati
10b00 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75  on are backed ou
10b10 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72  t,.** but the tr
10b20 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74  ansaction is not
10b30 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46   rolled back.  F
10b40 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  AIL processing m
10b50 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65  eans that.** the
10b60 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
10b70 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64  ogress stops and
10b80 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f   returns an erro
10b90 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69  r code.  But pri
10ba0 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75  or.** changes du
10bb0 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70  e to the same op
10bc0 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20  eration are not 
10bd0 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e  backed out and n
10be0 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63  o rollback.** oc
10bf0 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65  curs.  IGNORE me
10c00 61 6e 73 20 74 68 61 74 20 74 68 65 20 70 61 72  ans that the par
10c10 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74  ticular row that
10c20 20 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73   caused the cons
10c30 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20  traint.** error 
10c40 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20  is not inserted 
10c50 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f  or updated.  Pro
10c60 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65  cessing continue
10c70 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a  s and no error.*
10c80 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20  * is returned.  
10c90 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68  REPLACE means th
10ca0 61 74 20 70 72 65 65 78 69 73 74 69 6e 67 20 64  at preexisting d
10cb0 61 74 61 62 61 73 65 20 72 6f 77 73 20 74 68 61  atabase rows tha
10cc0 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e  t caused.** a UN
10cd0 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
10ce0 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65  violation are re
10cf0 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74 68  moved so that th
10d00 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a  e new insert or.
10d10 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70 72  ** update can pr
10d20 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69  oceed.  Processi
10d30 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64  ng continues and
10d40 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70   no error is rep
10d50 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53  orted..**.** RES
10d60 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20  TRICT, SETNULL, 
10d70 61 6e 64 20 43 41 53 43 41 44 45 20 61 63 74 69  and CASCADE acti
10d80 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74  ons apply only t
10d90 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a  o foreign keys..
10da0 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73 20 74  ** RESTRICT is t
10db0 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54  he same as ABORT
10dc0 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66   for IMMEDIATE f
10dd0 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20  oreign keys and 
10de0 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52  the.** same as R
10df0 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45  OLLBACK for DEFE
10e00 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e  RRED keys.  SETN
10e10 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ULL means that t
10e20 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  he foreign.** ke
10e30 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c  y is set to NULL
10e40 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73  .  CASCADE means
10e50 20 74 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f   that a DELETE o
10e60 72 20 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a  r UPDATE of the.
10e70 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74 61  ** referenced ta
10e80 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61  ble row is propa
10e90 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72  gated into the r
10ea0 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  ow that holds th
10eb0 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79  e.** foreign key
10ec0 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 65 20 66 6f 6c  ..** .** The fol
10ed0 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20  lowing symbolic 
10ee0 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20  values are used 
10ef0 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68 20  to record which 
10f00 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f  type.** of actio
10f10 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64  n to take..*/.#d
10f20 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20  efine OE_None   
10f30 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69    0   /* There i
10f40 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20  s no constraint 
10f50 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66  to check */.#def
10f60 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20  ine OE_Rollback 
10f70 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20  1   /* Fail the 
10f80 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f  operation and ro
10f90 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73  llback the trans
10fa0 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  action */.#defin
10fb0 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20  e OE_Abort    2 
10fc0 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68    /* Back out ch
10fd0 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20  anges but do no 
10fe0 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63  rollback transac
10ff0 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
11000 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20  OE_Fail     3   
11010 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72  /* Stop the oper
11020 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20  ation but leave 
11030 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65  all prior change
11040 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  s */.#define OE_
11050 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20  Ignore   4   /* 
11060 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72  Ignore the error
11070 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20  . Do not do the 
11080 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
11090 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52   */.#define OE_R
110a0 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44  eplace  5   /* D
110b0 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 72  elete existing r
110c0 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49  ecord, then do I
110d0 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20  NSERT or UPDATE 
110e0 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52  */..#define OE_R
110f0 65 73 74 72 69 63 74 20 36 20 20 20 2f 2a 20 4f  estrict 6   /* O
11100 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45  E_Abort for IMME
11110 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61  DIATE, OE_Rollba
11120 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20  ck for DEFERRED 
11130 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65  */.#define OE_Se
11140 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65  tNull  7   /* Se
11150 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65  t the foreign ke
11160 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20  y value to NULL 
11170 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65  */.#define OE_Se
11180 74 44 66 6c 74 20 20 38 20 20 20 2f 2a 20 53 65  tDflt  8   /* Se
11190 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65  t the foreign ke
111a0 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64  y value to its d
111b0 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e  efault */.#defin
111c0 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20 39 20  e OE_Cascade  9 
111d0 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65    /* Cascade the
111e0 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65   changes */..#de
111f0 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20  fine OE_Default 
11200 20 31 30 20 20 2f 2a 20 44 6f 20 77 68 61 74 65   10  /* Do whate
11210 76 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20  ver the default 
11220 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f  action is */.../
11230 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
11240 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
11250 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70  g structure is p
11260 61 73 73 65 64 20 61 73 20 74 68 65 20 66 69 72  assed as the fir
11270 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74  st.** argument t
11280 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79  o sqlite3VdbeKey
11290 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75  Compare and is u
112a0 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74  sed to control t
112b0 68 65 20 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  he .** compariso
112c0 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64  n of the two ind
112d0 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e  ex keys..**.** N
112e0 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72  ote that aSortOr
112f0 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b  der[] and aColl[
11300 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20  ] have nField+1 
11310 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a  slots.  There.**
11320 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74   are nField slot
11330 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  s for the column
11340 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68  s of an index th
11350 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f  en one extra slo
11360 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77  t.** for the row
11370 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a  id at the end..*
11380 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f  /.struct KeyInfo
11390 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20   {.  u32 nRef;  
113a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
113b0 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73  er of references
113c0 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f   to this KeyInfo
113d0 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20   object */.  u8 
113e0 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
113f0 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
11400 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53  g - one of the S
11410 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65  QLITE_UTF* value
11420 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c  s */.  u16 nFiel
11430 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
11440 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75  mber of key colu
11450 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  mns in the index
11460 20 2a 2f 0a 20 20 75 31 36 20 6e 58 46 69 65 6c   */.  u16 nXFiel
11470 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  d;        /* Num
11480 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 62  ber of columns b
11490 65 79 6f 6e 64 20 74 68 65 20 6b 65 79 20 63 6f  eyond the key co
114a0 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c 69 74  lumns */.  sqlit
114b0 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f  e3 *db;        /
114c0 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63  * The database c
114d0 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75  onnection */.  u
114e0 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20  8 *aSortOrder;  
114f0 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72     /* Sort order
11500 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
11510 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  . */.  CollSeq *
11520 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f  aColl[1];  /* Co
11530 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
11540 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f   for each term o
11550 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a  f the key */.};.
11560 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
11570 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
11580 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 68 6f  ing structure ho
11590 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  lds information 
115a0 61 62 6f 75 74 20 61 0a 2a 2a 20 73 69 6e 67 6c  about a.** singl
115b0 65 20 69 6e 64 65 78 20 72 65 63 6f 72 64 20 74  e index record t
115c0 68 61 74 20 68 61 73 20 61 6c 72 65 61 64 79 20  hat has already 
115d0 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20  been parsed out 
115e0 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a  into individual.
115f0 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a  ** values..**.**
11600 20 41 20 72 65 63 6f 72 64 20 69 73 20 61 6e 20   A record is an 
11610 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f 6e 74  object that cont
11620 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
11630 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74 61 2e   fields of data.
11640 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72 65 20  .** Records are 
11650 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
11660 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74  e content of a t
11670 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74 6f 20  able row and to 
11680 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79  store.** the key
11690 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20 20 41   of an index.  A
116a0 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f   blob encoding o
116b0 66 20 61 20 72 65 63 6f 72 64 20 69 73 20 63 72  f a record is cr
116c0 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20  eated by.** the 
116d0 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70  OP_MakeRecord op
116e0 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44 42 45  code of the VDBE
116f0 20 61 6e 64 20 69 73 20 64 69 73 61 73 73 65 6d   and is disassem
11700 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f  bled by the.** O
11710 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e  P_Column opcode.
11720 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75  .**.** This stru
11730 63 74 75 72 65 20 68 6f 6c 64 73 20 61 20 72 65  cture holds a re
11740 63 6f 72 64 20 74 68 61 74 20 68 61 73 20 61 6c  cord that has al
11750 72 65 61 64 79 20 62 65 65 6e 20 64 69 73 61 73  ready been disas
11760 73 65 6d 62 6c 65 64 0a 2a 2a 20 69 6e 74 6f 20  sembled.** into 
11770 69 74 73 20 63 6f 6e 73 74 69 74 75 65 6e 74 20  its constituent 
11780 66 69 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  fields..**.** Th
11790 65 20 72 31 20 61 6e 64 20 72 32 20 6d 65 6d 62  e r1 and r2 memb
117a0 65 72 20 76 61 72 69 61 62 6c 65 73 20 61 72 65  er variables are
117b0 20 6f 6e 6c 79 20 75 73 65 64 20 62 79 20 74 68   only used by th
117c0 65 20 6f 70 74 69 6d 69 7a 65 64 20 63 6f 6d 70  e optimized comp
117d0 61 72 69 73 6f 6e 0a 2a 2a 20 66 75 6e 63 74 69  arison.** functi
117e0 6f 6e 73 20 76 64 62 65 52 65 63 6f 72 64 43 6f  ons vdbeRecordCo
117f0 6d 70 61 72 65 49 6e 74 28 29 20 61 6e 64 20 76  mpareInt() and v
11800 64 62 65 52 65 63 6f 72 64 43 6f 6d 70 61 72 65  dbeRecordCompare
11810 53 74 72 69 6e 67 28 29 2e 0a 2a 2f 0a 73 74 72  String()..*/.str
11820 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  uct UnpackedReco
11830 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a  rd {.  KeyInfo *
11840 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f  pKeyInfo;  /* Co
11850 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74  llation and sort
11860 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74 69  -order informati
11870 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65  on */.  u16 nFie
11880 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ld;         /* N
11890 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
118a0 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20   in apMem[] */. 
118b0 20 69 38 20 64 65 66 61 75 6c 74 5f 72 63 3b 20   i8 default_rc; 
118c0 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73       /* Comparis
118d0 6f 6e 20 72 65 73 75 6c 74 20 69 66 20 6b 65 79  on result if key
118e0 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20  s are equal */. 
118f0 20 75 38 20 65 72 72 43 6f 64 65 3b 20 20 20 20   u8 errCode;    
11900 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65       /* Error de
11910 74 65 63 74 65 64 20 62 79 20 78 52 65 63 6f 72  tected by xRecor
11920 64 43 6f 6d 70 61 72 65 20 28 43 4f 52 52 55 50  dCompare (CORRUP
11930 54 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20  T or NOMEM) */. 
11940 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20   Mem *aMem;     
11950 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a       /* Values *
11960 2f 0a 20 20 69 6e 74 20 72 31 3b 20 20 20 20 20  /.  int r1;     
11970 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
11980 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c   to return if (l
11990 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a 20 20 69  hs > rhs) */.  i
119a0 6e 74 20 72 32 3b 20 20 20 20 20 20 20 20 20 20  nt r2;          
119b0 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
119c0 65 74 75 72 6e 20 69 66 20 28 72 68 73 20 3c 20  eturn if (rhs < 
119d0 6c 68 73 29 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a  lhs) */.};.../*.
119e0 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65  ** Each SQL inde
119f0 78 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  x is represented
11a00 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e   in memory by an
11a10 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
11a20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
11a30 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54  ructure..**.** T
11a40 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
11a50 65 20 74 61 62 6c 65 20 74 68 61 74 20 61 72 65  e table that are
11a60 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61   to be indexed a
11a70 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20  re described.** 
11a80 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b  by the aiColumn[
11a90 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20  ] field of this 
11aa0 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20  structure.  For 
11ab0 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65  example, suppose
11ac0 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68 65 20  .** we have the 
11ad0 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20  following table 
11ae0 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a  and index:.**.**
11af0 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
11b00 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32  E Ex1(c1 int, c2
11b10 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a   int, c3 text);.
11b20 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 49 4e  **     CREATE IN
11b30 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63  DEX Ex2 ON Ex1(c
11b40 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20  3,c1);.**.** In 
11b50 74 68 65 20 54 61 62 6c 65 20 73 74 72 75 63 74  the Table struct
11b60 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 20 45  ure describing E
11b70 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61  x1, nCol==3 beca
11b80 75 73 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a  use there are.**
11b90 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69   three columns i
11ba0 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e  n the table.  In
11bb0 20 74 68 65 20 49 6e 64 65 78 20 73 74 72 75 63   the Index struc
11bc0 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a  ture describing.
11bd0 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d  ** Ex2, nColumn=
11be0 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68  =2 since 2 of th
11bf0 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45  e 3 columns of E
11c00 78 31 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a  x1 are indexed..
11c10 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20  ** The value of 
11c20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20  aiColumn is {2, 
11c30 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d  0}.  aiColumn[0]
11c40 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68 65 20  ==2 because the 
11c50 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e  .** first column
11c60 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28   to be indexed (
11c70 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78  c3) has an index
11c80 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f   of 2 in Ex1.aCo
11c90 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f  l[]..** The seco
11ca0 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20  nd column to be 
11cb0 69 6e 64 65 78 65 64 20 28 63 31 29 20 68 61 73  indexed (c1) has
11cc0 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69   an index of 0 i
11cd0 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c  n.** Ex1.aCol[],
11ce0 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c   hence Ex2.aiCol
11cf0 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a  umn[1]==0..**.**
11d00 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72   The Index.onErr
11d10 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69  or field determi
11d20 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e  nes whether or n
11d30 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64 20 63  ot the indexed c
11d40 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62  olumns.** must b
11d50 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61  e unique and wha
11d60 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20  t to do if they 
11d70 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49  are not.  When I
11d80 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f  ndex.onError=OE_
11d90 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e  None,.** it mean
11da0 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20  s this is not a 
11db0 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f  unique index.  O
11dc0 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20 61  therwise it is a
11dd0 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a   unique index.**
11de0 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f   and the value o
11df0 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20  f Index.onError 
11e00 69 6e 64 69 63 61 74 65 20 74 68 65 20 77 68 69  indicate the whi
11e10 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  ch conflict reso
11e20 6c 75 74 69 6f 6e 20 0a 2a 2a 20 61 6c 67 6f 72  lution .** algor
11e30 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77  ithm to employ w
11e40 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d  henever an attem
11e50 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e  pt is made to in
11e60 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75  sert a non-uniqu
11e70 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2f  e.** element..*/
11e80 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a  .struct Index {.
11e90 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
11ea0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
11eb0 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78  me of this index
11ec0 20 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c   */.  i16 *aiCol
11ed0 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  umn;           /
11ee0 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20  * Which columns 
11ef0 61 72 65 20 75 73 65 64 20 62 79 20 74 68 69 73  are used by this
11f00 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20   index.  1st is 
11f10 30 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61  0 */.  LogEst *a
11f20 69 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 20 20  iRowLogEst;     
11f30 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a  /* From ANALYZE:
11f40 20 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63   Est. rows selec
11f50 74 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75  ted by each colu
11f60 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  mn */.  Table *p
11f70 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
11f80 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c   /* The SQL tabl
11f90 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20  e being indexed 
11fa0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41  */.  char *zColA
11fb0 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ff;           /*
11fc0 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67   String defining
11fd0 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   the affinity of
11fe0 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
11ff0 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20    Index *pNext; 
12000 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
12010 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73  e next index ass
12020 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
12030 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20   same table */. 
12040 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
12050 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68  ;         /* Sch
12060 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
12070 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  his index */.  u
12080 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20  8 *aSortOrder;  
12090 20 20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20 65          /* for e
120a0 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65  ach column: True
120b0 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41  ==DESC, False==A
120c0 53 43 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  SC */.  char **a
120d0 7a 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20  zColl;          
120e0 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f 6c   /* Array of col
120f0 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
12100 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78 20  names for index 
12110 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50 61 72 74  */.  Expr *pPart
12120 49 64 78 57 68 65 72 65 3b 20 20 20 20 20 2f 2a  IdxWhere;     /*
12130 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f   WHERE clause fo
12140 72 20 70 61 72 74 69 61 6c 20 69 6e 64 69 63 65  r partial indice
12150 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  s */.  int tnum;
12160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12170 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61  /* DB Page conta
12180 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68  ining root of th
12190 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f  is index */.  Lo
121a0 67 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20  gEst szIdxRow;  
121b0 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
121c0 74 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20  ted average row 
121d0 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f  size in bytes */
121e0 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20  .  u16 nKeyCol; 
121f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
12200 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
12210 20 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79   forming the key
12220 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d   */.  u16 nColum
12230 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
12240 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
12250 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68  mns stored in th
12260 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20  e index */.  u8 
12270 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20  onError;        
12280 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72        /* OE_Abor
12290 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45  t, OE_Ignore, OE
122a0 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f  _Replace, or OE_
122b0 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  None */.  unsign
122c0 65 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20  ed idxType:2;   
122d0 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c     /* 1==UNIQUE,
122e0 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c   2==PRIMARY KEY,
122f0 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58   0==CREATE INDEX
12300 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62   */.  unsigned b
12310 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f  Unordered:1;   /
12320 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78  * Use this index
12330 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75   for == or IN qu
12340 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20  eries only */.  
12350 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74  unsigned uniqNot
12360 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65  Null:1;  /* True
12370 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e   if UNIQUE and N
12380 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20  OT NULL for all 
12390 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73  columns */.  uns
123a0 69 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a  igned isResized:
123b0 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  1;    /* True if
123c0 20 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65   resizeIndexObje
123d0 63 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61  ct() has been ca
123e0 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  lled */.  unsign
123f0 65 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b  ed isCovering:1;
12400 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
12410 69 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67  is is a covering
12420 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69   index */.  unsi
12430 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a  gned noSkipScan:
12440 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74  1;   /* Do not t
12450 72 79 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73  ry to use skip-s
12460 63 61 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 23  can if true */.#
12470 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
12480 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
12490 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  T4.  int nSample
124a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
124b0 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   Number of eleme
124c0 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d  nts in aSample[]
124d0 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c   */.  int nSampl
124e0 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f  eCol;          /
124f0 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53  * Size of IndexS
12500 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64  ample.anEq[] and
12510 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77   so on */.  tRow
12520 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20  cnt *aAvgEq;    
12530 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20       /* Average 
12540 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b  nEq values for k
12550 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70  eys not in aSamp
12560 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d  le */.  IndexSam
12570 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20  ple *aSample;   
12580 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74   /* Samples of t
12590 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79  he left-most key
125a0 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
125b0 69 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f  iRowEst;       /
125c0 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69  * Non-logarithmi
125d0 63 20 73 74 61 74 31 20 64 61 74 61 20 66 6f 72  c stat1 data for
125e0 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
125f0 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74   tRowcnt nRowEst
12600 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e  0;        /* Non
12610 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d  -logarithmic num
12620 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
12630 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64  he index */.#end
12640 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  if.};../*.** All
12650 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
12660 49 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f  Index.idxType.*/
12670 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
12680 49 44 58 54 59 50 45 5f 41 50 50 44 45 46 20 20  IDXTYPE_APPDEF  
12690 20 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74      0   /* Creat
126a0 65 64 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  ed using CREATE 
126b0 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65  INDEX */.#define
126c0 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
126d0 55 4e 49 51 55 45 20 20 20 20 20 20 31 20 20 20  UNIQUE      1   
126e0 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20  /* Implements a 
126f0 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
12700 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
12710 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d  ITE_IDXTYPE_PRIM
12720 41 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49  ARYKEY  2   /* I
12730 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
12740 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20  Y for the table 
12750 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72  */../* Return tr
12760 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73  ue if index X is
12770 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69   a PRIMARY KEY i
12780 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
12790 49 73 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65  IsPrimaryKeyInde
127a0 78 28 58 29 20 20 28 28 58 29 2d 3e 69 64 78 54  x(X)  ((X)->idxT
127b0 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54  ype==SQLITE_IDXT
127c0 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a  YPE_PRIMARYKEY).
127d0 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  ./* Return true 
127e0 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20  if index X is a 
127f0 55 4e 49 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a  UNIQUE index */.
12800 23 64 65 66 69 6e 65 20 49 73 55 6e 69 71 75 65  #define IsUnique
12810 49 6e 64 65 78 28 58 29 20 20 20 20 20 20 28 28  Index(X)      ((
12820 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f  X)->onError!=OE_
12830 4e 6f 6e 65 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  None)../*.** Eac
12840 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20  h sample stored 
12850 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  in the sqlite_st
12860 61 74 33 20 74 61 62 6c 65 20 69 73 20 72 65 70  at3 table is rep
12870 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
12880 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73  ry .** using a s
12890 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73  tructure of this
128a0 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75   type.  See docu
128b0 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65  mentation at the
128c0 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61   top of the.** a
128d0 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20  nalyze.c source 
128e0 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f  file for additio
128f0 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
12900 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78  .*/.struct Index
12910 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20  Sample {.  void 
12920 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  *p;          /* 
12930 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c  Pointer to sampl
12940 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  ed record */.  i
12950 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
12960 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f   /* Size of reco
12970 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  rd in bytes */. 
12980 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20   tRowcnt *anEq; 
12990 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
129a0 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
129b0 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74  the key equals t
129c0 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
129d0 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20  tRowcnt *anLt;  
129e0 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
129f0 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b   of rows where k
12a00 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ey is less than 
12a10 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
12a20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b   tRowcnt *anDLt;
12a30 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
12a40 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65  r of distinct ke
12a50 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  ys less than thi
12a60 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s sample */.};..
12a70 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e  /*.** Each token
12a80 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74   coming out of t
12a90 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69  he lexer is an i
12aa0 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68  nstance of.** th
12ab0 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
12ac0 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75  okens are also u
12ad0 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  sed as part of a
12ae0 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a  n expression..**
12af0 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65  .** Note if Toke
12b00 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65  n.z==0 then Toke
12b10 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e  n.dyn and Token.
12b20 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20  n are undefined 
12b30 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61  and.** may conta
12b40 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73  in random values
12b50 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61  .  Do not make a
12b60 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61  ny assumptions a
12b70 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a  bout Token.dyn.*
12b80 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68  * and Token.n wh
12b90 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a  en Token.z==0..*
12ba0 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b  /.struct Token {
12bb0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
12bc0 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66  ;     /* Text of
12bd0 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74   the token.  Not
12be0 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64   NULL-terminated
12bf0 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  ! */.  unsigned 
12c00 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d  int n;    /* Num
12c10 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72  ber of character
12c20 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20  s in this token 
12c30 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
12c40 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
12c50 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
12c60 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
12c70 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
12c80 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61  te.** code for a
12c90 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e   SELECT that con
12ca0 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
12cb0 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
12cc0 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f   If Expr.op==TK_
12cd0 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b  AGG_COLUMN or TK
12ce0 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68  _AGG_FUNCTION th
12cf0 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f  en Expr.pAggInfo
12d00 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72   is a.** pointer
12d10 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
12d20 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43  re.  The Expr.iC
12d30 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74  olumn field is t
12d40 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41  he index in.** A
12d50 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72  ggInfo.aCol[] or
12d60 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d   AggInfo.aFunc[]
12d70 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
12d80 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
12d90 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74  te.** code for t
12da0 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  hat node..**.** 
12db0 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79  AggInfo.pGroupBy
12dc0 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75   and AggInfo.aFu
12dd0 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74  nc.pExpr point t
12de0 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20  o fields within 
12df0 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20  the.** original 
12e00 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65  Select structure
12e10 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20   that describes 
12e20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
12e30 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20  ment.  These.** 
12e40 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65  fields do not ne
12e50 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77  ed to be freed w
12e60 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  hen deallocating
12e70 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72   the AggInfo str
12e80 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
12e90 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38  t AggInfo {.  u8
12ea0 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20   directMode;    
12eb0 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20        /* Direct 
12ec0 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d  rendering mode m
12ed0 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64  eans take data d
12ee0 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20  irectly.        
12ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f00 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65    ** from source
12f10 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74   tables rather t
12f20 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c  han from accumul
12f30 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73  ators */.  u8 us
12f40 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20  eSortingIdx;    
12f50 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20     /* In direct 
12f60 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20  mode, reference 
12f70 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
12f80 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20  x rather.       
12f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fa0 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73     ** than the s
12fb0 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
12fc0 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b   int sortingIdx;
12fd0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73           /* Curs
12fe0 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  or number of the
12ff0 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
13000 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49  /.  int sortingI
13010 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43  dxPTab;     /* C
13020 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
13030 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a  pseudo-table */.
13040 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f    int nSortingCo
13050 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d  lumn;     /* Num
13060 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
13070 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
13080 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52  dex */.  int mnR
13090 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20  eg, mxReg;      
130a0 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67   /* Range of reg
130b0 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
130c0 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46   for aCol and aF
130d0 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  unc */.  ExprLis
130e0 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
130f0 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79   /* The group by
13100 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72   clause */.  str
13110 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20  uct AggInfo_col 
13120 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68  {    /* For each
13130 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20   column used in 
13140 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f  source tables */
13150 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
13160 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
13170 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   Source table */
13180 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
13190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
131a0 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
131b0 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  f the source tab
131c0 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  le */.    int iC
131d0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
131e0 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
131f0 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73  ber within the s
13200 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
13210 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f     int iSorterCo
13220 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43  lumn;       /* C
13230 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
13240 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
13250 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  x */.    int iMe
13260 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
13270 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
13280 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
13290 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
132a0 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
132b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
132c0 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78   The original ex
132d0 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20  pression */.  } 
132e0 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f  *aCol;.  int nCo
132f0 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
13300 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
13310 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  ed entries in aC
13320 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  ol[] */.  int nA
13330 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20  ccumulator;     
13340 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
13350 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77  olumns that show
13360 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
13370 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20  output..        
13380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13390 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20    ** Additional 
133a0 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
133b0 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74   only as paramet
133c0 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20  ers to.         
133d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133e0 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75   ** aggregate fu
133f0 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72  nctions */.  str
13400 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63  uct AggInfo_func
13410 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68   {   /* For each
13420 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
13430 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ion */.    Expr 
13440 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
13450 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
13460 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66  n encoding the f
13470 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46  unction */.    F
13480 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20  uncDef *pFunc;  
13490 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
134a0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
134b0 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  n implementation
134c0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d   */.    int iMem
134d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
134e0 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74   /* Memory locat
134f0 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73  ion that acts as
13500 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
13510 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63      int iDistinc
13520 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
13530 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  Ephemeral table 
13540 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20  used to enforce 
13550 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20  DISTINCT */.  } 
13560 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46  *aFunc;.  int nF
13570 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
13580 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
13590 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b  ntries in aFunc[
135a0 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ] */.};../*.** T
135b0 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61  he datatype ynVa
135c0 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e  r is a signed in
135d0 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36  teger, either 16
135e0 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a  -bit or 32-bit..
135f0 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73  ** Usually it is
13600 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69   16-bits.  But i
13610 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  f SQLITE_MAX_VAR
13620 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20  IABLE_NUMBER is 
13630 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20  greater.** than 
13640 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f  32767 we have to
13650 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e   make it 32-bit.
13660 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66    16-bit is pref
13670 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a  erred because.**
13680 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65   it uses less me
13690 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72  mory in the Expr
136a0 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69   object, which i
136b0 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75  s a big memory u
136c0 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d  ser.** in system
136d0 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70  s with lots of p
136e0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
136f0 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70  ts.  And few app
13700 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65  lications.** nee
13710 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75  d more than abou
13720 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61  t 10 or 20 varia
13730 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20  bles.  But some 
13740 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61  extreme users wa
13750 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72  nt.** to have pr
13760 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
13770 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36  s with over 3276
13780 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64  7 variables, and
13790 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65   for them.** the
137a0 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c   option is avail
137b0 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65  able (at compile
137c0 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53  -time)..*/.#if S
137d0 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
137e0 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37  LE_NUMBER<=32767
137f0 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56  .typedef i16 ynV
13800 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65  ar;.#else.typede
13810 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e  f int ynVar;.#en
13820 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  dif../*.** Each 
13830 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65  node of an expre
13840 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72  ssion in the par
13850 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e  se tree is an in
13860 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
13870 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  s structure..**.
13880 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68  ** Expr.op is th
13890 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e  e opcode. The in
138a0 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b  teger parser tok
138b0 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75  en codes are reu
138c0 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65  sed.** as opcode
138d0 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d  s here. For exam
138e0 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20  ple, the parser 
138f0 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f  defines TK_GE to
13900 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a   be an integer.*
13910 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74  * code represent
13920 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65  ing the ">=" ope
13930 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65  rator. This same
13940 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73   integer code is
13950 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65   reused.** to re
13960 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61  present the grea
13970 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61  ter-than-or-equa
13980 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e  l-to operator in
13990 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a   the expression.
139a0 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49  ** tree..**.** I
139b0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
139c0 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72   is an SQL liter
139d0 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20  al (TK_INTEGER, 
139e0 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f  TK_FLOAT, TK_BLO
139f0 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52  B, .** or TK_STR
13a00 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  ING), then Expr.
13a10 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
13a20 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53  he text of the S
13a30 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a  QL literal. If.*
13a40 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
13a50 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28   is a variable (
13a60 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68  TK_VARIABLE), th
13a70 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
13a80 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76  ntains the .** v
13a90 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69  ariable name. Fi
13aa0 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78  nally, if the ex
13ab0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
13ac0 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f  QL function (TK_
13ad0 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68  FUNCTION),.** th
13ae0 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
13af0 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20  ntains the name 
13b00 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
13b10 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67  .**.** Expr.pRig
13b20 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66  ht and Expr.pLef
13b30 74 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61  t are the left a
13b40 6e 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72  nd right subexpr
13b50 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20  essions of a.** 
13b60 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e  binary operator.
13b70 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20   Either or both 
13b80 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a  may be NULL..**.
13b90 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  ** Expr.x.pList 
13ba0 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67  is a list of arg
13bb0 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78  uments if the ex
13bc0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
13bd0 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20  QL function,.** 
13be0 61 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  a CASE expressio
13bf0 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65  n or an IN expre
13c00 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
13c10 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e  m "<lhs> IN (<y>
13c20 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45  , <z>...)"..** E
13c30 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
13c40 20 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70   used if the exp
13c50 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
13c60 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78  -select or an ex
13c70 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74  pression of.** t
13c80 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49  he form "<lhs> I
13c90 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e  N (SELECT ...)".
13ca0 20 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65   If the EP_xIsSe
13cb0 6c 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20  lect bit is set 
13cc0 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66  in the.** Expr.f
13cd0 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
13ce0 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69  Expr.x.pSelect i
13cf0 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69  s valid. Otherwi
13d00 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74  se, Expr.x.pList
13d10 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a   is .** valid..*
13d20 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69  *.** An expressi
13d30 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49  on of the form I
13d40 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72  D or ID.ID refer
13d50 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e  s to a column in
13d60 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72   a table..** For
13d70 20 73 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e   such expression
13d80 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65  s, Expr.op is se
13d90 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61  t to TK_COLUMN a
13da0 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69  nd Expr.iTable i
13db0 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72  s.** the integer
13dc0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
13dd0 66 20 61 20 56 44 42 45 20 63 75 72 73 6f 72 20  f a VDBE cursor 
13de0 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74  pointing to that
13df0 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78   table and.** Ex
13e00 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68  pr.iColumn is th
13e10 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  e column number 
13e20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63  for the specific
13e30 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65   column.  If the
13e40 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69  .** expression i
13e50 73 20 75 73 65 64 20 61 73 20 61 20 72 65 73 75  s used as a resu
13e60 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61  lt in an aggrega
13e70 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20  te SELECT, then 
13e80 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20  the.** value is 
13e90 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74  also stored in t
13ea0 68 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c  he Expr.iAgg col
13eb0 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65  umn in the aggre
13ec0 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20  gate so that.** 
13ed0 69 74 20 63 61 6e 20 62 65 20 61 63 63 65 73 73  it can be access
13ee0 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67  ed after all agg
13ef0 72 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70  regates are comp
13f00 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  uted..**.** If t
13f10 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
13f20 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69   an unbound vari
13f30 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71  able marker (a q
13f40 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a  uestion mark .**
13f50 20 63 68 61 72 61 63 74 65 72 20 27 3f 27 20 69   character '?' i
13f60 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53  n the original S
13f70 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78 70  QL) then the Exp
13f80 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74  r.iTable holds t
13f90 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d  he index .** num
13fa0 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72  ber for that var
13fb0 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  iable..**.** If 
13fc0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
13fd0 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65  s a subquery the
13fe0 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68  n Expr.iColumn h
13ff0 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a  olds an integer.
14000 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62  ** register numb
14010 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  er containing th
14020 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
14030 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68  subquery.  If th
14040 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69  e.** subquery gi
14050 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72  ves a constant r
14060 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62  esult, then iTab
14070 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68  le is -1.  If th
14080 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69  e subquery.** gi
14090 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20  ves a different 
140a0 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72  answer at differ
140b0 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67  ent times during
140c0 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65   statement proce
140d0 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54  ssing.** then iT
140e0 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72  able is the addr
140f0 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74  ess of a subrout
14100 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65  ine that compute
14110 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a  s the subquery..
14120 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70  **.** If the Exp
14130 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f  r is of type OP_
14140 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20  Column, and the 
14150 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65  table it is sele
14160 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73  cting from.** is
14170 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72   a disk table or
14180 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65   the "old.*" pse
14190 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20  udo-table, then 
141a0 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74  pTab points to t
141b0 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  he.** correspond
141c0 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ing table defini
141d0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f  tion..**.** ALLO
141e0 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a  CATION NOTES:.**
141f0 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73  .** Expr objects
14200 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f   can use a lot o
14210 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69  f memory space i
14220 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  n database schem
14230 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72  a.  To.** help r
14240 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71  educe memory req
14250 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74  uirements, somet
14260 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a  imes an Expr obj
14270 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74  ect will be.** t
14280 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74  runcated.  And t
14290 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d  o reduce the num
142a0 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c  ber of memory al
142b0 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74  locations, somet
142c0 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d  imes.** two or m
142d0 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73  ore Expr objects
142e0 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
142f0 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f  in a single memo
14300 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a  ry allocation,.*
14310 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  * together with 
14320 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69  Expr.zToken stri
14330 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ngs..**.** If th
14340 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64  e EP_Reduced and
14350 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
14360 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e  ags are set when
14370 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  .** an Expr obje
14380 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e  ct is truncated.
14390 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65    When EP_Reduce
143a0 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61  d is set, then a
143b0 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20  ll.** the child 
143c0 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20  Expr objects in 
143d0 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61  the Expr.pLeft a
143e0 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73  nd Expr.pRight s
143f0 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63  ubtrees.** are c
14400 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20  ontained within 
14410 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20  the same memory 
14420 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74  allocation.  Not
14430 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74  e, however, that
14440 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73  .** the subtrees
14450 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74   in Expr.x.pList
14460 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65   or Expr.x.pSele
14470 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65  ct are always se
14480 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f  parately.** allo
14490 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73  cated, regardles
144a0 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20  s of whether or 
144b0 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69  not EP_Reduced i
144c0 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  s set..*/.struct
144d0 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b   Expr {.  u8 op;
144e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144f0 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65   /* Operation pe
14500 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20  rformed by this 
14510 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61  node */.  char a
14520 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20  ffinity;        
14530 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
14540 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f   of the column o
14550 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c  r 0 if not a col
14560 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61  umn */.  u32 fla
14570 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
14580 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73  /* Various flags
14590 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f  .  EP_* See belo
145a0 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  w */.  union {. 
145b0 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b     char *zToken;
145c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
145d0 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74  en value. Zero t
145e0 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65  erminated and de
145f0 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e  quoted */.    in
14600 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20  t iValue;       
14610 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61       /* Non-nega
14620 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c  tive integer val
14630 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75  ue if EP_IntValu
14640 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f  e */.  } u;..  /
14650 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65  * If the EP_Toke
14660 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65  nOnly flag is se
14670 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  t in the Expr.fl
14680 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e  ags mask, then n
14690 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20  o.  ** space is 
146a0 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68  allocated for th
146b0 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74  e fields below t
146c0 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74  his point. An at
146d0 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63  tempt to.  ** ac
146e0 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72  cess them will r
146f0 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61  esult in a segfa
14700 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69  ult or malfuncti
14710 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  on. .  *********
14720 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14730 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14740 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14750 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
14760 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20   Expr *pLeft;   
14770 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20          /* Left 
14780 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70  subnode */.  Exp
14790 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20  r *pRight;      
147a0 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62      /* Right sub
147b0 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  node */.  union 
147c0 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  {.    ExprList *
147d0 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70  pList;     /* op
147e0 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53   = IN, EXISTS, S
147f0 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e  ELECT, CASE, FUN
14800 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a  CTION, BETWEEN *
14810 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
14820 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50  elect;     /* EP
14830 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f  _xIsSelect and o
14840 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20  p = IN, EXISTS, 
14850 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b  SELECT */.  } x;
14860 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50  ..  /* If the EP
14870 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 69 73  _Reduced flag is
14880 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72   set in the Expr
14890 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
148a0 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20  n no.  ** space 
148b0 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  is allocated for
148c0 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f   the fields belo
148d0 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e  w this point. An
148e0 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a   attempt to.  **
148f0 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c   access them wil
14900 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65  l result in a se
14910 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e  gfault or malfun
14920 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  ction..  *******
14930 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14940 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14950 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14960 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
14970 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
14980 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69  EXPR_DEPTH>0.  i
14990 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20  nt nHeight;     
149a0 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20        /* Height 
149b0 6f 66 20 74 68 65 20 74 72 65 65 20 68 65 61 64  of the tree head
149c0 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20  ed by this node 
149d0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
149e0 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
149f0 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
14a00 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
14a10 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20  f table holding 
14a20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20  column.         
14a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a40 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20  ** TK_REGISTER: 
14a50 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a  register number.
14a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a70 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54           ** TK_T
14a80 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77  RIGGER: 1 -> new
14a90 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20  , 0 -> old.     
14aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ab0 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65      ** EP_Unlike
14ac0 6c 79 3a 20 20 31 33 34 32 31 37 37 32 38 20 74  ly:  134217728 t
14ad0 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 20  imes likelihood 
14ae0 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75  */.  ynVar iColu
14af0 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  mn;         /* T
14b00 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e  K_COLUMN: column
14b10 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20   index.  -1 for 
14b20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20  rowid..         
14b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b40 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20  ** TK_VARIABLE: 
14b50 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20  variable number 
14b60 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a  (always >= 1). *
14b70 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20  /.  i16 iAgg;   
14b80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
14b90 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67  ich entry in pAg
14ba0 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72  gInfo->aCol[] or
14bb0 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20   ->aFunc[] */.  
14bc0 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61  i16 iRightJoinTa
14bd0 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f  ble;   /* If EP_
14be0 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69  FromJoin, the ri
14bf0 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65  ght table of the
14c00 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70   join */.  u8 op
14c10 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2;              
14c20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52    /* TK_REGISTER
14c30 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65  : original value
14c40 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20   of Expr.op.    
14c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c60 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d       ** TK_COLUM
14c70 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  N: the value of 
14c80 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e  p5 for OP_Column
14c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14ca0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
14cb0 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65  AGG_FUNCTION: ne
14cc0 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20  sting depth */. 
14cd0 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e   AggInfo *pAggIn
14ce0 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20  fo;     /* Used 
14cf0 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  by TK_AGG_COLUMN
14d00 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43   and TK_AGG_FUNC
14d10 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  TION */.  Table 
14d20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
14d30 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b   /* Table for TK
14d40 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69  _COLUMN expressi
14d50 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ons. */.};../*.*
14d60 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
14d70 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73  are the meanings
14d80 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20   of bits in the 
14d90 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64  Expr.flags field
14da0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ..*/.#define EP_
14db0 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30  FromJoin  0x0000
14dc0 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73  01 /* Originates
14dd0 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61   in ON/USING cla
14de0 75 73 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69  use of outer joi
14df0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
14e00 41 67 67 20 20 20 20 20 20 20 30 78 30 30 30 30  Agg       0x0000
14e10 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f  02 /* Contains o
14e20 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65  ne or more aggre
14e30 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
14e40 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73  /.#define EP_Res
14e50 6f 6c 76 65 64 20 20 30 78 30 30 30 30 30 34 20  olved  0x000004 
14e60 2f 2a 20 49 44 73 20 68 61 76 65 20 62 65 65 6e  /* IDs have been
14e70 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c   resolved to COL
14e80 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  UMNs */.#define 
14e90 45 50 5f 45 72 72 6f 72 20 20 20 20 20 30 78 30  EP_Error     0x0
14ea0 30 30 30 30 38 20 2f 2a 20 45 78 70 72 65 73 73  00008 /* Express
14eb0 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  ion contains one
14ec0 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20   or more errors 
14ed0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69  */.#define EP_Di
14ee0 73 74 69 6e 63 74 20 20 30 78 30 30 30 30 31 30  stinct  0x000010
14ef0 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75   /* Aggregate fu
14f00 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54  nction with DIST
14f10 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a  INCT keyword */.
14f20 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65  #define EP_VarSe
14f30 6c 65 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a  lect 0x000020 /*
14f40 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72   pSelect is corr
14f50 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73  elated, not cons
14f60 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tant */.#define 
14f70 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30  EP_DblQuoted 0x0
14f80 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a  00040 /* token.z
14f90 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20   was originally 
14fa0 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66  in "..." */.#def
14fb0 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63  ine EP_InfixFunc
14fc0 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75   0x000080 /* Tru
14fd0 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66  e for an infix f
14fe0 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47  unction: LIKE, G
14ff0 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66  LOB, etc */.#def
15000 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20  ine EP_Collate  
15010 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65   0x000100 /* Tre
15020 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f  e contains a TK_
15030 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
15040 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 47   */.#define EP_G
15050 65 6e 65 72 69 63 20 20 20 30 78 30 30 30 32 30  eneric   0x00020
15060 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c  0 /* Ignore COLL
15070 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79 20  ATE or affinity 
15080 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f 0a  on this tree */.
15090 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61  #define EP_IntVa
150a0 6c 75 65 20 20 30 78 30 30 30 34 30 30 20 2f 2a  lue  0x000400 /*
150b0 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63   Integer value c
150c0 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56  ontained in u.iV
150d0 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  alue */.#define 
150e0 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78 30  EP_xIsSelect 0x0
150f0 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65  00800 /* x.pSele
15100 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68  ct is valid (oth
15110 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69  erwise x.pList i
15120 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  s) */.#define EP
15130 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30 30 31  _Skip      0x001
15140 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20  000 /* COLLATE, 
15150 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20  AS, or UNLIKELY 
15160 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65  */.#define EP_Re
15170 64 75 63 65 64 20 20 20 30 78 30 30 32 30 30 30  duced   0x002000
15180 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20   /* Expr struct 
15190 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45  EXPR_REDUCEDSIZE
151a0 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23   bytes only */.#
151b0 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f  define EP_TokenO
151c0 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a 20  nly 0x004000 /* 
151d0 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52  Expr struct EXPR
151e0 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62  _TOKENONLYSIZE b
151f0 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ytes only */.#de
15200 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20  fine EP_Static  
15210 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48 65    0x008000 /* He
15220 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74  ld in memory not
15230 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d   obtained from m
15240 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69  alloc() */.#defi
15250 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20  ne EP_MemToken  
15260 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64  0x010000 /* Need
15270 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65   to sqlite3DbFre
15280 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20  e() Expr.zToken 
15290 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f  */.#define EP_No
152a0 52 65 64 75 63 65 20 20 30 78 30 32 30 30 30 30  Reduce  0x020000
152b0 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44   /* Cannot EXPRD
152c0 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20 45  UP_REDUCE this E
152d0 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  xpr */.#define E
152e0 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34  P_Unlikely  0x04
152f0 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79  0000 /* unlikely
15300 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64  () or likelihood
15310 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
15320 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46  define EP_ConstF
15330 75 6e 63 20 30 78 30 38 30 30 30 30 20 2f 2a 20  unc 0x080000 /* 
15340 4e 6f 64 65 20 69 73 20 61 20 53 51 4c 49 54 45  Node is a SQLITE
15350 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66  _FUNC_CONSTANT f
15360 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
15370 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20  ne EP_CanBeNull 
15380 30 78 31 30 30 30 30 30 20 2f 2a 20 43 61 6e 20  0x100000 /* Can 
15390 62 65 20 6e 75 6c 6c 20 64 65 73 70 69 74 65 20  be null despite 
153a0 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
153b0 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  int */.#define E
153c0 50 5f 53 75 62 71 75 65 72 79 20 20 30 78 32 30  P_Subquery  0x20
153d0 30 30 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e  0000 /* Tree con
153e0 74 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43  tains a TK_SELEC
153f0 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 0a 2f  T operator */../
15400 2a 0a 2a 2a 20 43 6f 6d 62 69 6e 61 74 69 6f 6e  *.** Combination
15410 73 20 6f 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65  s of two or more
15420 20 45 50 5f 2a 20 66 6c 61 67 73 0a 2a 2f 0a 23   EP_* flags.*/.#
15430 64 65 66 69 6e 65 20 45 50 5f 50 72 6f 70 61 67  define EP_Propag
15440 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c  ate (EP_Collate|
15450 45 50 5f 53 75 62 71 75 65 72 79 29 20 2f 2a 20  EP_Subquery) /* 
15460 50 72 6f 70 61 67 61 74 65 20 74 68 65 73 65 20  Propagate these 
15470 62 69 74 73 20 75 70 20 74 72 65 65 20 2a 2f 0a  bits up tree */.
15480 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  ./*.** These mac
15490 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
154a0 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72  to test, set, or
154b0 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74   clear bits in t
154c0 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67  he .** Expr.flag
154d0 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
154e0 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70 65  ine ExprHasPrope
154f0 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 28 28  rty(E,P)     (((
15500 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d  E)->flags&(P))!=
15510 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48  0).#define ExprH
15520 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c  asAllProperty(E,
15530 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73  P)  (((E)->flags
15540 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66  &(P))==(P)).#def
15550 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70 65  ine ExprSetPrope
15560 72 74 79 28 45 2c 50 29 20 20 20 20 20 28 45 29  rty(E,P)     (E)
15570 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65  ->flags|=(P).#de
15580 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72  fine ExprClearPr
15590 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 28 45  operty(E,P)   (E
155a0 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a  )->flags&=~(P)..
155b0 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74 56 56  /* The ExprSetVV
155c0 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72  AProperty() macr
155d0 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 56 65  o is used for Ve
155e0 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69  rification, Vali
155f0 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41  dation,.** and A
15600 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c  ccreditation onl
15610 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b  y.  It works lik
15620 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74  e ExprSetPropert
15630 79 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a  y() during VVA.*
15640 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75 74 20  * processes but 
15650 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64  is a no-op for d
15660 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64  elivery..*/.#ifd
15670 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
15680 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  # define ExprSet
15690 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29  VVAProperty(E,P)
156a0 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50    (E)->flags|=(P
156b0 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
156c0 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65   ExprSetVVAPrope
156d0 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a  rty(E,P).#endif.
156e0 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f  ./*.** Macros to
156f0 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e   determine the n
15700 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72  umber of bytes r
15710 65 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72  equired by a nor
15720 6d 61 6c 20 45 78 70 72 20 0a 2a 2a 20 73 74 72  mal Expr .** str
15730 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72  uct, an Expr str
15740 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f  uct with the EP_
15750 52 65 64 75 63 65 64 20 66 6c 61 67 20 73 65 74  Reduced flag set
15760 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 20 0a   in Expr.flags .
15770 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73  ** and an Expr s
15780 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
15790 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
157a0 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65   set..*/.#define
157b0 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20   EXPR_FULLSIZE  
157c0 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28           sizeof(
157d0 45 78 70 72 29 20 20 20 20 20 20 20 20 20 20 20  Expr)           
157e0 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a  /* Full size */.
157f0 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44  #define EXPR_RED
15800 55 43 45 44 53 49 5a 45 20 20 20 20 20 20 20 20  UCEDSIZE        
15810 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54  offsetof(Expr,iT
15820 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e  able)  /* Common
15830 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65   features */.#de
15840 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f  fine EXPR_TOKENO
15850 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66  NLYSIZE      off
15860 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74  setof(Expr,pLeft
15870 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61  )   /* Fewer fea
15880 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tures */../*.** 
15890 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
158a0 74 68 65 20 73 71 6c 69 74 65 33 45 78 70 72 44  the sqlite3ExprD
158b0 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53  up() function. S
158c0 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f  ee the header co
158d0 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f 76 65 20  mment .** above 
158e0 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
158f0 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f   for details..*/
15900 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44 55 50  .#define EXPRDUP
15910 5f 52 45 44 55 43 45 20 20 20 20 20 20 20 20 20  _REDUCE         
15920 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20  0x0001  /* Used 
15930 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70  reduced-size Exp
15940 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a  r nodes */../*.*
15950 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72  * A list of expr
15960 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65  essions.  Each e
15970 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70  xpression may op
15980 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a  tionally have a.
15990 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70  ** name.  An exp
159a0 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69  r/name combinati
159b0 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69  on can be used i
159c0 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20  n several ways, 
159d0 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c  such.** as the l
159e0 69 73 74 20 6f 66 20 22 65 78 70 72 20 41 53 20  ist of "expr AS 
159f0 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f  ID" fields follo
15a00 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20  wing a "SELECT" 
15a10 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73  or in the.** lis
15a20 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22  t of "ID = expr"
15a30 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44   items in an UPD
15a40 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20  ATE.  A list of 
15a50 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a  expressions can.
15a60 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  ** also be used 
15a70 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  as the argument 
15a80 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69  to a function, i
15a90 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65  n which case the
15aa0 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c   a.zName.** fiel
15ab0 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a  d is not used..*
15ac0 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20  *.** By default 
15ad0 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66  the Expr.zSpan f
15ae0 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d  ield holds a hum
15af0 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63  an-readable desc
15b00 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ription of.** th
15b10 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  e expression tha
15b20 74 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65  t is used in the
15b30 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65   generation of e
15b40 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e  rror messages an
15b50 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65  d.** column labe
15b60 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73  ls.  In this cas
15b70 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73  e, Expr.zSpan is
15b80 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74   typically the t
15b90 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75  ext of a.** colu
15ba0 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73  mn expression as
15bb0 20 69 74 20 65 78 69 73 74 73 20 69 6e 20 61 20   it exists in a 
15bc0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
15bd0 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a  .  However, if.*
15be0 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54 61 62  * the bSpanIsTab
15bf0 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68   flag is set, th
15c00 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72  en zSpan is over
15c10 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74  loaded to mean t
15c20 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68  he name.** of th
15c30 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20  e result column 
15c40 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54  in the form: DAT
15c50 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55  ABASE.TABLE.COLU
15c60 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a  MN.  This later.
15c70 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20  ** form is used 
15c80 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74  for name resolut
15c90 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20  ion with nested 
15ca0 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f  FROM clauses..*/
15cb0 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74  .struct ExprList
15cc0 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20   {.  int nExpr; 
15cd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
15ce0 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73  umber of express
15cf0 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  ions on the list
15d00 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70   */.  struct Exp
15d10 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20  rList_item { /* 
15d20 46 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73  For each express
15d30 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ion in the list 
15d40 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
15d50 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  pr;            /
15d60 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78  * The list of ex
15d70 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20  pressions */.   
15d80 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
15d90 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
15da0 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
15db0 68 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f  h this expressio
15dc0 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  n */.    char *z
15dd0 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20  Span;           
15de0 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78   /* Original tex
15df0 74 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73  t of the express
15e00 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f  ion */.    u8 so
15e10 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
15e20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43     /* 1 for DESC
15e30 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f   or 0 for ASC */
15e40 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f  .    unsigned do
15e50 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20  ne :1;       /* 
15e60 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61  A flag to indica
15e70 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69  te when processi
15e80 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a  ng is finished *
15e90 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62  /.    unsigned b
15ea0 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a  SpanIsTab :1; /*
15eb0 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e   zSpan holds DB.
15ec0 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a  TABLE.COLUMN */.
15ed0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75      unsigned reu
15ee0 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43  sable :1;   /* C
15ef0 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
15f00 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a  on is reusable *
15f10 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20  /.    union {.  
15f20 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20      struct {.   
15f30 20 20 20 20 20 75 31 36 20 69 4f 72 64 65 72 42       u16 iOrderB
15f40 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f  yCol;      /* Fo
15f50 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75  r ORDER BY, colu
15f60 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73  mn number in res
15f70 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20  ult set */.     
15f80 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20     u16 iAlias;  
15f90 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
15fa0 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c  x into Parse.aAl
15fb0 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20  ias[] for zName 
15fc0 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20  */.      } x;.  
15fd0 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78      int iConstEx
15fe0 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52  prReg;      /* R
15ff0 65 67 69 73 74 65 72 20 69 6e 20 77 68 69 63 68  egister in which
16000 20 45 78 70 72 20 76 61 6c 75 65 20 69 73 20 63   Expr value is c
16010 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75  ached */.    } u
16020 3b 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20  ;.  } *a;       
16030 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
16040 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f 66 20 74  loc a power of t
16050 77 6f 20 67 72 65 61 74 65 72 20 6f 72 20 65 71  wo greater or eq
16060 75 61 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a  ual to nExpr */.
16070 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
16080 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
16090 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
160a0 62 79 20 74 68 65 20 70 61 72 73 65 72 20 74 6f  by the parser to
160b0 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20   record both.** 
160c0 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66  the parse tree f
160d0 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
160e0 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66   and the span of
160f0 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20   input text for 
16100 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  an.** expression
16110 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
16120 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70  Span {.  Expr *p
16130 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Expr;          /
16140 2a 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * The expression
16150 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20   parse tree */. 
16160 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74   const char *zSt
16170 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20  art;   /* First 
16180 63 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70  character of inp
16190 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e  ut text */.  con
161a0 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20  st char *zEnd;  
161b0 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63     /* One charac
161c0 74 65 72 20 70 61 73 74 20 74 68 65 20 65 6e 64  ter past the end
161d0 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a   of input text *
161e0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
161f0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
16200 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f  structure can ho
16210 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74  ld a simple list
16220 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c   of identifiers,
16230 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20  .** such as the 
16240 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20  list "a,b,c" in 
16250 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
16260 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20  atements:.**.** 
16270 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
16280 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53   t(a,b,c) VALUES
16290 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52   ...;.**      CR
162a0 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f  EATE INDEX idx O
162b0 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20  N t(a,b,c);.**  
162c0 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
162d0 45 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55  ER trig BEFORE U
162e0 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63  PDATE ON t(a,b,c
162f0 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65  ) ...;.**.** The
16300 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69   IdList.a.idx fi
16310 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e  eld is used when
16320 20 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72   the IdList repr
16330 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20  esents the list 
16340 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d  of.** column nam
16350 65 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  es after a table
16360 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45   name in an INSE
16370 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  RT statement.  I
16380 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  n the statement.
16390 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54  **.**     INSERT
163a0 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e   INTO t(a,b,c) .
163b0 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20  ...**.** If "a" 
163c0 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75  is the k-th colu
163d0 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c  mn of table "t",
163e0 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30   then IdList.a[0
163f0 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72  ].idx==k..*/.str
16400 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73  uct IdList {.  s
16410 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65  truct IdList_ite
16420 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e  m {.    char *zN
16430 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
16440 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66  e of the identif
16450 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ier */.    int i
16460 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  dx;          /* 
16470 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61  Index in some Ta
16480 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20  ble.aCol[] of a 
16490 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61  column named zNa
164a0 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20  me */.  } *a;.  
164b0 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20  int nId;        
164c0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64   /* Number of id
164d0 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65  entifiers on the
164e0 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
164f0 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64  ** The bitmask d
16500 61 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20  atatype defined 
16510 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f  below is used fo
16520 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  r various optimi
16530 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43  zations..**.** C
16540 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f  hanging this fro
16550 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20  m a 64-bit to a 
16560 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69  32-bit type limi
16570 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ts the number of
16580 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20  .** tables in a 
16590 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65  join to 32 inste
165a0 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69  ad of 64.  But i
165b0 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74  t also reduces t
165c0 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68  he size.** of th
165d0 65 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38  e library by 738
165e0 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a   bytes on ix86..
165f0 2a 2f 0a 74 79 70 65 64 65 66 20 75 36 34 20 42  */.typedef u64 B
16600 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54  itmask;../*.** T
16610 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  he number of bit
16620 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20  s in a Bitmask. 
16630 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69   "BMS" means "Bi
16640 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a  tMask Size"..*/.
16650 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69  #define BMS  ((i
16660 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61  nt)(sizeof(Bitma
16670 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41  sk)*8))../*.** A
16680 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73   bit in a Bitmas
16690 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  k.*/.#define MAS
166a0 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69 74  KBIT(n)   (((Bit
166b0 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64  mask)1)<<(n)).#d
166c0 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28  efine MASKBIT32(
166d0 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69  n) (((unsigned i
166e0 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a  nt)1)<<(n))../*.
166f0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
16700 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
16710 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c  ibes the FROM cl
16720 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
16730 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45   statement..** E
16740 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62  ach table or sub
16750 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f  query in the FRO
16760 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65  M clause is a se
16770 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f  parate element o
16780 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74  f.** the SrcList
16790 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a  .a[] array..**.*
167a0 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74  * With the addit
167b0 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20  ion of multiple 
167c0 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74  database support
167d0 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
167e0 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e  structure.** can
167f0 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
16800 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74   describe a part
16810 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63  icular table suc
16820 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74  h as the table t
16830 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69  hat.** is modifi
16840 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c  ed by an INSERT,
16850 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
16860 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  TE statement.  I
16870 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a  n standard SQL,.
16880 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20  ** such a table 
16890 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65  must be a simple
168a0 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20   name: ID.  But 
168b0 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74  in SQLite, the t
168c0 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20  able can.** now 
168d0 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  be identified by
168e0 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65   a database name
168f0 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68  , a dot, then th
16900 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44  e table name: ID
16910 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a  .ID..**.** The j
16920 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f  ointype starts o
16930 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a  ut showing the j
16940 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e  oin type between
16950 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62   the current tab
16960 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65  le.** and the ne
16970 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20  xt table on the 
16980 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65  list.  The parse
16990 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73  r builds the lis
169a0 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42  t this way..** B
169b0 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  ut sqlite3SrcLis
169c0 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29  tShiftJoinType()
169d0 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68   later shifts th
169e0 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74  e jointypes so t
169f0 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e  hat each.** join
16a00 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74  type expresses t
16a10 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  he join between 
16a20 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68  the table and th
16a30 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65  e previous table
16a40 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63  ..**.** In the c
16a50 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68  olUsed field, th
16a60 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
16a70 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74   (bit 63) is set
16a80 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a   if the table.**
16a90 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74   contains more t
16aa0 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61  han 63 columns a
16ab0 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20  nd the 64-th or 
16ac0 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20  later column is 
16ad0 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  used..*/.struct 
16ae0 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20  SrcList {.  int 
16af0 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  nSrc;        /* 
16b00 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
16b10 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69   or subqueries i
16b20 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
16b30 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f  e */.  u32 nAllo
16b40 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  c;      /* Numbe
16b50 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c  r of entries all
16b60 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65  ocated in a[] be
16b70 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  low */.  struct 
16b80 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20  SrcList_item {. 
16b90 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65     Schema *pSche
16ba0 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74  ma;  /* Schema t
16bb0 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 74 65  o which this ite
16bc0 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20  m is fixed */.  
16bd0 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73    char *zDatabas
16be0 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64  e;  /* Name of d
16bf0 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
16c00 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
16c10 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
16c20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
16c30 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  he table */.    
16c40 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20  char *zAlias;   
16c50 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72    /* The "B" par
16c60 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20  t of a "A AS B" 
16c70 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69  phrase.  zName i
16c80 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20  s the "A" */.   
16c90 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
16ca0 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62     /* An SQL tab
16cb0 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  le corresponding
16cc0 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20   to zName */.   
16cd0 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
16ce0 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73  ;  /* A SELECT s
16cf0 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e  tatement used in
16d00 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c   place of a tabl
16d10 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e  e name */.    in
16d20 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20  t addrFillSub;  
16d30 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73 75  /* Address of su
16d40 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69  broutine to mani
16d50 66 65 73 74 20 61 20 73 75 62 71 75 65 72 79 20  fest a subquery 
16d60 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
16d70 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69  turn;    /* Regi
16d80 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74  ster holding ret
16d90 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61  urn address of a
16da0 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20  ddrFillSub */.  
16db0 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b    int regResult;
16dc0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73      /* Registers
16dd0 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73   holding results
16de0 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65   of a co-routine
16df0 20 2a 2f 0a 20 20 20 20 75 38 20 6a 6f 69 6e 74   */.    u8 joint
16e00 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70  ype;      /* Typ
16e10 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65  e of join betwee
16e20 6e 20 74 68 69 73 20 61 62 6c 65 20 61 6e 64 20  n this able and 
16e30 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a  the previous */.
16e40 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74      unsigned not
16e50 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f  Indexed :1;    /
16e60 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  * True if there 
16e70 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44  is a NOT INDEXED
16e80 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 75   clause */.    u
16e90 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c  nsigned isCorrel
16ea0 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75  ated :1;  /* Tru
16eb0 65 20 69 66 20 73 75 62 2d 71 75 65 72 79 20 69  e if sub-query i
16ec0 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a  s correlated */.
16ed0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61      unsigned via
16ee0 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f  Coroutine :1;  /
16ef0 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73  * Implemented as
16f00 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f   a co-routine */
16f10 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73  .    unsigned is
16f20 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20  Recursive :1;   
16f30 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63 75  /* True for recu
16f40 72 73 69 76 65 20 72 65 66 65 72 65 6e 63 65 20  rsive reference 
16f50 69 6e 20 57 49 54 48 20 2a 2f 0a 23 69 66 6e 64  in WITH */.#ifnd
16f60 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45  ef SQLITE_OMIT_E
16f70 58 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53  XPLAIN.    u8 iS
16f80 65 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20  electId;     /* 
16f90 49 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74  If pSelect!=0, t
16fa0 68 65 20 69 64 20 6f 66 20 74 68 65 20 73 75 62  he id of the sub
16fb0 2d 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a  -select in EQP *
16fc0 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74  /.#endif.    int
16fd0 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f   iCursor;      /
16fe0 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f  * The VDBE curso
16ff0 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f  r number used to
17000 20 61 63 63 65 73 73 20 74 68 69 73 20 74 61 62   access this tab
17010 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  le */.    Expr *
17020 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  pOn;        /* T
17030 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20  he ON clause of 
17040 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64  a join */.    Id
17050 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20  List *pUsing;   
17060 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61  /* The USING cla
17070 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
17080 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c  .    Bitmask col
17090 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20  Used;  /* Bit N 
170a0 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f  (1<<N) set if co
170b0 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69  lumn N of pTab i
170c0 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 63 68  s used */.    ch
170d0 61 72 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20 20  ar *zIndex;     
170e0 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72  /* Identifier fr
170f0 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c  om "INDEXED BY <
17100 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20  zIndex>" clause 
17110 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49  */.    Index *pI
17120 6e 64 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65  ndex;    /* Inde
17130 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72 72  x structure corr
17140 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e  esponding to zIn
17150 64 65 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20  dex, if any */. 
17160 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20   } a[1];        
17170 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72       /* One entr
17180 79 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74  y for each ident
17190 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73  ifier on the lis
171a0 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  t */.};../*.** P
171b0 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20  ermitted values 
171c0 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  of the SrcList.a
171d0 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a  .jointype field.
171e0 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e  */.#define JT_IN
171f0 4e 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20  NER     0x0001  
17200 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66    /* Any kind of
17210 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20   inner or cross 
17220 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
17230 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30  JT_CROSS     0x0
17240 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63  002    /* Explic
17250 69 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52  it use of the CR
17260 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  OSS keyword */.#
17270 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41  define JT_NATURA
17280 4c 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a  L   0x0004    /*
17290 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74   True for a "nat
172a0 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64  ural" join */.#d
172b0 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20  efine JT_LEFT   
172c0 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20     0x0008    /* 
172d0 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20  Left outer join 
172e0 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49  */.#define JT_RI
172f0 47 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20  GHT     0x0010  
17300 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72    /* Right outer
17310 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
17320 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78   JT_OUTER     0x
17330 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22  0020    /* The "
17340 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69  OUTER" keyword i
17350 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65  s present */.#de
17360 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20  fine JT_ERROR   
17370 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75    0x0040    /* u
17380 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70  nknown or unsupp
17390 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20  orted join type 
173a0 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73  */.../*.** Flags
173b0 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72   appropriate for
173c0 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20   the wctrlFlags 
173d0 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c  parameter of sql
173e0 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29  ite3WhereBegin()
173f0 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72  .** and the Wher
17400 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73  eInfo.wctrlFlags
17410 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66   member..*/.#def
17420 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
17430 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30  Y_NORMAL   0x000
17440 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64  0 /* No-op */.#d
17450 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
17460 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30  RBY_MIN      0x0
17470 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  001 /* ORDER BY 
17480 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d  processing for m
17490 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65  in() func */.#de
174a0 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
174b0 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30  BY_MAX      0x00
174c0 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70  02 /* ORDER BY p
174d0 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61  rocessing for ma
174e0 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  x() func */.#def
174f0 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53  ine WHERE_ONEPAS
17500 53 5f 44 45 53 49 52 45 44 20 20 30 78 30 30 30  S_DESIRED  0x000
17510 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20  4 /* Want to do 
17520 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f  one-pass UPDATE/
17530 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e  DELETE */.#defin
17540 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54  e WHERE_DUPLICAT
17550 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 30 38 20  ES_OK    0x0008 
17560 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20  /* Ok to return 
17570 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20  a row more than 
17580 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  once */.#define 
17590 57 48 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f  WHERE_OMIT_OPEN_
175a0 43 4c 4f 53 45 20 20 30 78 30 30 31 30 20 2f 2a  CLOSE  0x0010 /*
175b0 20 54 61 62 6c 65 20 63 75 72 73 6f 72 73 20 61   Table cursors a
175c0 72 65 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20  re already open 
175d0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
175e0 5f 46 4f 52 43 45 5f 54 41 42 4c 45 20 20 20 20  _FORCE_TABLE    
175f0 20 20 30 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e    0x0020 /* Do n
17600 6f 74 20 75 73 65 20 61 6e 20 69 6e 64 65 78 2d  ot use an index-
17610 6f 6e 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a 23  only search */.#
17620 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45  define WHERE_ONE
17630 54 41 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78  TABLE_ONLY    0x
17640 30 30 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64  0040 /* Only cod
17650 65 20 74 68 65 20 31 73 74 20 74 61 62 6c 65 20  e the 1st table 
17660 69 6e 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a 23  in pTabList */.#
17670 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4e 4f 5f  define WHERE_NO_
17680 41 55 54 4f 49 4e 44 45 58 20 20 20 20 20 30 78  AUTOINDEX     0x
17690 30 30 38 30 20 2f 2a 20 44 69 73 61 6c 6c 6f 77  0080 /* Disallow
176a0 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78   automatic index
176b0 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  es */.#define WH
176c0 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20  ERE_GROUPBY     
176d0 20 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 70       0x0100 /* p
176e0 4f 72 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c  OrderBy is reall
176f0 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a  y a GROUP BY */.
17700 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
17710 53 54 49 4e 43 54 42 59 20 20 20 20 20 20 20 30  STINCTBY       0
17720 78 30 32 30 30 20 2f 2a 20 70 4f 72 64 65 72 62  x0200 /* pOrderb
17730 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49  y is really a DI
17740 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f  STINCT clause */
17750 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57  .#define WHERE_W
17760 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20  ANT_DISTINCT    
17770 30 78 30 34 30 30 20 2f 2a 20 41 6c 6c 20 6f 75  0x0400 /* All ou
17780 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65  tput needs to be
17790 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65   distinct */.#de
177a0 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52 54 42  fine WHERE_SORTB
177b0 59 47 52 4f 55 50 20 20 20 20 20 20 30 78 30 38  YGROUP      0x08
177c0 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20 73 71  00 /* Support sq
177d0 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74  lite3WhereIsSort
177e0 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ed() */.#define 
177f0 57 48 45 52 45 5f 52 45 4f 50 45 4e 5f 49 44 58  WHERE_REOPEN_IDX
17800 20 20 20 20 20 20 20 30 78 31 30 30 30 20 2f 2a         0x1000 /*
17810 20 54 72 79 20 74 6f 20 75 73 65 20 4f 50 5f 52   Try to use OP_R
17820 65 6f 70 65 6e 49 64 78 20 2a 2f 0a 0a 2f 2a 20  eopenIdx */../* 
17830 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76  Allowed return v
17840 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74  alues from sqlit
17850 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63  e3WhereIsDistinc
17860 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57  t().*/.#define W
17870 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f  HERE_DISTINCT_NO
17880 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49  OP      0  /* DI
17890 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e  STINCT keyword n
178a0 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69  ot used */.#defi
178b0 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
178c0 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f  T_UNIQUE    1  /
178d0 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20  * No duplicates 
178e0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
178f0 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45  _DISTINCT_ORDERE
17900 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75  D   2  /* All du
17910 70 6c 69 63 61 74 65 73 20 61 72 65 20 61 64 6a  plicates are adj
17920 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  acent */.#define
17930 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
17940 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20  UNORDERED 3  /* 
17950 44 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 73  Duplicates are s
17960 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a  cattered */../*.
17970 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ** A NameContext
17980 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65   defines a conte
17990 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72  xt in which to r
179a0 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64  esolve table and
179b0 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73   column.** names
179c0 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63  .  The context c
179d0 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73  onsists of a lis
179e0 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65  t of tables (the
179f0 20 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64   pSrcList) field
17a00 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f   and.** a list o
17a10 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  f named expressi
17a20 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68  on (pEList).  Th
17a30 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  e named expressi
17a40 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62  on list may.** b
17a50 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72  e NULL.  The pSr
17a60 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  c corresponds to
17a70 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
17a80 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a   of a SELECT or.
17a90 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  ** to the table 
17aa0 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
17ab0 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44  n by INSERT, UPD
17ac0 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20  ATE, or DELETE. 
17ad0 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63   The.** pEList c
17ae0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
17af0 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20  e result set of 
17b00 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20  a SELECT and is 
17b10 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65  NULL for.** othe
17b20 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  r statements..**
17b30 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73  .** NameContexts
17b40 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20   can be nested. 
17b50 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20   When resolving 
17b60 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72  names, the inner
17b70 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e 74 65 78  -most .** contex
17b80 74 20 69 73 20 73 65 61 72 63 68 65 64 20 66 69  t is searched fi
17b90 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63  rst.  If no matc
17ba0 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20  h is found, the 
17bb0 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f  next outer.** co
17bc0 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b 65 64  ntext is checked
17bd0 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 73  .  If there is s
17be0 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74  till no match, t
17bf0 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a  he next context.
17c00 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20  ** is checked.  
17c10 54 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e  This process con
17c20 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74  tinues until eit
17c30 68 65 72 20 61 20 6d 61 74 63 68 20 69 73 20 66  her a match is f
17c40 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63  ound.** or all c
17c50 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68 65 63  ontexts are chec
17c60 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68  k.  When a match
17c70 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e   is found, the n
17c80 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a  Ref member of.**
17c90 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e   the context con
17ca0 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63  taining the matc
17cb0 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  h is incremented
17cc0 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75  . .**.** Each su
17cd0 62 71 75 65 72 79 20 67 65 74 73 20 61 20 6e 65  bquery gets a ne
17ce0 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20  w NameContext.  
17cf0 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20  The pNext field 
17d00 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a  points to the.**
17d10 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20   NameContext in 
17d20 74 68 65 20 70 61 72 65 6e 74 20 71 75 65 72 79  the parent query
17d30 2e 20 20 54 68 75 73 20 74 68 65 20 70 72 6f 63  .  Thus the proc
17d40 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20  ess of scanning 
17d50 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  the.** NameConte
17d60 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f  xt list correspo
17d70 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67  nds to searching
17d80 20 74 68 72 6f 75 67 68 20 73 75 63 63 65 73 73   through success
17d90 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73  ively outer.** s
17da0 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e  ubqueries lookin
17db0 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a  g for a match..*
17dc0 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  /.struct NameCon
17dd0 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a  text {.  Parse *
17de0 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a  pParse;       /*
17df0 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20   The parser */. 
17e00 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69   SrcList *pSrcLi
17e10 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  st;   /* One or 
17e20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65 64  more tables used
17e30 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65   to resolve name
17e40 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
17e50 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f  *pEList;    /* O
17e60 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20  ptional list of 
17e70 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d  result-set colum
17e80 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20  ns */.  AggInfo 
17e90 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20  *pAggInfo;   /* 
17ea0 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
17eb0 74 20 61 67 67 72 65 67 61 74 65 73 20 61 74 20  t aggregates at 
17ec0 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20  this level */.  
17ed0 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65  NameContext *pNe
17ee0 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74  xt;  /* Next out
17ef0 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e  er name context.
17f00 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72    NULL for outer
17f10 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  most */.  int nR
17f20 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ef;            /
17f30 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65  * Number of name
17f40 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68  s resolved by th
17f50 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  is context */.  
17f60 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
17f70 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17f80 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74  f errors encount
17f90 65 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c  ered while resol
17fa0 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20  ving names */.  
17fb0 75 31 36 20 6e 63 46 6c 61 67 73 3b 20 20 20 20  u16 ncFlags;    
17fc0 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20       /* Zero or 
17fd0 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20  more NC_* flags 
17fe0 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f  defined below */
17ff0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
18000 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  ed values for th
18010 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e  e NameContext, n
18020 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a  cFlags field..**
18030 0a 2a 2a 20 4e 6f 74 65 3a 20 20 4e 43 5f 4d 69  .** Note:  NC_Mi
18040 6e 4d 61 78 41 67 67 20 6d 75 73 74 20 68 61 76  nMaxAgg must hav
18050 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  e the same value
18060 20 61 73 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67   as SF_MinMaxAgg
18070 20 61 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46   and.** SQLITE_F
18080 55 4e 43 5f 4d 49 4e 4d 41 58 2e 0a 2a 2a 20 0a  UNC_MINMAX..** .
18090 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c  */.#define NC_Al
180a0 6c 6f 77 41 67 67 20 20 30 78 30 30 30 31 20 20  lowAgg  0x0001  
180b0 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
180c0 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77  ctions are allow
180d0 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69  ed here */.#defi
180e0 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20  ne NC_HasAgg    
180f0 30 78 30 30 30 32 20 20 2f 2a 20 4f 6e 65 20 6f  0x0002  /* One o
18100 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
18110 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20   functions seen 
18120 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73  */.#define NC_Is
18130 43 68 65 63 6b 20 20 20 30 78 30 30 30 34 20 20  Check   0x0004  
18140 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
18150 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20  ving names in a 
18160 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
18170 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
18180 6e 41 67 67 46 75 6e 63 20 30 78 30 30 30 38 20  nAggFunc 0x0008 
18190 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c   /* True if anal
181a0 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20  yzing arguments 
181b0 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a  to an agg func *
181c0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72  /.#define NC_Par
181d0 74 49 64 78 20 20 20 30 78 30 30 31 30 20 20 2f  tIdx   0x0010  /
181e0 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
181f0 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e  ing a partial in
18200 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 23 64 65  dex WHERE */.#de
18210 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67  fine NC_MinMaxAg
18220 67 20 30 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e  g 0x1000  /* min
18230 2f 6d 61 78 20 61 67 67 72 65 67 61 74 65 73 20  /max aggregates 
18240 73 65 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20  seen.  See note 
18250 61 62 6f 76 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  above */../*.** 
18260 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
18270 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
18280 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
18290 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  all information.
182a0 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e  ** needed to gen
182b0 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61  erate code for a
182c0 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73   single SELECT s
182d0 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20  tatement..**.** 
182e0 6e 4c 69 6d 69 74 20 69 73 20 73 65 74 20 74 6f  nLimit is set to
182f0 20 2d 31 20 69 66 20 74 68 65 72 65 20 69 73 20   -1 if there is 
18300 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e  no LIMIT clause.
18310 20 20 6e 4f 66 66 73 65 74 20 69 73 20 73 65 74    nOffset is set
18320 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68 65   to 0..** If the
18330 72 65 20 69 73 20 61 20 4c 49 4d 49 54 20 63 6c  re is a LIMIT cl
18340 61 75 73 65 2c 20 74 68 65 20 70 61 72 73 65 72  ause, the parser
18350 20 73 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f 20   sets nLimit to 
18360 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
18370 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e 4f  .** limit and nO
18380 66 66 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  ffset to the val
18390 75 65 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74  ue of the offset
183a0 20 28 6f 72 20 30 20 69 66 20 74 68 65 72 65 20   (or 0 if there 
183b0 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65 74  is not.** offset
183c0 29 2e 20 20 42 75 74 20 6c 61 74 65 72 20 6f 6e  ).  But later on
183d0 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f 66  , nLimit and nOf
183e0 66 73 65 74 20 62 65 63 6f 6d 65 20 74 68 65 20  fset become the 
183f0 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73  memory locations
18400 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44 42 45 20  .** in the VDBE 
18410 74 68 61 74 20 72 65 63 6f 72 64 20 74 68 65 20  that record the 
18420 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66 73 65 74  limit and offset
18430 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a   counters..**.**
18440 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20   addrOpenEphm[] 
18450 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20  entries contain 
18460 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f  the address of O
18470 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
18480 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73  opcodes..** Thes
18490 65 20 61 64 64 72 65 73 73 65 73 20 6d 75 73 74  e addresses must
184a0 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68   be stored so th
184b0 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63  at we can go bac
184c0 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a  k and fill in.**
184d0 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20   the P4_KEYINFO 
184e0 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65 72  and P2 parameter
184f0 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65  s later.  Neithe
18500 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f  r the KeyInfo no
18510 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20  r.** the number 
18520 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32  of columns in P2
18530 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64   can be computed
18540 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
18550 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f  e.** as the OP_O
18560 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74  penEphm instruct
18570 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63  ion is coded bec
18580 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75  ause not.** enou
18590 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  gh information a
185a0 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e  bout the compoun
185b0 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e  d query is known
185c0 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a   at that point..
185d0 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  ** The KeyInfo f
185e0 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b  or addrOpenTran[
185f0 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61  0] and [1] conta
18600 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ins collating se
18610 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74  quences.** for t
18620 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20  he result set.  
18630 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20  The KeyInfo for 
18640 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20  addrOpenEphm[2] 
18650 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
18660 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20  ng.** sequences 
18670 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59  for the ORDER BY
18680 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
18690 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78  ct Select {.  Ex
186a0 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
186b0 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c       /* The fiel
186c0 64 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ds of the result
186d0 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20   */.  u8 op;    
186e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
186f0 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e  One of: TK_UNION
18700 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52   TK_ALL TK_INTER
18710 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a  SECT TK_EXCEPT *
18720 2f 0a 20 20 75 31 36 20 73 65 6c 46 6c 61 67 73  /.  u16 selFlags
18730 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61  ;          /* Va
18740 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65  rious SF_* value
18750 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69  s */.  int iLimi
18760 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a  t, iOffset;   /*
18770 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   Memory register
18780 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20  s holding LIMIT 
18790 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72  & OFFSET counter
187a0 73 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54  s */.#if SELECTT
187b0 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 63  RACE_ENABLED.  c
187c0 68 61 72 20 7a 53 65 6c 4e 61 6d 65 5b 31 32 5d  har zSelName[12]
187d0 3b 20 20 20 20 20 2f 2a 20 53 79 6d 62 6f 6c 69  ;     /* Symboli
187e0 63 20 6e 61 6d 65 20 6f 66 20 74 68 69 73 20 53  c name of this S
187f0 45 4c 45 43 54 20 75 73 65 20 66 6f 72 20 64 65  ELECT use for de
18800 62 75 67 67 69 6e 67 20 2a 2f 0a 23 65 6e 64 69  bugging */.#endi
18810 66 0a 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e  f.  int addrOpen
18820 45 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50  Ephm[2];   /* OP
18830 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64  _OpenEphem opcod
18840 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68  es related to th
18850 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 75  is select */.  u
18860 36 34 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20  64 nSelectRow;  
18870 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74        /* Estimat
18880 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73  ed number of res
18890 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20 53 72  ult rows */.  Sr
188a0 63 4c 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20  cList *pSrc;    
188b0 20 20 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d       /* The FROM
188c0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
188d0 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20  r *pWhere;      
188e0 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45      /* The WHERE
188f0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
18900 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b  rList *pGroupBy;
18910 20 20 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50      /* The GROUP
18920 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
18930 45 78 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20  Expr *pHaving;  
18940 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41         /* The HA
18950 56 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20  VING clause */. 
18960 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65   ExprList *pOrde
18970 72 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f  rBy;    /* The O
18980 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a  RDER BY clause *
18990 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69  /.  Select *pPri
189a0 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72  or;        /* Pr
189b0 69 6f 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20  ior select in a 
189c0 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20  compound select 
189d0 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53  statement */.  S
189e0 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20  elect *pNext;   
189f0 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65        /* Next se
18a00 6c 65 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74  lect to the left
18a10 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a   in a compound *
18a20 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74  /.  Expr *pLimit
18a30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49  ;          /* LI
18a40 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  MIT expression. 
18a50 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75  NULL means not u
18a60 73 65 64 2e 20 2a 2f 0a 20 20 45 78 70 72 20 2a  sed. */.  Expr *
18a70 70 4f 66 66 73 65 74 3b 20 20 20 20 20 20 20 20  pOffset;        
18a80 20 2f 2a 20 4f 46 46 53 45 54 20 65 78 70 72 65   /* OFFSET expre
18a90 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e  ssion. NULL mean
18aa0 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20  s not used. */. 
18ab0 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20   With *pWith;   
18ac0 20 20 20 20 20 20 20 20 2f 2a 20 57 49 54 48 20          /* WITH 
18ad0 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64 20  clause attached 
18ae0 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 2e 20  to this select. 
18af0 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a  Or NULL. */.};..
18b00 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
18b10 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e  lues for Select.
18b20 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22  selFlags.  The "
18b30 53 46 22 20 70 72 65 66 69 78 20 73 74 61 6e 64  SF" prefix stand
18b40 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74  s for.** "Select
18b50 20 46 6c 61 67 22 2e 0a 2a 2f 0a 23 64 65 66 69   Flag"..*/.#defi
18b60 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20  ne SF_Distinct  
18b70 20 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a        0x0001  /*
18b80 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62   Output should b
18b90 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64  e DISTINCT */.#d
18ba0 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65  efine SF_Resolve
18bb0 64 20 20 20 20 20 20 20 20 30 78 30 30 30 32 20  d        0x0002 
18bc0 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20   /* Identifiers 
18bd0 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76  have been resolv
18be0 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ed */.#define SF
18bf0 5f 41 67 67 72 65 67 61 74 65 20 20 20 20 20 20  _Aggregate      
18c00 20 30 78 30 30 30 34 20 20 2f 2a 20 43 6f 6e 74   0x0004  /* Cont
18c10 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66  ains aggregate f
18c20 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  unctions */.#def
18c30 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d  ine SF_UsesEphem
18c40 65 72 61 6c 20 20 20 30 78 30 30 30 38 20 20 2f  eral   0x0008  /
18c50 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45  * Uses the OpenE
18c60 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20  phemeral opcode 
18c70 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78  */.#define SF_Ex
18c80 70 61 6e 64 65 64 20 20 20 20 20 20 20 20 30 78  panded        0x
18c90 30 30 31 30 20 20 2f 2a 20 73 71 6c 69 74 65 33  0010  /* sqlite3
18ca0 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63  SelectExpand() c
18cb0 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f  alled on this */
18cc0 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54  .#define SF_HasT
18cd0 79 70 65 49 6e 66 6f 20 20 20 20 20 30 78 30 30  ypeInfo     0x00
18ce0 32 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71  20  /* FROM subq
18cf0 75 65 72 69 65 73 20 68 61 76 65 20 54 61 62 6c  ueries have Tabl
18d00 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23 64  e metadata */.#d
18d10 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e  efine SF_Compoun
18d20 64 20 20 20 20 20 20 20 20 30 78 30 30 34 30 20  d        0x0040 
18d30 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f   /* Part of a co
18d40 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a  mpound query */.
18d50 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75 65  #define SF_Value
18d60 73 20 20 20 20 20 20 20 20 20 20 30 78 30 30 38  s          0x008
18d70 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65  0  /* Synthesize
18d80 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c  d from VALUES cl
18d90 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
18da0 53 46 5f 41 6c 6c 56 61 6c 75 65 73 20 20 20 20  SF_AllValues    
18db0 20 20 20 30 78 30 31 30 30 20 20 2f 2a 20 41 6c     0x0100  /* Al
18dc0 6c 20 74 65 72 6d 73 20 6f 66 20 63 6f 6d 70 6f  l terms of compo
18dd0 75 6e 64 20 61 72 65 20 56 41 4c 55 45 53 20 2a  und are VALUES *
18de0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73  /.#define SF_Nes
18df0 74 65 64 46 72 6f 6d 20 20 20 20 20 20 30 78 30  tedFrom      0x0
18e00 32 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  200  /* Part of 
18e10 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20  a parenthesized 
18e20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23  FROM clause */.#
18e30 64 65 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43  define SF_MaybeC
18e40 6f 6e 76 65 72 74 20 20 20 20 30 78 30 34 30 30  onvert    0x0400
18e50 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72    /* Need conver
18e60 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54  tCompoundSelectT
18e70 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23  oSubquery() */.#
18e80 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73  define SF_Recurs
18e90 69 76 65 20 20 20 20 20 20 20 30 78 30 38 30 30  ive       0x0800
18ea0 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69    /* The recursi
18eb0 76 65 20 70 61 72 74 20 6f 66 20 61 20 72 65 63  ve part of a rec
18ec0 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64  ursive CTE */.#d
18ed0 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78 41  efine SF_MinMaxA
18ee0 67 67 20 20 20 20 20 20 20 30 78 31 30 30 30 20  gg       0x1000 
18ef0 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 63 6f   /* Aggregate co
18f00 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20 6f  ntaining min() o
18f10 72 20 6d 61 78 28 29 20 2a 2f 0a 0a 0a 2f 2a 0a  r max() */.../*.
18f20 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f  ** The results o
18f30 66 20 61 20 53 45 4c 45 43 54 20 63 61 6e 20 62  f a SELECT can b
18f40 65 20 64 69 73 74 72 69 62 75 74 65 64 20 69 6e  e distributed in
18f50 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 61   several ways, a
18f60 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20  s defined.** by 
18f70 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  one of the follo
18f80 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54 68  wing macros.  Th
18f90 65 20 22 53 52 54 22 20 70 72 65 66 69 78 20 6d  e "SRT" prefix m
18fa0 65 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73  eans "SELECT Res
18fb0 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a  ult.** Type"..**
18fc0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e 69 6f  .**     SRT_Unio
18fd0 6e 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65  n       Store re
18fe0 73 75 6c 74 73 20 61 73 20 61 20 6b 65 79 20 69  sults as a key i
18ff0 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e  n a temporary in
19000 64 65 78 20 0a 2a 2a 20 20 20 20 20 20 20 20 20  dex .**         
19010 20 20 20 20 20 20 20 20 20 20 20 20 69 64 65 6e              iden
19020 74 69 66 69 65 64 20 62 79 20 70 44 65 73 74 2d  tified by pDest-
19030 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20  >iSDParm..**.** 
19040 20 20 20 20 53 52 54 5f 45 78 63 65 70 74 20 20      SRT_Except  
19050 20 20 20 20 52 65 6d 6f 76 65 20 72 65 73 75 6c      Remove resul
19060 74 73 20 66 72 6f 6d 20 74 68 65 20 74 65 6d 70  ts from the temp
19070 6f 72 61 72 79 20 69 6e 64 65 78 20 70 44 65 73  orary index pDes
19080 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a  t->iSDParm..**.*
19090 2a 20 20 20 20 20 53 52 54 5f 45 78 69 73 74 73  *     SRT_Exists
190a0 20 20 20 20 20 20 53 74 6f 72 65 20 61 20 31 20        Store a 1 
190b0 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70  in memory cell p
190c0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 69 66  Dest->iSDParm if
190d0 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20   the result.**  
190e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190f0 20 20 20 73 65 74 20 69 73 20 6e 6f 74 20 65 6d     set is not em
19100 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  pty..**.**     S
19110 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 54  RT_Discard     T
19120 68 72 6f 77 20 74 68 65 20 72 65 73 75 6c 74 73  hrow the results
19130 20 61 77 61 79 2e 20 20 54 68 69 73 20 69 73 20   away.  This is 
19140 75 73 65 64 20 62 79 20 53 45 4c 45 43 54 0a 2a  used by SELECT.*
19150 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19160 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73        statements
19170 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
19180 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70   whose only purp
19190 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20 20 20 20  ose is.**       
191a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
191b0 65 20 73 69 64 65 2d 65 66 66 65 63 74 73 20 6f  e side-effects o
191c0 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  f functions..**.
191d0 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20 61 62  ** All of the ab
191e0 6f 76 65 20 61 72 65 20 66 72 65 65 20 74 6f 20  ove are free to 
191f0 69 67 6e 6f 72 65 20 74 68 65 69 72 20 4f 52 44  ignore their ORD
19200 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68  ER BY clause. Th
19210 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c  ose that.** foll
19220 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68  ow must honor th
19230 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
19240 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  e..**.**     SRT
19250 5f 4f 75 74 70 75 74 20 20 20 20 20 20 47 65 6e  _Output      Gen
19260 65 72 61 74 65 20 61 20 72 6f 77 20 6f 66 20 6f  erate a row of o
19270 75 74 70 75 74 20 28 75 73 69 6e 67 20 74 68 65  utput (using the
19280 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a   OP_ResultRow.**
19290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192a0 20 20 20 20 20 6f 70 63 6f 64 65 29 20 66 6f 72       opcode) for
192b0 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65   each row in the
192c0 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a   result set..**.
192d0 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d 20 20  **     SRT_Mem  
192e0 20 20 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69         Only vali
192f0 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  d if the result 
19300 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  is a single colu
19310 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  mn..**          
19320 20 20 20 20 20 20 20 20 20 20 20 53 74 6f 72 65             Store
19330 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d   the first colum
19340 6e 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 72  n of the first r
19350 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20  esult row.**    
19360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19370 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65   in register pDe
19380 73 74 2d 3e 69 53 44 50 61 72 6d 20 74 68 65 6e  st->iSDParm then
19390 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 72 65 73   abandon the res
193a0 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
193b0 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20           of the 
193c0 71 75 65 72 79 2e 20 20 54 68 69 73 20 64 65 73  query.  This des
193d0 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73  tination implies
193e0 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a   "LIMIT 1"..**.*
193f0 2a 20 20 20 20 20 53 52 54 5f 53 65 74 20 20 20  *     SRT_Set   
19400 20 20 20 20 20 20 54 68 65 20 72 65 73 75 6c 74        The result
19410 20 6d 75 73 74 20 62 65 20 61 20 73 69 6e 67 6c   must be a singl
19420 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65  e column.  Store
19430 20 65 61 63 68 0a 2a 2a 20 20 20 20 20 20 20 20   each.**        
19440 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
19450 20 6f 66 20 72 65 73 75 6c 74 20 61 73 20 74 68   of result as th
19460 65 20 6b 65 79 20 69 6e 20 74 61 62 6c 65 20 70  e key in table p
19470 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 20 0a  Dest->iSDParm. .
19480 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19490 20 20 20 20 20 20 20 41 70 70 6c 79 20 74 68 65         Apply the
194a0 20 61 66 66 69 6e 69 74 79 20 70 44 65 73 74 2d   affinity pDest-
194b0 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72 65 20  >affSdst before 
194c0 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20  storing.**      
194d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
194e0 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74 6f  esults.  Used to
194f0 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28   implement "IN (
19500 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a  SELECT ...)"..**
19510 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68 65  .**     SRT_Ephe
19520 6d 54 61 62 20 20 20 20 43 72 65 61 74 65 20 61  mTab    Create a
19530 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  n temporary tabl
19540 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
19550 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20   and store.**   
19560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19570 20 20 74 68 65 20 72 65 73 75 6c 74 20 74 68 65    the result the
19580 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20 69  re. The cursor i
19590 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74 65  s left open afte
195a0 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  r.**            
195b0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 69           returni
195c0 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69 6b  ng.  This is lik
195d0 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63 65  e SRT_Table exce
195e0 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20 20  pt that.**      
195f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
19600 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  his destination 
19610 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65  uses OP_OpenEphe
19620 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65 0a  meral to create.
19630 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19640 20 20 20 20 20 20 20 74 68 65 20 74 61 62 6c 65         the table
19650 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20   first..**.**   
19660 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20    SRT_Coroutine 
19670 20 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f 2d    Generate a co-
19680 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65 74  routine that ret
19690 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20 6f  urns a new row o
196a0 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  f.**            
196b0 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73           results
196c0 20 65 61 63 68 20 74 69 6d 65 20 69 74 20 69 73   each time it is
196d0 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20 65   invoked.  The e
196e0 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20  ntry point.**   
196f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19700 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75 74    of the co-rout
19710 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ine is stored in
19720 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d   register pDest-
19730 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20  >iSDParm.**     
19740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19750 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 72  and the result r
19760 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ow is stored in 
19770 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65 67  pDest->nDest reg
19780 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20 20  isters.**       
19790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
197a0 61 72 74 69 6e 67 20 77 69 74 68 20 70 44 65 73  arting with pDes
197b0 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20  t->iSdst..**.** 
197c0 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20 20      SRT_Table   
197d0 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
197e0 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 74  s in temporary t
197f0 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
19800 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f  arm..**     SRT_
19810 46 69 66 6f 20 20 20 20 20 20 20 20 54 68 69 73  Fifo        This
19820 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70 68   is like SRT_Eph
19830 65 6d 54 61 62 20 65 78 63 65 70 74 20 74 68 61  emTab except tha
19840 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20  t the table.**  
19850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19860 20 20 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f     is assumed to
19870 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65 6e   already be open
19880 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73 0a  .  SRT_Fifo has.
19890 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
198a0 20 20 20 20 20 20 20 74 68 65 20 61 64 64 69 74         the addit
198b0 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20 6f  ional property o
198c0 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20  f being able to 
198d0 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20  ignore.**       
198e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
198f0 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
19900 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  e..**.**     SRT
19910 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53 74 6f  _DistFifo    Sto
19920 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20  re results in a 
19930 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
19940 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
19950 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19960 20 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f 20         But also 
19970 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61  use temporary ta
19980 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
19990 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20 20  rm+1 as.**      
199a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
199b0 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70   record of all p
199c0 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e 64  rior results and
199d0 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c   ignore any dupl
199e0 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20  icate.**        
199f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
19a00 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20  s.  Name means: 
19a10 20 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f 22   "Distinct Fifo"
19a20 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
19a30 51 75 65 75 65 20 20 20 20 20 20 20 53 74 6f 72  Queue       Stor
19a40 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69  e results in pri
19a50 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73  ority queue pDes
19a60 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61 6c  t->iSDParm (real
19a70 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ly.**           
19a80 20 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e 64            an ind
19a90 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20 73  ex).  Append a s
19aa0 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 73  equence number s
19ab0 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72 69  o that all entri
19ac0 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  es.**           
19ad0 20 20 20 20 20 20 20 20 20 20 61 72 65 20 64 69            are di
19ae0 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  stinct..**.**   
19af0 20 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20    SRT_DistQueue 
19b00 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
19b10 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75  in priority queu
19b20 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
19b30 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20   only if.**     
19b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b50 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64 20  the same record 
19b60 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20 73  has never been s
19b70 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20 54  tored before.  T
19b80 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  he.**           
19b90 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 20            index 
19ba0 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  at pDest->iSDPar
19bb0 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69  m+1 hold all pri
19bc0 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64  or stores..*/.#d
19bd0 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20  efine SRT_Union 
19be0 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f         1  /* Sto
19bf0 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79  re result as key
19c00 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f  s in an index */
19c10 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63  .#define SRT_Exc
19c20 65 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20  ept       2  /* 
19c30 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72  Remove result fr
19c40 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78  om a UNION index
19c50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
19c60 45 78 69 73 74 73 20 20 20 20 20 20 20 33 20 20  Exists       3  
19c70 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74 68  /* Store 1 if th
19c80 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20  e result is not 
19c90 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65  empty */.#define
19ca0 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20   SRT_Discard    
19cb0 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73    4  /* Do not s
19cc0 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ave the results 
19cd0 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65 66  anywhere */.#def
19ce0 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20 20  ine SRT_Fifo    
19cf0 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72 65       5  /* Store
19d00 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20   result as data 
19d10 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69  with an automati
19d20 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  c rowid */.#defi
19d30 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20  ne SRT_DistFifo 
19d40 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53      6  /* Like S
19d50 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e 69  RT_Fifo, but uni
19d60 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79  que results only
19d70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
19d80 51 75 65 75 65 20 20 20 20 20 20 20 20 37 20 20  Queue        7  
19d90 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
19da0 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23  in an queue */.#
19db0 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 51  define SRT_DistQ
19dc0 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c 69  ueue    8  /* Li
19dd0 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62 75  ke SRT_Queue, bu
19de0 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73  t unique results
19df0 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65   only */../* The
19e00 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
19e10 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20   is ignored for 
19e20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  all of the above
19e30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f   */.#define Igno
19e40 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20  rableOrderby(X) 
19e50 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54  ((X->eDest)<=SRT
19e60 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64 65  _DistQueue)..#de
19e70 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20  fine SRT_Output 
19e80 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74 70        9  /* Outp
19e90 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72  ut each row of r
19ea0 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esult */.#define
19eb0 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20   SRT_Mem        
19ec0 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65   10  /* Store re
19ed0 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79  sult in a memory
19ee0 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65   cell */.#define
19ef0 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20   SRT_Set        
19f00 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65   11  /* Store re
19f10 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e  sults as keys in
19f20 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65   an index */.#de
19f30 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61  fine SRT_EphemTa
19f40 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65 61  b    12  /* Crea
19f50 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62  te transient tab
19f60 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20   and store like 
19f70 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65  SRT_Table */.#de
19f80 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74 69  fine SRT_Corouti
19f90 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e 65  ne   13  /* Gene
19fa0 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72 6f  rate a single ro
19fb0 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23  w of result */.#
19fc0 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65  define SRT_Table
19fd0 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53 74         14  /* St
19fe0 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61  ore result as da
19ff0 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d  ta with an autom
1a000 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f  atic rowid */../
1a010 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
1a020 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20   of this object 
1a030 64 65 73 63 72 69 62 65 73 20 77 68 65 72 65 20  describes where 
1a040 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72 65  to put of the re
1a050 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45  sults of.** a SE
1a060 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
1a070 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74  */.struct Select
1a080 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73  Dest {.  u8 eDes
1a090 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
1a0a0 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65 20   How to dispose 
1a0b0 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e 20  of the results. 
1a0c0 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f   On of SRT_* abo
1a0d0 76 65 2e 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  ve. */.  char af
1a0e0 66 53 64 73 74 3b 20 20 20 20 20 20 20 20 2f 2a  fSdst;        /*
1a0f0 20 41 66 66 69 6e 69 74 79 20 75 73 65 64 20 77   Affinity used w
1a100 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53  hen eDest==SRT_S
1a110 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50  et */.  int iSDP
1a120 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  arm;         /* 
1a130 41 20 70 61 72 61 6d 65 74 65 72 20 75 73 65 64  A parameter used
1a140 20 62 79 20 74 68 65 20 65 44 65 73 74 20 64 69   by the eDest di
1a150 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f  sposal method */
1a160 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20  .  int iSdst;   
1a170 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20          /* Base 
1a180 72 65 67 69 73 74 65 72 20 77 68 65 72 65 20 72  register where r
1a190 65 73 75 6c 74 73 20 61 72 65 20 77 72 69 74 74  esults are writt
1a1a0 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73  en */.  int nSds
1a1b0 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
1a1c0 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74  Number of regist
1a1d0 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f  ers allocated */
1a1e0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72  .  ExprList *pOr
1a1f0 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63  derBy;  /* Key c
1a200 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51  olumns for SRT_Q
1a210 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69 73  ueue and SRT_Dis
1a220 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  tQueue */.};../*
1a230 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65 20  .** During code 
1a240 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73 74  generation of st
1a250 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64 6f  atements that do
1a260 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41 55   inserts into AU
1a270 54 4f 49 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a 20  TOINCREMENT .** 
1a280 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c  tables, the foll
1a290 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f  owing informatio
1a2a0 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  n is attached to
1a2b0 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74   the Table.u.aut
1a2c0 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65  oInc.p.** pointe
1a2d0 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e  r of each autoin
1a2e0 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f  crement table to
1a2f0 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64   record some sid
1a300 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  e information th
1a310 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67  at.** the code g
1a320 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20  enerator needs. 
1a330 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70   We have to keep
1a340 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69   per-table autoi
1a350 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f  ncrement.** info
1a360 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20  rmation in case 
1a370 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 77 6e  inserts are down
1a380 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
1a390 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e  .  Triggers do n
1a3a0 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63  ot.** normally c
1a3b0 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72 20  oordinate their 
1a3c0 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74 20  activities, but 
1a3d0 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f  we do need to co
1a3e0 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20  ordinate the.** 
1a3f0 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69  loading and savi
1a400 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d  ng of autoincrem
1a410 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ent information.
1a420 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69  .*/.struct Autoi
1a430 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69  ncInfo {.  Autoi
1a440 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20  ncInfo *pNext;  
1a450 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c   /* Next info bl
1a460 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66  ock in a list of
1a470 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54   them all */.  T
1a480 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
1a490 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68       /* Table th
1a4a0 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65  is info block re
1a4b0 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74  fers to */.  int
1a4c0 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
1a4d0 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73     /* Index in s
1a4e0 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20  qlite3.aDb[] of 
1a4f0 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67  database holding
1a500 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72   pTab */.  int r
1a510 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20 20  egCtr;          
1a520 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73   /* Memory regis
1a530 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ter holding the 
1a540 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f  rowid counter */
1a550 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20  .};../*.** Size 
1a560 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61  of the column ca
1a570 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  che.*/.#ifndef S
1a580 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45  QLITE_N_COLCACHE
1a590 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1a5a0 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a 23  _N_COLCACHE 10.#
1a5b0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20  endif../*.** At 
1a5c0 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e  least one instan
1a5d0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
1a5e0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
1a5f0 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63   created for eac
1a600 68 20 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68  h .** trigger th
1a610 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64 20  at may be fired 
1a620 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e  while parsing an
1a630 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20   INSERT, UPDATE 
1a640 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61  or DELETE.** sta
1a650 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68  tement. All such
1a660 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f   objects are sto
1a670 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65  red in the linke
1a680 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61 74  d list headed at
1a690 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67  .** Parse.pTrigg
1a6a0 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65  erPrg and delete
1a6b0 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74  d once statement
1a6c0 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73   compilation has
1a6d0 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74   been.** complet
1a6e0 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65  ed..**.** A Vdbe
1a6f0 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61   sub-program tha
1a700 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65  t implements the
1a710 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63   body and WHEN c
1a720 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65 72  lause of trigger
1a730 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70  .** TriggerPrg.p
1a740 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e  Trigger, assumin
1a750 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43  g a default ON C
1a760 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f  ONFLICT clause o
1a770 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  f.** TriggerPrg.
1a780 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65  orconf, is store
1a790 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65 72  d in the Trigger
1a7a0 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72  Prg.pProgram var
1a7b0 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61  iable..** The Pa
1a7c0 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1a7d0 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61  list never conta
1a7e0 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20  ins two entries 
1a7f0 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a  with the same.**
1a800 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68   values for both
1a810 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72   pTrigger and or
1a820 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  conf..**.** The 
1a830 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d  TriggerPrg.aColm
1a840 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20  ask[0] variable 
1a850 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b  is set to a mask
1a860 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e   of old.* column
1a870 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f  s.** accessed (o
1a880 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74  r set to 0 for t
1a890 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61 73  riggers fired as
1a8a0 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53   a result of INS
1a8b0 45 52 54 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  ERT .** statemen
1a8c0 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20  ts). Similarly, 
1a8d0 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61  the TriggerPrg.a
1a8e0 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61  Colmask[1] varia
1a8f0 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a  ble is set to.**
1a900 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a   a mask of new.*
1a910 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79   columns used by
1a920 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f   the program..*/
1a930 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50  .struct TriggerP
1a940 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a  rg {.  Trigger *
1a950 70 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f  pTrigger;      /
1a960 2a 20 54 72 69 67 67 65 72 20 74 68 69 73 20 70  * Trigger this p
1a970 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64  rogram was coded
1a980 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67   from */.  Trigg
1a990 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20  erPrg *pNext;   
1a9a0 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79     /* Next entry
1a9b0 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67   in Parse.pTrigg
1a9c0 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20  erPrg list */.  
1a9d0 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f  SubProgram *pPro
1a9e0 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72  gram;   /* Progr
1a9f0 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  am implementing 
1aa00 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20  pTrigger/orconf 
1aa10 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b  */.  int orconf;
1aa20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1aa30 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
1aa40 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20  ICT policy */.  
1aa50 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b  u32 aColmask[2];
1aa60 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73          /* Masks
1aa70 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a   of old.*, new.*
1aa80 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65   columns accesse
1aa90 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  d */.};../*.** T
1aaa0 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74  he yDbMask datat
1aab0 79 70 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d  ype for the bitm
1aac0 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63  ask of all attac
1aad0 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  hed databases..*
1aae0 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
1aaf0 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74  _ATTACHED>30.  t
1ab00 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20  ypedef unsigned 
1ab10 63 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53 51  char yDbMask[(SQ
1ab20 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
1ab30 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e  D+9)/8];.# defin
1ab40 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49  e DbMaskTest(M,I
1ab50 29 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f 38  )    (((M)[(I)/8
1ab60 5d 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29 21  ]&(1<<((I)&7)))!
1ab70 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  =0).# define DbM
1ab80 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20  askZero(M)      
1ab90 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a  memset((M),0,siz
1aba0 65 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e 65  eof(M)).# define
1abb0 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20   DbMaskSet(M,I) 
1abc0 20 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d      (M)[(I)/8]|=
1abd0 28 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20 64  (1<<((I)&7)).# d
1abe0 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a  efine DbMaskAllZ
1abf0 65 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65 33  ero(M)   sqlite3
1ac00 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1ac10 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1ac20 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73 71  NonZero(M)   (sq
1ac30 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65  lite3DbMaskAllZe
1ac40 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a  ro(M)==0).#else.
1ac50 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e    typedef unsign
1ac60 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a  ed int yDbMask;.
1ac70 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54  # define DbMaskT
1ac80 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d  est(M,I)    (((M
1ac90 29 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  )&(((yDbMask)1)<
1aca0 3c 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65 66  <(I)))!=0).# def
1acb0 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d  ine DbMaskZero(M
1acc0 29 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20 64  )      (M)=0.# d
1acd0 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28  efine DbMaskSet(
1ace0 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28 28  M,I)     (M)|=((
1acf0 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29  (yDbMask)1)<<(I)
1ad00 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1ad10 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d  kAllZero(M)   (M
1ad20 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62  )==0.# define Db
1ad30 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20  MaskNonZero(M)  
1ad40 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a   (M)!=0.#endif..
1ad50 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72  /*.** An SQL par
1ad60 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20  ser context.  A 
1ad70 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74 72  copy of this str
1ad80 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64  ucture is passed
1ad90 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20   through.** the 
1ada0 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20  parser and down 
1adb0 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72  into all the par
1adc0 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69  ser action routi
1add0 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ne in order to.*
1ade0 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69  * carry around i
1adf0 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20  nformation that 
1ae00 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65  is global to the
1ae10 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a   entire parse..*
1ae20 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75  *.** The structu
1ae30 72 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e  re is divided in
1ae40 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57  to two parts.  W
1ae50 68 65 6e 20 74 68 65 20 70 61 72 73 65 72 20 61  hen the parser a
1ae60 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72  nd code.** gener
1ae70 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c  ate call themsel
1ae80 76 65 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c  ves recursively,
1ae90 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20   the first part 
1aea0 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65  of the structure
1aeb0 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20  .** is constant 
1aec0 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70  but the second p
1aed0 61 72 74 20 69 73 20 72 65 73 65 74 20 61 74 20  art is reset at 
1aee0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e  the beginning an
1aef0 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68  d end of.** each
1af00 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a   recursion..**.*
1af10 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b  * The nTableLock
1af20 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20   and aTableLock 
1af30 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e  variables are on
1af40 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20 73  ly used if the s
1af50 68 61 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a 20  hared-cache .** 
1af60 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c  feature is enabl
1af70 65 64 20 28 69 66 20 73 71 6c 69 74 65 33 54 73  ed (if sqlite3Ts
1af80 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61  d()->useSharedDa
1af90 74 61 20 69 73 20 74 72 75 65 29 2e 20 54 68 65  ta is true). The
1afa0 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f  y are.** used to
1afb0 20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f   store the set o
1afc0 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65  f table-locks re
1afd0 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73 74  quired by the st
1afe0 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a  atement being.**
1aff0 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74   compiled. Funct
1b000 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65  ion sqlite3Table
1b010 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20 74  Lock() is used t
1b020 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f  o add entries to
1b030 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f   the.** list..*/
1b040 0a 73 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a  .struct Parse {.
1b050 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
1b060 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61         /* The ma
1b070 69 6e 20 64 61 74 61 62 61 73 65 20 73 74 72 75  in database stru
1b080 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20  cture */.  char 
1b090 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20  *zErrMsg;       
1b0a0 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73  /* An error mess
1b0b0 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70  age */.  Vdbe *p
1b0c0 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Vdbe;         /*
1b0d0 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65   An engine for e
1b0e0 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61 73  xecuting databas
1b0f0 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20  e bytecode */.  
1b100 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20  int rc;         
1b110 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63       /* Return c
1b120 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69  ode from executi
1b130 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61  on */.  u8 colNa
1b140 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20  mesSet;      /* 
1b150 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f  TRUE after OP_Co
1b160 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65  lumnName has bee
1b170 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56 64 62  n issued to pVdb
1b180 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53  e */.  u8 checkS
1b190 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43  chema;      /* C
1b1a0 61 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f  auses schema coo
1b1b0 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65 72 20  kie check after 
1b1c0 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38  an error */.  u8
1b1d0 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20 20   nested;        
1b1e0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1b1f0 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20  nested calls to 
1b200 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20  the parser/code 
1b210 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75  generator */.  u
1b220 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20  8 nTempReg;     
1b230 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1b240 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
1b250 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67  ters in aTempReg
1b260 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c  [] */.  u8 isMul
1b270 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20  tiWrite;     /* 
1b280 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e  True if statemen
1b290 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73  t may modify/ins
1b2a0 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  ert multiple row
1b2b0 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f  s */.  u8 mayAbo
1b2c0 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  rt;         /* T
1b2d0 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74  rue if statement
1b2e0 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42   may throw an AB
1b2f0 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f  ORT exception */
1b300 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e  .  u8 hasCompoun
1b310 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20  d;      /* Need 
1b320 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72  to invoke conver
1b330 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54  tCompoundSelectT
1b340 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20  oSubquery() */. 
1b350 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f   u8 okConstFacto
1b360 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66  r;    /* OK to f
1b370 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61  actor out consta
1b380 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65  nts */.  int aTe
1b390 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f 2a  mpReg[8];     /*
1b3a0 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f   Holding area fo
1b3b0 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  r temporary regi
1b3c0 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  sters */.  int n
1b3d0 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
1b3e0 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74  /* Size of the t
1b3f0 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
1b400 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74  r block */.  int
1b410 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20   iRangeReg;     
1b420 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73    /* First regis
1b430 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79  ter in temporary
1b440 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20   register block 
1b450 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
1b460 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1b470 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65  ber of errors se
1b480 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62  en */.  int nTab
1b490 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1b4a0 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f  Number of previo
1b4b0 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56  usly allocated V
1b4c0 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20  DBE cursors */. 
1b4d0 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20   int nMem;      
1b4e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b4f0 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  of memory cells 
1b500 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
1b510 20 69 6e 74 20 6e 53 65 74 3b 20 20 20 20 20 20   int nSet;      
1b520 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b530 6f 66 20 73 65 74 73 20 75 73 65 64 20 73 6f 20  of sets used so 
1b540 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e  far */.  int nOn
1b550 63 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ce;           /*
1b560 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f 6e   Number of OP_On
1b570 63 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20  ce instructions 
1b580 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1b590 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20  nOpAlloc;       
1b5a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c   /* Number of sl
1b5b0 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f  ots allocated fo
1b5c0 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a  r Vdbe.aOp[] */.
1b5d0 20 20 69 6e 74 20 69 46 69 78 65 64 4f 70 3b 20    int iFixedOp; 
1b5e0 20 20 20 20 20 20 20 2f 2a 20 4e 65 76 65 72 20         /* Never 
1b5f0 62 61 63 6b 20 6f 75 74 20 6f 70 63 6f 64 65 73  back out opcodes
1b600 20 69 46 69 78 65 64 4f 70 2d 31 20 6f 72 20 65   iFixedOp-1 or e
1b610 61 72 6c 69 65 72 20 2a 2f 0a 20 20 69 6e 74 20  arlier */.  int 
1b620 63 6b 42 61 73 65 3b 20 20 20 20 20 20 20 20 20  ckBase;         
1b630 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65   /* Base registe
1b640 72 20 6f 66 20 64 61 74 61 20 64 75 72 69 6e 67  r of data during
1b650 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e   check constrain
1b660 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69 50 61 72  ts */.  int iPar
1b670 74 49 64 78 54 61 62 3b 20 20 20 20 20 2f 2a 20  tIdxTab;     /* 
1b680 54 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64  Table correspond
1b690 69 6e 67 20 74 6f 20 61 20 70 61 72 74 69 61 6c  ing to a partial
1b6a0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
1b6b0 69 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20  iCacheLevel;    
1b6c0 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c   /* ColCache val
1b6d0 69 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68  id when aColCach
1b6e0 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63  e[].iLevel<=iCac
1b6f0 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74  heLevel */.  int
1b700 20 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20   iCacheCnt;     
1b710 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65    /* Counter use
1b720 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43  d to generate aC
1b730 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61  olCache[].lru va
1b740 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c  lues */.  int nL
1b750 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f  abel;          /
1b760 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65  * Number of labe
1b770 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74  ls used */.  int
1b780 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20 20 20   *aLabel;       
1b790 20 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68 6f    /* Space to ho
1b7a0 6c 64 20 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f  ld the labels */
1b7b0 0a 20 20 73 74 72 75 63 74 20 79 43 6f 6c 43 61  .  struct yColCa
1b7c0 63 68 65 20 7b 0a 20 20 20 20 69 6e 74 20 69 54  che {.    int iT
1b7d0 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
1b7e0 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72 20  /* Table cursor 
1b7f0 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69 31  number */.    i1
1b800 36 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  6 iColumn;      
1b810 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c      /* Table col
1b820 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  umn number */.  
1b830 20 20 75 38 20 74 65 6d 70 52 65 67 3b 20 20 20    u8 tempReg;   
1b840 20 20 20 20 20 20 20 20 2f 2a 20 69 52 65 67 20          /* iReg 
1b850 69 73 20 61 20 74 65 6d 70 20 72 65 67 69 73 74  is a temp regist
1b860 65 72 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f  er that needs to
1b870 20 62 65 20 66 72 65 65 64 20 2a 2f 0a 20 20 20   be freed */.   
1b880 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20   int iLevel;    
1b890 20 20 20 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e         /* Nestin
1b8a0 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69  g level */.    i
1b8b0 6e 74 20 69 52 65 67 3b 20 20 20 20 20 20 20 20  nt iReg;        
1b8c0 20 20 20 20 20 2f 2a 20 52 65 67 20 77 69 74 68       /* Reg with
1b8d0 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
1b8e0 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e  olumn. 0 means n
1b8f0 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  one. */.    int 
1b900 6c 72 75 3b 20 20 20 20 20 20 20 20 20 20 20 20  lru;            
1b910 20 20 2f 2a 20 4c 65 61 73 74 20 72 65 63 65 6e    /* Least recen
1b920 74 6c 79 20 75 73 65 64 20 65 6e 74 72 79 20 68  tly used entry h
1b930 61 73 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  as the smallest 
1b940 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f  value */.  } aCo
1b950 6c 43 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f  lCache[SQLITE_N_
1b960 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f  COLCACHE];  /* O
1b970 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  ne for each colu
1b980 6d 6e 20 63 61 63 68 65 20 65 6e 74 72 79 20 2a  mn cache entry *
1b990 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43  /.  ExprList *pC
1b9a0 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73  onstExpr;/* Cons
1b9b0 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73  tant expressions
1b9c0 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73   */.  Token cons
1b9d0 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61  traintName;/* Na
1b9e0 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72  me of the constr
1b9f0 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62  aint currently b
1ba00 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 20  eing parsed */. 
1ba10 20 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61   yDbMask writeMa
1ba20 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61  sk;   /* Start a
1ba30 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69   write transacti
1ba40 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61  on on these data
1ba50 62 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61  bases */.  yDbMa
1ba60 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20  sk cookieMask;  
1ba70 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63  /* Bitmask of sc
1ba80 68 65 6d 61 20 76 65 72 69 66 69 65 64 20 64 61  hema verified da
1ba90 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74  tabases */.  int
1baa0 20 63 6f 6f 6b 69 65 56 61 6c 75 65 5b 53 51 4c   cookieValue[SQL
1bab0 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
1bac0 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c 75 65 73 20  +2];  /* Values 
1bad0 6f 66 20 63 6f 6f 6b 69 65 73 20 74 6f 20 76 65  of cookies to ve
1bae0 72 69 66 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65  rify */.  int re
1baf0 67 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f  gRowid;        /
1bb00 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
1bb10 6e 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41  ng rowid of CREA
1bb20 54 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a  TE TABLE entry *
1bb30 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b  /.  int regRoot;
1bb40 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
1bb50 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f  ster holding roo
1bb60 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f  t page number fo
1bb70 72 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f  r new objects */
1bb80 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20  .  int nMaxArg; 
1bb90 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61          /* Max a
1bba0 72 67 73 20 70 61 73 73 65 64 20 74 6f 20 75 73  rgs passed to us
1bbb0 65 72 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73  er function by s
1bbc0 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69  ub-program */.#i
1bbd0 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  f SELECTTRACE_EN
1bbe0 41 42 4c 45 44 0a 20 20 69 6e 74 20 6e 53 65 6c  ABLED.  int nSel
1bbf0 65 63 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ect;         /* 
1bc00 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c 45 43 54  Number of SELECT
1bc10 20 73 74 61 74 65 6d 65 6e 74 73 20 73 65 65 6e   statements seen
1bc20 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63   */.  int nSelec
1bc30 74 49 6e 64 65 6e 74 3b 20 20 20 2f 2a 20 48 6f  tIndent;   /* Ho
1bc40 77 20 66 61 72 20 74 6f 20 69 6e 64 65 6e 74 20  w far to indent 
1bc50 53 45 4c 45 43 54 54 52 41 43 45 28 29 20 6f 75  SELECTTRACE() ou
1bc60 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  tput */.#endif.#
1bc70 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1bc80 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a  IT_SHARED_CACHE.
1bc90 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b    int nTableLock
1bca0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
1bcb0 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61  er of locks in a
1bcc0 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54  TableLock */.  T
1bcd0 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65  ableLock *aTable
1bce0 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65  Lock; /* Require
1bcf0 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f  d table locks fo
1bd00 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  r shared-cache m
1bd10 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
1bd20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69  AutoincInfo *pAi
1bd30 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  nc;  /* Informat
1bd40 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e  ion about AUTOIN
1bd50 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73  CREMENT counters
1bd60 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d   */..  /* Inform
1bd70 61 74 69 6f 6e 20 75 73 65 64 20 77 68 69 6c 65  ation used while
1bd80 20 63 6f 64 69 6e 67 20 74 72 69 67 67 65 72 20   coding trigger 
1bd90 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50  programs. */.  P
1bda0 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b  arse *pToplevel;
1bdb0 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72      /* Parse str
1bdc0 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20  ucture for main 
1bdd0 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c  program (or NULL
1bde0 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  ) */.  Table *pT
1bdf0 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54  riggerTab;  /* T
1be00 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 61 72  able triggers ar
1be10 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f  e being coded fo
1be20 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43  r */.  int addrC
1be30 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41  rTab;       /* A
1be40 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65  ddress of OP_Cre
1be50 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20  ateTable opcode 
1be60 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  on CREATE TABLE 
1be70 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 53 6b 69  */.  int addrSki
1be80 70 50 4b 3b 20 20 20 20 20 20 2f 2a 20 41 64 64  pPK;      /* Add
1be90 72 65 73 73 20 6f 66 20 69 6e 73 74 72 75 63 74  ress of instruct
1bea0 69 6f 6e 20 74 6f 20 73 6b 69 70 20 50 52 49 4d  ion to skip PRIM
1beb0 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f  ARY KEY index */
1bec0 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f  .  u32 nQueryLoo
1bed0 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e  p;      /* Est n
1bee0 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69  umber of iterati
1bef0 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20 28  ons of a query (
1bf00 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20  10*log2(N)) */. 
1bf10 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20   u32 oldmask;   
1bf20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
1bf30 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72   old.* columns r
1bf40 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75  eferenced */.  u
1bf50 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20  32 newmask;     
1bf60 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e      /* Mask of n
1bf70 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66  ew.* columns ref
1bf80 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20  erenced */.  u8 
1bf90 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20  eTriggerOp;     
1bfa0 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20    /* TK_UPDATE, 
1bfb0 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f  TK_INSERT or TK_
1bfc0 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65  DELETE */.  u8 e
1bfd0 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  Orconf;         
1bfe0 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43   /* Default ON C
1bff0 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66  ONFLICT policy f
1c000 6f 72 20 74 72 69 67 67 65 72 20 73 74 65 70 73  or trigger steps
1c010 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65   */.  u8 disable
1c020 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72  Triggers;  /* Tr
1c030 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72  ue to disable tr
1c040 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a  iggers */..  /**
1c050 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c060 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c070 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c080 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c090 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76  ******.  ** Abov
1c0a0 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65  e is constant be
1c0b0 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73  tween recursions
1c0c0 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65  .  Below is rese
1c0d0 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74  t before and aft
1c0e0 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63  er.  ** each rec
1c0f0 75 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75  ursion.  The bou
1c100 6e 64 61 72 79 20 62 65 74 77 65 65 6e 20 74 68  ndary between th
1c110 65 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20  ese two regions 
1c120 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20  is determined.  
1c130 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f  ** using offseto
1c140 66 28 50 61 72 73 65 2c 6e 56 61 72 29 20 73 6f  f(Parse,nVar) so
1c150 20 74 68 65 20 6e 56 61 72 20 66 69 65 6c 64 20   the nVar field 
1c160 6d 75 73 74 20 62 65 20 74 68 65 20 66 69 72 73  must be the firs
1c170 74 20 66 69 65 6c 64 0a 20 20 2a 2a 20 69 6e 20  t field.  ** in 
1c180 74 68 65 20 72 65 63 75 72 73 69 76 65 20 72 65  the recursive re
1c190 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  gion..  ********
1c1a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c1b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c1c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c1d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c1e0 2f 0a 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20 20  /..  int nVar;  
1c1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c200 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20  * Number of '?' 
1c210 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69  variables seen i
1c220 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72  n the SQL so far
1c230 20 2a 2f 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b   */.  int nzVar;
1c240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c250 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 76 61  /* Number of ava
1c260 69 6c 61 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20  ilable slots in 
1c270 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20  azVar[] */.  u8 
1c280 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20  iPkSortOrder;   
1c290 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72         /* ASC or
1c2a0 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45   DESC for INTEGE
1c2b0 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f  R PRIMARY KEY */
1c2c0 0a 20 20 75 38 20 62 46 72 65 65 57 69 74 68 3b  .  u8 bFreeWith;
1c2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c2e0 54 72 75 65 20 69 66 20 70 57 69 74 68 20 73 68  True if pWith sh
1c2f0 6f 75 6c 64 20 62 65 20 66 72 65 65 64 20 77 69  ould be freed wi
1c300 74 68 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 75  th parser */.  u
1c310 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20  8 explain;      
1c320 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1c330 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20   if the EXPLAIN 
1c340 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e  flag is found on
1c350 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69   the query */.#i
1c360 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1c370 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
1c380 20 75 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b   u8 declareVtab;
1c390 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1c3a0 75 65 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c  ue if inside sql
1c3b0 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
1c3c0 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74  b() */.  int nVt
1c3d0 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20  abLock;         
1c3e0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1c3f0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74  virtual tables t
1c400 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  o lock */.#endif
1c410 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20  .  int nAlias;  
1c420 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c430 4e 75 6d 62 65 72 20 6f 66 20 61 6c 69 61 73 65  Number of aliase
1c440 64 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c  d result set col
1c450 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  umns */.  int nH
1c460 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
1c470 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
1c480 6e 20 74 72 65 65 20 68 65 69 67 68 74 20 6f 66  n tree height of
1c490 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c   current sub-sel
1c4a0 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ect */.#ifndef S
1c4b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
1c4c0 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74  IN.  int iSelect
1c4d0 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Id;            /
1c4e0 2a 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20  * ID of current 
1c4f0 73 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41  select for EXPLA
1c500 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69  IN output */.  i
1c510 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64  nt iNextSelectId
1c520 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  ;        /* Next
1c530 20 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63   available selec
1c540 74 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e  t ID for EXPLAIN
1c550 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69   output */.#endi
1c560 66 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 72  f.  char **azVar
1c570 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1c580 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d   Pointers to nam
1c590 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73  es of parameters
1c5a0 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70   */.  Vdbe *pRep
1c5b0 72 65 70 61 72 65 3b 20 20 20 20 20 20 20 20 20  repare;         
1c5c0 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72  /* VM being repr
1c5d0 65 70 61 72 65 64 20 28 73 71 6c 69 74 65 33 52  epared (sqlite3R
1c5e0 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20  eprepare()) */. 
1c5f0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
1c600 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  il;        /* Al
1c610 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74 20  l SQL text past 
1c620 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c  the last semicol
1c630 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54  on parsed */.  T
1c640 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b  able *pNewTable;
1c650 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61           /* A ta
1c660 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72  ble being constr
1c670 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20  ucted by CREATE 
1c680 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67  TABLE */.  Trigg
1c690 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b  er *pNewTrigger;
1c6a0 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20       /* Trigger 
1c6b0 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20  under construct 
1c6c0 62 79 20 61 20 43 52 45 41 54 45 20 54 52 49 47  by a CREATE TRIG
1c6d0 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  GER */.  const c
1c6e0 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78  har *zAuthContex
1c6f0 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61  t; /* The 6th pa
1c700 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78  rameter to db->x
1c710 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a  Auth callbacks *
1c720 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54  /.  Token sNameT
1c730 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  oken;         /*
1c740 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75   Token with unqu
1c750 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f  alified schema o
1c760 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20  bject name */.  
1c770 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e  Token sLastToken
1c780 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1c790 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73   last token pars
1c7a0 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ed */.#ifndef SQ
1c7b0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
1c7c0 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73  LTABLE.  Token s
1c7d0 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
1c7e0 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74     /* Complete t
1c7f0 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20  ext of a module 
1c800 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61  argument */.  Ta
1c810 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b  ble **apVtabLock
1c820 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ;       /* Point
1c830 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61  er to virtual ta
1c840 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63  bles needing loc
1c850 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  king */.#endif. 
1c860 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54   Table *pZombieT
1c870 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  ab;        /* Li
1c880 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65  st of Table obje
1c890 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66  cts to delete af
1c8a0 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a  ter code gen */.
1c8b0 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54    TriggerPrg *pT
1c8c0 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c  riggerPrg;  /* L
1c8d0 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f  inked list of co
1c8e0 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ded triggers */.
1c8f0 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20    With *pWith;  
1c900 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
1c910 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75  urrent WITH clau
1c920 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 7d  se, or NULL */.}
1c930 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  ;../*.** Return 
1c940 74 72 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c  true if currentl
1c950 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69  y inside an sqli
1c960 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62  te3_declare_vtab
1c970 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64  () call..*/.#ifd
1c980 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
1c990 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64  IRTUALTABLE.  #d
1c9a0 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45  efine IN_DECLARE
1c9b0 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20  _VTAB 0.#else.  
1c9c0 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41  #define IN_DECLA
1c9d0 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d  RE_VTAB (pParse-
1c9e0 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65  >declareVtab).#e
1c9f0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
1ca00 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
1ca10 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1ca20 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72  re can be declar
1ca30 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e  ed on a stack an
1ca40 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76  d used.** to sav
1ca50 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74  e the Parse.zAut
1ca60 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73  hContext value s
1ca70 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65  o that it can be
1ca80 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e   restored later.
1ca90 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43  .*/.struct AuthC
1caa0 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74  ontext {.  const
1cab0 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74   char *zAuthCont
1cac0 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61  ext;   /* Put sa
1cad0 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43  ved Parse.zAuthC
1cae0 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20  ontext here */. 
1caf0 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
1cb00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1cb10 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74  The Parse struct
1cb20 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ure */.};../*.**
1cb30 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20   Bitfield flags 
1cb40 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20  for P5 value in 
1cb50 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e  various opcodes.
1cb60 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c  .*/.#define OPFL
1cb70 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20  AG_NCHANGE      
1cb80 20 30 78 30 31 20 20 20 20 2f 2a 20 53 65 74 20   0x01    /* Set 
1cb90 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43  to update db->nC
1cba0 68 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65  hange */.#define
1cbb0 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20   OPFLAG_EPHEM   
1cbc0 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
1cbd0 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65   OP_Column: Ephe
1cbe0 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20  meral output is 
1cbf0 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ok */.#define OP
1cc00 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20  FLAG_LASTROWID  
1cc10 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53 65     0x02    /* Se
1cc20 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e  t to update db->
1cc30 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65  lastRowid */.#de
1cc40 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50  fine OPFLAG_ISUP
1cc50 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20  DATE      0x04  
1cc60 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73    /* This OP_Ins
1cc70 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50  ert is an sql UP
1cc80 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
1cc90 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20  OPFLAG_APPEND   
1cca0 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20       0x08    /* 
1ccb0 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74  This is likely t
1ccc0 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a  o be an append *
1ccd0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1cce0 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30  _USESEEKRESULT 0
1ccf0 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f  x10    /* Try to
1cd00 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e   avoid a seek in
1cd10 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a   BtreeInsert() *
1cd20 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1cd30 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20 30  _LENGTHARG     0
1cd40 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x40    /* OP_Col
1cd50 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f  umn only used fo
1cd60 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64  r length() */.#d
1cd70 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50  efine OPFLAG_TYP
1cd80 45 4f 46 41 52 47 20 20 20 20 20 30 78 38 30 20  EOFARG     0x80 
1cd90 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20     /* OP_Column 
1cda0 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79  only used for ty
1cdb0 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e  peof() */.#defin
1cdc0 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52  e OPFLAG_BULKCSR
1cdd0 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
1cde0 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64  * OP_Open** used
1cdf0 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75   to open bulk cu
1ce00 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rsor */.#define 
1ce10 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20  OPFLAG_SEEKEQ   
1ce20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20       0x02    /* 
1ce30 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72  OP_Open** cursor
1ce40 20 75 73 65 73 20 45 51 20 73 65 65 6b 20 6f 6e   uses EQ seek on
1ce50 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ly */.#define OP
1ce60 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20 20  FLAG_P2ISREG    
1ce70 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 50 32     0x04    /* P2
1ce80 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73   to OP_Open** is
1ce90 20 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62   a register numb
1cea0 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  er */.#define OP
1ceb0 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20  FLAG_PERMUTE    
1cec0 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
1ced0 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68  _Compare: use th
1cee0 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f  e permutation */
1cef0 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69  ../*. * Each tri
1cf00 67 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20  gger present in 
1cf10 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
1cf20 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61 73  ema is stored as
1cf30 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a   an instance of.
1cf40 20 2a 20 73 74 72 75 63 74 20 54 72 69 67 67 65   * struct Trigge
1cf50 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65  r. . *. * Pointe
1cf60 72 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20  rs to instances 
1cf70 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
1cf80 72 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  r are stored in 
1cf90 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20  two ways.. * 1. 
1cfa0 49 6e 20 74 68 65 20 22 74 72 69 67 48 61 73 68  In the "trigHash
1cfb0 22 20 68 61 73 68 20 74 61 62 6c 65 20 28 70 61  " hash table (pa
1cfc0 72 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  rt of the sqlite
1cfd0 33 2a 20 74 68 61 74 20 72 65 70 72 65 73 65 6e  3* that represen
1cfe0 74 73 20 74 68 65 20 0a 20 2a 20 20 20 20 64 61  ts the . *    da
1cff0 74 61 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c  tabase). This al
1d000 6c 6f 77 73 20 54 72 69 67 67 65 72 20 73 74 72  lows Trigger str
1d010 75 63 74 75 72 65 73 20 74 6f 20 62 65 20 72 65  uctures to be re
1d020 74 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e  trieved by name.
1d030 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67  . * 2. All trigg
1d040 65 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ers associated w
1d050 69 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62  ith a single tab
1d060 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64  le form a linked
1d070 20 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65   list, using the
1d080 0a 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d  . *    pNext mem
1d090 62 65 72 20 6f 66 20 73 74 72 75 63 74 20 54 72  ber of struct Tr
1d0a0 69 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72  igger. A pointer
1d0b0 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c   to the first el
1d0c0 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20  ement of the. * 
1d0d0 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69     linked list i
1d0e0 73 20 73 74 6f 72 65 64 20 61 73 20 74 68 65 20  s stored as the 
1d0f0 22 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65  "pTrigger" membe
1d100 72 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61  r of the associa
1d110 74 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74  ted. *    struct
1d120 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68   Table.. *. * Th
1d130 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65  e "step_list" me
1d140 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74  mber points to t
1d150 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
1d160 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   of a linked lis
1d170 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20  t. * containing 
1d180 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
1d190 74 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  ts specified as 
1d1a0 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
1d1b0 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20  ram.. */.struct 
1d1c0 54 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72  Trigger {.  char
1d1d0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
1d1e0 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20      /* The name 
1d1f0 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 20 20  of the trigger  
1d200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d210 20 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20        */.  char 
1d220 2a 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  *table;         
1d230 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20     /* The table 
1d240 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68  or view to which
1d250 20 74 68 65 20 74 72 69 67 67 65 72 20 61 70 70   the trigger app
1d260 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b  lies */.  u8 op;
1d270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d280 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44    /* One of TK_D
1d290 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45  ELETE, TK_UPDATE
1d2a0 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20  , TK_INSERT     
1d2b0 20 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74      */.  u8 tr_t
1d2c0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
1d2d0 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47   /* One of TRIGG
1d2e0 45 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47  ER_BEFORE, TRIGG
1d2f0 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78  ER_AFTER */.  Ex
1d300 70 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20  pr *pWhen;      
1d310 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
1d320 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  N clause of the 
1d330 65 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20  expression (may 
1d340 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64  be NULL) */.  Id
1d350 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20  List *pColumns; 
1d360 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73        /* If this
1d370 20 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46   is an UPDATE OF
1d380 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74   <column-list> t
1d390 72 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20  rigger,.        
1d3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3b0 20 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e       the <column
1d3c0 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64  -list> is stored
1d3d0 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d   here */.  Schem
1d3e0 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
1d3f0 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
1d400 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67  taining the trig
1d410 67 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ger */.  Schema 
1d420 2a 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20  *pTabSchema;    
1d430 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
1d440 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20  ining the table 
1d450 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  */.  TriggerStep
1d460 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20   *step_list; /* 
1d470 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69  Link list of tri
1d480 67 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65  gger program ste
1d490 70 73 20 20 20 20 20 20 20 20 20 20 20 20 20 2a  ps             *
1d4a0 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65  /.  Trigger *pNe
1d4b0 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  xt;         /* N
1d4c0 65 78 74 20 74 72 69 67 67 65 72 20 61 73 73 6f  ext trigger asso
1d4d0 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
1d4e0 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  table */.};../*.
1d4f0 2a 2a 20 41 20 74 72 69 67 67 65 72 20 69 73 20  ** A trigger is 
1d500 65 69 74 68 65 72 20 61 20 42 45 46 4f 52 45 20  either a BEFORE 
1d510 6f 72 20 61 6e 20 41 46 54 45 52 20 74 72 69 67  or an AFTER trig
1d520 67 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ger.  The follow
1d530 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a  ing constants.**
1d540 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68   determine which
1d550 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72  . .**.** If ther
1d560 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74  e are multiple t
1d570 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67  riggers, you mig
1d580 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52  ht of some BEFOR
1d590 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52  E and some AFTER
1d5a0 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73  ..** In that cas
1d5b0 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74  es, the constant
1d5c0 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f  s below can be O
1d5d0 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f  Red together..*/
1d5e0 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52  .#define TRIGGER
1d5f0 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69  _BEFORE  1.#defi
1d600 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54 45 52  ne TRIGGER_AFTER
1d610 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69     2../*. * An i
1d620 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63  nstance of struc
1d630 74 20 54 72 69 67 67 65 72 53 74 65 70 20 69 73  t TriggerStep is
1d640 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61   used to store a
1d650 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74   single SQL stat
1d660 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73  ement. * that is
1d670 20 61 20 70 61 72 74 20 6f 66 20 61 20 74 72 69   a part of a tri
1d680 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 20 0a 20  gger-program. . 
1d690 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f  *. * Instances o
1d6a0 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1d6b0 53 74 65 70 20 61 72 65 20 73 74 6f 72 65 64 20  Step are stored 
1d6c0 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b  in a singly link
1d6d0 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a  ed list (linked.
1d6e0 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e   * using the "pN
1d6f0 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66  ext" member) ref
1d700 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20 22  erenced by the "
1d710 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65  step_list" membe
1d720 72 20 6f 66 20 74 68 65 20 0a 20 2a 20 61 73 73  r of the . * ass
1d730 6f 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54  ociated struct T
1d740 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e  rigger instance.
1d750 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   The first eleme
1d760 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64  nt of the linked
1d770 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20   list is. * the 
1d780 66 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68  first step of th
1d790 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  e trigger-progra
1d7a0 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68 65 20 22 6f  m.. * . * The "o
1d7b0 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61  p" member indica
1d7c0 74 65 73 20 77 68 65 74 68 65 72 20 74 68 69 73  tes whether this
1d7d0 20 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20   is a "DELETE", 
1d7e0 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54  "INSERT", "UPDAT
1d7f0 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54  E" or. * "SELECT
1d800 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65  " statement. The
1d810 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65   meanings of the
1d820 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69   other members i
1d830 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
1d840 74 68 65 20 0a 20 2a 20 76 61 6c 75 65 20 6f 66  the . * value of
1d850 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73   "op" as follows
1d860 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  :. *. * (op == T
1d870 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63  K_INSERT). * orc
1d880 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73  onf    -> stores
1d890 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   the ON CONFLICT
1d8a0 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53   algorithm. * pS
1d8b0 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68  elect   -> If th
1d8c0 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
1d8d0 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20  INTO ... SELECT 
1d8e0 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
1d8f0 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
1d900 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
1d910 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
1d920 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1d930 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c  t. Otherwise NUL
1d940 4c 2e 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20  L.. * target    
1d950 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69  -> A token holdi
1d960 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61  ng the quoted na
1d970 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
1d980 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a  to insert into..
1d990 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20   * pExprList -> 
1d9a0 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
1d9b0 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41  SERT INTO ... VA
1d9c0 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65  LUES ... stateme
1d9d0 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20  nt, then. *     
1d9e0 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74           this st
1d9f0 6f 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62  ores values to b
1da00 65 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65  e inserted. Othe
1da10 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70  rwise NULL.. * p
1da20 49 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74  IdList   -> If t
1da30 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
1da40 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75   INTO ... (<colu
1da50 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45  mn-names>) VALUE
1da60 53 20 2e 2e 2e 20 0a 20 2a 20 20 20 20 20 20 20  S ... . *       
1da70 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
1da80 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72  , then this stor
1da90 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61  es the column-na
1daa0 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20  mes to be. *    
1dab0 20 20 20 20 20 20 20 20 20 20 69 6e 73 65 72 74            insert
1dac0 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28  ed into.. *. * (
1dad0 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29  op == TK_DELETE)
1dae0 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e  . * target    ->
1daf0 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67   A token holding
1db00 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65   the quoted name
1db10 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
1db20 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a   delete from.. *
1db30 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68   pWhere    -> Th
1db40 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f  e WHERE clause o
1db50 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61  f the DELETE sta
1db60 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73  tement if one is
1db70 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20   specified.. *  
1db80 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65              Othe
1db90 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a  rwise NULL.. * .
1dba0 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44   * (op == TK_UPD
1dbb0 41 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20  ATE). * target  
1dbc0 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c    -> A token hol
1dbd0 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20  ding the quoted 
1dbe0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
1dbf0 65 20 74 6f 20 75 70 64 61 74 65 20 72 6f 77 73  e to update rows
1dc00 20 6f 66 2e 0a 20 2a 20 70 57 68 65 72 65 20 20   of.. * pWhere  
1dc10 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63    -> The WHERE c
1dc20 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55 50 44  lause of the UPD
1dc30 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66  ATE statement if
1dc40 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65   one is specifie
1dc50 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  d.. *           
1dc60 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c     Otherwise NUL
1dc70 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20  L.. * pExprList 
1dc80 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65  -> A list of the
1dc90 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61   columns to upda
1dca0 74 65 20 61 6e 64 20 74 68 65 20 65 78 70 72 65  te and the expre
1dcb0 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65  ssions to update
1dcc0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1dcd0 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71   them to. See sq
1dce0 6c 69 74 65 33 55 70 64 61 74 65 28 29 20 64 6f  lite3Update() do
1dcf0 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22  cumentation of "
1dd00 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20  pChanges". *    
1dd10 20 20 20 20 20 20 20 20 20 20 61 72 67 75 6d 65            argume
1dd20 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72 75  nt.. * . */.stru
1dd30 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 7b  ct TriggerStep {
1dd40 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
1dd50 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
1dd60 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f  f TK_DELETE, TK_
1dd70 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52  UPDATE, TK_INSER
1dd80 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a  T, TK_SELECT */.
1dd90 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20    u8 orconf;    
1dda0 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c         /* OE_Rol
1ddb0 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20  lback etc. */.  
1ddc0 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20  Trigger *pTrig; 
1ddd0 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67       /* The trig
1dde0 67 65 72 20 74 68 61 74 20 74 68 69 73 20 73 74  ger that this st
1ddf0 65 70 20 69 73 20 61 20 70 61 72 74 20 6f 66 20  ep is a part of 
1de00 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65  */.  Select *pSe
1de10 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c  lect;     /* SEL
1de20 45 43 54 20 73 74 61 74 6d 65 6e 74 20 6f 72 20  ECT statment or 
1de30 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e  RHS of INSERT IN
1de40 54 4f 20 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e  TO .. SELECT ...
1de50 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 74 61 72 67   */.  Token targ
1de60 65 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61  et;        /* Ta
1de70 72 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44  rget table for D
1de80 45 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49  ELETE, UPDATE, I
1de90 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20  NSERT */.  Expr 
1dea0 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20  *pWhere;        
1deb0 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  /* The WHERE cla
1dec0 75 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f  use for DELETE o
1ded0 72 20 55 50 44 41 54 45 20 73 74 65 70 73 20 2a  r UPDATE steps *
1dee0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  /.  ExprList *pE
1def0 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20  xprList; /* SET 
1df00 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41 54  clause for UPDAT
1df10 45 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a  E. */.  IdList *
1df20 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20  pIdList;     /* 
1df30 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72  Column names for
1df40 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69   INSERT */.  Tri
1df50 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b  ggerStep *pNext;
1df60 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65    /* Next in the
1df70 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20   link-list */.  
1df80 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61  TriggerStep *pLa
1df90 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65  st;  /* Last ele
1dfa0 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73  ment in link-lis
1dfb0 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74  t. Valid for 1st
1dfc0 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b   elem only */.};
1dfd0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
1dfe0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1dff0 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61  contains informa
1e000 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65  tion used by the
1e010 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a   sqliteFix....**
1e020 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65   routines as the
1e030 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65  y walk the parse
1e040 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61   tree to make da
1e050 74 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65  tabase reference
1e060 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20 20  s.** explicit.  
1e070 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
1e080 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78  ct DbFixer DbFix
1e090 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78  er;.struct DbFix
1e0a0 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  er {.  Parse *pP
1e0b0 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68  arse;      /* Th
1e0c0 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78  e parsing contex
1e0d0 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67  t.  Error messag
1e0e0 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20  es written here 
1e0f0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
1e100 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20  hema;    /* Fix 
1e110 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63  items to this sc
1e120 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56  hema */.  int bV
1e130 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a  arOnly;       /*
1e140 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61   Check for varia
1e150 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f  ble references o
1e160 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  nly */.  const c
1e170 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20  har *zDb;    /* 
1e180 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62  Make sure all ob
1e190 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69  jects are contai
1e1a0 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61  ned in this data
1e1b0 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  base */.  const 
1e1c0 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a  char *zType;  /*
1e1d0 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e   Type of the con
1e1e0 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
1e1f0 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
1e200 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65   */.  const Toke
1e210 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d  n *pName; /* Nam
1e220 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
1e230 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
1e240 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
1e250 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a  };../*.** An obj
1e260 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63  ected used to ac
1e270 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78  cumulate the tex
1e280 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68  t of a string wh
1e290 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74  ere we.** do not
1e2a0 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f   necessarily kno
1e2b0 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74  w how big the st
1e2c0 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20  ring will be in 
1e2d0 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
1e2e0 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20  ct StrAccum {.  
1e2f0 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
1e300 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c       /* Optional
1e310 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f   database for lo
1e320 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65  okaside.  Can be
1e330 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20   NULL */.  char 
1e340 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20 20  *zBase;         
1e350 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61  /* A base alloca
1e360 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20  tion.  Not from 
1e370 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61  malloc. */.  cha
1e380 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20  r *zText;       
1e390 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20    /* The string 
1e3a0 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72  collected so far
1e3b0 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61 72   */.  int  nChar
1e3c0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65  ;          /* Le
1e3d0 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69  ngth of the stri
1e3e0 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ng so far */.  i
1e3f0 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20  nt  nAlloc;     
1e400 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66      /* Amount of
1e410 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64   space allocated
1e420 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69   in zText */.  i
1e430 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20  nt  mxAlloc;    
1e440 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61      /* Maximum a
1e450 6c 6c 6f 77 65 64 20 73 74 72 69 6e 67 20 6c 65  llowed string le
1e460 6e 67 74 68 20 2a 2f 0a 20 20 75 38 20 20 20 75  ngth */.  u8   u
1e470 73 65 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 2f  seMalloc;      /
1e480 2a 20 30 3a 20 6e 6f 6e 65 2c 20 20 31 3a 20 73  * 0: none,  1: s
1e490 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 2c 20  qlite3DbMalloc, 
1e4a0 20 32 3a 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c   2: sqlite3_mall
1e4b0 6f 63 20 2a 2f 0a 20 20 75 38 20 20 20 61 63 63  oc */.  u8   acc
1e4c0 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20  Error;       /* 
1e4d0 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f  STRACCUM_NOMEM o
1e4e0 72 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49  r STRACCUM_TOOBI
1e4f0 47 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20  G */.};.#define 
1e500 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20  STRACCUM_NOMEM  
1e510 20 31 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43   1.#define STRAC
1e520 43 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a 0a 2f  CUM_TOOBIG  2../
1e530 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74  *.** A pointer t
1e540 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
1e550 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d   is used to comm
1e560 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74  unicate informat
1e570 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69  ion.** from sqli
1e580 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50  te3Init and OP_P
1e590 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20  arseSchema into 
1e5a0 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43  the sqlite3InitC
1e5b0 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65  allback..*/.type
1e5c0 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73  def struct {.  s
1e5d0 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
1e5e0 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
1e5f0 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  se being initial
1e600 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ized */.  char *
1e610 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a  *pzErrMsg;    /*
1e620 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73   Error message s
1e630 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20  tored here */.  
1e640 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
1e650 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69      /* 0 for mai
1e660 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31 20 66  n database.  1 f
1e670 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72  or TEMP, 2.. for
1e680 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69   ATTACHed */.  i
1e690 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
1e6a0 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64     /* Result cod
1e6b0 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  e stored here */
1e6c0 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a  .} InitData;../*
1e6d0 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f  .** Structure co
1e6e0 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20  ntaining global 
1e6f0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61  configuration da
1e700 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74  ta for the SQLit
1e710 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a  e library..**.**
1e720 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
1e730 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f  also contains so
1e740 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61  me state informa
1e750 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
1e760 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a  Sqlite3Config {.
1e770 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20    int bMemstat; 
1e780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e790 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
1e7a0 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61  nable memory sta
1e7b0 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f  tus */.  int bCo
1e7c0 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  reMutex;        
1e7d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1e7e0 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72  ue to enable cor
1e7f0 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20  e mutexing */.  
1e800 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20  int bFullMutex; 
1e810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e820 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
1e830 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e  ble full mutexin
1e840 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e  g */.  int bOpen
1e850 55 72 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  Uri;            
1e860 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1e870 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69   to interpret fi
1e880 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20  lenames as URIs 
1e890 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73  */.  int bUseCis
1e8a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1e8b0 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f         /* Use co
1e8c0 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66  vering indices f
1e8d0 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f  or full-scans */
1e8e0 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b  .  int mxStrlen;
1e8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e900 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
1e910 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f  string length */
1e920 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72  .  int neverCorr
1e930 75 70 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  upt;            
1e940 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65       /* Database
1e950 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d   is always well-
1e960 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20  formed */.  int 
1e970 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20  szLookaside;    
1e980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e990 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69   Default lookasi
1e9a0 64 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a  de buffer size *
1e9b0 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69  /.  int nLookasi
1e9c0 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
1e9d0 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
1e9e0 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65   lookaside buffe
1e9f0 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 73 71 6c  r count */.  sql
1ea00 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
1ea10 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f   m;            /
1ea20 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f  * Low-level memo
1ea30 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e  ry allocation in
1ea40 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c  terface */.  sql
1ea50 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
1ea60 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f  ds mutex;      /
1ea70 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65  * Low-level mute
1ea80 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  x interface */. 
1ea90 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f   sqlite3_pcache_
1eaa0 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68 65 32  methods2 pcache2
1eab0 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20  ;  /* Low-level 
1eac0 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72  page-cache inter
1ead0 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  face */.  void *
1eae0 70 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20  pHeap;          
1eaf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
1eb00 65 61 70 20 73 74 6f 72 61 67 65 20 73 70 61 63  eap storage spac
1eb10 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70  e */.  int nHeap
1eb20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1eb30 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
1eb40 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20   of pHeap[] */. 
1eb50 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65   int mnReq, mxRe
1eb60 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  q;              
1eb70 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61     /* Min and ma
1eb80 78 20 68 65 61 70 20 72 65 71 75 65 73 74 73 20  x heap requests 
1eb90 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74  sizes */.  sqlit
1eba0 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b  e3_int64 szMmap;
1ebb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ebc0 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70 65 72  mmap() space per
1ebd0 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20   open file */.  
1ebe0 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78  sqlite3_int64 mx
1ebf0 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
1ec00 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c    /* Maximum val
1ec10 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f  ue for szMmap */
1ec20 0a 20 20 76 6f 69 64 20 2a 70 53 63 72 61 74 63  .  void *pScratc
1ec30 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
1ec40 20 20 20 20 20 2f 2a 20 53 63 72 61 74 63 68 20       /* Scratch 
1ec50 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20  memory */.  int 
1ec60 73 7a 53 63 72 61 74 63 68 3b 20 20 20 20 20 20  szScratch;      
1ec70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ec80 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 73 63   Size of each sc
1ec90 72 61 74 63 68 20 62 75 66 66 65 72 20 2a 2f 0a  ratch buffer */.
1eca0 20 20 69 6e 74 20 6e 53 63 72 61 74 63 68 3b 20    int nScratch; 
1ecb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecc0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1ecd0 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72 73   scratch buffers
1ece0 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67   */.  void *pPag
1ecf0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1ed00 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20          /* Page 
1ed10 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a  cache memory */.
1ed20 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20    int szPage;   
1ed30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed40 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65      /* Size of e
1ed50 61 63 68 20 70 61 67 65 20 69 6e 20 70 50 61 67  ach page in pPag
1ed60 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61  e[] */.  int nPa
1ed70 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
1ed80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1ed90 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
1eda0 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e   pPage[] */.  in
1edb0 74 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b  t mxParserStack;
1edc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edd0 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68  /* maximum depth
1ede0 20 6f 66 20 74 68 65 20 70 61 72 73 65 72 20 73   of the parser s
1edf0 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68  tack */.  int sh
1ee00 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64  aredCacheEnabled
1ee10 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74  ;           /* t
1ee20 72 75 65 20 69 66 20 73 68 61 72 65 64 2d 63 61  rue if shared-ca
1ee30 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64  che mode enabled
1ee40 20 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b   */.  u32 szPma;
1ee50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee60 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
1ee70 75 6d 20 53 6f 72 74 65 72 20 50 4d 41 20 73 69  um Sorter PMA si
1ee80 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61  ze */.  /* The a
1ee90 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e  bove might be in
1eea0 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e  itialized to non
1eeb0 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c  -zero.  The foll
1eec0 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c  owing need to al
1eed0 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61  ways.  ** initia
1eee0 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77  lly be zero, how
1eef0 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69  ever. */.  int i
1ef00 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  sInit;          
1ef10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ef20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69 74 69  True after initi
1ef30 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69  alization has fi
1ef40 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20  nished */.  int 
1ef50 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20  inProgress;     
1ef60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ef70 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74   True while init
1ef80 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72  ialization in pr
1ef90 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20  ogress */.  int 
1efa0 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20  isMutexInit;    
1efb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1efc0 20 54 72 75 65 20 61 66 74 65 72 20 6d 75 74 65   True after mute
1efd0 78 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69  xes are initiali
1efe0 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d  zed */.  int isM
1eff0 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20  allocInit;      
1f000 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1f010 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20  ue after malloc 
1f020 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  is initialized *
1f030 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68 65  /.  int isPCache
1f040 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
1f050 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
1f060 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e  ter malloc is in
1f070 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
1f080 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78  nt nRefInitMutex
1f090 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f0a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
1f0b0 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65  ers of pInitMute
1f0c0 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  x */.  sqlite3_m
1f0d0 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78  utex *pInitMutex
1f0e0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65  ;        /* Mute
1f0f0 78 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65  x used by sqlite
1f100 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a  3_initialize() *
1f110 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29  /.  void (*xLog)
1f120 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
1f130 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63   char*); /* Func
1f140 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67  tion for logging
1f150 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67   */.  void *pLog
1f160 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
1f170 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
1f180 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
1f190 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66  xLog() */.#ifdef
1f1a0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
1f1b0 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53  QLLOG.  void(*xS
1f1c0 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c  qllog)(void*,sql
1f1d0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
1f1e0 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
1f1f0 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e  *pSqllogArg;.#en
1f200 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
1f210 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a  E_VDBE_COVERAGE.
1f220 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
1f230 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20  ng callback (if 
1f240 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76  not NULL) is inv
1f250 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44  oked on every VD
1f260 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f  BE branch.  ** o
1f270 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74  peration.  Set t
1f280 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e  he callback usin
1f290 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  g SQLITE_TESTCTR
1f2a0 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e  L_VDBE_COVERAGE.
1f2b0 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  .  */.  void (*x
1f2c0 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64  VdbeBranch)(void
1f2d0 2a 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75  *,int iSrcLine,u
1f2e0 38 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b  8 eThis,u8 eMx);
1f2f0 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f    /* Callback */
1f300 0a 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72  .  void *pVdbeBr
1f310 61 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20 20  anchArg;        
1f320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f330 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f340 31 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  1st argument */.
1f350 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
1f360 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
1f370 49 4e 5f 54 45 53 54 0a 20 20 69 6e 74 20 28 2a  IN_TEST.  int (*
1f380 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29 28 69  xTestCallback)(i
1f390 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 49  nt);        /* I
1f3a0 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69 74 65  nvoked by sqlite
1f3b0 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23  3FaultSim() */.#
1f3c0 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63  endif.  int bLoc
1f3d0 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20  altimeFault;    
1f3e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1f3f0 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74  e to fail localt
1f400 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 7d  ime() calls */.}
1f410 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61  ;../*.** This ma
1f420 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69  cro is used insi
1f430 64 65 20 6f 66 20 61 73 73 65 72 74 28 29 20 73  de of assert() s
1f440 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64  tatements to ind
1f450 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68  icate that.** th
1f460 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79  e assert is only
1f470 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c   valid on a well
1f480 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65  -formed database
1f490 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a  .  Instead of:.*
1f4a0 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28  *.**     assert(
1f4b0 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20   X );.**.** One 
1f4c0 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  writes:.**.**   
1f4d0 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43    assert( X || C
1f4e0 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a  ORRUPT_DB );.**.
1f4f0 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73  ** CORRUPT_DB is
1f500 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72   true during nor
1f510 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  mal operation.  
1f520 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20  CORRUPT_DB does 
1f530 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20  not indicate.** 
1f540 74 68 61 74 20 74 68 65 20 64 61 74 61 62 61 73  that the databas
1f550 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20  e is definitely 
1f560 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68  corrupt, only th
1f570 61 74 20 69 74 20 6d 69 67 68 74 20 62 65 20 63  at it might be c
1f580 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d  orrupt..** For m
1f590 6f 73 74 20 74 65 73 74 20 63 61 73 65 73 2c 20  ost test cases, 
1f5a0 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73 65  CORRUPT_DB is se
1f5b0 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67  t to false using
1f5c0 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71   a special.** sq
1f5d0 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
1f5e0 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62  ol().  This enab
1f5f0 6c 65 73 20 61 73 73 65 72 74 28 29 20 73 74 61  les assert() sta
1f600 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65  tements to prove
1f610 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20  .** things that 
1f620 61 72 65 20 61 6c 77 61 79 73 20 74 72 75 65 20  are always true 
1f630 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  for well-formed 
1f640 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64  databases..*/.#d
1f650 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42  efine CORRUPT_DB
1f660 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67    (sqlite3Config
1f670 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30  .neverCorrupt==0
1f680 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74  )../*.** Context
1f690 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20   pointer passed 
1f6a0 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65  down through the
1f6b0 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73   tree-walk..*/.s
1f6c0 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20  truct Walker {. 
1f6d0 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c   int (*xExprCall
1f6e0 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45  back)(Walker*, E
1f6f0 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61  xpr*);     /* Ca
1f700 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65  llback for expre
1f710 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  ssions */.  int 
1f720 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63  (*xSelectCallbac
1f730 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63  k)(Walker*,Selec
1f740 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63  t*);  /* Callbac
1f750 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f  k for SELECTs */
1f760 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c 65 63  .  void (*xSelec
1f770 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b  tCallback2)(Walk
1f780 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20  er*,Select*);/* 
1f790 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20  Second callback 
1f7a0 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20  for SELECTs */. 
1f7b0 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
1f7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
1f7e0 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a  rser context.  *
1f7f0 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65  /.  int walkerDe
1f800 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  pth;            
1f810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f820 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75   Number of subqu
1f830 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43  eries */.  u8 eC
1f840 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
1f850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f860 20 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20       /* A small 
1f870 70 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20  processing code 
1f880 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20  */.  union {    
1f890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f8b0 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72  * Extra data for
1f8c0 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20   callback */.   
1f8d0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e   NameContext *pN
1f8e0 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  C;              
1f8f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1f900 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f  aming context */
1f910 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20  .    int n;     
1f920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f940 2f 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  /* A counter */.
1f950 20 20 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20      int iCur;   
1f960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f980 2a 20 41 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  * A cursor numbe
1f990 72 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74  r */.    SrcList
1f9a0 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20   *pSrcList;     
1f9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9c0 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75      /* FROM clau
1f9d0 73 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  se */.    struct
1f9e0 20 53 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43   SrcCount *pSrcC
1f9f0 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  ount;           
1fa00 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67       /* Counting
1fa10 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63   column referenc
1fa20 65 73 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a  es */.  } u;.};.
1fa30 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c  ./* Forward decl
1fa40 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20  arations */.int 
1fa50 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28  sqlite3WalkExpr(
1fa60 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
1fa70 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
1fa80 45 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a  ExprList(Walker*
1fa90 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
1faa0 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
1fab0 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  ect(Walker*, Sel
1fac0 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
1fad0 65 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72  e3WalkSelectExpr
1fae0 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
1faf0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
1fb00 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61  alkSelectFrom(Wa
1fb10 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
1fb20 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63  ../*.** Return c
1fb30 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72  ode from the par
1fb40 73 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20  se-tree walking 
1fb50 70 72 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74  primitives and t
1fb60 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  heir.** callback
1fb70 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  s..*/.#define WR
1fb80 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20  C_Continue    0 
1fb90 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f    /* Continue do
1fba0 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e  wn into children
1fbb0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f   */.#define WRC_
1fbc0 50 72 75 6e 65 20 20 20 20 20 20 20 31 20 20 20  Prune       1   
1fbd0 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e  /* Omit children
1fbe0 20 62 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61   but continue wa
1fbf0 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a  lking siblings *
1fc00 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62  /.#define WRC_Ab
1fc10 6f 72 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a  ort       2   /*
1fc20 20 41 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65   Abandon the tre
1fc30 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  e walk */../*.**
1fc40 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1fc50 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 72  this structure r
1fc60 65 70 72 65 73 65 6e 74 73 20 61 20 73 65 74 20  epresents a set 
1fc70 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43  of one or more C
1fc80 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74  TEs.** (common t
1fc90 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
1fca0 29 20 63 72 65 61 74 65 64 20 62 79 20 61 20 73  ) created by a s
1fcb0 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73  ingle WITH claus
1fcc0 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 74  e..*/.struct Wit
1fcd0 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20  h {.  int nCte; 
1fce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fcf0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1fd00 6f 66 20 43 54 45 73 20 69 6e 20 74 68 65 20 57  of CTEs in the W
1fd10 49 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ITH clause */.  
1fd20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b 20 20 20  With *pOuter;   
1fd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd40 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49  /* Containing WI
1fd50 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55  TH clause, or NU
1fd60 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 43  LL */.  struct C
1fd70 74 65 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  te {            
1fd80 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 65          /* For e
1fd90 61 63 68 20 43 54 45 20 69 6e 20 74 68 65 20 57  ach CTE in the W
1fda0 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a  ITH clause.... *
1fdb0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
1fdc0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1fdd0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
1fde0 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20   this CTE */.   
1fdf0 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73   ExprList *pCols
1fe00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1fe10 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78 70 6c   /* List of expl
1fe20 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  icit column name
1fe30 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  s, or NULL */.  
1fe40 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
1fe50 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1fe60 20 20 2f 2a 20 54 68 65 20 64 65 66 69 6e 69 74    /* The definit
1fe70 69 6f 6e 20 6f 66 20 74 68 69 73 20 43 54 45 20  ion of this CTE 
1fe80 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  */.    const cha
1fe90 72 20 2a 7a 45 72 72 3b 20 20 20 20 20 20 20 20  r *zErr;        
1fea0 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20         /* Error 
1feb0 6d 65 73 73 61 67 65 20 66 6f 72 20 63 69 72 63  message for circ
1fec0 75 6c 61 72 20 72 65 66 65 72 65 6e 63 65 73 20  ular references 
1fed0 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a  */.  } a[1];.};.
1fee0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
1fef0 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  EBUG./*.** An in
1ff00 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 54 72  stance of the Tr
1ff10 65 65 56 69 65 77 20 6f 62 6a 65 63 74 20 69 73  eeView object is
1ff20 20 75 73 65 64 20 66 6f 72 20 70 72 69 6e 74 69   used for printi
1ff30 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ng the content o
1ff40 66 0a 2a 2a 20 64 61 74 61 20 73 74 72 75 63 74  f.** data struct
1ff50 75 72 65 73 20 6f 6e 20 73 71 6c 69 74 65 33 44  ures on sqlite3D
1ff60 65 62 75 67 50 72 69 6e 74 66 28 29 20 75 73 69  ebugPrintf() usi
1ff70 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b 65 20 76  ng a tree-like v
1ff80 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  iew..*/.struct T
1ff90 72 65 65 56 69 65 77 20 7b 0a 20 20 69 6e 74 20  reeView {.  int 
1ffa0 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20  iLevel;         
1ffb0 20 20 20 20 2f 2a 20 57 68 69 63 68 20 6c 65 76      /* Which lev
1ffc0 65 6c 20 6f 66 20 74 68 65 20 74 72 65 65 20 77  el of the tree w
1ffd0 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 75 38  e are on */.  u8
1ffe0 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b 20 20 20    bLine[100];   
1fff0 20 20 20 20 20 20 2f 2a 20 44 72 61 77 20 76 65        /* Draw ve
20000 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e  rtical in column
20010 20 69 20 69 66 20 62 4c 69 6e 65 5b 69 5d 20 69   i if bLine[i] i
20020 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e  s true */.};.#en
20030 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45  dif /* SQLITE_DE
20040 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73  BUG */../*.** As
20050 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74  suming zIn point
20060 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  s to the first b
20070 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63  yte of a UTF-8 c
20080 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76  haracter,.** adv
20090 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e  ance zIn to poin
200a0 74 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  t to the first b
200b0 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20  yte of the next 
200c0 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e  UTF-8 character.
200d0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
200e0 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e  TE_SKIP_UTF8(zIn
200f0 29 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  ) {             
20100 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69             \.  i
20110 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30  f( (*(zIn++))>=0
20120 78 63 30 20 29 7b 20 20 20 20 20 20 20 20 20 20  xc0 ){          
20130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20140 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28      \.    while(
20150 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d   (*zIn & 0xc0)==
20160 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d  0x80 ){ zIn++; }
20170 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
20180 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20   }              
20190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201b0 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a        \.}../*.**
201c0 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b   The SQLITE_*_BK
201d0 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75  PT macros are su
201e0 62 73 74 69 74 75 74 65 73 20 66 6f 72 20 74 68  bstitutes for th
201f0 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69  e error codes wi
20200 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e  th.** the same n
20210 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74 20  ame but without 
20220 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78  the _BKPT suffix
20230 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  .  These macros 
20240 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e  invoke.** routin
20250 65 73 20 74 68 61 74 20 72 65 70 6f 72 74 20 74  es that report t
20260 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f  he line-number o
20270 6e 20 77 68 69 63 68 20 74 68 65 20 65 72 72 6f  n which the erro
20280 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20  r originated.** 
20290 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f  using sqlite3_lo
202a0 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e  g().  The routin
202b0 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20  es also provide 
202c0 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61  a convenient pla
202d0 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64  ce.** to set a d
202e0 65 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69  ebugger breakpoi
202f0 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nt..*/.int sqlit
20300 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69  e3CorruptError(i
20310 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
20320 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29  MisuseError(int)
20330 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e  ;.int sqlite3Can
20340 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b  topenError(int);
20350 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
20360 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c  CORRUPT_BKPT sql
20370 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72  ite3CorruptError
20380 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69  (__LINE__).#defi
20390 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  ne SQLITE_MISUSE
203a0 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73  _BKPT sqlite3Mis
203b0 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  useError(__LINE_
203c0 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  _).#define SQLIT
203d0 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20  E_CANTOPEN_BKPT 
203e0 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45  sqlite3CantopenE
203f0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a  rror(__LINE__)..
20400 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72  ./*.** FTS4 is r
20410 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69  eally an extensi
20420 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74  on for FTS3.  It
20430 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e   is enabled usin
20440 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f  g the.** SQLITE_
20450 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72  ENABLE_FTS3 macr
20460 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64  o.  But to avoid
20470 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c   confusion we al
20480 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53  so call.** the S
20490 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
204a0 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65  4 macro to serve
204b0 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72   as an alias for
204c0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
204d0 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  TS3..*/.#if defi
204e0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
204f0 45 5f 46 54 53 34 29 20 26 26 20 21 64 65 66 69  E_FTS4) && !defi
20500 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
20510 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65  E_FTS3).# define
20520 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
20530 54 53 33 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  TS3 1.#endif../*
20540 0a 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20  .** The ctype.h 
20550 68 65 61 64 65 72 20 69 73 20 6e 65 65 64 65 64  header is needed
20560 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73   for non-ASCII s
20570 79 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61  ystems.  It is a
20580 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79  lso.** needed by
20590 20 46 54 53 33 20 77 68 65 6e 20 46 54 53 33 20   FTS3 when FTS3 
205a0 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74  is included in t
205b0 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e  he amalgamation.
205c0 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
205d0 28 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c  (SQLITE_ASCII) |
205e0 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
205f0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  (SQLITE_ENABLE_F
20600 54 53 33 29 20 26 26 20 64 65 66 69 6e 65 64 28  TS3) && defined(
20610 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
20620 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20  ION)).# include 
20630 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66  <ctype.h>.#endif
20640 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
20650 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d  owing macros mim
20660 69 63 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  ic the standard 
20670 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e  library function
20680 73 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20  s toupper(),.** 
20690 69 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e  isspace(), isaln
206a0 75 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29 20  um(), isdigit() 
206b0 61 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c 20  and isxdigit(), 
206c0 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68  respectively. Th
206d0 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73  e.** sqlite vers
206e0 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66  ions only work f
206f0 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74  or ASCII charact
20700 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20  ers, regardless 
20710 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69  of locale..*/.#i
20720 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49  fdef SQLITE_ASCI
20730 49 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  I.# define sqlit
20740 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 28 28  e3Toupper(x)  ((
20750 78 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70  x)&~(sqlite3Ctyp
20760 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
20770 68 61 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a  har)(x)]&0x20)).
20780 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20790 49 73 73 70 61 63 65 28 78 29 20 20 20 28 73 71  Isspace(x)   (sq
207a0 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
207b0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
207c0 5d 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65  ]&0x01).# define
207d0 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28   sqlite3Isalnum(
207e0 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
207f0 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
20800 63 68 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a  char)(x)]&0x06).
20810 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20820 49 73 61 6c 70 68 61 28 78 29 20 20 20 28 73 71  Isalpha(x)   (sq
20830 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
20840 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
20850 5d 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65  ]&0x02).# define
20860 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
20870 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
20880 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
20890 63 68 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a  char)(x)]&0x04).
208a0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
208b0 49 73 78 64 69 67 69 74 28 78 29 20 20 28 73 71  Isxdigit(x)  (sq
208c0 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
208d0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
208e0 5d 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65  ]&0x08).# define
208f0 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28   sqlite3Tolower(
20900 78 29 20 20 20 28 73 71 6c 69 74 65 33 55 70 70  x)   (sqlite3Upp
20910 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67  erToLower[(unsig
20920 6e 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23  ned char)(x)]).#
20930 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
20940 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20  lite3Toupper(x) 
20950 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67    toupper((unsig
20960 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
20970 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
20980 73 70 61 63 65 28 78 29 20 20 20 69 73 73 70 61  space(x)   isspa
20990 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ce((unsigned cha
209a0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
209b0 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78  sqlite3Isalnum(x
209c0 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73  )   isalnum((uns
209d0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
209e0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
209f0 49 73 61 6c 70 68 61 28 78 29 20 20 20 69 73 61  Isalpha(x)   isa
20a00 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63  lpha((unsigned c
20a10 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
20a20 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  e sqlite3Isdigit
20a30 28 78 29 20 20 20 69 73 64 69 67 69 74 28 28 75  (x)   isdigit((u
20a40 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
20a50 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
20a60 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20 69  e3Isxdigit(x)  i
20a70 73 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65  sxdigit((unsigne
20a80 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
20a90 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f  fine sqlite3Tolo
20aa0 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72  wer(x)   tolower
20ab0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
20ac0 28 78 29 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20  (x)).#endif.int 
20ad0 73 71 6c 69 74 65 33 49 73 49 64 43 68 61 72 28  sqlite3IsIdChar(
20ae0 75 38 29 3b 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  u8);../*.** Inte
20af0 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72  rnal function pr
20b00 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 23 64 65 66  ototypes.*/.#def
20b10 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 49 43  ine sqlite3StrIC
20b20 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63  mp sqlite3_stric
20b30 6d 70 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  mp.int sqlite3St
20b40 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61  rlen30(const cha
20b50 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c  r*);.#define sql
20b60 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73 71 6c  ite3StrNICmp sql
20b70 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69  ite3_strnicmp..i
20b80 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  nt sqlite3Malloc
20b90 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64  Init(void);.void
20ba0 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e   sqlite3MallocEn
20bb0 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73  d(void);.void *s
20bc0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34  qlite3Malloc(u64
20bd0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
20be0 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b  MallocZero(u64);
20bf0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
20c00 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74  MallocZero(sqlit
20c10 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  e3*, u64);.void 
20c20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  *sqlite3DbMalloc
20c30 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20 75 36  Raw(sqlite3*, u6
20c40 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  4);.char *sqlite
20c50 33 44 62 53 74 72 44 75 70 28 73 71 6c 69 74 65  3DbStrDup(sqlite
20c60 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  3*,const char*);
20c70 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62  .char *sqlite3Db
20c80 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a  StrNDup(sqlite3*
20c90 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 36  ,const char*, u6
20ca0 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
20cb0 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20  3Realloc(void*, 
20cc0 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
20cd0 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72  te3DbReallocOrFr
20ce0 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  ee(sqlite3 *, vo
20cf0 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  id *, u64);.void
20d00 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
20d10 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  oc(sqlite3 *, vo
20d20 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  id *, u64);.void
20d30 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 73   sqlite3DbFree(s
20d40 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
20d50 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c  .int sqlite3Mall
20d60 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69  ocSize(void*);.i
20d70 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  nt sqlite3DbMall
20d80 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c  ocSize(sqlite3*,
20d90 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73   void*);.void *s
20da0 71 6c 69 74 65 33 53 63 72 61 74 63 68 4d 61 6c  qlite3ScratchMal
20db0 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  loc(int);.void s
20dc0 71 6c 69 74 65 33 53 63 72 61 74 63 68 46 72 65  qlite3ScratchFre
20dd0 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a  e(void*);.void *
20de0 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f  sqlite3PageMallo
20df0 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  c(int);.void sql
20e00 69 74 65 33 50 61 67 65 46 72 65 65 28 76 6f 69  ite3PageFree(voi
20e10 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  d*);.void sqlite
20e20 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76  3MemSetDefault(v
20e30 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
20e40 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f  e3BenignMallocHo
20e50 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69  oks(void (*)(voi
20e60 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69  d), void (*)(voi
20e70 64 29 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d));.int sqlite3
20e80 48 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76  HeapNearlyFull(v
20e90 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20  oid);../*.** On 
20ea0 73 79 73 74 65 6d 73 20 77 69 74 68 20 61 6d 70  systems with amp
20eb0 6c 65 20 73 74 61 63 6b 20 73 70 61 63 65 20 61  le stack space a
20ec0 6e 64 20 74 68 61 74 20 73 75 70 70 6f 72 74 20  nd that support 
20ed0 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a  alloca(), make.*
20ee0 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28  * use of alloca(
20ef0 29 20 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63  ) to obtain spac
20f00 65 20 66 6f 72 20 6c 61 72 67 65 20 61 75 74 6f  e for large auto
20f10 6d 61 74 69 63 20 6f 62 6a 65 63 74 73 2e 20 20  matic objects.  
20f20 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f  By default,.** o
20f30 62 74 61 69 6e 20 73 70 61 63 65 20 66 72 6f 6d  btain space from
20f40 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a   malloc()..**.**
20f50 20 54 68 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f   The alloca() ro
20f60 75 74 69 6e 65 20 6e 65 76 65 72 20 72 65 74 75  utine never retu
20f70 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20  rns NULL.  This 
20f80 77 69 6c 6c 20 63 61 75 73 65 20 63 6f 64 65 20  will cause code 
20f90 70 61 74 68 73 0a 2a 2a 20 74 68 61 74 20 64 65  paths.** that de
20fa0 61 6c 20 77 69 74 68 20 73 71 6c 69 74 65 33 53  al with sqlite3S
20fb0 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c  tackAlloc() fail
20fc0 75 72 65 73 20 74 6f 20 62 65 20 75 6e 72 65 61  ures to be unrea
20fd0 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65  chable..*/.#ifde
20fe0 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c  f SQLITE_USE_ALL
20ff0 4f 43 41 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  OCA.# define sql
21000 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61  ite3StackAllocRa
21010 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28  w(D,N)   alloca(
21020 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
21030 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72  te3StackAllocZer
21040 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61  o(D,N)  memset(a
21050 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a  lloca(N), 0, N).
21060 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
21070 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20  StackFree(D,P)  
21080 20 20 20 20 20 0a 23 65 6c 73 65 0a 23 20 64 65       .#else.# de
21090 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
210a0 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
210b0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
210c0 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  Raw(D,N).# defin
210d0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
210e0 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71  locZero(D,N)  sq
210f0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
21100 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20  o(D,N).# define 
21110 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
21120 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69  (D,P)       sqli
21130 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23  te3DbFree(D,P).#
21140 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
21150 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
21160 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65  YS3.const sqlite
21170 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73  3_mem_methods *s
21180 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73  qlite3MemGetMems
21190 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  ys3(void);.#endi
211a0 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
211b0 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63  ENABLE_MEMSYS5.c
211c0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d  onst sqlite3_mem
211d0 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65  _methods *sqlite
211e0 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76  3MemGetMemsys5(v
211f0 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23  oid);.#endif...#
21200 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55  ifndef SQLITE_MU
21210 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74  TEX_OMIT.  sqlit
21220 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
21230 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44   const *sqlite3D
21240 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64  efaultMutex(void
21250 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  );.  sqlite3_mut
21260 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74  ex_methods const
21270 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74   *sqlite3NoopMut
21280 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69  ex(void);.  sqli
21290 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
212a0 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74  e3MutexAlloc(int
212b0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
212c0 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b  MutexInit(void);
212d0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  .  int sqlite3Mu
212e0 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65  texEnd(void);.#e
212f0 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e  ndif..sqlite3_in
21300 74 36 34 20 73 71 6c 69 74 65 33 53 74 61 74 75  t64 sqlite3Statu
21310 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69  sValue(int);.voi
21320 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 55  d sqlite3StatusU
21330 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  p(int, int);.voi
21340 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 44  d sqlite3StatusD
21350 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  own(int, int);.v
21360 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
21370 73 53 65 74 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  sSet(int, int);.
21380 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f 20 6d 75  ./* Access to mu
21390 74 65 78 65 73 20 75 73 65 64 20 62 79 20 73 71  texes used by sq
213a0 6c 69 74 65 33 5f 73 74 61 74 75 73 28 29 20 2a  lite3_status() *
213b0 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20  /.sqlite3_mutex 
213c0 2a 73 71 6c 69 74 65 33 50 63 61 63 68 65 31 4d  *sqlite3Pcache1M
213d0 75 74 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69  utex(void);.sqli
213e0 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
213f0 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f  e3MallocMutex(vo
21400 69 64 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  id);..#ifndef SQ
21410 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
21420 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73  NG_POINT.  int s
21430 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62  qlite3IsNaN(doub
21440 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  le);.#else.# def
21450 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  ine sqlite3IsNaN
21460 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  (X)  0.#endif../
21470 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
21480 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
21490 67 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  g structure hold
214a0 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  s information ab
214b0 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74  out SQL.** funct
214c0 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73 20 74  ions arguments t
214d0 68 61 74 20 61 72 65 20 74 68 65 20 70 61 72 61  hat are the para
214e0 6d 65 74 65 72 73 20 74 6f 20 74 68 65 20 70 72  meters to the pr
214f0 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e  intf() function.
21500 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72 69 6e 74  .*/.struct Print
21510 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69  fArguments {.  i
21520 6e 74 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20  nt nArg;        
21530 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c          /* Total
21540 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
21550 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55  ents */.  int nU
21560 73 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  sed;            
21570 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
21580 61 72 67 75 6d 65 6e 74 73 20 75 73 65 64 20 73  arguments used s
21590 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74  o far */.  sqlit
215a0 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72 67  e3_value **apArg
215b0 3b 20 20 20 2f 2a 20 54 68 65 20 61 72 67 75 6d  ;   /* The argum
215c0 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b  ent values */.};
215d0 0a 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ..#define SQLITE
215e0 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c  _PRINTF_INTERNAL
215f0 20 30 78 30 31 0a 23 64 65 66 69 6e 65 20 53 51   0x01.#define SQ
21600 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46  LITE_PRINTF_SQLF
21610 55 4e 43 20 20 30 78 30 32 0a 76 6f 69 64 20 73  UNC  0x02.void s
21620 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28 53  qlite3VXPrintf(S
21630 74 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c 20 63  trAccum*, u32, c
21640 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c  onst char*, va_l
21650 69 73 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ist);.void sqlit
21660 65 33 58 50 72 69 6e 74 66 28 53 74 72 41 63 63  e3XPrintf(StrAcc
21670 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20  um*, u32, const 
21680 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61  char*, ...);.cha
21690 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74  r *sqlite3MPrint
216a0 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  f(sqlite3*,const
216b0 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68   char*, ...);.ch
216c0 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69  ar *sqlite3VMPri
216d0 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ntf(sqlite3*,con
216e0 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73  st char*, va_lis
216f0 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  t);.char *sqlite
21700 33 4d 41 70 70 65 6e 64 66 28 73 71 6c 69 74 65  3MAppendf(sqlite
21710 33 2a 2c 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  3*,char*,const c
21720 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 69 66 20 64  har*,...);.#if d
21730 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
21740 53 54 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  ST) || defined(S
21750 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76  QLITE_DEBUG).  v
21760 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67  oid sqlite3Debug
21770 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61  Printf(const cha
21780 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66  r*, ...);.#endif
21790 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
217a0 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64  ITE_TEST).  void
217b0 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65 78   *sqlite3TestTex
217c0 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61  tToPtr(const cha
217d0 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
217e0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
217f0 44 45 42 55 47 29 0a 20 20 54 72 65 65 56 69 65  DEBUG).  TreeVie
21800 77 20 2a 73 71 6c 69 74 65 33 54 72 65 65 56 69  w *sqlite3TreeVi
21810 65 77 50 75 73 68 28 54 72 65 65 56 69 65 77 2a  ewPush(TreeView*
21820 2c 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ,u8);.  void sql
21830 69 74 65 33 54 72 65 65 56 69 65 77 50 6f 70 28  ite3TreeViewPop(
21840 54 72 65 65 56 69 65 77 2a 29 3b 0a 20 20 76 6f  TreeView*);.  vo
21850 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
21860 65 77 4c 69 6e 65 28 54 72 65 65 56 69 65 77 2a  ewLine(TreeView*
21870 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
21880 2e 2e 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  ..);.  void sqli
21890 74 65 33 54 72 65 65 56 69 65 77 49 74 65 6d 28  te3TreeViewItem(
218a0 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
218b0 20 63 68 61 72 2a 2c 20 75 38 29 3b 0a 20 20 76   char*, u8);.  v
218c0 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
218d0 69 65 77 45 78 70 72 28 54 72 65 65 56 69 65 77  iewExpr(TreeView
218e0 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20  *, const Expr*, 
218f0 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  u8);.  void sqli
21900 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72 4c  te3TreeViewExprL
21910 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ist(TreeView*, c
21920 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20  onst ExprList*, 
21930 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  u8, const char*)
21940 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
21950 54 72 65 65 56 69 65 77 53 65 6c 65 63 74 28 54  TreeViewSelect(T
21960 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
21970 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 23 65  Select*, u8);.#e
21980 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69  ndif...void sqli
21990 74 65 33 53 65 74 53 74 72 69 6e 67 28 63 68 61  te3SetString(cha
219a0 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20  r **, sqlite3*, 
219b0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
219c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
219d0 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20  rrorMsg(Parse*, 
219e0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
219f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65  );.int sqlite3De
21a00 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 69 6e  quote(char*);.in
21a10 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64  t sqlite3Keyword
21a20 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67  Code(const unsig
21a30 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  ned char*, int);
21a40 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50  .int sqlite3RunP
21a50 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f  arser(Parse*, co
21a60 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20  nst char*, char 
21a70 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
21a80 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61  3FinishCoding(Pa
21a90 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
21aa0 65 33 47 65 74 54 65 6d 70 52 65 67 28 50 61 72  e3GetTempReg(Par
21ab0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
21ac0 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67  e3ReleaseTempReg
21ad0 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e  (Parse*,int);.in
21ae0 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70  t sqlite3GetTemp
21af0 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
21b00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
21b10 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28  eleaseTempRange(
21b20 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b  Parse*,int,int);
21b30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65  .void sqlite3Cle
21b40 61 72 54 65 6d 70 52 65 67 43 61 63 68 65 28 50  arTempRegCache(P
21b50 61 72 73 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71  arse*);.Expr *sq
21b60 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73  lite3ExprAlloc(s
21b70 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
21b80 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45  t Token*,int);.E
21b90 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
21ba0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
21bb0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
21bc0 20 73 71 6c 69 74 65 33 45 78 70 72 41 74 74 61   sqlite3ExprAtta
21bd0 63 68 53 75 62 74 72 65 65 73 28 73 71 6c 69 74  chSubtrees(sqlit
21be0 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c  e3*,Expr*,Expr*,
21bf0 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  Expr*);.Expr *sq
21c00 6c 69 74 65 33 50 45 78 70 72 28 50 61 72 73 65  lite3PExpr(Parse
21c10 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45  *, int, Expr*, E
21c20 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  xpr*, const Toke
21c30 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  n*);.Expr *sqlit
21c40 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69 74 65  e3ExprAnd(sqlite
21c50 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  3*,Expr*, Expr*)
21c60 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
21c70 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61 72 73  xprFunction(Pars
21c80 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f  e*,ExprList*, To
21c90 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
21ca0 74 65 33 45 78 70 72 41 73 73 69 67 6e 56 61 72  te3ExprAssignVar
21cb0 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c 20 45  Number(Parse*, E
21cc0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
21cd0 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 73 71  te3ExprDelete(sq
21ce0 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a  lite3*, Expr*);.
21cf0 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65  ExprList *sqlite
21d00 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28  3ExprListAppend(
21d10 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
21d20 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,Expr*);.void sq
21d30 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74  lite3ExprListSet
21d40 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72  Name(Parse*,Expr
21d50 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  List*,Token*,int
21d60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
21d70 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50  xprListSetSpan(P
21d80 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
21d90 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64  ExprSpan*);.void
21da0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
21db0 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
21dc0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33 32   ExprList*);.u32
21dd0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
21de0 46 6c 61 67 73 28 63 6f 6e 73 74 20 45 78 70 72  Flags(const Expr
21df0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
21e00 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  te3Init(sqlite3*
21e10 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73  , char**);.int s
21e20 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
21e30 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63  ck(void*, int, c
21e40 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  har**, char**);.
21e50 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67  void sqlite3Prag
21e60 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ma(Parse*,Token*
21e70 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
21e80 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21e90 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
21ea0 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c  OfConnection(sql
21eb0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
21ec0 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65  ite3ResetOneSche
21ed0 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ma(sqlite3*,int)
21ee0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
21ef0 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72  llapseDatabaseAr
21f00 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ray(sqlite3*);.v
21f10 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
21f20 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69 6e 74  Parse(Parse*,int
21f30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
21f40 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61  ommitInternalCha
21f50 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  nges(sqlite3*);.
21f60 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65  Table *sqlite3Re
21f70 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28  sultSetOfSelect(
21f80 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b  Parse*,Select*);
21f90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
21fa0 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72  nMasterTable(Par
21fb0 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65  se *, int);.Inde
21fc0 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72  x *sqlite3Primar
21fd0 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a  yKeyIndex(Table*
21fe0 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f  );.i16 sqlite3Co
21ff0 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65  lumnOfIndex(Inde
22000 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73  x*, i16);.void s
22010 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65  qlite3StartTable
22020 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
22030 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  oken*,int,int,in
22040 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  t,int);.void sql
22050 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61  ite3AddColumn(Pa
22060 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  rse*,Token*);.vo
22070 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74  id sqlite3AddNot
22080 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74  Null(Parse*, int
22090 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
220a0 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72  ddPrimaryKey(Par
220b0 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
220c0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
220d0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
220e0 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50  heckConstraint(P
220f0 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
22100 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
22110 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65 2a 2c  lumnType(Parse*,
22120 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
22130 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74 56  lite3AddDefaultV
22140 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72  alue(Parse*,Expr
22150 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Span*);.void sql
22160 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79  ite3AddCollateTy
22170 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
22180 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22190 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  EndTable(Parse*,
221a0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38  Token*,Token*,u8
221b0 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73  ,Select*);.int s
221c0 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28 63  qlite3ParseUri(c
221d0 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
221e0 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20   char*,unsigned 
221f0 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  int*,.          
22200 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
22210 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63  3_vfs**,char**,c
22220 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a  har **);.Btree *
22230 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42  sqlite3DbNameToB
22240 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  tree(sqlite3*,co
22250 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
22260 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65 28  sqlite3CodeOnce(
22270 50 61 72 73 65 20 2a 29 3b 0a 0a 23 69 66 64 65  Parse *);..#ifde
22280 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
22290 49 4c 54 49 4e 5f 54 45 53 54 0a 23 20 64 65 66  ILTIN_TEST.# def
222a0 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74  ine sqlite3Fault
222b0 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b  Sim(X) SQLITE_OK
222c0 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c  .#else.  int sql
222d0 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74  ite3FaultSim(int
222e0 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65  );.#endif..Bitve
222f0 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63  c *sqlite3Bitvec
22300 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74  Create(u32);.int
22310 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65   sqlite3BitvecTe
22320 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  st(Bitvec*, u32)
22330 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
22340 76 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20  vecSet(Bitvec*, 
22350 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u32);.void sqlit
22360 65 33 42 69 74 76 65 63 43 6c 65 61 72 28 42 69  e3BitvecClear(Bi
22370 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64  tvec*, u32, void
22380 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22390 42 69 74 76 65 63 44 65 73 74 72 6f 79 28 42 69  BitvecDestroy(Bi
223a0 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69  tvec*);.u32 sqli
223b0 74 65 33 42 69 74 76 65 63 53 69 7a 65 28 42 69  te3BitvecSize(Bi
223c0 74 76 65 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  tvec*);.int sqli
223d0 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e  te3BitvecBuiltin
223e0 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a  Test(int,int*);.
223f0 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33  .RowSet *sqlite3
22400 52 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74  RowSetInit(sqlit
22410 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69  e3*, void*, unsi
22420 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20  gned int);.void 
22430 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65  sqlite3RowSetCle
22440 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69  ar(RowSet*);.voi
22450 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49  d sqlite3RowSetI
22460 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69  nsert(RowSet*, i
22470 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
22480 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53 65  RowSetTest(RowSe
22490 74 2a 2c 20 69 6e 74 20 69 42 61 74 63 68 2c 20  t*, int iBatch, 
224a0 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
224b0 33 52 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53  3RowSetNext(RowS
224c0 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69  et*, i64*);..voi
224d0 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 56  d sqlite3CreateV
224e0 69 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  iew(Parse*,Token
224f0 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
22500 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29  Select*,int,int)
22510 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ;..#if !defined(
22520 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57  SQLITE_OMIT_VIEW
22530 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51  ) || !defined(SQ
22540 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
22550 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71  LTABLE).  int sq
22560 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
22570 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54  mnNames(Parse*,T
22580 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  able*);.#else.# 
22590 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69  define sqlite3Vi
225a0 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  ewGetColumnNames
225b0 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a  (A,B) 0.#endif..
225c0 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41  #if SQLITE_MAX_A
225d0 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74  TTACHED>30.  int
225e0 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c   sqlite3DbMaskAl
225f0 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a  lZero(yDbMask);.
22600 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
22610 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72  te3DropTable(Par
22620 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
22630 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
22640 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61  qlite3CodeDropTa
22650 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ble(Parse*, Tabl
22660 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
22670 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
22680 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  eTable(sqlite3*,
22690 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65   Table*);.#ifnde
226a0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
226b0 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f  TOINCREMENT.  vo
226c0 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  id sqlite3Autoin
226d0 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72  crementBegin(Par
226e0 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76  se *pParse);.  v
226f0 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69  oid sqlite3Autoi
22700 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73  ncrementEnd(Pars
22710 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73  e *pParse);.#els
22720 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
22730 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
22740 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65  egin(X).# define
22750 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
22760 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64  ementEnd(X).#end
22770 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  if.void sqlite3I
22780 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72  nsert(Parse*, Sr
22790 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c  cList*, Select*,
227a0 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a   IdList*, int);.
227b0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72  void *sqlite3Arr
227c0 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74  ayAllocate(sqlit
227d0 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e  e3*,void*,int,in
227e0 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74  t*,int*);.IdList
227f0 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41   *sqlite3IdListA
22800 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20  ppend(sqlite3*, 
22810 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  IdList*, Token*)
22820 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c  ;.int sqlite3IdL
22830 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a  istIndex(IdList*
22840 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53  ,const char*);.S
22850 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
22860 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71  rcListEnlarge(sq
22870 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
22880 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63  , int, int);.Src
22890 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
228a0 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74  ListAppend(sqlit
228b0 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  e3*, SrcList*, T
228c0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
228d0 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
228e0 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f  SrcListAppendFro
228f0 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72  mTerm(Parse*, Sr
22900 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  cList*, Token*, 
22910 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20  Token*,.        
22920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 6f                To
22940 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45  ken*, Select*, E
22950 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a  xpr*, IdList*);.
22960 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
22970 69 73 74 49 6e 64 65 78 65 64 42 79 28 50 61 72  istIndexedBy(Par
22980 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  se *, SrcList *,
22990 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69 6e 74 20 73   Token *);.int s
229a0 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c  qlite3IndexedByL
229b0 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73  ookup(Parse *, s
229c0 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
229d0 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  em *);.void sqli
229e0 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a  te3SrcListShiftJ
229f0 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a  oinType(SrcList*
22a00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
22a10 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73  rcListAssignCurs
22a20 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ors(Parse*, SrcL
22a30 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
22a40 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28  te3IdListDelete(
22a50 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74  sqlite3*, IdList
22a60 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22a70 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71  SrcListDelete(sq
22a80 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
22a90 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
22aa0 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62  3AllocateIndexOb
22ab0 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31  ject(sqlite3*,i1
22ac0 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 49  6,int,char**);.I
22ad0 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 43 72 65  ndex *sqlite3Cre
22ae0 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ateIndex(Parse*,
22af0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72  Token*,Token*,Sr
22b00 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a  cList*,ExprList*
22b10 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20  ,int,Token*,.   
22b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b30 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e         Expr*, in
22b40 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
22b50 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50  lite3DropIndex(P
22b60 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
22b70 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
22b80 65 33 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  e3Select(Parse*,
22b90 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74   Select*, Select
22ba0 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a  Dest*);.Select *
22bb0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77  sqlite3SelectNew
22bc0 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
22bd0 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
22be0 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20  ,ExprList*,.    
22bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c00 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c       Expr*,ExprL
22c10 69 73 74 2a 2c 75 31 36 2c 45 78 70 72 2a 2c 45  ist*,u16,Expr*,E
22c20 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
22c30 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28  te3SelectDelete(
22c40 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74  sqlite3*, Select
22c50 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
22c60 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28  e3SrcListLookup(
22c70 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
22c80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
22c90 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c  ReadOnly(Parse*,
22ca0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76   Table*, int);.v
22cb0 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54  oid sqlite3OpenT
22cc0 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  able(Parse*, int
22cd0 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20   iCur, int iDb, 
22ce0 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69  Table*, int);.#i
22cf0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
22d00 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44  _ENABLE_UPDATE_D
22d10 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20  ELETE_LIMIT) && 
22d20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
22d30 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45  OMIT_SUBQUERY).E
22d40 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69  xpr *sqlite3Limi
22d50 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c 53 72  tWhere(Parse*,Sr
22d60 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
22d70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  rList*,Expr*,Exp
22d80 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  r*,char*);.#endi
22d90 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  f.void sqlite3De
22da0 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c  leteFrom(Parse*,
22db0 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a   SrcList*, Expr*
22dc0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
22dd0 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72  pdate(Parse*, Sr
22de0 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  cList*, ExprList
22df0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
22e00 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74  WhereInfo *sqlit
22e10 65 33 57 68 65 72 65 42 65 67 69 6e 28 50 61 72  e3WhereBegin(Par
22e20 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  se*,SrcList*,Exp
22e30 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  r*,ExprList*,Exp
22e40 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b  rList*,u16,int);
22e50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65  .void sqlite3Whe
22e60 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a  reEnd(WhereInfo*
22e70 29 3b 0a 75 36 34 20 73 71 6c 69 74 65 33 57 68  );.u64 sqlite3Wh
22e80 65 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e  ereOutputRowCoun
22e90 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  t(WhereInfo*);.i
22ea0 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
22eb0 73 44 69 73 74 69 6e 63 74 28 57 68 65 72 65 49  sDistinct(WhereI
22ec0 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
22ed0 65 33 57 68 65 72 65 49 73 4f 72 64 65 72 65 64  e3WhereIsOrdered
22ee0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
22ef0 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
22f00 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e 66 6f  Sorted(WhereInfo
22f10 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
22f20 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65  hereContinueLabe
22f30 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  l(WhereInfo*);.i
22f40 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 42  nt sqlite3WhereB
22f50 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72 65 49  reakLabel(WhereI
22f60 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
22f70 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73  e3WhereOkOnePass
22f80 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74  (WhereInfo*, int
22f90 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
22fa0 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
22fb0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
22fc0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20   int, int, int, 
22fd0 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
22fe0 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75  3ExprCodeGetColu
22ff0 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c  mnOfTable(Vdbe*,
23000 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
23010 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
23020 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76  lite3ExprCodeMov
23030 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
23040 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
23050 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 53  qlite3ExprCacheS
23060 74 6f 72 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  tore(Parse*, int
23070 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
23080 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
23090 68 65 50 75 73 68 28 50 61 72 73 65 2a 29 3b 0a  hePush(Parse*);.
230a0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
230b0 43 61 63 68 65 50 6f 70 28 50 61 72 73 65 2a 29  CachePop(Parse*)
230c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
230d0 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61  prCacheRemove(Pa
230e0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
230f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
23100 72 43 61 63 68 65 43 6c 65 61 72 28 50 61 72 73  rCacheClear(Pars
23110 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
23120 33 45 78 70 72 43 61 63 68 65 41 66 66 69 6e 69  3ExprCacheAffini
23130 74 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c  tyChange(Parse*,
23140 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
23150 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
23160 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
23170 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
23180 65 33 45 78 70 72 43 6f 64 65 46 61 63 74 6f 72  e3ExprCodeFactor
23190 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 45 78 70  able(Parse*, Exp
231a0 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
231b0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 74  qlite3ExprCodeAt
231c0 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 45 78 70  Init(Parse*, Exp
231d0 72 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e  r*, int, u8);.in
231e0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
231f0 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78  eTemp(Parse*, Ex
23200 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  pr*, int*);.int 
23210 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54  sqlite3ExprCodeT
23220 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78  arget(Parse*, Ex
23230 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
23240 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41  sqlite3ExprCodeA
23250 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20  ndCache(Parse*, 
23260 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
23270 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
23280 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c  ExprList(Parse*,
23290 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
232a0 20 75 38 29 3b 0a 23 64 65 66 69 6e 65 20 53 51   u8);.#define SQ
232b0 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50 20 20 20  LITE_ECEL_DUP   
232c0 20 20 20 30 78 30 31 20 20 2f 2a 20 44 65 65 70     0x01  /* Deep
232d0 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f  , not shallow co
232e0 70 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  pies */.#define 
232f0 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43 54  SQLITE_ECEL_FACT
23300 4f 52 20 20 20 30 78 30 32 20 20 2f 2a 20 46 61  OR   0x02  /* Fa
23310 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e  ctor out constan
23320 74 20 74 65 72 6d 73 20 2a 2f 0a 76 6f 69 64 20  t terms */.void 
23330 73 71 6c 69 74 65 33 45 78 70 72 49 66 54 72 75  sqlite3ExprIfTru
23340 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
23350 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
23360 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61   sqlite3ExprIfFa
23370 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  lse(Parse*, Expr
23380 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61  *, int, int);.Ta
23390 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  ble *sqlite3Find
233a0 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63  Table(sqlite3*,c
233b0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
233c0 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20  t char*);.Table 
233d0 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61  *sqlite3LocateTa
233e0 62 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74 20 69  ble(Parse*,int i
233f0 73 56 69 65 77 2c 63 6f 6e 73 74 20 63 68 61 72  sView,const char
23400 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
23410 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c  .Table *sqlite3L
23420 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50  ocateTableItem(P
23430 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77  arse*,int isView
23440 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f  ,struct SrcList_
23450 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a  item *);.Index *
23460 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78  sqlite3FindIndex
23470 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
23480 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
23490 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
234a0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
234b0 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69  Table(sqlite3*,i
234c0 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
234d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c  .void sqlite3Unl
234e0 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65  inkAndDeleteInde
234f0 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  x(sqlite3*,int,c
23500 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
23510 64 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28  d sqlite3Vacuum(
23520 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
23530 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68  ite3RunVacuum(ch
23540 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b  ar**, sqlite3*);
23550 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61  .char *sqlite3Na
23560 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69  meFromToken(sqli
23570 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  te3*, Token*);.i
23580 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
23590 6d 70 61 72 65 28 45 78 70 72 2a 2c 20 45 78 70  mpare(Expr*, Exp
235a0 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
235b0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f 6d  lite3ExprListCom
235c0 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c 20  pare(ExprList*, 
235d0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b  ExprList*, int);
235e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
235f0 49 6d 70 6c 69 65 73 45 78 70 72 28 45 78 70 72  ImpliesExpr(Expr
23600 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
23610 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23620 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65  AnalyzeAggregate
23630 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
23640 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
23650 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41  ite3ExprAnalyzeA
23660 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65  ggList(NameConte
23670 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a  xt*,ExprList*);.
23680 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74  int sqlite3Funct
23690 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63 28 45  ionUsesThisSrc(E
236a0 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  xpr*, SrcList*);
236b0 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65  .Vdbe *sqlite3Ge
236c0 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 76  tVdbe(Parse*);.v
236d0 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53  oid sqlite3PrngS
236e0 61 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a  aveState(void);.
236f0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67  void sqlite3Prng
23700 52 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69  RestoreState(voi
23710 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
23720 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69  RollbackAll(sqli
23730 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
23740 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
23750 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20  ySchema(Parse*, 
23760 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
23770 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65  e3CodeVerifyName
23780 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20  dSchema(Parse*, 
23790 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29  const char *zDb)
237a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
237b0 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50  ginTransaction(P
237c0 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
237d0 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54  d sqlite3CommitT
237e0 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
237f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23800 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61 63 74  RollbackTransact
23810 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ion(Parse*);.voi
23820 64 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69  d sqlite3Savepoi
23830 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
23840 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
23850 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
23860 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b  ints(sqlite3 *);
23870 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c 65 61  .void sqlite3Lea
23880 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a  veMutexAndCloseZ
23890 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a 29 3b  ombie(sqlite3*);
238a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
238b0 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a  IsConstant(Expr*
238c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
238d0 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a  prIsConstantNotJ
238e0 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  oin(Expr*);.int 
238f0 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
23900 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28  stantOrFunction(
23910 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20  Expr*, u8);.int 
23920 73 71 6c 69 74 65 33 45 78 70 72 49 73 54 61 62  sqlite3ExprIsTab
23930 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a  leConstant(Expr*
23940 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
23950 65 33 45 78 70 72 49 73 49 6e 74 65 67 65 72 28  e3ExprIsInteger(
23960 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  Expr*, int*);.in
23970 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e  t sqlite3ExprCan
23980 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70  BeNull(const Exp
23990 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
239a0 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e  ExprNeedsNoAffin
239b0 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20  ityChange(const 
239c0 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e  Expr*, char);.in
239d0 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64  t sqlite3IsRowid
239e0 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  (const char*);.v
239f0 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
23a00 61 74 65 52 6f 77 44 65 6c 65 74 65 28 50 61 72  ateRowDelete(Par
23a10 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67  se*,Table*,Trigg
23a20 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  er*,int,int,int,
23a30 69 31 36 2c 75 38 2c 75 38 2c 75 38 29 3b 0a 76  i16,u8,u8,u8);.v
23a40 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
23a50 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74  ateRowIndexDelet
23a60 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  e(Parse*, Table*
23a70 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
23a80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
23a90 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50  nerateIndexKey(P
23aa0 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69  arse*, Index*, i
23ab0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  nt, int, int, in
23ac0 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a  t*,Index*,int);.
23ad0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
23ae0 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28  lvePartIdxLabel(
23af0 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
23b00 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
23b10 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b  eConstraintCheck
23b20 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  s(Parse*,Table*,
23b30 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
23b40 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20  ,int,.          
23b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b60 20 20 20 20 20 20 20 20 20 20 20 75 38 2c 75 38             u8,u8
23b70 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a  ,int,int,int*);.
23b80 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70  void sqlite3Comp
23b90 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61  leteInsertion(Pa
23ba0 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c  rse*,Table*,int,
23bb0 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a  int,int,int,int*
23bc0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69  ,int,int,int);.i
23bd0 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61  nt sqlite3OpenTa
23be0 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 50 61  bleAndIndices(Pa
23bf0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
23c00 74 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74  t, int, u8*, int
23c10 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73  *, int*);.void s
23c20 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65  qlite3BeginWrite
23c30 4f 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a  Operation(Parse*
23c40 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
23c50 64 20 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72  d sqlite3MultiWr
23c60 69 74 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ite(Parse*);.voi
23c70 64 20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72  d sqlite3MayAbor
23c80 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  t(Parse*);.void 
23c90 73 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74  sqlite3HaltConst
23ca0 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  raint(Parse*, in
23cb0 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69  t, int, char*, i
23cc0 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  8, u8);.void sql
23cd0 69 74 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72  ite3UniqueConstr
23ce0 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
23cf0 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  , Index*);.void 
23d00 73 71 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73  sqlite3RowidCons
23d10 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  traint(Parse*, i
23d20 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70  nt, Table*);.Exp
23d30 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75  r *sqlite3ExprDu
23d40 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  p(sqlite3*,Expr*
23d50 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20  ,int);.ExprList 
23d60 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
23d70 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  Dup(sqlite3*,Exp
23d80 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63  rList*,int);.Src
23d90 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
23da0 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
23db0 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  ,SrcList*,int);.
23dc0 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49  IdList *sqlite3I
23dd0 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  dListDup(sqlite3
23de0 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65  *,IdList*);.Sele
23df0 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63  ct *sqlite3Selec
23e00 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65  tDup(sqlite3*,Se
23e10 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 23 69 66 20  lect*,int);.#if 
23e20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42  SELECTTRACE_ENAB
23e30 4c 45 44 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  LED.void sqlite3
23e40 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 53 65  SelectSetName(Se
23e50 6c 65 63 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72  lect*,const char
23e60 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
23e70 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  ne sqlite3Select
23e80 53 65 74 4e 61 6d 65 28 41 2c 42 29 0a 23 65 6e  SetName(A,B).#en
23e90 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
23ea0 46 75 6e 63 44 65 66 49 6e 73 65 72 74 28 46 75  FuncDefInsert(Fu
23eb0 6e 63 44 65 66 48 61 73 68 2a 2c 20 46 75 6e 63  ncDefHash*, Func
23ec0 44 65 66 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a  Def*);.FuncDef *
23ed0 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74  sqlite3FindFunct
23ee0 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ion(sqlite3*,con
23ef0 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74  st char*,int,int
23f00 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71  ,u8,u8);.void sq
23f10 6c 69 74 65 33 52 65 67 69 73 74 65 72 42 75 69  lite3RegisterBui
23f20 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71  ltinFunctions(sq
23f30 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
23f40 6c 69 74 65 33 52 65 67 69 73 74 65 72 44 61 74  lite3RegisterDat
23f50 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76  eTimeFunctions(v
23f60 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
23f70 65 33 52 65 67 69 73 74 65 72 47 6c 6f 62 61 6c  e3RegisterGlobal
23f80 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
23f90 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
23fa0 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65  tyCheckOk(sqlite
23fb0 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
23fc0 53 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f  SafetyCheckSickO
23fd0 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  rOk(sqlite3*);.v
23fe0 6f 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67  oid sqlite3Chang
23ff0 65 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20  eCookie(Parse*, 
24000 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69  int);..#if !defi
24010 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
24020 56 49 45 57 29 20 26 26 20 21 64 65 66 69 6e 65  VIEW) && !define
24030 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  d(SQLITE_OMIT_TR
24040 49 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69  IGGER).void sqli
24050 74 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69  te3MaterializeVi
24060 65 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ew(Parse*, Table
24070 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
24080 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
24090 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
240a0 47 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  GER.  void sqlit
240b0 65 33 42 65 67 69 6e 54 72 69 67 67 65 72 28 50  e3BeginTrigger(P
240c0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f  arse*, Token*,To
240d0 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c  ken*,int,int,IdL
240e0 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20  ist*,SrcList*,. 
240f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24100 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
24110 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
24120 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54  d sqlite3FinishT
24130 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
24140 72 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b  riggerStep*, Tok
24150 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  en*);.  void sql
24160 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 28  ite3DropTrigger(
24170 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
24180 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
24190 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
241a0 72 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69  rPtr(Parse*, Tri
241b0 67 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65  gger*);.  Trigge
241c0 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  r *sqlite3Trigge
241d0 72 73 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c  rsExist(Parse *,
241e0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78   Table*, int, Ex
241f0 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d  prList*, int *pM
24200 61 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20  ask);.  Trigger 
24210 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c  *sqlite3TriggerL
24220 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62  ist(Parse *, Tab
24230 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  le *);.  void sq
24240 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
24250 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  ger(Parse*, Trig
24260 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72  ger *, int, Expr
24270 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c  List*, int, Tabl
24280 65 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  e *,.           
24290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242a0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
242b0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
242c0 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72  odeRowTriggerDir
242d0 65 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69  ect(Parse *, Tri
242e0 67 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c  gger *, Table *,
242f0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
24300 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69  .  void sqliteVi
24310 65 77 54 72 69 67 67 65 72 73 28 50 61 72 73 65  ewTriggers(Parse
24320 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a  *, Table*, Expr*
24330 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
24340 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
24350 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 53 74  3DeleteTriggerSt
24360 65 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69  ep(sqlite3*, Tri
24370 67 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72  ggerStep*);.  Tr
24380 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
24390 65 33 54 72 69 67 67 65 72 53 65 6c 65 63 74 53  e3TriggerSelectS
243a0 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c  tep(sqlite3*,Sel
243b0 65 63 74 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  ect*);.  Trigger
243c0 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
243d0 67 67 65 72 49 6e 73 65 72 74 53 74 65 70 28 73  ggerInsertStep(s
243e0 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20  qlite3*,Token*, 
243f0 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  IdList*,.       
24400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24420 20 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20   Select*,u8);.  
24430 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
24440 69 74 65 33 54 72 69 67 67 65 72 55 70 64 61 74  ite3TriggerUpdat
24450 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54  eStep(sqlite3*,T
24460 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
24470 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54   Expr*, u8);.  T
24480 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
24490 74 65 33 54 72 69 67 67 65 72 44 65 6c 65 74 65  te3TriggerDelete
244a0 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f  Step(sqlite3*,To
244b0 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20  ken*, Expr*);.  
244c0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
244d0 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65  teTrigger(sqlite
244e0 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20  3*, Trigger*);. 
244f0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c   void sqlite3Unl
24500 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
24510 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ger(sqlite3*,int
24520 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
24530 20 75 33 32 20 73 71 6c 69 74 65 33 54 72 69 67   u32 sqlite3Trig
24540 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65  gerColmask(Parse
24550 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c  *,Trigger*,ExprL
24560 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62  ist*,int,int,Tab
24570 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69  le*,int);.# defi
24580 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54  ne sqlite3ParseT
24590 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d  oplevel(p) ((p)-
245a0 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29  >pToplevel ? (p)
245b0 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70  ->pToplevel : (p
245c0 29 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  )).#else.# defin
245d0 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
245e0 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46  sExist(B,C,D,E,F
245f0 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 0.# define sql
24600 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
24610 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20  r(A,B).# define 
24620 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67  sqlite3DropTrigg
24630 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66  erPtr(A,B).# def
24640 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  ine sqlite3Unlin
24650 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
24660 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e  r(A,B,C).# defin
24670 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  e sqlite3CodeRow
24680 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c  Trigger(A,B,C,D,
24690 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66  E,F,G,H,I).# def
246a0 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52  ine sqlite3CodeR
246b0 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28  owTriggerDirect(
246c0 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64  A,B,C,D,E,F).# d
246d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
246e0 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30  ggerList(X, Y) 0
246f0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24700 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70  3ParseToplevel(p
24710 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) p.# define sql
24720 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61  ite3TriggerColma
24730 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47  sk(A,B,C,D,E,F,G
24740 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  ) 0.#endif..int 
24750 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28  sqlite3JoinType(
24760 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
24770 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
24780 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65  .void sqlite3Cre
24790 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61  ateForeignKey(Pa
247a0 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
247b0 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73   Token*, ExprLis
247c0 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  t*, int);.void s
247d0 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65 69  qlite3DeferForei
247e0 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e  gnKey(Parse*, in
247f0 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
24800 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a  TE_OMIT_AUTHORIZ
24810 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c  ATION.  void sql
24820 69 74 65 33 41 75 74 68 52 65 61 64 28 50 61 72  ite3AuthRead(Par
24830 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61  se*,Expr*,Schema
24840 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69  *,SrcList*);.  i
24850 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 43 68  nt sqlite3AuthCh
24860 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20  eck(Parse*,int, 
24870 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
24880 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
24890 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
248a0 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
248b0 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75  tPush(Parse*, Au
248c0 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73  thContext*, cons
248d0 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
248e0 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
248f0 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65  extPop(AuthConte
24900 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  xt*);.  int sqli
24910 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50  te3AuthReadCol(P
24920 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
24930 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  r *, const char 
24940 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23  *, int);.#else.#
24950 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
24960 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29  uthRead(a,b,c,d)
24970 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24980 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63  3AuthCheck(a,b,c
24990 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f  ,d,e)    SQLITE_
249a0 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  OK.# define sqli
249b0 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75  te3AuthContextPu
249c0 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69  sh(a,b,c).# defi
249d0 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  ne sqlite3AuthCo
249e0 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28 28 76  ntextPop(a)  ((v
249f0 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a  oid)(a)).#endif.
24a00 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74 61  void sqlite3Atta
24a10 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ch(Parse*, Expr*
24a20 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b  , Expr*, Expr*);
24a30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74  .void sqlite3Det
24a40 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
24a50 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24a60 46 69 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a  FixInit(DbFixer*
24a70 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63  , Parse*, int, c
24a80 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
24a90 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  t Token*);.int s
24aa0 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73 74  qlite3FixSrcList
24ab0 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69  (DbFixer*, SrcLi
24ac0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
24ad0 33 46 69 78 53 65 6c 65 63 74 28 44 62 46 69 78  3FixSelect(DbFix
24ae0 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
24af0 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70  nt sqlite3FixExp
24b00 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72  r(DbFixer*, Expr
24b10 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
24b20 69 78 45 78 70 72 4c 69 73 74 28 44 62 46 69 78  ixExprList(DbFix
24b30 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  er*, ExprList*);
24b40 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54  .int sqlite3FixT
24b50 72 69 67 67 65 72 53 74 65 70 28 44 62 46 69 78  riggerStep(DbFix
24b60 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  er*, TriggerStep
24b70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
24b80 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  toF(const char *
24b90 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c  z, double*, int,
24ba0 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
24bb0 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20  3GetInt32(const 
24bc0 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69  char *, int*);.i
24bd0 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63  nt sqlite3Atoi(c
24be0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
24bf0 20 73 71 6c 69 74 65 33 55 74 66 31 36 42 79 74   sqlite3Utf16Byt
24c00 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20  eLen(const void 
24c10 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61  *pData, int nCha
24c20 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55  r);.int sqlite3U
24c30 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74  tf8CharLen(const
24c40 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69 6e   char *pData, in
24c50 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73 71  t nByte);.u32 sq
24c60 6c 69 74 65 33 55 74 66 38 52 65 61 64 28 63 6f  lite3Utf8Read(co
24c70 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73  nst u8**);.LogEs
24c80 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28  t sqlite3LogEst(
24c90 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c  u64);.LogEst sql
24ca0 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f  ite3LogEstAdd(Lo
24cb0 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69  gEst,LogEst);.#i
24cc0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
24cd0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c  T_VIRTUALTABLE.L
24ce0 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
24cf0 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f  EstFromDouble(do
24d00 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 75 36  uble);.#endif.u6
24d10 34 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54  4 sqlite3LogEstT
24d20 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 0a 2f  oInt(LogEst);../
24d30 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f  *.** Routines to
24d40 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20   read and write 
24d50 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
24d60 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73 65  integers.  These
24d70 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64   used to.** be d
24d80 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20  efined locally, 
24d90 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74  but now we use t
24da0 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e  he varint routin
24db0 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63  es in the util.c
24dc0 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74  .** file..*/.int
24dd0 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
24de0 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  t(unsigned char*
24df0 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c 69 74  , u64);.u8 sqlit
24e00 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73  e3GetVarint(cons
24e10 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
24e20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71  *, u64 *);.u8 sq
24e30 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
24e40 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
24e50 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a  char *, u32 *);.
24e60 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e  int sqlite3Varin
24e70 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a  tLen(u64 v);../*
24e80 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63  .** The common c
24e90 61 73 65 20 69 73 20 66 6f 72 20 61 20 76 61 72  ase is for a var
24ea0 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69 6e 67  int to be a sing
24eb0 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79 20 66  le byte.  They f
24ec0 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72  ollowing.** macr
24ed0 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20 63 6f  os handle the co
24ee0 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68 6f 75  mmon case withou
24ef0 74 20 61 20 70 72 6f 63 65 64 75 72 65 20 63 61  t a procedure ca
24f00 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63 61 6c  ll, but then cal
24f10 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65 64 75  l.** the procedu
24f20 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20 76 61  re for larger va
24f30 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  rints..*/.#defin
24f40 65 20 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c  e getVarint32(A,
24f50 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a 28  B)  \.  (u8)((*(
24f60 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28 42  A)<(u8)0x80)?((B
24f70 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a 73  )=(u32)*(A)),1:s
24f80 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
24f90 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28 42  2((A),(u32 *)&(B
24fa0 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74 56  ))).#define putV
24fb0 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a  arint32(A,B)  \.
24fc0 20 20 28 75 38 29 28 28 28 75 33 32 29 28 42 29    (u8)(((u32)(B)
24fd0 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28 41  <(u32)0x80)?(*(A
24fe0 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  )=(unsigned char
24ff0 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69  )(B)),1:\.  sqli
25000 74 65 33 50 75 74 56 61 72 69 6e 74 28 28 41 29  te3PutVarint((A)
25010 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67  ,(B))).#define g
25020 65 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69  etVarint    sqli
25030 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65  te3GetVarint.#de
25040 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20  fine putVarint  
25050 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69    sqlite3PutVari
25060 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20  nt...const char 
25070 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66  *sqlite3IndexAff
25080 69 6e 69 74 79 53 74 72 28 56 64 62 65 20 2a 2c  inityStr(Vdbe *,
25090 20 49 6e 64 65 78 20 2a 29 3b 0a 76 6f 69 64 20   Index *);.void 
250a0 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69  sqlite3TableAffi
250b0 6e 69 74 79 28 56 64 62 65 2a 2c 20 54 61 62 6c  nity(Vdbe*, Tabl
250c0 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 73  e*, int);.char s
250d0 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66  qlite3CompareAff
250e0 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70  inity(Expr *pExp
250f0 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69  r, char aff2);.i
25100 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41  nt sqlite3IndexA
25110 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a  ffinityOk(Expr *
25120 70 45 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f  pExpr, char idx_
25130 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20  affinity);.char 
25140 73 71 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e  sqlite3ExprAffin
25150 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 29  ity(Expr *pExpr)
25160 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
25170 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  i64(const char*,
25180 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b   i64*, int, u8);
25190 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f  .int sqlite3DecO
251a0 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20  rHexToI64(const 
251b0 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f  char*, i64*);.vo
251c0 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57  id sqlite3ErrorW
251d0 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c  ithMsg(sqlite3*,
251e0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
251f0 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  *,...);.void sql
25200 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65  ite3Error(sqlite
25210 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  3*,int);.void *s
25220 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28  qlite3HexToBlob(
25230 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
25240 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b  char *z, int n);
25250 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f  .u8 sqlite3HexTo
25260 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20  Int(int h);.int 
25270 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61  sqlite3TwoPartNa
25280 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65  me(Parse *, Toke
25290 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f  n *, Token *, To
252a0 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65  ken **);..#if de
252b0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
252c0 54 29 20 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  T) .const char *
252d0 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69  sqlite3ErrName(i
252e0 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e  nt);.#endif..con
252f0 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
25300 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74  ErrStr(int);.int
25310 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
25320 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ma(Parse *pParse
25330 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
25340 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73  te3FindCollSeq(s
25350 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20  qlite3*,u8 enc, 
25360 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
25370 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
25380 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28  e3LocateCollSeq(
25390 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63  Parse *pParse, c
253a0 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29  onst char*zName)
253b0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
253c0 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61  e3ExprCollSeq(Pa
253d0 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
253e0 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20  r *pExpr);.Expr 
253f0 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43  *sqlite3ExprAddC
25400 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72 73  ollateToken(Pars
25410 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 2a  e *pParse, Expr*
25420 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20  , const Token*, 
25430 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
25440 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74  te3ExprAddCollat
25450 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c 45  eString(Parse*,E
25460 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  xpr*,const char*
25470 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
25480 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28  ExprSkipCollate(
25490 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
254a0 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28  te3CheckCollSeq(
254b0 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71  Parse *, CollSeq
254c0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
254d0 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28  CheckObjectName(
254e0 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63  Parse *, const c
254f0 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  har *);.void sql
25500 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67  ite3VdbeSetChang
25510 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e  es(sqlite3 *, in
25520 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  t);.int sqlite3A
25530 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ddInt64(i64*,i64
25540 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75  );.int sqlite3Su
25550 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  bInt64(i64*,i64)
25560 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c  ;.int sqlite3Mul
25570 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
25580 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49  .int sqlite3AbsI
25590 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65  nt32(int);.#ifde
255a0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
255b0 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73  8_3_NAMES.void s
255c0 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78  qlite3FileSuffix
255d0 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  3(const char*, c
255e0 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  har*);.#else.# d
255f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c  efine sqlite3Fil
25600 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65  eSuffix3(X,Y).#e
25610 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47  ndif.u8 sqlite3G
25620 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20  etBoolean(const 
25630 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f  char *z,u8);..co
25640 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  nst void *sqlite
25650 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74  3ValueText(sqlit
25660 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a  e3_value*, u8);.
25670 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65  int sqlite3Value
25680 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61  Bytes(sqlite3_va
25690 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20  lue*, u8);.void 
256a0 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53  sqlite3ValueSetS
256b0 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  tr(sqlite3_value
256c0 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f  *, int, const vo
256d0 69 64 20 2a 2c 75 38 2c 20 0a 20 20 20 20 20 20  id *,u8, .      
256e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256f0 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29    void(*)(void*)
25700 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
25710 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69  alueSetNull(sqli
25720 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69  te3_value*);.voi
25730 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72  d sqlite3ValueFr
25740 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ee(sqlite3_value
25750 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75  *);.sqlite3_valu
25760 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e  e *sqlite3ValueN
25770 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63  ew(sqlite3 *);.c
25780 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31  har *sqlite3Utf1
25790 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20  6to8(sqlite3 *, 
257a0 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
257b0 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
257c0 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28  e3ValueFromExpr(
257d0 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20  sqlite3 *, Expr 
257e0 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74  *, u8, u8, sqlit
257f0 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f  e3_value **);.vo
25800 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41  id sqlite3ValueA
25810 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c  pplyAffinity(sql
25820 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38  ite3_value *, u8
25830 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53  , u8);.#ifndef S
25840 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
25850 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ON.extern const 
25860 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
25870 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65  lite3OpcodePrope
25880 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  rty[];.extern co
25890 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
258a0 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f  r sqlite3UpperTo
258b0 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20  Lower[];.extern 
258c0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
258d0 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70 65  har sqlite3Ctype
258e0 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  Map[];.extern co
258f0 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65  nst Token sqlite
25900 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78  3IntTokens[];.ex
25910 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20  tern SQLITE_WSD 
25920 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f  struct Sqlite3Co
25930 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66  nfig sqlite3Conf
25940 69 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54  ig;.extern SQLIT
25950 45 5f 57 53 44 20 46 75 6e 63 44 65 66 48 61 73  E_WSD FuncDefHas
25960 68 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 46  h sqlite3GlobalF
25970 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65  unctions;.#ifnde
25980 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  f SQLITE_OMIT_WS
25990 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c  D.extern int sql
259a0 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b  ite3PendingByte;
259b0 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76  .#endif.#endif.v
259c0 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50  oid sqlite3RootP
259d0 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33  ageMoved(sqlite3
259e0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
259f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
25a00 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54  eindex(Parse*, T
25a10 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
25a20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
25a30 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  rFunctions(void)
25a40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
25a50 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50  terRenameTable(P
25a60 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
25a70 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
25a80 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f  lite3GetToken(co
25a90 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
25aa0 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69  r *, int *);.voi
25ab0 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50  d sqlite3NestedP
25ac0 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e  arse(Parse*, con
25ad0 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
25ae0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 69  void sqlite3Expi
25af0 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
25b00 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ents(sqlite3*);.
25b10 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53  int sqlite3CodeS
25b20 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 20 2a  ubselect(Parse *
25b30 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69  , Expr *, int, i
25b40 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25b50 33 53 65 6c 65 63 74 50 72 65 70 28 50 61 72 73  3SelectPrep(Pars
25b60 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d  e*, Select*, Nam
25b70 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20  eContext*);.int 
25b80 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e  sqlite3MatchSpan
25b90 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  Name(const char*
25ba0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
25bb0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
25bc0 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
25bd0 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72  lite3ResolveExpr
25be0 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  Names(NameContex
25bf0 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
25c00 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53   sqlite3ResolveS
25c10 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65  electNames(Parse
25c20 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65  *, Select*, Name
25c30 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20  Context*);.void 
25c40 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65  sqlite3ResolveSe
25c50 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61 72 73  lfReference(Pars
25c60 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78  e*,Table*,int,Ex
25c70 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a  pr*,ExprList*);.
25c80 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
25c90 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50  veOrderGroupBy(P
25ca0 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
25cb0 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74  ExprList*, const
25cc0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
25cd0 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75  lite3ColumnDefau
25ce0 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65  lt(Vdbe *, Table
25cf0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76   *, int, int);.v
25d00 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
25d10 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28  FinishAddColumn(
25d20 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Parse *, Token *
25d30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
25d40 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75  lterBeginAddColu
25d50 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  mn(Parse *, SrcL
25d60 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  ist *);.CollSeq 
25d70 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53  *sqlite3GetCollS
25d80 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43  eq(Parse*, u8, C
25d90 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20  ollSeq *, const 
25da0 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c  char*);.char sql
25db0 69 74 65 33 41 66 66 69 6e 69 74 79 54 79 70 65  ite3AffinityType
25dc0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 38  (const char*, u8
25dd0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25de0 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20  Analyze(Parse*, 
25df0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
25e00 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f  .int sqlite3Invo
25e10 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75  keBusyHandler(Bu
25e20 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74  syHandler*);.int
25e30 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73   sqlite3FindDb(s
25e40 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29  qlite3*, Token*)
25e50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  ;.int sqlite3Fin
25e60 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20  dDbName(sqlite3 
25e70 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
25e80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61  ;.int sqlite3Ana
25e90 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65  lysisLoad(sqlite
25ea0 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69  3*,int iDB);.voi
25eb0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49  d sqlite3DeleteI
25ec0 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69  ndexSamples(sqli
25ed0 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f  te3*,Index*);.vo
25ee0 69 64 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c  id sqlite3Defaul
25ef0 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b  tRowEst(Index*);
25f00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
25f10 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f  isterLikeFunctio
25f20 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ns(sqlite3*, int
25f30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
25f40 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c  LikeFunction(sql
25f50 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a  ite3*,Expr*,int*
25f60 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,char*);.void sq
25f70 6c 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69 6c 65  lite3MinimumFile
25f80 46 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c 20 69  Format(Parse*, i
25f90 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
25fa0 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61  qlite3SchemaClea
25fb0 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d  r(void *);.Schem
25fc0 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61  a *sqlite3Schema
25fd0 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42  Get(sqlite3 *, B
25fe0 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  tree *);.int sql
25ff0 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65  ite3SchemaToInde
26000 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53  x(sqlite3 *db, S
26010 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66  chema *);.KeyInf
26020 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
26030 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c  oAlloc(sqlite3*,
26040 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  int,int);.void s
26050 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72  qlite3KeyInfoUnr
26060 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65  ef(KeyInfo*);.Ke
26070 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
26080 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f  yInfoRef(KeyInfo
26090 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
260a0 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64  ite3KeyInfoOfInd
260b0 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78  ex(Parse*, Index
260c0 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  *);.#ifdef SQLIT
260d0 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69  E_DEBUG.int sqli
260e0 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69 74  te3KeyInfoIsWrit
260f0 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b  eable(KeyInfo*);
26100 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
26110 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 73 71  te3CreateFunc(sq
26120 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
26130 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  har *, int, int,
26140 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76 6f 69 64   void *, .  void
26150 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
26160 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
26170 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76  3_value **),.  v
26180 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
26190 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
261a0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20  ite3_value **), 
261b0 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
261c0 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75  _context*),.  Fu
261d0 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44  ncDestructor *pD
261e0 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 69 6e 74  estructor.);.int
261f0 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
26200 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74  sqlite3 *db, int
26210 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70  );.int sqlite3Op
26220 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28 50  enTempDatabase(P
26230 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73  arse *);..void s
26240 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e  qlite3StrAccumIn
26250 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 68  it(StrAccum*, ch
26260 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  ar*, int, int);.
26270 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
26280 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63  ccumAppend(StrAc
26290 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  cum*,const char*
262a0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
262b0 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e  te3StrAccumAppen
262c0 64 41 6c 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63  dAll(StrAccum*,c
262d0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
262e0 64 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64 43  d sqlite3AppendC
262f0 68 61 72 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e  har(StrAccum*,in
26300 74 2c 63 68 61 72 29 3b 0a 63 68 61 72 20 2a 73  t,char);.char *s
26310 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69  qlite3StrAccumFi
26320 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b  nish(StrAccum*);
26330 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
26340 41 63 63 75 6d 52 65 73 65 74 28 53 74 72 41 63  AccumReset(StrAc
26350 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
26360 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69  te3SelectDestIni
26370 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e  t(SelectDest*,in
26380 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  t,int);.Expr *sq
26390 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d  lite3CreateColum
263a0 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  nExpr(sqlite3 *,
263b0 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c   SrcList *, int,
263c0 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c   int);..void sql
263d0 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72  ite3BackupRestar
263e0 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  t(sqlite3_backup
263f0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
26400 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71  3BackupUpdate(sq
26410 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20  lite3_backup *, 
26420 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a  Pgno, const u8 *
26430 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
26440 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
26450 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73 71 6c  R_STAT4.void sql
26460 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74  ite3AnalyzeFunct
26470 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20  ions(void);.int 
26480 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62  sqlite3Stat4Prob
26490 65 53 65 74 56 61 6c 75 65 28 50 61 72 73 65 2a  eSetValue(Parse*
264a0 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64  ,Index*,Unpacked
264b0 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 75  Record**,Expr*,u
264c0 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74  8,int,int*);.int
264d0 20 73 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c   sqlite3Stat4Val
264e0 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65  ueFromExpr(Parse
264f0 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71  *, Expr*, u8, sq
26500 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
26510 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
26520 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63  4ProbeFree(Unpac
26530 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74  kedRecord*);.int
26540 20 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c   sqlite3Stat4Col
26550 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  umn(sqlite3*, co
26560 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
26570 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  int, sqlite3_val
26580 75 65 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ue**);.#endif../
26590 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
265a0 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d  ce to the LEMON-
265b0 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72  generated parser
265c0 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
265d0 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69  3ParserAlloc(voi
265e0 64 2a 28 2a 29 28 75 36 34 29 29 3b 0a 76 6f 69  d*(*)(u64));.voi
265f0 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46  d sqlite3ParserF
26600 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28  ree(void*, void(
26610 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64  *)(void*));.void
26620 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 28 76   sqlite3Parser(v
26630 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e  oid*, int, Token
26640 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65  , Parse*);.#ifde
26650 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43  f YYTRACKMAXSTAC
26660 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c  KDEPTH.  int sql
26670 69 74 65 33 50 61 72 73 65 72 53 74 61 63 6b 50  ite3ParserStackP
26680 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64  eak(void*);.#end
26690 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  if..void sqlite3
266a0 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f  AutoLoadExtensio
266b0 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69  ns(sqlite3*);.#i
266c0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
266d0 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e  T_LOAD_EXTENSION
266e0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
266f0 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73  loseExtensions(s
26700 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a  qlite3*);.#else.
26710 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
26720 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28  CloseExtensions(
26730 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  X).#endif..#ifnd
26740 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
26750 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f  HARED_CACHE.  vo
26760 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  id sqlite3TableL
26770 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74  ock(Parse *, int
26780 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74  , int, u8, const
26790 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a   char *);.#else.
267a0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
267b0 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78  3TableLock(v,w,x
267c0 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ,y,z).#endif..#i
267d0 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
267e0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74  .  int sqlite3Ut
267f0 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63  f8To8(unsigned c
26800 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  har*);.#endif..#
26810 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
26820 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23  T_VIRTUALTABLE.#
26830 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
26840 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20  VtabClear(Y).#  
26850 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
26860 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49  abSync(X,Y) SQLI
26870 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20  TE_OK.#  define 
26880 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62  sqlite3VtabRollb
26890 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ack(X).#  define
268a0 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d   sqlite3VtabComm
268b0 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  it(X).#  define 
268c0 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e  sqlite3VtabInSyn
268d0 63 28 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e  c(db) 0.#  defin
268e0 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63  e sqlite3VtabLoc
268f0 6b 28 58 29 20 0a 23 20 20 64 65 66 69 6e 65 20  k(X) .#  define 
26900 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
26910 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  k(X).#  define s
26920 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
26930 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e  List(X).#  defin
26940 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  e sqlite3VtabSav
26950 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20  epoint(X, Y, Z) 
26960 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66  SQLITE_OK.#  def
26970 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56 54  ine sqlite3GetVT
26980 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61  able(X,Y)  ((VTa
26990 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20  ble*)0).#else.  
269a0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
269b0 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a  bClear(sqlite3 *
269c0 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20  db, Table*);.   
269d0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
269e0 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74  Disconnect(sqlit
269f0 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70  e3 *db, Table *p
26a00 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
26a10 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65  3VtabSync(sqlite
26a20 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20  3 *db, Vdbe*);. 
26a30 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
26a40 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65  bRollback(sqlite
26a50 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73  3 *db);.   int s
26a60 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74  qlite3VtabCommit
26a70 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
26a80 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
26a90 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29  abLock(VTable *)
26aa0 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
26ab0 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62  3VtabUnlock(VTab
26ac0 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  le *);.   void s
26ad0 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
26ae0 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a  List(sqlite3*);.
26af0 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
26b00 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69  abSavepoint(sqli
26b10 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  te3 *, int, int)
26b20 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
26b30 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
26b40 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33  g(Vdbe*, sqlite3
26b50 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62  _vtab*);.   VTab
26b60 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54  le *sqlite3GetVT
26b70 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
26b80 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e  able*);.#  defin
26b90 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53  e sqlite3VtabInS
26ba0 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e  ync(db) ((db)->n
26bb0 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29  VTrans>0 && (db)
26bc0 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65  ->aVTrans==0).#e
26bd0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
26be0 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c  3VtabMakeWritabl
26bf0 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29  e(Parse*,Table*)
26c00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
26c10 61 62 42 65 67 69 6e 50 61 72 73 65 28 50 61 72  abBeginParse(Par
26c20 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
26c30 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74  en*, Token*, int
26c40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
26c50 74 61 62 46 69 6e 69 73 68 50 61 72 73 65 28 50  tabFinishParse(P
26c60 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
26c70 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
26c80 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b  ArgInit(Parse*);
26c90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
26ca0 62 41 72 67 45 78 74 65 6e 64 28 50 61 72 73 65  bArgExtend(Parse
26cb0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
26cc0 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
26cd0 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  reate(sqlite3*, 
26ce0 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  int, const char 
26cf0 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74  *, char **);.int
26d00 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
26d10 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20  Connect(Parse*, 
26d20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Table*);.int sql
26d30 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74  ite3VtabCallDest
26d40 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  roy(sqlite3*, in
26d50 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  t, const char *)
26d60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
26d70 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a  bBegin(sqlite3 *
26d80 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e  , VTable *);.Fun
26d90 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61  cDef *sqlite3Vta
26da0 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f  bOverloadFunctio
26db0 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63  n(sqlite3 *,Func
26dc0 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20  Def*, int nArg, 
26dd0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
26de0 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74  ite3InvalidFunct
26df0 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ion(sqlite3_cont
26e00 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
26e10 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69 74  _value**);.sqlit
26e20 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33  e3_int64 sqlite3
26e30 53 74 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28  StmtCurrentTime(
26e40 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
26e50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  );.int sqlite3Vd
26e60 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78  beParameterIndex
26e70 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68  (Vdbe*, const ch
26e80 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  ar*, int);.int s
26e90 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42 69  qlite3TransferBi
26ea0 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73  ndings(sqlite3_s
26eb0 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73  tmt *, sqlite3_s
26ec0 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  tmt *);.void sql
26ed0 69 74 65 33 50 61 72 73 65 72 52 65 73 65 74 28  ite3ParserReset(
26ee0 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
26ef0 69 74 65 33 52 65 70 72 65 70 61 72 65 28 56 64  ite3Reprepare(Vd
26f00 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  be*);.void sqlit
26f10 65 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c  e3ExprListCheckL
26f20 65 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78  ength(Parse*, Ex
26f30 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63  prList*, const c
26f40 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  har*);.CollSeq *
26f50 73 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d  sqlite3BinaryCom
26f60 70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73  pareCollSeq(Pars
26f70 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70  e *, Expr *, Exp
26f80 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r *);.int sqlite
26f90 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f  3TempInMemory(co
26fa0 6e 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63  nst sqlite3*);.c
26fb0 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
26fc0 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d  e3JournalModenam
26fd0 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  e(int);.#ifndef 
26fe0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
26ff0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65    int sqlite3Che
27000 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a  ckpoint(sqlite3*
27010 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
27020 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73  , int*);.  int s
27030 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74  qlite3WalDefault
27040 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74  Hook(void*,sqlit
27050 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
27060 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  int);.#endif.#if
27070 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
27080 5f 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c  _CTE.  With *sql
27090 69 74 65 33 57 69 74 68 41 64 64 28 50 61 72 73  ite3WithAdd(Pars
270a0 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c  e*,With*,Token*,
270b0 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74  ExprList*,Select
270c0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
270d0 65 33 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c  e3WithDelete(sql
270e0 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20  ite3*,With*);.  
270f0 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68  void sqlite3With
27100 50 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74  Push(Parse*, Wit
27110 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23  h*, u8);.#else.#
27120 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69  define sqlite3Wi
27130 74 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64  thPush(x,y,z).#d
27140 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74  efine sqlite3Wit
27150 68 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e  hDelete(x,y).#en
27160 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74  dif../* Declarat
27170 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f  ions for functio
27180 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c  ns in fkey.c. Al
27190 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72  l of these are r
271a0 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f  eplaced by.** no
271b0 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d  -op macros if OM
271c0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
271d0 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68  s defined. In th
271e0 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69  is case no forei
271f0 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69  gn.** key functi
27200 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c  onality is avail
27210 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52  able. If OMIT_TR
27220 49 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64  IGGER is defined
27230 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52   but.** OMIT_FOR
27240 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c  EIGN_KEY is not,
27250 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68   only some of th
27260 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
27270 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74  no-oped. In.** t
27280 68 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e  his case foreign
27290 20 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64   keys are parsed
272a0 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66  , but no other f
272b0 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20  unctionality is 
272c0 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e  .** provided (en
272d0 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20  forcement of FK 
272e0 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75  constraints requ
272f0 69 72 65 73 20 74 68 65 20 74 72 69 67 67 65 72  ires the trigger
27300 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a  s sub-system)..*
27310 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
27320 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
27330 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69  GN_KEY) && !defi
27340 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
27350 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20  TRIGGER).  void 
27360 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50  sqlite3FkCheck(P
27370 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
27380 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
27390 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
273a0 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50  te3FkDropTable(P
273b0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a  arse*, SrcList *
273c0 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69  , Table*);.  voi
273d0 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f  d sqlite3FkActio
273e0 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ns(Parse*, Table
273f0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
27400 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  t, int*, int);. 
27410 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65   int sqlite3FkRe
27420 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54  quired(Parse*, T
27430 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74  able*, int*, int
27440 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33  );.  u32 sqlite3
27450 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a  FkOldmask(Parse*
27460 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65  , Table*);.  FKe
27470 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65  y *sqlite3FkRefe
27480 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b  rences(Table *);
27490 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
274a0 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e   sqlite3FkAction
274b0 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20  s(a,b,c,d,e,f). 
274c0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
274d0 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c  FkCheck(a,b,c,d,
274e0 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
274f0 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c  qlite3FkDropTabl
27500 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69  e(a,b,c).  #defi
27510 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d  ne sqlite3FkOldm
27520 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20  ask(a,b)        
27530 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
27540 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 61  ite3FkRequired(a
27550 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a 23 65 6e  ,b,c,d)    0.#en
27560 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
27570 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
27580 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  KEY.  void sqlit
27590 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74  e3FkDelete(sqlit
275a0 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  e3 *, Table*);. 
275b0 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f   int sqlite3FkLo
275c0 63 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a  cateIndex(Parse*
275d0 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e  ,Table*,FKey*,In
275e0 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65  dex**,int**);.#e
275f0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
27600 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c  lite3FkDelete(a,
27610 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  b).  #define sql
27620 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
27630 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e  x(a,b,c,d,e).#en
27640 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69  dif.../*.** Avai
27650 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65  lable fault inje
27660 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62  ctors.  Should b
27670 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e  e numbered begin
27680 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a  ning with 0..*/.
27690 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
276a0 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c  AULTINJECTOR_MAL
276b0 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e  LOC     0.#defin
276c0 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e  e SQLITE_FAULTIN
276d0 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20  JECTOR_COUNT    
276e0 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69    1../*.** The i
276f0 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
27700 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20  code in fault.c 
27710 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66  used for identif
27720 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a  ying "benign".**
27730 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73   malloc failures
27740 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70  . This is only p
27750 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45  resent if SQLITE
27760 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
27770 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66  ST.** is not def
27780 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ined..*/.#ifndef
27790 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
277a0 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f 69 64  LTIN_TEST.  void
277b0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
277c0 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ignMalloc(void);
277d0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
277e0 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76  ndBenignMalloc(v
277f0 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  oid);.#else.  #d
27800 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67  efine sqlite3Beg
27810 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  inBenignMalloc()
27820 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
27830 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
27840 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  c().#endif../*.*
27850 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e  * Allowed return
27860 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c   values from sql
27870 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
27880 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  ).*/.#define IN_
27890 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20  INDEX_ROWID     
278a0 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72 63 68     1   /* Search
278b0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
278c0 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  e table */.#defi
278d0 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20  ne IN_INDEX_EPH 
278e0 20 20 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20           2   /* 
278f0 53 65 61 72 63 68 20 61 6e 20 65 70 68 65 6d 65  Search an epheme
27900 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64  ral b-tree */.#d
27910 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49  efine IN_INDEX_I
27920 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20 20 20  NDEX_ASC    3   
27930 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65  /* Existing inde
27940 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23  x ASCENDING */.#
27950 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
27960 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34 20 20  INDEX_DESC   4  
27970 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64   /* Existing ind
27980 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f  ex DESCENDING */
27990 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
279a0 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20 20 35  X_NOOP         5
279b0 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61     /* No table a
279c0 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f  vailable. Use co
279d0 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a  mparisons */./*.
279e0 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73  ** Allowed flags
279f0 20 66 6f 72 20 74 68 65 20 33 72 64 20 70 61 72   for the 3rd par
27a00 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
27a10 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a  3FindInIndex()..
27a20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
27a30 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20  DEX_NOOP_OK     
27a40 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f  0x0001  /* OK to
27a50 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58   return IN_INDEX
27a60 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65  _NOOP */.#define
27a70 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52   IN_INDEX_MEMBER
27a80 53 48 49 50 20 20 30 78 30 30 30 32 20 20 2f 2a  SHIP  0x0002  /*
27a90 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65   IN operator use
27aa0 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68 69 70  d for membership
27ab0 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65   test */.#define
27ac0 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20   IN_INDEX_LOOP  
27ad0 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
27ae0 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65   IN operator use
27af0 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69  d as a loop */.i
27b00 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  nt sqlite3FindIn
27b10 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45  Index(Parse *, E
27b20 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a  xpr *, u32, int*
27b30 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
27b40 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f  E_ENABLE_ATOMIC_
27b50 57 52 49 54 45 0a 20 20 69 6e 74 20 73 71 6c 69  WRITE.  int sqli
27b60 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  te3JournalOpen(s
27b70 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f  qlite3_vfs *, co
27b80 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69  nst char *, sqli
27b90 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c  te3_file *, int,
27ba0 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c   int);.  int sql
27bb0 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28  ite3JournalSize(
27bc0 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a  sqlite3_vfs *);.
27bd0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
27be0 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74  rnalCreate(sqlit
27bf0 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 20 20 69 6e  e3_file *);.  in
27c00 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
27c10 45 78 69 73 74 73 28 73 71 6c 69 74 65 33 5f 66  Exists(sqlite3_f
27c20 69 6c 65 20 2a 70 29 3b 0a 23 65 6c 73 65 0a 20  ile *p);.#else. 
27c30 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
27c40 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 70 56 66 73  JournalSize(pVfs
27c50 29 20 28 28 70 56 66 73 29 2d 3e 73 7a 4f 73 46  ) ((pVfs)->szOsF
27c60 69 6c 65 29 0a 20 20 23 64 65 66 69 6e 65 20 73  ile).  #define s
27c70 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69  qlite3JournalExi
27c80 73 74 73 28 70 29 20 31 0a 23 65 6e 64 69 66 0a  sts(p) 1.#endif.
27c90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d  .void sqlite3Mem
27ca0 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69  JournalOpen(sqli
27cb0 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e 74  te3_file *);.int
27cc0 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e   sqlite3MemJourn
27cd0 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b 0a 69 6e  alSize(void);.in
27ce0 74 20 73 71 6c 69 74 65 33 49 73 4d 65 6d 4a 6f  t sqlite3IsMemJo
27cf0 75 72 6e 61 6c 28 73 71 6c 69 74 65 33 5f 66 69  urnal(sqlite3_fi
27d00 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  le *);..void sql
27d10 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68  ite3ExprSetHeigh
27d20 74 41 6e 64 46 6c 61 67 73 28 50 61 72 73 65 20  tAndFlags(Parse 
27d30 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
27d40 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  );.#if SQLITE_MA
27d50 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20  X_EXPR_DEPTH>0. 
27d60 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65   int sqlite3Sele
27d70 63 74 45 78 70 72 48 65 69 67 68 74 28 53 65 6c  ctExprHeight(Sel
27d80 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  ect *);.  int sq
27d90 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65  lite3ExprCheckHe
27da0 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  ight(Parse*, int
27db0 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
27dc0 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  ne sqlite3Select
27dd0 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30 0a  ExprHeight(x) 0.
27de0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
27df0 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74  3ExprCheckHeight
27e00 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33  (x,y).#endif..u3
27e10 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79 74  2 sqlite3Get4byt
27e20 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f  e(const u8*);.vo
27e30 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62 79  id sqlite3Put4by
27e40 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23  te(u8*, u32);..#
27e50 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
27e60 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
27e70 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  Y.  void sqlite3
27e80 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65  ConnectionBlocke
27e90 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c  d(sqlite3 *, sql
27ea0 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20  ite3 *);.  void 
27eb0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
27ec0 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65  nUnlocked(sqlite
27ed0 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73  3 *db);.  void s
27ee0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
27ef0 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a  Closed(sqlite3 *
27f00 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  db);.#else.  #de
27f10 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
27f20 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c  ectionBlocked(x,
27f30 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  y).  #define sql
27f40 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e  ite3ConnectionUn
27f50 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66  locked(x).  #def
27f60 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
27f70 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23  ctionClosed(x).#
27f80 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
27f90 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69  LITE_DEBUG.  voi
27fa0 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54  d sqlite3ParserT
27fb0 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72  race(FILE*, char
27fc0 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a   *);.#endif../*.
27fd0 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  ** If the SQLITE
27fe0 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45 20  _ENABLE IOTRACE 
27ff0 65 78 69 73 74 73 20 74 68 65 6e 20 74 68 65 20  exists then the 
28000 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0a  global variable.
28010 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  ** sqlite3IoTrac
28020 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  e is a pointer t
28030 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20  o a printf-like 
28040 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f 0a  routine used to.
28050 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72 61  ** print I/O tra
28060 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 20 0a  cing messages. .
28070 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
28080 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a  _ENABLE_IOTRACE.
28090 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45  # define IOTRACE
280a0 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65 33  (A)  if( sqlite3
280b0 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69 74  IoTrace ){ sqlit
280c0 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20  e3IoTrace A; }. 
280d0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62   void sqlite3Vdb
280e0 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65  eIOTraceSql(Vdbe
280f0 2a 29 3b 0a 53 51 4c 49 54 45 5f 45 58 54 45 52  *);.SQLITE_EXTER
28100 4e 20 76 6f 69 64 20 28 2a 73 71 6c 69 74 65 33  N void (*sqlite3
28110 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63  IoTrace)(const c
28120 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65  har*,...);.#else
28130 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
28140 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71  E(A).# define sq
28150 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65  lite3VdbeIOTrace
28160 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f  Sql(X).#endif../
28170 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69  *.** These routi
28180 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c  nes are availabl
28190 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63  e for the mem2.c
281a0 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72   debugging memor
281b0 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f  y allocator.** o
281c0 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20 75  nly.  They are u
281d0 73 65 64 20 74 6f 20 76 65 72 69 66 79 20 74 68  sed to verify th
281e0 61 74 20 64 69 66 66 65 72 65 6e 74 20 22 74 79  at different "ty
281f0 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a  pes" of memory.*
28200 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72  * allocations ar
28210 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b  e properly track
28220 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d  ed by the system
28230 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  ..**.** sqlite3M
28240 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
28250 20 73 65 74 73 20 74 68 65 20 22 74 79 70 65 22   sets the "type"
28260 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f   of an allocatio
28270 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74  n to one of.** t
28280 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63  he MEMTYPE_* mac
28290 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f  ros defined belo
282a0 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75 73  w.  The type mus
282b0 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77  t be a bitmask w
282c0 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20  ith.** a single 
282d0 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73  bit set..**.** s
282e0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
282f0 73 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20  sType() returns 
28300 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74  true if any of t
28310 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73  he bits in its s
28320 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e  econd.** argumen
28330 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65  t match the type
28340 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76   set by the prev
28350 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64  ious sqlite3Memd
28360 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a  ebugSetType()..*
28370 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
28380 67 48 61 73 54 79 70 65 28 29 20 69 73 20 69 6e  gHasType() is in
28390 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69  tended for use i
283a0 6e 73 69 64 65 20 61 73 73 65 72 74 28 29 20 73  nside assert() s
283b0 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
283c0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
283d0 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e 73  NoType() returns
283e0 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66   true if none of
283f0 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73   the bits in its
28400 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d   second.** argum
28410 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79  ent match the ty
28420 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72  pe set by the pr
28430 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65  evious sqlite3Me
28440 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e  mdebugSetType().
28450 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74  .**.** Perhaps t
28460 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e  he most importan
28470 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64  t point is the d
28480 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
28490 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a  n MEMTYPE_HEAP.*
284a0 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f  * and MEMTYPE_LO
284b0 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20  OKASIDE.  If an 
284c0 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45  allocation is ME
284d0 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c  MTYPE_LOOKASIDE,
284e0 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69   that means.** i
284f0 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65  t might have bee
28500 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c  n allocated by l
28510 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74  ookaside, except
28520 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20   the allocation 
28530 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65  was.** too large
28540 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61   or lookaside wa
28550 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20  s already full. 
28560 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74   It is important
28570 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68   to verify.** th
28580 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74  at allocations t
28590 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20 62  hat might have b
285a0 65 65 6e 20 73 61 74 69 73 66 69 65 64 20 62 79  een satisfied by
285b0 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e   lookaside are n
285c0 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63  ot.** passed bac
285d0 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69  k to non-lookasi
285e0 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e  de free() routin
285f0 65 73 2e 20 20 41 73 73 65 72 74 73 20 73 75 63  es.  Asserts suc
28600 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d  h as the.** exam
28610 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c  ple above are pl
28620 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d  aced on the non-
28630 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29  lookaside free()
28640 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72   routines to ver
28650 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73  ify.** this cons
28660 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20 41  traint. .**.** A
28670 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f  ll of this is no
28680 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63  -op for a produc
28690 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20  tion build.  It 
286a0 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a  only comes into.
286b0 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65  ** play when the
286c0 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
286d0 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
286e0 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f  tion is used..*/
286f0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d  .#ifdef SQLITE_M
28700 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73  EMDEBUG.  void s
28710 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
28720 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  tType(void*,u8);
28730 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  .  int sqlite3Me
28740 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 76 6f  mdebugHasType(vo
28750 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73  id*,u8);.  int s
28760 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
28770 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a  Type(void*,u8);.
28780 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
28790 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
287a0 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e  tType(X,Y)  /* n
287b0 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65  o-op */.# define
287c0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
287d0 48 61 73 54 79 70 65 28 58 2c 59 29 20 20 31 0a  HasType(X,Y)  1.
287e0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
287f0 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58  MemdebugNoType(X
28800 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23  ,Y)   1.#endif.#
28810 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48  define MEMTYPE_H
28820 45 41 50 20 20 20 20 20 20 20 30 78 30 31 20 20  EAP       0x01  
28830 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20  /* General heap 
28840 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23  allocations */.#
28850 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c  define MEMTYPE_L
28860 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20 20  OOKASIDE  0x02  
28870 2f 2a 20 48 65 61 70 20 74 68 61 74 20 6d 69 67  /* Heap that mig
28880 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f  ht have been loo
28890 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65 66 69 6e  kaside */.#defin
288a0 65 20 4d 45 4d 54 59 50 45 5f 53 43 52 41 54 43  e MEMTYPE_SCRATC
288b0 48 20 20 20 20 30 78 30 34 20 20 2f 2a 20 53 63  H    0x04  /* Sc
288c0 72 61 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e  ratch allocation
288d0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  s */.#define MEM
288e0 54 59 50 45 5f 50 43 41 43 48 45 20 20 20 20 20  TYPE_PCACHE     
288f0 30 78 30 38 20 20 2f 2a 20 50 61 67 65 20 63 61  0x08  /* Page ca
28900 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  che allocations 
28910 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64  */../*.** Thread
28920 69 6e 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f  ing interface.*/
28930 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
28940 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30  WORKER_THREADS>0
28950 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65  .int sqlite3Thre
28960 61 64 43 72 65 61 74 65 28 53 51 4c 69 74 65 54  adCreate(SQLiteT
28970 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29  hread**,void*(*)
28980 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a  (void*),void*);.
28990 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61  int sqlite3Threa
289a0 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65  dJoin(SQLiteThre
289b0 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65  ad*, void**);.#e
289c0 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  ndif..#endif /* 
289d0 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f  _SQLITEINT_H_ */
289e0 0a                                               .