/ Hex Artifact Content
Login

Artifact b536f3d79fd2ce71daac7fe618f8c919e705621a:


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 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
4d30: 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
4d40: 20 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73 20   the machine is 
4d50: 62 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e  big or little en
4d60: 64 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20 77 68 65  dian,.** and whe
4d70: 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74  ther or not that
4d80: 20 64 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 69   determination i
4d90: 73 20 72 75 6e 2d 74 69 6d 65 20 6f 72 20 63 6f  s run-time or co
4da0: 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a  mpile-time..**.*
4db0: 2a 20 46 6f 72 20 62 65 73 74 20 70 65 72 66 6f  * For best perfo
4dc0: 72 6d 61 6e 63 65 2c 20 61 6e 20 61 74 74 65 6d  rmance, an attem
4dd0: 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67 75  pt is made to gu
4de0: 65 73 73 20 61 74 20 74 68 65 20 62 79 74 65 2d  ess at the byte-
4df0: 6f 72 64 65 72 0a 2a 2a 20 75 73 69 6e 67 20 43  order.** using C
4e00: 2d 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61  -preprocessor ma
4e10: 63 72 6f 73 2e 20 20 49 66 20 74 68 61 74 20 69  cros.  If that i
4e20: 73 20 75 6e 73 75 63 63 65 73 73 66 75 6c 2c 20  s unsuccessful, 
4e30: 6f 72 20 69 66 0a 2a 2a 20 2d 44 53 51 4c 49 54  or if.** -DSQLIT
4e40: 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52  E_RUNTIME_BYTEOR
4e50: 44 45 52 3d 31 20 69 73 20 73 65 74 2c 20 74 68  DER=1 is set, th
4e60: 65 6e 20 62 79 74 65 2d 6f 72 64 65 72 20 69 73  en byte-order is
4e70: 20 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61   determined.** a
4e80: 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23  t run-time..*/.#
4e90: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  ifdef SQLITE_AMA
4ea0: 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e 73 74 20  LGAMATION.const 
4eb0: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d  int sqlite3one =
4ec0: 20 31 3b 0a 23 65 6c 73 65 0a 65 78 74 65 72 6e   1;.#else.extern
4ed0: 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74   const int sqlit
4ee0: 65 33 6f 6e 65 3b 0a 23 65 6e 64 69 66 0a 23 69  e3one;.#endif.#i
4ef0: 66 20 28 64 65 66 69 6e 65 64 28 69 33 38 36 29  f (defined(i386)
4f00: 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28       || defined(
4f10: 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64  __i386__)   || d
4f20: 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20  efined(_M_IX86) 
4f30: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66  ||    \.     def
4f40: 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c  ined(__x86_64) |
4f50: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f  | defined(__x86_
4f60: 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64  64__) || defined
4f70: 28 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20  (_M_X64)  ||    
4f80: 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f  \.     defined(_
4f90: 4d 5f 41 4d 44 36 34 29 20 7c 7c 20 64 65 66 69  M_AMD64) || defi
4fa0: 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20  ned(_M_ARM)     
4fb0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36  || defined(__x86
4fc0: 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20  )   ||    \.    
4fd0: 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f   defined(__arm__
4fe0: 29 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  )) && !defined(S
4ff0: 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59  QLITE_RUNTIME_BY
5000: 54 45 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e  TEORDER).# defin
5010: 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  e SQLITE_BYTEORD
5020: 45 52 20 20 20 20 31 32 33 34 0a 23 20 64 65 66  ER    1234.# def
5030: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
5040: 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69  DIAN    0.# defi
5050: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
5060: 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e  ENDIAN 1.# defin
5070: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
5080: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
5090: 31 36 4c 45 0a 23 65 6e 64 69 66 0a 23 69 66 20  16LE.#endif.#if 
50a0: 28 64 65 66 69 6e 65 64 28 73 70 61 72 63 29 20  (defined(sparc) 
50b0: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
50c0: 70 70 63 5f 5f 29 29 20 20 5c 0a 20 20 20 20 26  ppc__))  \.    &
50d0: 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
50e0: 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52  E_RUNTIME_BYTEOR
50f0: 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51  DER).# define SQ
5100: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20  LITE_BYTEORDER  
5110: 20 20 34 33 32 31 0a 23 20 64 65 66 69 6e 65 20    4321.# define 
5120: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
5130: 20 20 20 20 31 0a 23 20 64 65 66 69 6e 65 20 53      1.# define S
5140: 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49  QLITE_LITTLEENDI
5150: 41 4e 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51  AN 0.# define SQ
5160: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
5170: 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45    SQLITE_UTF16BE
5180: 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66  .#endif.#if !def
5190: 69 6e 65 64 28 53 51 4c 49 54 45 5f 42 59 54 45  ined(SQLITE_BYTE
51a0: 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20  ORDER).# define 
51b0: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
51c0: 20 20 20 20 30 20 20 20 20 20 2f 2a 20 30 20 6d      0     /* 0 m
51d0: 65 61 6e 73 20 22 75 6e 6b 6e 6f 77 6e 20 61 74  eans "unknown at
51e0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 22 20 2a   compile-time" *
51f0: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
5200: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 28  E_BIGENDIAN    (
5210: 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74  *(char *)(&sqlit
5220: 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66  e3one)==0).# def
5230: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c  ine SQLITE_LITTL
5240: 45 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72 20  EENDIAN (*(char 
5250: 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d  *)(&sqlite3one)=
5260: 3d 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  =1).# define SQL
5270: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
5280: 20 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49   (SQLITE_BIGENDI
5290: 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42  AN?SQLITE_UTF16B
52a0: 45 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  E:SQLITE_UTF16LE
52b0: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
52c0: 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68  Constants for th
52d0: 65 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d  e largest and sm
52e0: 61 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20  allest possible 
52f0: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
5300: 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65  tegers..** These
5310: 20 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69   macros are desi
5320: 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72  gned to work cor
5330: 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33  rectly on both 3
5340: 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74  2-bit and 64-bit
5350: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a  .** compilers..*
5360: 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53  /.#define LARGES
5370: 54 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66  T_INT64  (0xffff
5380: 66 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66  ffff|(((i64)0x7f
5390: 66 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64  ffffff)<<32)).#d
53a0: 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49  efine SMALLEST_I
53b0: 4e 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20  NT64 (((i64)-1) 
53c0: 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29  - LARGEST_INT64)
53d0: 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e 64 20 75  ../* .** Round u
53e0: 70 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68  p a number to th
53f0: 65 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75  e next larger mu
5400: 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68  ltiple of 8.  Th
5410: 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f  is is used.** to
5420: 20 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c   force 8-byte al
5430: 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69  ignment on 64-bi
5440: 74 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2e  t architectures.
5450: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
5460: 44 38 28 78 29 20 20 20 20 20 28 28 28 78 29 2b  D8(x)     (((x)+
5470: 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f  7)&~7)../*.** Ro
5480: 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20  und down to the 
5490: 6e 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65  nearest multiple
54a0: 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65   of 8.*/.#define
54b0: 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28   ROUNDDOWN8(x) (
54c0: 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41  (x)&~7)../*.** A
54d0: 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70  ssert that the p
54e0: 6f 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67  ointer X is alig
54f0: 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65  ned to an 8-byte
5500: 20 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73   boundary.  This
5510: 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65  .** macro is use
5520: 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73  d only within as
5530: 73 65 72 74 28 29 20 74 6f 20 76 65 72 69 66 79  sert() to verify
5540: 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67   that the code g
5550: 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e  ets.** all align
5560: 6d 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e  ment restriction
5570: 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a  s correct..**.**
5580: 20 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49   Except, if SQLI
5590: 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45  TE_4_BYTE_ALIGNE
55a0: 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69  D_MALLOC is defi
55b0: 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ned, then the.**
55c0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c   underlying mall
55d0: 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74  oc() implementat
55e0: 69 6f 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e  ion might return
55f0: 20 75 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e   us 4-byte align
5600: 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20  ed.** pointers. 
5610: 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f   In that case, o
5620: 6e 6c 79 20 76 65 72 69 66 79 20 34 2d 62 79 74  nly verify 4-byt
5630: 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a  e alignment..*/.
5640: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f  #ifdef SQLITE_4_
5650: 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c  BYTE_ALIGNED_MAL
5660: 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47  LOC.# define EIG
5670: 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e  HT_BYTE_ALIGNMEN
5680: 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72 2a  T(X)   ((((char*
5690: 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29  )(X) - (char*)0)
56a0: 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20  &3)==0).#else.# 
56b0: 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54  define EIGHT_BYT
56c0: 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20  E_ALIGNMENT(X)  
56d0: 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d   ((((char*)(X) -
56e0: 20 28 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30   (char*)0)&7)==0
56f0: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
5700: 44 69 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20  Disable MMAP on 
5710: 70 6c 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20  platforms where 
5720: 69 74 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e  it is known to n
5730: 6f 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64  ot work.*/.#if d
5740: 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44  efined(__OpenBSD
5750: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  __) || defined(_
5760: 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64  _QNXNTO__).# und
5770: 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ef SQLITE_MAX_MM
5780: 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65  AP_SIZE.# define
5790: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
57a0: 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a  _SIZE 0.#endif..
57b0: 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61  /*.** Default ma
57c0: 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65  ximum size of me
57d0: 6d 6f 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d  mory used by mem
57e0: 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69  ory-mapped I/O i
57f0: 6e 20 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66  n the VFS.*/.#if
5800: 64 65 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20  def __APPLE__.# 
5810: 69 6e 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43  include <TargetC
5820: 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23  onditionals.h>.#
5830: 20 69 66 20 54 41 52 47 45 54 5f 4f 53 5f 49 50   if TARGET_OS_IP
5840: 48 4f 4e 45 0a 23 20 20 20 75 6e 64 65 66 20 53  HONE.#   undef S
5850: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
5860: 49 5a 45 0a 23 20 20 20 64 65 66 69 6e 65 20 53  IZE.#   define S
5870: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
5880: 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65  IZE 0.# endif.#e
5890: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
58a0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
58b0: 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f  E.# if defined(_
58c0: 5f 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c  _linux__) \.  ||
58d0: 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29   defined(_WIN32)
58e0: 20 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64   \.  || (defined
58f0: 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64  (__APPLE__) && d
5900: 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29  efined(__MACH__)
5910: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
5920: 28 5f 5f 73 75 6e 29 0a 23 20 20 20 64 65 66 69  (__sun).#   defi
5930: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
5940: 41 50 5f 53 49 5a 45 20 30 78 37 66 66 66 30 30  AP_SIZE 0x7fff00
5950: 30 30 20 20 2f 2a 20 32 31 34 37 34 31 38 31 31  00  /* 214741811
5960: 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20 20  2 */.# else.#   
5970: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
5980: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20  X_MMAP_SIZE 0.# 
5990: 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53  endif.# define S
59a0: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
59b0: 49 5a 45 5f 78 63 20 31 20 2f 2a 20 65 78 63 6c  IZE_xc 1 /* excl
59c0: 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63  ude from ctime.c
59d0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
59e0: 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 4d 4d  * The default MM
59f0: 41 50 5f 53 49 5a 45 20 69 73 20 7a 65 72 6f 20  AP_SIZE is zero 
5a00: 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f 72 6d 73  on all platforms
5a10: 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69 66 20 61  .  Or, even if a
5a20: 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65 66 61 75   larger.** defau
5a30: 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20  lt MMAP_SIZE is 
5a40: 73 70 65 63 69 66 69 65 64 20 61 74 20 63 6f 6d  specified at com
5a50: 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b 65 20  pile-time, make 
5a60: 73 75 72 65 20 74 68 61 74 20 69 74 20 64 6f 65  sure that it doe
5a70: 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64 20  s.** not exceed 
5a80: 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d 6d 61 70  the maximum mmap
5a90: 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65   size..*/.#ifnde
5aa0: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
5ab0: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66  _MMAP_SIZE.# def
5ac0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
5ad0: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  LT_MMAP_SIZE 0.#
5ae0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
5af0: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
5b00: 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64  _xc 1  /* Exclud
5b10: 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a  e from ctime.c *
5b20: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  /.#endif.#if SQL
5b30: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
5b40: 5f 53 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41 58  _SIZE>SQLITE_MAX
5b50: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e 64  _MMAP_SIZE.# und
5b60: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
5b70: 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65  T_MMAP_SIZE.# de
5b80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
5b90: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53 51  ULT_MMAP_SIZE SQ
5ba0: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
5bb0: 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ZE.#endif../*.**
5bc0: 20 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20 53 51 4c   Only one of SQL
5bd0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
5be0: 20 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   or SQLITE_ENABL
5bf0: 45 5f 53 54 41 54 34 20 63 61 6e 20 62 65 20 64  E_STAT4 can be d
5c00: 65 66 69 6e 65 64 2e 0a 2a 2a 20 50 72 69 6f 72  efined..** Prior
5c10: 69 74 79 20 69 73 20 67 69 76 65 6e 20 74 6f 20  ity is given to 
5c20: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
5c30: 41 54 34 2e 20 20 49 66 20 65 69 74 68 65 72 20  AT4.  If either 
5c40: 61 72 65 20 64 65 66 69 6e 65 64 2c 20 61 6c 73  are defined, als
5c50: 6f 0a 2a 2a 20 64 65 66 69 6e 65 20 53 51 4c 49  o.** define SQLI
5c60: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
5c70: 4f 52 5f 53 54 41 54 34 0a 2a 2f 0a 23 69 66 64  OR_STAT4.*/.#ifd
5c80: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
5c90: 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53  _STAT4.# undef S
5ca0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
5cb0: 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  T3.# define SQLI
5cc0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
5cd0: 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66  OR_STAT4 1.#elif
5ce0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
5cf0: 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51  TAT3.# define SQ
5d00: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
5d10: 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c  3_OR_STAT4 1.#el
5d20: 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  if SQLITE_ENABLE
5d30: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
5d40: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
5d50: 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
5d60: 54 41 54 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  TAT4.#endif../*.
5d70: 2a 2a 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45  ** SELECTTRACE_E
5d80: 4e 41 42 4c 45 44 20 77 69 6c 6c 20 62 65 20 65  NABLED will be e
5d90: 69 74 68 65 72 20 31 20 6f 72 20 30 20 64 65 70  ither 1 or 0 dep
5da0: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
5db0: 72 20 6f 72 20 6e 6f 74 0a 2a 2a 20 74 68 65 20  r or not.** the 
5dc0: 53 65 6c 65 63 74 20 71 75 65 72 79 20 67 65 6e  Select query gen
5dd0: 65 72 61 74 6f 72 20 74 72 61 63 69 6e 67 20 6c  erator tracing l
5de0: 6f 67 69 63 20 69 73 20 74 75 72 6e 65 64 20 6f  ogic is turned o
5df0: 6e 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  n..*/.#if define
5e00: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
5e10: 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
5e20: 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54  E_ENABLE_SELECTT
5e30: 52 41 43 45 29 0a 23 20 64 65 66 69 6e 65 20 53  RACE).# define S
5e40: 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
5e50: 45 44 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66  ED 1.#else.# def
5e60: 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43 45 5f  ine SELECTTRACE_
5e70: 45 4e 41 42 4c 45 44 20 30 0a 23 65 6e 64 69 66  ENABLED 0.#endif
5e80: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
5e90: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
5ea0: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
5eb0: 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
5ec0: 74 68 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72  the busy-handler
5ed0: 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  .** callback for
5ee0: 20 61 20 67 69 76 65 6e 20 73 71 6c 69 74 65 20   a given sqlite 
5ef0: 68 61 6e 64 6c 65 2e 20 0a 2a 2a 0a 2a 2a 20 54  handle. .**.** T
5f00: 68 65 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61  he sqlite.busyHa
5f10: 6e 64 6c 65 72 20 6d 65 6d 62 65 72 20 6f 66 20  ndler member of 
5f20: 74 68 65 20 73 71 6c 69 74 65 20 73 74 72 75 63  the sqlite struc
5f30: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 62  t contains the b
5f40: 75 73 79 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20  usy.** callback 
5f50: 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
5f60: 20 68 61 6e 64 6c 65 2e 20 45 61 63 68 20 70 61   handle. Each pa
5f70: 67 65 72 20 6f 70 65 6e 65 64 20 76 69 61 20 74  ger opened via t
5f80: 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e  he sqlite.** han
5f90: 64 6c 65 20 69 73 20 70 61 73 73 65 64 20 61 20  dle is passed a 
5fa0: 70 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74  pointer to sqlit
5fb0: 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 2e 20 54  e.busyHandler. T
5fc0: 68 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a  he busy-handler.
5fd0: 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 63  ** callback is c
5fe0: 75 72 72 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64  urrently invoked
5ff0: 20 6f 6e 6c 79 20 66 72 6f 6d 20 77 69 74 68 69   only from withi
6000: 6e 20 70 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79  n pager.c..*/.ty
6010: 70 65 64 65 66 20 73 74 72 75 63 74 20 42 75 73  pedef struct Bus
6020: 79 48 61 6e 64 6c 65 72 20 42 75 73 79 48 61 6e  yHandler BusyHan
6030: 64 6c 65 72 3b 0a 73 74 72 75 63 74 20 42 75 73  dler;.struct Bus
6040: 79 48 61 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74  yHandler {.  int
6050: 20 28 2a 78 46 75 6e 63 29 28 76 6f 69 64 20 2a   (*xFunc)(void *
6060: 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68 65 20 62  ,int);  /* The b
6070: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
6080: 20 20 76 6f 69 64 20 2a 70 41 72 67 3b 20 20 20    void *pArg;   
6090: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
60a0: 46 69 72 73 74 20 61 72 67 20 74 6f 20 62 75 73  First arg to bus
60b0: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
60c0: 69 6e 74 20 6e 42 75 73 79 3b 20 20 20 20 20 20  int nBusy;      
60d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
60e0: 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65  cremented with e
60f0: 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20 2a 2f  ach busy call */
6100: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20  .};../*.** Name 
6110: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
6120: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20 54  tabase table.  T
6130: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
6140: 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61  se table.** is a
6150: 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20 74   special table t
6160: 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61  hat holds the na
6170: 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75 74  mes and attribut
6180: 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65  es of all.** use
6190: 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  r tables and ind
61a0: 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ices..*/.#define
61b0: 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20 20   MASTER_NAME    
61c0: 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65     "sqlite_maste
61d0: 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50 5f  r".#define TEMP_
61e0: 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73 71  MASTER_NAME  "sq
61f0: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
6200: 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f  "../*.** The roo
6210: 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d 61  t-page of the ma
6220: 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61  ster database ta
6230: 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ble..*/.#define 
6240: 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20 20  MASTER_ROOT     
6250: 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e    1../*.** The n
6260: 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d  ame of the schem
6270: 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66  a table..*/.#def
6280: 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c 45  ine SCHEMA_TABLE
6290: 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d  (x)  ((!OMIT_TEM
62a0: 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d  PDB)&&(x==1)?TEM
62b0: 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41  P_MASTER_NAME:MA
62c0: 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a  STER_NAME)../*.*
62d0: 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20  * A convenience 
62e0: 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75 72  macro that retur
62f0: 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
6300: 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20   elements in.** 
6310: 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65  an array..*/.#de
6320: 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28 58  fine ArraySize(X
6330: 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a 65  )    ((int)(size
6340: 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30  of(X)/sizeof(X[0
6350: 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ])))../*.** Dete
6360: 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72 67  rmine if the arg
6370: 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65 72  ument is a power
6380: 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69   of two.*/.#defi
6390: 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f 28  ne IsPowerOfTwo(
63a0: 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31 29  X) (((X)&((X)-1)
63b0: 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  )==0)../*.** The
63c0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65   following value
63d0: 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f 72   as a destructor
63e0: 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73 71   means to use sq
63f0: 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a 2a  lite3DbFree()..*
6400: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62 46  * The sqlite3DbF
6410: 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65  ree() routine re
6420: 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61 6d  quires two param
6430: 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f 66  eters instead of
6440: 20 74 68 65 20 0a 2a 2a 20 6f 6e 65 20 70 61 72   the .** one par
6450: 61 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74  ameter that dest
6460: 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79  ructors normally
6470: 20 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61   want.  So we ha
6480: 76 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 20  ve to introduce 
6490: 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76  .** this magic v
64a0: 61 6c 75 65 20 74 68 61 74 20 74 68 65 20 63 6f  alue that the co
64b0: 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64  de knows to hand
64c0: 6c 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20  le differently. 
64d0: 20 41 6e 79 20 0a 2a 2a 20 70 6f 69 6e 74 65 72   Any .** pointer
64e0: 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20   will work here 
64f0: 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73  as long as it is
6500: 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53   distinct from S
6510: 51 4c 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20  QLITE_STATIC.** 
6520: 61 6e 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  and SQLITE_TRANS
6530: 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  IENT..*/.#define
6540: 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20   SQLITE_DYNAMIC 
6550: 20 20 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74    ((sqlite3_dest
6560: 72 75 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69  ructor_type)sqli
6570: 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a  te3MallocSize)..
6580: 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54  /*.** When SQLIT
6590: 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65  E_OMIT_WSD is de
65a0: 66 69 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20  fined, it means 
65b0: 74 68 61 74 20 74 68 65 20 74 61 72 67 65 74 20  that the target 
65c0: 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a  platform does.**
65d0: 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69   not support Wri
65e0: 74 61 62 6c 65 20 53 74 61 74 69 63 20 44 61 74  table Static Dat
65f0: 61 20 28 57 53 44 29 20 73 75 63 68 20 61 73 20  a (WSD) such as 
6600: 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69  global and stati
6610: 63 20 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20  c variables..** 
6620: 41 6c 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75  All variables mu
6630: 73 74 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20  st either be on 
6640: 74 68 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e  the stack or dyn
6650: 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74  amically allocat
6660: 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68  ed from.** the h
6670: 65 61 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69  eap.  When WSD i
6680: 73 20 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74  s unsupported, t
6690: 68 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c  he variable decl
66a0: 61 72 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72  arations scatter
66b0: 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74  ed.** throughout
66c0: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65   the SQLite code
66d0: 20 6d 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e   must become con
66e0: 73 74 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20  stants instead. 
66f0: 20 54 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a   The SQLITE_WSD.
6700: 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  ** macro is used
6710: 20 66 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73   for this purpos
6720: 65 2e 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20  e.  And instead 
6730: 6f 66 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74  of referencing t
6740: 68 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64  he variable.** d
6750: 69 72 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20  irectly, we use 
6760: 69 74 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20  its constant as 
6770: 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20  a key to lookup 
6780: 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c  the run-time all
6790: 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72  ocated.** buffer
67a0: 20 74 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c   that holds real
67b0: 20 76 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20   variable.  The 
67c0: 63 6f 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f  constant is also
67d0: 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72   the initializer
67e0: 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d  .** for the run-
67f0: 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62  time allocated b
6800: 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  uffer..**.** In 
6810: 74 68 65 20 75 73 75 61 6c 20 63 61 73 65 20 77  the usual case w
6820: 68 65 72 65 20 57 53 44 20 69 73 20 73 75 70 70  here WSD is supp
6830: 6f 72 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54  orted, the SQLIT
6840: 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c  E_WSD and GLOBAL
6850: 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d  .** macros becom
6860: 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76  e no-ops and hav
6870: 65 20 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e  e zero performan
6880: 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69  ce impact..*/.#i
6890: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
68a0: 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53  _WSD.  #define S
68b0: 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a  QLITE_WSD const.
68c0: 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c    #define GLOBAL
68d0: 28 74 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69  (t,v) (*(t*)sqli
68e0: 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f  te3_wsd_find((vo
68f0: 69 64 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66  id*)&(v), sizeof
6900: 28 76 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20  (v))).  #define 
6910: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
6920: 66 69 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63  fig GLOBAL(struc
6930: 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c  t Sqlite3Config,
6940: 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a   sqlite3Config).
6950: 20 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73    int sqlite3_ws
6960: 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e  d_init(int N, in
6970: 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71  t J);.  void *sq
6980: 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76  lite3_wsd_find(v
6990: 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a  oid *K, int L);.
69a0: 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
69b0: 53 51 4c 49 54 45 5f 57 53 44 20 0a 20 20 23 64  SQLITE_WSD .  #d
69c0: 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76  efine GLOBAL(t,v
69d0: 29 20 76 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ) v.  #define sq
69e0: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
69f0: 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a  g sqlite3Config.
6a00: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
6a10: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
6a20: 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73  os are used to s
6a30: 75 70 70 72 65 73 73 20 63 6f 6d 70 69 6c 65 72  uppress compiler
6a40: 20 77 61 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f   warnings and to
6a50: 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63 6c 65 61  .** make it clea
6a60: 72 20 74 6f 20 68 75 6d 61 6e 20 72 65 61 64 65  r to human reade
6a70: 72 73 20 77 68 65 6e 20 61 20 66 75 6e 63 74 69  rs when a functi
6a80: 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  on parameter is 
6a90: 64 65 6c 69 62 65 72 61 74 65 6c 79 20 0a 2a 2a  deliberately .**
6aa0: 20 6c 65 66 74 20 75 6e 75 73 65 64 20 77 69 74   left unused wit
6ab0: 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20  hin the body of 
6ac0: 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73  a function. This
6ad0: 20 75 73 75 61 6c 6c 79 20 68 61 70 70 65 6e 73   usually happens
6ae0: 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75 6e 63 74   when.** a funct
6af0: 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20 76 69  ion is called vi
6b00: 61 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  a a function poi
6b10: 6e 74 65 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c  nter. For exampl
6b20: 65 20 74 68 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d  e the .** implem
6b30: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53  entation of an S
6b40: 51 4c 20 61 67 67 72 65 67 61 74 65 20 73 74 65  QL aggregate ste
6b50: 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e  p callback may n
6b60: 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a 20 70 61  ot use the.** pa
6b70: 72 61 6d 65 74 65 72 20 69 6e 64 69 63 61 74 69  rameter indicati
6b80: 6e 67 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ng the number of
6b90: 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65   arguments passe
6ba0: 64 20 74 6f 20 74 68 65 20 61 67 67 72 65 67 61  d to the aggrega
6bb0: 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f  te,.** if it kno
6bc0: 77 73 20 74 68 61 74 20 74 68 69 73 20 69 73 20  ws that this is 
6bd0: 65 6e 66 6f 72 63 65 64 20 65 6c 73 65 77 68 65  enforced elsewhe
6be0: 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61  re..**.** When a
6bf0: 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65   function parame
6c00: 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 20  ter is not used 
6c10: 61 74 20 61 6c 6c 20 77 69 74 68 69 6e 20 74 68  at all within th
6c20: 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63  e body of a func
6c30: 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67  tion,.** it is g
6c40: 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22  enerally named "
6c50: 4e 6f 74 55 73 65 64 22 20 6f 72 20 22 4e 6f 74  NotUsed" or "Not
6c60: 55 73 65 64 32 22 20 74 6f 20 6d 61 6b 65 20 74  Used2" to make t
6c70: 68 69 6e 67 73 20 65 76 65 6e 20 63 6c 65 61 72  hings even clear
6c80: 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20  er..** However, 
6c90: 74 68 65 73 65 20 6d 61 63 72 6f 73 20 6d 61 79  these macros may
6ca0: 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
6cb0: 20 73 75 70 70 72 65 73 73 20 77 61 72 6e 69 6e   suppress warnin
6cc0: 67 73 20 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a  gs related to.**
6cd0: 20 70 61 72 61 6d 65 74 65 72 73 20 74 68 61 74   parameters that
6ce0: 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20   may or may not 
6cf0: 62 65 20 75 73 65 64 20 64 65 70 65 6e 64 69 6e  be used dependin
6d00: 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e  g on compilation
6d10: 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72   options..** For
6d20: 20 65 78 61 6d 70 6c 65 20 74 68 6f 73 65 20 70   example those p
6d30: 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75  arameters only u
6d40: 73 65 64 20 69 6e 20 61 73 73 65 72 74 28 29 20  sed in assert() 
6d50: 73 74 61 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74  statements. In t
6d60: 68 65 73 65 0a 2a 2a 20 63 61 73 65 73 20 74 68  hese.** cases th
6d70: 65 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65  e parameters are
6d80: 20 6e 61 6d 65 64 20 61 73 20 70 65 72 20 74 68   named as per th
6d90: 65 20 75 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69  e usual conventi
6da0: 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ons..*/.#define 
6db0: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
6dc0: 28 78 29 20 28 76 6f 69 64 29 28 78 29 0a 23 64  (x) (void)(x).#d
6dd0: 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52  efine UNUSED_PAR
6de0: 41 4d 45 54 45 52 32 28 78 2c 79 29 20 55 4e 55  AMETER2(x,y) UNU
6df0: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29  SED_PARAMETER(x)
6e00: 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45  ,UNUSED_PARAMETE
6e10: 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77  R(y)../*.** Forw
6e20: 61 72 64 20 72 65 66 65 72 65 6e 63 65 73 20 74  ard references t
6e30: 6f 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a  o structures.*/.
6e40: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41  typedef struct A
6e50: 67 67 49 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a  ggInfo AggInfo;.
6e60: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41  typedef struct A
6e70: 75 74 68 43 6f 6e 74 65 78 74 20 41 75 74 68 43  uthContext AuthC
6e80: 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20  ontext;.typedef 
6e90: 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e  struct AutoincIn
6ea0: 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a  fo AutoincInfo;.
6eb0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42  typedef struct B
6ec0: 69 74 76 65 63 20 42 69 74 76 65 63 3b 0a 74 79  itvec Bitvec;.ty
6ed0: 70 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c  pedef struct Col
6ee0: 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79  lSeq CollSeq;.ty
6ef0: 70 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c  pedef struct Col
6f00: 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65  umn Column;.type
6f10: 64 65 66 20 73 74 72 75 63 74 20 44 62 20 44 62  def struct Db Db
6f20: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
6f30: 20 53 63 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a   Schema Schema;.
6f40: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45  typedef struct E
6f50: 78 70 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65  xpr Expr;.typede
6f60: 66 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73  f struct ExprLis
6f70: 74 20 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65  t ExprList;.type
6f80: 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72 53  def struct ExprS
6f90: 70 61 6e 20 45 78 70 72 53 70 61 6e 3b 0a 74 79  pan ExprSpan;.ty
6fa0: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 4b 65  pedef struct FKe
6fb0: 79 20 46 4b 65 79 3b 0a 74 79 70 65 64 65 66 20  y FKey;.typedef 
6fc0: 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72  struct FuncDestr
6fd0: 75 63 74 6f 72 20 46 75 6e 63 44 65 73 74 72 75  uctor FuncDestru
6fe0: 63 74 6f 72 3b 0a 74 79 70 65 64 65 66 20 73 74  ctor;.typedef st
6ff0: 72 75 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e  ruct FuncDef Fun
7000: 63 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74  cDef;.typedef st
7010: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
7020: 20 46 75 6e 63 44 65 66 48 61 73 68 3b 0a 74 79   FuncDefHash;.ty
7030: 70 65 64 65 66 20 73 74 72 75 63 74 20 49 64 4c  pedef struct IdL
7040: 69 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70 65  ist IdList;.type
7050: 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78  def struct Index
7060: 20 49 6e 64 65 78 3b 0a 74 79 70 65 64 65 66 20   Index;.typedef 
7070: 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70  struct IndexSamp
7080: 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a  le IndexSample;.
7090: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b  typedef struct K
70a0: 65 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73  eyClass KeyClass
70b0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
70c0: 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f   KeyInfo KeyInfo
70d0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
70e0: 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61   Lookaside Looka
70f0: 73 69 64 65 3b 0a 74 79 70 65 64 65 66 20 73 74  side;.typedef st
7100: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  ruct LookasideSl
7110: 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  ot LookasideSlot
7120: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7130: 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a   Module Module;.
7140: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4e  typedef struct N
7150: 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43  ameContext NameC
7160: 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20  ontext;.typedef 
7170: 73 74 72 75 63 74 20 50 61 72 73 65 20 50 61 72  struct Parse Par
7180: 73 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  se;.typedef stru
7190: 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e  ct PrintfArgumen
71a0: 74 73 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e  ts PrintfArgumen
71b0: 74 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ts;.typedef stru
71c0: 63 74 20 52 6f 77 53 65 74 20 52 6f 77 53 65 74  ct RowSet RowSet
71d0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
71e0: 20 53 61 76 65 70 6f 69 6e 74 20 53 61 76 65 70   Savepoint Savep
71f0: 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66 20 73 74  oint;.typedef st
7200: 72 75 63 74 20 53 65 6c 65 63 74 20 53 65 6c 65  ruct Select Sele
7210: 63 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ct;.typedef stru
7220: 63 74 20 53 51 4c 69 74 65 54 68 72 65 61 64 20  ct SQLiteThread 
7230: 53 51 4c 69 74 65 54 68 72 65 61 64 3b 0a 74 79  SQLiteThread;.ty
7240: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c  pedef struct Sel
7250: 65 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65  ectDest SelectDe
7260: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
7270: 63 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69  ct SrcList SrcLi
7280: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
7290: 63 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41  ct StrAccum StrA
72a0: 63 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74  ccum;.typedef st
72b0: 72 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65  ruct Table Table
72c0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
72d0: 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65   TableLock Table
72e0: 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74  Lock;.typedef st
72f0: 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e  ruct Token Token
7300: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7310: 20 54 72 65 65 56 69 65 77 20 54 72 65 65 56 69   TreeView TreeVi
7320: 65 77 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ew;.typedef stru
7330: 63 74 20 54 72 69 67 67 65 72 20 54 72 69 67 67  ct Trigger Trigg
7340: 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  er;.typedef stru
7350: 63 74 20 54 72 69 67 67 65 72 50 72 67 20 54 72  ct TriggerPrg Tr
7360: 69 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65  iggerPrg;.typede
7370: 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
7380: 53 74 65 70 20 54 72 69 67 67 65 72 53 74 65 70  Step TriggerStep
7390: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
73a0: 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
73b0: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a  UnpackedRecord;.
73c0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56  typedef struct V
73d0: 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79  Table VTable;.ty
73e0: 70 65 64 65 66 20 73 74 72 75 63 74 20 56 74 61  pedef struct Vta
73f0: 62 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79  bCtx VtabCtx;.ty
7400: 70 65 64 65 66 20 73 74 72 75 63 74 20 57 61 6c  pedef struct Wal
7410: 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65  ker Walker;.type
7420: 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72 65  def struct Where
7430: 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a  Info WhereInfo;.
7440: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57  typedef struct W
7450: 69 74 68 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a  ith With;../*.**
7460: 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20   Defer sourcing 
7470: 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65  vdbe.h and btree
7480: 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74  .h until after t
7490: 68 65 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20  he "u8" and .** 
74a0: 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79  "BusyHandler" ty
74b0: 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61  pedefs. vdbe.h a
74c0: 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61 20 66  lso requires a f
74d0: 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65  ew of the opaque
74e0: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65  .** pointer type
74f0: 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29  s (i.e. FuncDef)
7500: 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a   defined above..
7510: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72  */.#include "btr
7520: 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  ee.h".#include "
7530: 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  vdbe.h".#include
7540: 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c   "pager.h".#incl
7550: 75 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a 0a  ude "pcache.h"..
7560: 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a  #include "os.h".
7570: 23 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e  #include "mutex.
7580: 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  h".../*.** Each 
7590: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f  database file to
75a0: 20 62 65 20 61 63 63 65 73 73 65 64 20 62 79 20   be accessed by 
75b0: 74 68 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e  the system is an
75c0: 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20   instance.** of 
75d0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
75e0: 72 75 63 74 75 72 65 2e 20 20 54 68 65 72 65 20  ructure.  There 
75f0: 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f  are normally two
7600: 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63 74   of these struct
7610: 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73  ures.** in the s
7620: 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61  qlite.aDb[] arra
7630: 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68  y.  aDb[0] is th
7640: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
7650: 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b  file and.** aDb[
7660: 31 5d 20 69 73 20 74 68 65 20 64 61 74 61 62 61  1] is the databa
7670: 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
7680: 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74  hold temporary t
7690: 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e  ables.  Addition
76a0: 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20  al.** databases 
76b0: 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64 2e  may be attached.
76c0: 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a  .*/.struct Db {.
76d0: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
76e0: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
76f0: 66 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  f this database 
7700: 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  */.  Btree *pBt;
7710: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
7720: 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75 72   B*Tree structur
7730: 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61 62  e for this datab
7740: 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38  ase file */.  u8
7750: 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20   safety_level;  
7760: 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65 73     /* How aggres
7770: 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67 20  sive at syncing 
7780: 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a  data to disk */.
7790: 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
77a0: 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65  a;     /* Pointe
77b0: 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73 63  r to database sc
77c0: 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73  hema (possibly s
77d0: 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  hared) */.};../*
77e0: 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
77f0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
7800: 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72 65   structure store
7810: 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63 68  s a database sch
7820: 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20  ema..**.** Most 
7830: 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61  Schema objects a
7840: 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  re associated wi
7850: 74 68 20 61 20 42 74 72 65 65 2e 20 20 54 68 65  th a Btree.  The
7860: 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a   exception is.**
7870: 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20   the Schema for 
7880: 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 65  the TEMP databae
7890: 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31  s (sqlite3.aDb[1
78a0: 5d 29 20 77 68 69 63 68 20 69 73 20 66 72 65 65  ]) which is free
78b0: 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e  -standing..** In
78c0: 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f   shared cache mo
78d0: 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68  de, a single Sch
78e0: 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62  ema object can b
78f0: 65 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74  e shared by mult
7900: 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74  iple.** Btrees t
7910: 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68 65  hat refer to the
7920: 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67   same underlying
7930: 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74   BtShared object
7940: 2e 0a 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20  ..** .** Schema 
7950: 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f  objects are auto
7960: 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f  matically deallo
7970: 63 61 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c  cated when the l
7980: 61 73 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a  ast Btree that.*
7990: 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74 68 65  * references the
79a0: 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20  m is destroyed. 
79b0: 20 20 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d    The TEMP Schem
79c0: 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72  a is manually fr
79d0: 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65  eed by.** sqlite
79e0: 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20  3_close()..*.** 
79f0: 41 20 74 68 72 65 61 64 20 6d 75 73 74 20 62 65  A thread must be
7a00: 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78   holding a mutex
7a10: 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f   on the correspo
7a20: 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f  nding Btree in o
7a30: 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73  rder.** to acces
7a40: 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74  s Schema content
7a50: 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20  .  This implies 
7a60: 74 68 61 74 20 74 68 65 20 74 68 72 65 61 64 20  that the thread 
7a70: 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20  must also be.** 
7a80: 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20  holding a mutex 
7a90: 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20 63  on the sqlite3 c
7aa0: 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65  onnection pointe
7ab0: 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20  r that owns the 
7ac0: 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20  Btree..** For a 
7ad0: 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c  TEMP Schema, onl
7ae0: 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  y the connection
7af0: 20 6d 75 74 65 78 20 69 73 20 72 65 71 75 69 72   mutex is requir
7b00: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63  ed..*/.struct Sc
7b10: 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68  hema {.  int sch
7b20: 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a  ema_cookie;   /*
7b30: 20 44 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   Database schema
7b40: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
7b50: 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  for this file */
7b60: 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69  .  int iGenerati
7b70: 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72  on;     /* Gener
7b80: 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20  ation counter.  
7b90: 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68  Incremented with
7ba0: 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a   each change */.
7bb0: 20 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20    Hash tblHash; 
7bc0: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61         /* All ta
7bd0: 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79 20  bles indexed by 
7be0: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69  name */.  Hash i
7bf0: 64 78 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f  dxHash;        /
7c00: 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e  * All (named) in
7c10: 64 69 63 65 73 20 69 6e 64 65 78 65 64 20 62 79  dices indexed by
7c20: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
7c30: 74 72 69 67 48 61 73 68 3b 20 20 20 20 20 20 20  trigHash;       
7c40: 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20  /* All triggers 
7c50: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
7c60: 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61  */.  Hash fkeyHa
7c70: 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  sh;       /* All
7c80: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79   foreign keys by
7c90: 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c   referenced tabl
7ca0: 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c  e name */.  Tabl
7cb0: 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20  e *pSeqTab;     
7cc0: 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73   /* The sqlite_s
7cd0: 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73  equence table us
7ce0: 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d  ed by AUTOINCREM
7cf0: 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65  ENT */.  u8 file
7d00: 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a  _format;      /*
7d10: 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76   Schema format v
7d20: 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20  ersion for this 
7d30: 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63  file */.  u8 enc
7d40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
7d50: 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
7d60: 75 73 65 64 20 62 79 20 74 68 69 73 20 64 61 74  used by this dat
7d70: 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 73  abase */.  u16 s
7d80: 63 68 65 6d 61 46 6c 61 67 73 3b 20 20 20 20 20  chemaFlags;     
7d90: 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61  /* Flags associa
7da0: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 73 63  ted with this sc
7db0: 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61  hema */.  int ca
7dc0: 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f  che_size;      /
7dd0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * Number of page
7de0: 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20  s to use in the 
7df0: 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  cache */.};../*.
7e00: 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
7e10: 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
7e20: 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
7e30: 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a  ar bits in the .
7e40: 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66  ** Db.pSchema->f
7e50: 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
7e60: 64 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70  define DbHasProp
7e70: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20  erty(D,I,P)     
7e80: 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53  (((D)->aDb[I].pS
7e90: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
7ea0: 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64  gs&(P))==(P)).#d
7eb0: 65 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50 72  efine DbHasAnyPr
7ec0: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 28  operty(D,I,P)  (
7ed0: 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63  ((D)->aDb[I].pSc
7ee0: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
7ef0: 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69  s&(P))!=0).#defi
7f00: 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74 79  ne DbSetProperty
7f10: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d  (D,I,P)     (D)-
7f20: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
7f30: 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50  >schemaFlags|=(P
7f40: 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61  ).#define DbClea
7f50: 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  rProperty(D,I,P)
7f60: 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70     (D)->aDb[I].p
7f70: 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c  Schema->schemaFl
7f80: 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a  ags&=~(P)../*.**
7f90: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
7fa0: 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68 65  for the DB.pSche
7fb0: 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e  ma->flags field.
7fc0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63  .**.** The DB_Sc
7fd0: 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67 20  hemaLoaded flag 
7fe0: 69 73 20 73 65 74 20 61 66 74 65 72 20 74 68 65  is set after the
7ff0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
8000: 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61   has been.** rea
8010: 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20  d into internal 
8020: 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a  hash tables..**.
8030: 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65  ** DB_UnresetVie
8040: 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e  ws means that on
8050: 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73 20  e or more views 
8060: 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  have column name
8070: 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20 62  s that.** have b
8080: 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20  een filled out. 
8090: 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20 63   If the schema c
80a0: 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63 6f  hanges, these co
80b0: 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74  lumn names might
80c0: 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64 20  .** changes and 
80d0: 73 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c 6c  so the view will
80e0: 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73 65   need to be rese
80f0: 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  t..*/.#define DB
8100: 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20 20  _SchemaLoaded   
8110: 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65 20   0x0001  /* The 
8120: 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20  schema has been 
8130: 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e  loaded */.#defin
8140: 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77  e DB_UnresetView
8150: 73 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20  s    0x0002  /* 
8160: 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65 20  Some views have 
8170: 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e  defined column n
8180: 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ames */.#define 
8190: 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20 20  DB_Empty        
81a0: 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 68     0x0004  /* Th
81b0: 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79 20  e file is empty 
81c0: 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73 29  (length 0 bytes)
81d0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e   */../*.** The n
81e0: 75 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72 65  umber of differe
81f0: 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e  nt kinds of thin
8200: 67 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c  gs that can be l
8210: 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20  imited.** using 
8220: 74 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69  the sqlite3_limi
8230: 74 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a  t() interface..*
8240: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
8250: 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45  _N_LIMIT (SQLITE
8260: 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48  _LIMIT_WORKER_TH
8270: 52 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20  READS+1)../*.** 
8280: 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  Lookaside malloc
8290: 20 69 73 20 61 20 73 65 74 20 6f 66 20 66 69 78   is a set of fix
82a0: 65 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20  ed-size buffers 
82b0: 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64  that can be used
82c0: 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73  .** to satisfy s
82d0: 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d  mall transient m
82e0: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
82f0: 20 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62   requests for ob
8300: 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61  jects.** associa
8310: 74 65 64 20 77 69 74 68 20 61 20 70 61 72 74 69  ted with a parti
8320: 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63  cular database c
8330: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20  onnection.  The 
8340: 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73  use of.** lookas
8350: 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69  ide malloc provi
8360: 64 65 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e  des a significan
8370: 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e  t performance en
8380: 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70  hancement.** (ap
8390: 70 72 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f  prox 10%) by avo
83a0: 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d  iding numerous m
83b0: 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65  alloc/free reque
83c0: 73 74 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e  sts while parsin
83d0: 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65  g.** SQL stateme
83e0: 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c  nts..**.** The L
83f0: 6f 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74 75  ookaside structu
8400: 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75  re holds configu
8410: 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69  ration informati
8420: 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20  on about the.** 
8430: 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  lookaside malloc
8440: 20 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63   subsystem.  Eac
8450: 68 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f  h available memo
8460: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e  ry allocation in
8470: 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64  .** the lookasid
8480: 65 20 73 75 62 73 79 73 74 65 6d 20 69 73 20 73  e subsystem is s
8490: 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65  tored on a linke
84a0: 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73  d list of Lookas
84b0: 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63  ideSlot.** objec
84c0: 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73  ts..**.** Lookas
84d0: 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ide allocations 
84e0: 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64  are only allowed
84f0: 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61   for objects tha
8500: 74 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64  t are associated
8510: 0a 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74 69  .** with a parti
8520: 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63  cular database c
8530: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63  onnection.  Henc
8540: 65 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  e, schema inform
8550: 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20  ation cannot.** 
8560: 62 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f  be stored in loo
8570: 6b 61 73 69 64 65 20 62 65 63 61 75 73 65 20 69  kaside because i
8580: 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  n shared cache m
8590: 6f 64 65 20 74 68 65 20 73 63 68 65 6d 61 20 69  ode the schema i
85a0: 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73  nformation.** is
85b0: 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69   shared by multi
85c0: 70 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ple database con
85d0: 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65  nections.  There
85e0: 66 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73  fore, while pars
85f0: 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e  ing.** schema in
8600: 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c  formation, the L
8610: 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65  ookaside.bEnable
8620: 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65  d flag is cleare
8630: 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f  d so that.** loo
8640: 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f  kaside allocatio
8650: 6e 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20  ns are not used 
8660: 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65  to construct the
8670: 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e   schema objects.
8680: 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61  .*/.struct Looka
8690: 73 69 64 65 20 7b 0a 20 20 75 31 36 20 73 7a 3b  side {.  u16 sz;
86a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
86b0: 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68   /* Size of each
86c0: 20 62 75 66 66 65 72 20 69 6e 20 62 79 74 65 73   buffer in bytes
86d0: 20 2a 2f 0a 20 20 75 38 20 62 45 6e 61 62 6c 65   */.  u8 bEnable
86e0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
86f0: 20 46 61 6c 73 65 20 74 6f 20 64 69 73 61 62 6c   False to disabl
8700: 65 20 6e 65 77 20 6c 6f 6f 6b 61 73 69 64 65 20  e new lookaside 
8710: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 20  allocations */. 
8720: 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20   u8 bMalloced;  
8730: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
8740: 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61 69   if pStart obtai
8750: 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ned from sqlite3
8760: 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 69  _malloc() */.  i
8770: 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20 20 20 20  nt nOut;        
8780: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
8790: 20 6f 66 20 62 75 66 66 65 72 73 20 63 75 72 72   of buffers curr
87a0: 65 6e 74 6c 79 20 63 68 65 63 6b 65 64 20 6f 75  ently checked ou
87b0: 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f 75 74  t */.  int mxOut
87c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
87d0: 2a 20 48 69 67 68 77 61 74 65 72 20 6d 61 72 6b  * Highwater mark
87e0: 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20 20 69   for nOut */.  i
87f0: 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20  nt anStat[3];   
8800: 20 20 20 20 20 20 20 2f 2a 20 30 3a 20 68 69 74         /* 0: hit
8810: 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69 73 73  s.  1: size miss
8820: 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73  es.  2: full mis
8830: 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69  ses */.  Lookasi
8840: 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20  deSlot *pFree;  
8850: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69   /* List of avai
8860: 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f  lable buffers */
8870: 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b  .  void *pStart;
8880: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
8890: 72 73 74 20 62 79 74 65 20 6f 66 20 61 76 61 69  rst byte of avai
88a0: 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61  lable memory spa
88b0: 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45  ce */.  void *pE
88c0: 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nd;             
88d0: 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 70 61  /* First byte pa
88e0: 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61  st end of availa
88f0: 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a  ble space */.};.
8900: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
8910: 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69  Slot {.  Lookasi
8920: 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20  deSlot *pNext;  
8930: 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72    /* Next buffer
8940: 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20   in the list of 
8950: 66 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a  free buffers */.
8960: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68  };../*.** A hash
8970: 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74   table for funct
8980: 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e  ion definitions.
8990: 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63 68  .**.** Hash each
89a0: 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75   FuncDef structu
89b0: 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74  re into one of t
89c0: 68 65 20 46 75 6e 63 44 65 66 48 61 73 68 2e 61  he FuncDefHash.a
89d0: 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c  [] slots..** Col
89e0: 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74  lisions are on t
89f0: 68 65 20 46 75 6e 63 44 65 66 2e 70 48 61 73 68  he FuncDef.pHash
8a00: 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74 72 75 63   chain..*/.struc
8a10: 74 20 46 75 6e 63 44 65 66 48 61 73 68 20 7b 0a  t FuncDefHash {.
8a20: 20 20 46 75 6e 63 44 65 66 20 2a 61 5b 32 33 5d    FuncDef *a[23]
8a30: 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20  ;       /* Hash 
8a40: 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69  table for functi
8a50: 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65  ons */.};..#ifde
8a60: 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  f SQLITE_USER_AU
8a70: 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a  THENTICATION./*.
8a80: 2a 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 68  ** Information h
8a90: 65 6c 64 20 69 6e 20 74 68 65 20 22 73 71 6c 69  eld in the "sqli
8aa0: 74 65 33 22 20 64 61 74 61 62 61 73 65 20 63 6f  te3" database co
8ab0: 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20  nnection object 
8ac0: 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d  and used.** to m
8ad0: 61 6e 61 67 65 20 75 73 65 72 20 61 75 74 68 65  anage user authe
8ae0: 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79  ntication..*/.ty
8af0: 70 65 64 65 66 20 73 74 72 75 63 74 20 73 71 6c  pedef struct sql
8b00: 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 73 71  ite3_userauth sq
8b10: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 3b 0a  lite3_userauth;.
8b20: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75  struct sqlite3_u
8b30: 73 65 72 61 75 74 68 20 7b 0a 20 20 75 38 20 61  serauth {.  u8 a
8b40: 75 74 68 4c 65 76 65 6c 3b 20 20 20 20 20 20 20  uthLevel;       
8b50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
8b60: 72 65 6e 74 20 61 75 74 68 65 6e 74 69 63 61 74  rent authenticat
8b70: 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 69  ion level */.  i
8b80: 6e 74 20 6e 41 75 74 68 50 57 3b 20 20 20 20 20  nt nAuthPW;     
8b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8ba0: 53 69 7a 65 20 6f 66 20 74 68 65 20 7a 41 75 74  Size of the zAut
8bb0: 68 50 57 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  hPW in bytes */.
8bc0: 20 20 63 68 61 72 20 2a 7a 41 75 74 68 50 57 3b    char *zAuthPW;
8bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8be0: 2f 2a 20 50 61 73 73 77 6f 72 64 20 75 73 65 64  /* Password used
8bf0: 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65   to authenticate
8c00: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74   */.  char *zAut
8c10: 68 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20  hUser;          
8c20: 20 20 20 20 2f 2a 20 55 73 65 72 20 6e 61 6d 65      /* User name
8c30: 20 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74   used to authent
8c40: 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20  icate */.};../* 
8c50: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
8c60: 6f 72 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  or sqlite3_usera
8c70: 75 74 68 2e 61 75 74 68 4c 65 76 65 6c 20 2a 2f  uth.authLevel */
8c80: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55  .#define UAUTH_U
8c90: 6e 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20 20 20  nknown     0    
8ca0: 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 69   /* Authenticati
8cb0: 6f 6e 20 6e 6f 74 20 79 65 74 20 63 68 65 63 6b  on not yet check
8cc0: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  ed */.#define UA
8cd0: 55 54 48 5f 46 61 69 6c 20 20 20 20 20 20 20 20  UTH_Fail        
8ce0: 31 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75  1     /* User au
8cf0: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61 69  thentication fai
8d00: 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  led */.#define U
8d10: 41 55 54 48 5f 55 73 65 72 20 20 20 20 20 20 20  AUTH_User       
8d20: 20 32 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e   2     /* Authen
8d30: 74 69 63 61 74 65 64 20 61 73 20 61 20 6e 6f 72  ticated as a nor
8d40: 6d 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64 65 66  mal user */.#def
8d50: 69 6e 65 20 55 41 55 54 48 5f 41 64 6d 69 6e 20  ine UAUTH_Admin 
8d60: 20 20 20 20 20 20 33 20 20 20 20 20 2f 2a 20 41        3     /* A
8d70: 75 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20  uthenticated as 
8d80: 61 6e 20 61 64 6d 69 6e 69 73 74 72 61 74 6f 72  an administrator
8d90: 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e   */../* Function
8da0: 73 20 75 73 65 64 20 6f 6e 6c 79 20 62 79 20 75  s used only by u
8db0: 73 65 72 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  ser authorizatio
8dc0: 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74 20 73  n logic */.int s
8dd0: 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 54 61  qlite3UserAuthTa
8de0: 62 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  ble(const char*)
8df0: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65  ;.int sqlite3Use
8e00: 72 41 75 74 68 43 68 65 63 6b 4c 6f 67 69 6e 28  rAuthCheckLogin(
8e10: 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
8e20: 68 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64 20  har*,u8*);.void 
8e30: 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 49  sqlite3UserAuthI
8e40: 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  nit(sqlite3*);.v
8e50: 6f 69 64 20 73 71 6c 69 74 65 33 43 72 79 70 74  oid sqlite3Crypt
8e60: 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e  Func(sqlite3_con
8e70: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
8e80: 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e  3_value**);..#en
8e90: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53  dif /* SQLITE_US
8ea0: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
8eb0: 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65  N */../*.** type
8ec0: 64 65 66 20 66 6f 72 20 74 68 65 20 61 75 74 68  def for the auth
8ed0: 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61  orization callba
8ee0: 63 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a  ck function..*/.
8ef0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
8f00: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
8f10: 4e 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20  N.  typedef int 
8f20: 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29  (*sqlite3_xauth)
8f30: 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
8f40: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
8f50: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a  r*,const char*,.
8f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
8f80: 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
8f90: 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a  t char*);.#else.
8fa0: 20 20 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a    typedef int (*
8fb0: 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76  sqlite3_xauth)(v
8fc0: 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
8fd0: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
8fe0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20  ,const char*,.  
8ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9000: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
9010: 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  st char*);.#endi
9020: 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64  f.../*.** Each d
9030: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
9040: 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  on is an instanc
9050: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
9060: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  ng structure..*/
9070: 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 20  .struct sqlite3 
9080: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20  {.  sqlite3_vfs 
9090: 2a 70 56 66 73 3b 20 20 20 20 20 20 20 20 20 20  *pVfs;          
90a0: 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63    /* OS Interfac
90b0: 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64  e */.  struct Vd
90c0: 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20  be *pVdbe;      
90d0: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
90e0: 61 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d  active virtual m
90f0: 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c  achines */.  Col
9100: 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b  lSeq *pDfltColl;
9110: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
9120: 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
9130: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42 49  ing sequence (BI
9140: 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74  NARY) */.  sqlit
9150: 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b  e3_mutex *mutex;
9160: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e           /* Conn
9170: 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a  ection mutex */.
9180: 20 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20    Db *aDb;      
9190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91a0: 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20  /* All backends 
91b0: 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20  */.  int nDb;   
91c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91d0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
91e0: 62 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74  backends current
91f0: 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69  ly in use */.  i
9200: 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20  nt flags;       
9210: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9220: 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c  Miscellaneous fl
9230: 61 67 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a  ags. See below *
9240: 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69  /.  i64 lastRowi
9250: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
9260: 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f    /* ROWID of mo
9270: 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74  st recent insert
9280: 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a   (see above) */.
9290: 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20    i64 szMmap;   
92a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
92b0: 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f  /* Default mmap_
92c0: 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a  size setting */.
92d0: 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f    unsigned int o
92e0: 70 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20  penFlags;       
92f0: 2f 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20  /* Flags passed 
9300: 74 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78  to sqlite3_vfs.x
9310: 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Open() */.  int 
9320: 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20  errCode;        
9330: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73            /* Mos
9340: 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63  t recent error c
9350: 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a  ode (SQLITE_*) *
9360: 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b  /.  int errMask;
9370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9380: 20 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f    /* & result co
9390: 64 65 73 20 77 69 74 68 20 74 68 69 73 20 62 65  des with this be
93a0: 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a  fore returning *
93b0: 2f 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61  /.  u16 dbOptFla
93c0: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
93d0: 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e    /* Flags to en
93e0: 61 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74  able/disable opt
93f0: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  imizations */.  
9400: 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
9410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9420: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   Text encoding *
9430: 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69  /.  u8 autoCommi
9440: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
9450: 20 20 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f    /* The auto-co
9460: 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20  mmit flag. */.  
9470: 75 38 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20  u8 temp_store;  
9480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9490: 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f   1: file 2: memo
94a0: 72 79 20 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f  ry 0: default */
94b0: 0a 20 20 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c  .  u8 mallocFail
94c0: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ed;             
94d0: 20 2f 2a 20 54 72 75 65 20 69 66 20 77 65 20 68   /* True if we h
94e0: 61 76 65 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f  ave seen a mallo
94f0: 63 20 66 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75  c failure */.  u
9500: 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20  8 dfltLockMode; 
9510: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9520: 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d  Default locking-
9530: 6d 6f 64 65 20 66 6f 72 20 61 74 74 61 63 68 65  mode for attache
9540: 64 20 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65  d dbs */.  signe
9550: 64 20 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76  d char nextAutov
9560: 61 63 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f  ac;      /* Auto
9570: 76 61 63 20 73 65 74 74 69 6e 67 20 61 66 74 65  vac setting afte
9580: 72 20 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20  r VACUUM if >=0 
9590: 2a 2f 0a 20 20 75 38 20 73 75 70 70 72 65 73 73  */.  u8 suppress
95a0: 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
95b0: 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73     /* Do not iss
95c0: 75 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  ue error message
95d0: 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75  s if true */.  u
95e0: 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  8 vtabOnConflict
95f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
9600: 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
9610: 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63  for s3_vtab_on_c
9620: 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75  onflict() */.  u
9630: 38 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  8 isTransactionS
9640: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20  avepoint;    /* 
9650: 54 72 75 65 20 69 66 20 74 68 65 20 6f 75 74 65  True if the oute
9660: 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20  rmost savepoint 
9670: 69 73 20 61 20 54 53 20 2a 2f 0a 20 20 69 6e 74  is a TS */.  int
9680: 20 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20   nextPagesize;  
9690: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
96a0: 67 65 73 69 7a 65 20 61 66 74 65 72 20 56 41 43  gesize after VAC
96b0: 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75  UUM if >0 */.  u
96c0: 33 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20  32 magic;       
96d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
96e0: 4d 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72  Magic number for
96f0: 20 64 65 74 65 63 74 20 6c 69 62 72 61 72 79 20   detect library 
9700: 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20  misuse */.  int 
9710: 6e 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20  nChange;        
9720: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
9730: 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
9740: 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
9750: 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c   */.  int nTotal
9760: 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20  Change;         
9770: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74      /* Value ret
9780: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
9790: 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29  _total_changes()
97a0: 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74   */.  int aLimit
97b0: 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d  [SQLITE_N_LIMIT]
97c0: 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f  ;   /* Limits */
97d0: 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65  .  int nMaxSorte
97e0: 72 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  rMmap;          
97f0: 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65   /* Maximum size
9800: 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70 70   of regions mapp
9810: 65 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a  ed by sorter */.
9820: 20 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33    struct sqlite3
9830: 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20  InitInfo {      
9840: 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  /* Information u
9850: 73 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69  sed during initi
9860: 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20  alization */.   
9870: 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20   int newTnum;   
9880: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9890: 52 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c  Rootpage of tabl
98a0: 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  e being initiali
98b0: 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44  zed */.    u8 iD
98c0: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
98d0: 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
98e0: 64 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67  db file is being
98f0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
9900: 20 20 20 20 75 38 20 62 75 73 79 3b 20 20 20 20      u8 busy;    
9910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9920: 2f 2a 20 54 52 55 45 20 69 66 20 63 75 72 72 65  /* TRUE if curre
9930: 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e  ntly initializin
9940: 67 20 2a 2f 0a 20 20 20 20 75 38 20 6f 72 70 68  g */.    u8 orph
9950: 61 6e 54 72 69 67 67 65 72 3b 20 20 20 20 20 20  anTrigger;      
9960: 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 73 74 61       /* Last sta
9970: 74 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e  tement is orphan
9980: 65 64 20 54 45 4d 50 20 74 72 69 67 67 65 72 20  ed TEMP trigger 
9990: 2a 2f 0a 20 20 20 20 75 38 20 69 6d 70 6f 73 74  */.    u8 impost
99a0: 65 72 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20  erTable;        
99b0: 20 20 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61     /* Building a
99c0: 6e 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c 65  n imposter table
99d0: 20 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20   */.  } init;.  
99e0: 69 6e 74 20 6e 56 64 62 65 41 63 74 69 76 65 3b  int nVdbeActive;
99f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9a00: 20 4e 75 6d 62 65 72 20 6f 66 20 56 44 42 45 73   Number of VDBEs
9a10: 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69   currently runni
9a20: 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62  ng */.  int nVdb
9a30: 65 52 65 61 64 3b 20 20 20 20 20 20 20 20 20 20  eRead;          
9a40: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
9a50: 6f 66 20 61 63 74 69 76 65 20 56 44 42 45 73 20  of active VDBEs 
9a60: 74 68 61 74 20 72 65 61 64 20 6f 72 20 77 72 69  that read or wri
9a70: 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62  te */.  int nVdb
9a80: 65 57 72 69 74 65 3b 20 20 20 20 20 20 20 20 20  eWrite;         
9a90: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
9aa0: 6f 66 20 61 63 74 69 76 65 20 56 44 42 45 73 20  of active VDBEs 
9ab0: 74 68 61 74 20 72 65 61 64 20 61 6e 64 20 77 72  that read and wr
9ac0: 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64  ite */.  int nVd
9ad0: 62 65 45 78 65 63 3b 20 20 20 20 20 20 20 20 20  beExec;         
9ae0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
9af0: 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73   of nested calls
9b00: 20 74 6f 20 56 64 62 65 45 78 65 63 28 29 20 2a   to VdbeExec() *
9b10: 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e 73 69  /.  int nExtensi
9b20: 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  on;             
9b30: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c    /* Number of l
9b40: 6f 61 64 65 64 20 65 78 74 65 6e 73 69 6f 6e 73  oaded extensions
9b50: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61 45 78   */.  void **aEx
9b60: 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20  tension;        
9b70: 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20      /* Array of 
9b80: 73 68 61 72 65 64 20 6c 69 62 72 61 72 79 20 68  shared library h
9b90: 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 76 6f 69 64  andles */.  void
9ba0: 20 28 2a 78 54 72 61 63 65 29 28 76 6f 69 64 2a   (*xTrace)(void*
9bb0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 20  ,const char*);  
9bc0: 20 20 20 20 20 20 2f 2a 20 54 72 61 63 65 20 66        /* Trace f
9bd0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
9be0: 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20 20 20  d *pTraceArg;   
9bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c00: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
9c10: 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63 65 20  nt to the trace 
9c20: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
9c30: 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28 76  id (*xProfile)(v
9c40: 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  oid*,const char*
9c50: 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69  ,u64);  /* Profi
9c60: 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ling function */
9c70: 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c  .  void *pProfil
9c80: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
9c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9ca0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66  Argument to prof
9cb0: 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ile function */.
9cc0: 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41    void *pCommitA
9cd0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
9ce0: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
9cf0: 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61  to xCommitCallba
9d00: 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20 69 6e 74  ck() */   .  int
9d10: 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61   (*xCommitCallba
9d20: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f  ck)(void*);    /
9d30: 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65  * Invoked at eve
9d40: 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20  ry commit. */.  
9d50: 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41  void *pRollbackA
9d60: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
9d70: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
9d80: 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61   xRollbackCallba
9d90: 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20 76 6f 69  ck() */   .  voi
9da0: 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c  d (*xRollbackCal
9db0: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f  lback)(void*); /
9dc0: 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65  * Invoked at eve
9dd0: 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20  ry commit. */.  
9de0: 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41 72 67  void *pUpdateArg
9df0: 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70 64 61  ;.  void (*xUpda
9e00: 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  teCallback)(void
9e10: 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  *,int, const cha
9e20: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73  r*,const char*,s
9e30: 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69  qlite_int64);.#i
9e40: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
9e50: 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57  T_WAL.  int (*xW
9e60: 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  alCallback)(void
9e70: 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20 63   *, sqlite3 *, c
9e80: 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
9e90: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c 41  );.  void *pWalA
9ea0: 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69  rg;.#endif.  voi
9eb0: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28  d(*xCollNeeded)(
9ec0: 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69  void*,sqlite3*,i
9ed0: 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73  nt eTextRep,cons
9ee0: 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
9ef0: 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29  (*xCollNeeded16)
9f00: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
9f10: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
9f20: 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69  st void*);.  voi
9f30: 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72  d *pCollNeededAr
9f40: 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  g;.  sqlite3_val
9f50: 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20 20  ue *pErr;       
9f60: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
9f70: 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  t error message 
9f80: 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
9f90: 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69 73   volatile int is
9fa0: 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a 20  Interrupted; /* 
9fb0: 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33 5f  True if sqlite3_
9fc0: 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62 65  interrupt has be
9fd0: 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20  en called */.   
9fe0: 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64 31   double notUsed1
9ff0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
a000: 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31  Spacer */.  } u1
a010: 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f  ;.  Lookaside lo
a020: 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
a030: 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d    /* Lookaside m
a040: 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61 74  alloc configurat
a050: 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ion */.#ifndef S
a060: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
a070: 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74  RIZATION.  sqlit
a080: 65 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b 20  e3_xauth xAuth; 
a090: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65           /* Acce
a0a0: 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  ss authorization
a0b0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
a0c0: 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20  oid *pAuthArg;  
a0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a0e0: 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  1st argument to 
a0f0: 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68 20  the access auth 
a100: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64  function */.#end
a110: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
a120: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
a130: 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28  CALLBACK.  int (
a140: 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64  *xProgress)(void
a150: 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20   *);     /* The 
a160: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
a170: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72  k */.  void *pPr
a180: 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20 20  ogressArg;      
a190: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
a1a0: 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73   to the progress
a1b0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 75   callback */.  u
a1c0: 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73  nsigned nProgres
a1d0: 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a 20  sOps;        /* 
a1e0: 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65  Number of opcode
a1f0: 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63  s for progress c
a200: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69  allback */.#endi
a210: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
a220: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
a230: 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73  LE.  int nVTrans
a240: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a250: 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20     /* Allocated 
a260: 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20  size of aVTrans 
a270: 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c  */.  Hash aModul
a280: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
a290: 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20     /* populated 
a2a0: 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  by sqlite3_creat
a2b0: 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
a2c0: 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43 74  VtabCtx *pVtabCt
a2d0: 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  x;            /*
a2e0: 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74   Context for act
a2f0: 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63 74  ive vtab connect
a300: 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54 61  /create */.  VTa
a310: 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20  ble **aVTrans;  
a320: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 69             /* Vi
a330: 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74  rtual tables wit
a340: 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69  h open transacti
a350: 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ons */.  VTable 
a360: 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20  *pDisconnect;   
a370: 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20 74   /* Disconnect t
a380: 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71 6c  hese in next sql
a390: 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 2a  ite3_prepare() *
a3a0: 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e 63 44  /.#endif.  FuncD
a3b0: 65 66 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20  efHash aFunc;   
a3c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68           /* Hash
a3d0: 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63   table of connec
a3e0: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a  tion functions *
a3f0: 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53 65  /.  Hash aCollSe
a400: 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  q;              
a410: 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69    /* All collati
a420: 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a  ng sequences */.
a430: 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62 75    BusyHandler bu
a440: 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20 20  syHandler;      
a450: 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63 6b  /* Busy callback
a460: 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61 74   */.  Db aDbStat
a470: 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20  ic[2];          
a480: 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73 70      /* Static sp
a490: 61 63 65 20 66 6f 72 20 74 68 65 20 32 20 64 65  ace for the 2 de
a4a0: 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a  fault backends *
a4b0: 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  /.  Savepoint *p
a4c0: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20  Savepoint;      
a4d0: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74    /* List of act
a4e0: 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20 2a  ive savepoints *
a4f0: 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d 65  /.  int busyTime
a500: 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  out;            
a510: 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c 65    /* Busy handle
a520: 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73  r timeout, in ms
a530: 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76  ec */.  int nSav
a540: 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20  epoint;         
a550: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
a560: 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69  of non-transacti
a570: 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f  on savepoints */
a580: 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e  .  int nStatemen
a590: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
a5a0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
a5b0: 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d 74  sted statement-t
a5c0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a  ransactions  */.
a5d0: 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43    i64 nDeferredC
a5e0: 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ons;            
a5f0: 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64 20  /* Net deferred 
a600: 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69 73  constraints this
a610: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f   transaction. */
a620: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
a630: 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  ImmCons;        
a640: 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64   /* Net deferred
a650: 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e 73 74   immediate const
a660: 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  raints */.  int 
a670: 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b 20 20  *pnBytesFreed;  
a680: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20            /* If 
a690: 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d  not NULL, increm
a6a0: 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62 46 72  ent this in DbFr
a6b0: 65 65 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53  ee() */.#ifdef S
a6c0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c  QLITE_ENABLE_UNL
a6d0: 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a 20  OCK_NOTIFY.  /* 
a6e0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61  The following va
a6f0: 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c 6c 20  riables are all 
a700: 70 72 6f 74 65 63 74 65 64 20 62 79 20 74 68 65  protected by the
a710: 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52 20 0a   STATIC_MASTER .
a720: 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74 20    ** mutex, not 
a730: 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  by sqlite3.mutex
a740: 2e 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20  . They are used 
a750: 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69 66  by code in notif
a760: 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20  y.c. .  **.  ** 
a770: 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f  When X.pUnlockCo
a780: 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61  nnection==Y, tha
a790: 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58 20 69  t means that X i
a7a0: 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20 59 20  s waiting for Y 
a7b0: 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73  to.  ** unlock s
a7c0: 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 70 72  o that it can pr
a7d0: 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  oceed..  **.  **
a7e0: 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e   When X.pBlockin
a7f0: 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20  gConnection==Y, 
a800: 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20  that means that 
a810: 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20 58  something that X
a820: 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72 69 65   tried.  ** trie
a830: 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c 79  d to do recently
a840: 20 66 61 69 6c 65 64 20 77 69 74 68 20 61 6e 20   failed with an 
a850: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65 72  SQLITE_LOCKED er
a860: 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b 73  ror due to locks
a870: 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20 59 2e  .  ** held by Y.
a880: 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  .  */.  sqlite3 
a890: 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63  *pBlockingConnec
a8a0: 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74  tion; /* Connect
a8b0: 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65 64 20  ion that caused 
a8c0: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f  SQLITE_LOCKED */
a8d0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55 6e 6c  .  sqlite3 *pUnl
a8e0: 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20  ockConnection;  
a8f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e           /* Conn
a900: 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63 68 20  ection to watch 
a910: 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20  for unlock */.  
a920: 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72 67  void *pUnlockArg
a930: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a940: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
a950: 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69  t to xUnlockNoti
a960: 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  fy */.  void (*x
a970: 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76 6f  UnlockNotify)(vo
a980: 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a  id **, int);  /*
a990: 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20 63   Unlock notify c
a9a0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71 6c  allback */.  sql
a9b0: 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63 6b  ite3 *pNextBlock
a9c0: 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  ed;        /* Ne
a9d0: 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20 61 6c  xt in list of al
a9e0: 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65 63  l blocked connec
a9f0: 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a  tions */.#endif.
aa00: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
aa10: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
aa20: 4e 0a 20 20 73 71 6c 69 74 65 33 5f 75 73 65 72  N.  sqlite3_user
aa30: 61 75 74 68 20 61 75 74 68 3b 20 20 20 20 20 20  auth auth;      
aa40: 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e    /* User authen
aa50: 74 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61  tication informa
aa60: 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d  tion */.#endif.}
aa70: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f  ;../*.** A macro
aa80: 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68 65   to discover the
aa90: 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 64   encoding of a d
aaa0: 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65 66  atabase..*/.#def
aab0: 69 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43 28 64  ine SCHEMA_ENC(d
aac0: 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d  b) ((db)->aDb[0]
aad0: 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 23  .pSchema->enc).#
aae0: 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20 20  define ENC(db)  
aaf0: 20 20 20 20 20 20 28 28 64 62 29 2d 3e 65 6e 63        ((db)->enc
ab00: 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  )../*.** Possibl
ab10: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  e values for the
ab20: 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a   sqlite3.flags..
ab30: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ab40: 45 5f 56 64 62 65 54 72 61 63 65 20 20 20 20 20  E_VdbeTrace     
ab50: 20 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20   0x00000001  /* 
ab60: 54 72 75 65 20 74 6f 20 74 72 61 63 65 20 56 44  True to trace VD
ab70: 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  BE execution */.
ab80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
ab90: 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78  nternChanges  0x
aba0: 30 30 30 30 30 30 30 32 20 20 2f 2a 20 55 6e 63  00000002  /* Unc
abb0: 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61  ommitted Hash ta
abc0: 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ble changes */.#
abd0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75  define SQLITE_Fu
abe0: 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78 30  llFSync      0x0
abf0: 30 30 30 30 30 30 34 20 20 2f 2a 20 55 73 65 20  0000004  /* Use 
ac00: 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68  full fsync on th
ac10: 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65  e backend */.#de
ac20: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74  fine SQLITE_Ckpt
ac30: 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30  FullFSync  0x000
ac40: 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75  00008  /* Use fu
ac50: 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65  ll fsync for che
ac60: 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69  ckpoint */.#defi
ac70: 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53  ne SQLITE_CacheS
ac80: 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30  pill     0x00000
ac90: 30 31 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70  010  /* OK to sp
aca0: 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65 20  ill pager cache 
acb0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
acc0: 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20  E_FullColNames  
acd0: 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20   0x00000020  /* 
ace0: 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e  Show full column
acf0: 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54   names on SELECT
ad00: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ad10: 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73  TE_ShortColNames
ad20: 20 20 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a    0x00000040  /*
ad30: 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75   Show short colu
ad40: 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65  mns names */.#de
ad50: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e  fine SQLITE_Coun
ad60: 74 52 6f 77 73 20 20 20 20 20 20 30 78 30 30 30  tRows      0x000
ad70: 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20  00080  /* Count 
ad80: 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79 20  rows changed by 
ad90: 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20  INSERT, */.     
ada0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
adb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
adc0: 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45       /*   DELETE
add0: 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20  , or UPDATE and 
ade0: 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20  return */.      
adf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae10: 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75      /*   the cou
ae20: 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62  nt using a callb
ae30: 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ack. */.#define 
ae40: 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62  SQLITE_NullCallb
ae50: 61 63 6b 20 20 20 30 78 30 30 30 30 30 31 30 30  ack   0x00000100
ae60: 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
ae70: 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66  callback once if
ae80: 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20   the */.        
ae90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aeb0: 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65    /*   result se
aec0: 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64  t is empty */.#d
aed0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c  efine SQLITE_Sql
aee0: 54 72 61 63 65 20 20 20 20 20 20 20 30 78 30 30  Trace       0x00
aef0: 30 30 30 32 30 30 20 20 2f 2a 20 44 65 62 75 67  000200  /* Debug
af00: 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74   print SQL as it
af10: 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65   executes */.#de
af20: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
af30: 4c 69 73 74 69 6e 67 20 20 20 20 30 78 30 30 30  Listing    0x000
af40: 30 30 34 30 30 20 20 2f 2a 20 44 65 62 75 67 20  00400  /* Debug 
af50: 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45  listings of VDBE
af60: 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65   programs */.#de
af70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74  fine SQLITE_Writ
af80: 65 53 63 68 65 6d 61 20 20 20 20 30 78 30 30 30  eSchema    0x000
af90: 30 30 38 30 30 20 20 2f 2a 20 4f 4b 20 74 6f 20  00800  /* OK to 
afa0: 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41  update SQLITE_MA
afb0: 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20  STER */.#define 
afc0: 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70  SQLITE_VdbeAddop
afd0: 54 72 61 63 65 20 30 78 30 30 30 30 31 30 30 30  Trace 0x00001000
afe0: 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74    /* Trace sqlit
aff0: 65 33 56 64 62 65 41 64 64 4f 70 28 29 20 63 61  e3VdbeAddOp() ca
b000: 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  lls */.#define S
b010: 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63  QLITE_IgnoreChec
b020: 6b 73 20 20 20 30 78 30 30 30 30 32 30 30 30 20  ks   0x00002000 
b030: 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72   /* Do not enfor
b040: 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61  ce check constra
b050: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
b060: 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d  SQLITE_ReadUncom
b070: 6d 69 74 74 65 64 20 30 78 30 30 30 34 30 30 30  mitted 0x0004000
b080: 20 20 2f 2a 20 46 6f 72 20 73 68 61 72 65 64 2d    /* For shared-
b090: 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64  cache mode */.#d
b0a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67  efine SQLITE_Leg
b0b0: 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30  acyFileFmt  0x00
b0c0: 30 30 38 30 30 30 20 20 2f 2a 20 43 72 65 61 74  008000  /* Creat
b0d0: 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20  e new databases 
b0e0: 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23  in format 1 */.#
b0f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
b100: 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30 78 30  coveryMode   0x0
b110: 30 30 31 30 30 30 30 20 20 2f 2a 20 49 67 6e 6f  0010000  /* Igno
b120: 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f 72 73  re schema errors
b130: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b140: 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20  TE_ReverseOrder 
b150: 20 20 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a    0x00020000  /*
b160: 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72   Reverse unorder
b170: 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64  ed SELECTs */.#d
b180: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63  efine SQLITE_Rec
b190: 54 72 69 67 67 65 72 73 20 20 20 20 30 78 30 30  Triggers    0x00
b1a0: 30 34 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  040000  /* Enabl
b1b0: 65 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67  e recursive trig
b1c0: 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gers */.#define 
b1d0: 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65  SQLITE_ForeignKe
b1e0: 79 73 20 20 20 20 30 78 30 30 30 38 30 30 30 30  ys    0x00080000
b1f0: 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72    /* Enforce for
b200: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
b210: 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65  ints  */.#define
b220: 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65   SQLITE_AutoInde
b230: 78 20 20 20 20 20 20 30 78 30 30 31 30 30 30 30  x      0x0010000
b240: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74  0  /* Enable aut
b250: 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a  omatic indexes *
b260: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b270: 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20  _PreferBuiltin  
b280: 30 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20 50  0x00200000  /* P
b290: 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69  reference to bui
b2a0: 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23  lt-in funcs */.#
b2b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f  define SQLITE_Lo
b2c0: 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30  adExtension  0x0
b2d0: 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62  0400000  /* Enab
b2e0: 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  le load_extensio
b2f0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
b300: 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65  ITE_EnableTrigge
b310: 72 20 20 30 78 30 30 38 30 30 30 30 30 20 20 2f  r  0x00800000  /
b320: 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
b330: 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65   triggers */.#de
b340: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65  fine SQLITE_Defe
b350: 72 46 4b 73 20 20 20 20 20 20 20 30 78 30 31 30  rFKs       0x010
b360: 30 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20  00000  /* Defer 
b370: 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e  all FK constrain
b380: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
b390: 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20  LITE_QueryOnly  
b3a0: 20 20 20 20 30 78 30 32 30 30 30 30 30 30 20 20      0x02000000  
b3b0: 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61 62  /* Disable datab
b3c0: 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ase changes */.#
b3d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
b3e0: 62 65 45 51 50 20 20 20 20 20 20 20 20 30 78 30  beEQP        0x0
b3f0: 34 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75  4000000  /* Debu
b400: 67 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  g EXPLAIN QUERY 
b410: 50 4c 41 4e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  PLAN */.../*.** 
b420: 42 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69  Bits of the sqli
b430: 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66  te3.dbOptFlags f
b440: 69 65 6c 64 20 74 68 61 74 20 61 72 65 20 75 73  ield that are us
b450: 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c  ed by the.** sql
b460: 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
b470: 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  l(SQLITE_TESTCTR
b480: 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c  L_OPTIMIZATIONS,
b490: 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74  ...) interface t
b4a0: 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79  o.** selectively
b4b0: 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73   disable various
b4c0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
b4d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b4e0: 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72  E_QueryFlattener
b4f0: 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65   0x0001   /* Que
b500: 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f  ry flattening */
b510: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b520: 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30  ColumnCache    0
b530: 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d  x0002   /* Colum
b540: 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69  n cache */.#defi
b550: 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42  ne SQLITE_GroupB
b560: 79 4f 72 64 65 72 20 20 20 30 78 30 30 30 34 20  yOrder   0x0004 
b570: 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76    /* GROUPBY cov
b580: 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f  er of ORDERBY */
b590: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b5a0: 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30  FactorOutConst 0
b5b0: 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74  x0008   /* Const
b5c0: 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f  ant factoring */
b5d0: 0a 2f 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  ./*             
b5e0: 20 20 20 6e 6f 74 20 75 73 65 64 20 20 20 20 30     not used    0
b5f0: 78 30 30 31 30 20 20 20 2f 2f 20 57 61 73 3a 20  x0010   // Was: 
b600: 53 51 4c 49 54 45 5f 49 64 78 52 65 61 6c 41 73  SQLITE_IdxRealAs
b610: 49 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  Int */.#define S
b620: 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70  QLITE_DistinctOp
b630: 74 20 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a  t    0x0020   /*
b640: 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20   DISTINCT using 
b650: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
b660: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49  ne SQLITE_CoverI
b670: 64 78 53 63 61 6e 20 20 20 30 78 30 30 34 30 20  dxScan   0x0040 
b680: 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e    /* Covering in
b690: 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65  dex scans */.#de
b6a0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65  fine SQLITE_Orde
b6b0: 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 38  rByIdxJoin 0x008
b6c0: 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  0   /* ORDER BY 
b6d0: 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64  of joins via ind
b6e0: 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ex */.#define SQ
b6f0: 4c 49 54 45 5f 53 75 62 71 43 6f 72 6f 75 74 69  LITE_SubqCorouti
b700: 6e 65 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20  ne  0x0100   /* 
b710: 45 76 61 6c 75 61 74 65 20 73 75 62 71 75 65 72  Evaluate subquer
b720: 69 65 73 20 61 73 20 63 6f 72 6f 75 74 69 6e 65  ies as coroutine
b730: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b740: 49 54 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20  ITE_Transitive  
b750: 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54     0x0200   /* T
b760: 72 61 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72  ransitive constr
b770: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
b780: 20 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70   SQLITE_OmitNoop
b790: 4a 6f 69 6e 20 20 20 30 78 30 34 30 30 20 20 20  Join   0x0400   
b7a0: 2f 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64 20 74  /* Omit unused t
b7b0: 61 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a  ables in joins *
b7c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b7d0: 5f 53 74 61 74 33 34 20 20 20 20 20 20 20 20 20  _Stat34         
b7e0: 30 78 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20  0x0800   /* Use 
b7f0: 53 54 41 54 33 20 6f 72 20 53 54 41 54 34 20 64  STAT3 or STAT4 d
b800: 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ata */.#define S
b810: 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20  QLITE_AllOpts   
b820: 20 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a       0xffff   /*
b830: 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f   All optimizatio
b840: 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  ns */../*.** Mac
b850: 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ros for testing 
b860: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f  whether or not o
b870: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65  ptimizations are
b880: 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61   enabled or disa
b890: 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  bled..*/.#ifndef
b8a0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
b8b0: 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e  LTIN_TEST.#defin
b8c0: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69  e OptimizationDi
b8d0: 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  sabled(db, mask)
b8e0: 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46    (((db)->dbOptF
b8f0: 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29  lags&(mask))!=0)
b900: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
b910: 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c  ationEnabled(db,
b920: 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d   mask)   (((db)-
b930: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
b940: 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64  k))==0).#else.#d
b950: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
b960: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
b970: 61 73 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20  ask)  0.#define 
b980: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62  OptimizationEnab
b990: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20  led(db, mask)   
b9a0: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
b9b0: 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69  Return true if i
b9c0: 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63  t OK to factor c
b9d0: 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
b9e0: 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69  ons into the ini
b9f0: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63  tialization.** c
ba00: 6f 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e  ode. The argumen
ba10: 74 20 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a  t is a Parse obj
ba20: 65 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65  ect for the code
ba30: 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23   generator..*/.#
ba40: 64 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74  define ConstFact
ba50: 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b  orOk(P) ((P)->ok
ba60: 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a  ConstFactor)../*
ba70: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
ba80: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
ba90: 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a  te.magic field..
baa0: 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61  ** The numbers a
bab0: 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72  re obtained at r
bac0: 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e  andom and have n
bad0: 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  o special meanin
bae0: 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e  g, other.** than
baf0: 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20   being distinct 
bb00: 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72  from one another
bb10: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
bb20: 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20  ITE_MAGIC_OPEN  
bb30: 20 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f     0xa029a697  /
bb40: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70  * Database is op
bb50: 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  en */.#define SQ
bb60: 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45  LITE_MAGIC_CLOSE
bb70: 44 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20  D   0x9f3c2d33  
bb80: 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63  /* Database is c
bb90: 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  losed */.#define
bba0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49   SQLITE_MAGIC_SI
bbb0: 43 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39  CK     0x4b77129
bbc0: 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20  0  /* Error and 
bbd0: 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a  awaiting close *
bbe0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
bbf0: 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20  _MAGIC_BUSY     
bc00: 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44  0xf03b7906  /* D
bc10: 61 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c  atabase currentl
bc20: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66  y in use */.#def
bc30: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
bc40: 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35  _ERROR    0xb535
bc50: 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49  7930  /* An SQLI
bc60: 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20  TE_MISUSE error 
bc70: 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66  occurred */.#def
bc80: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
bc90: 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66  _ZOMBIE   0x64cf
bca0: 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77  fc7f  /* Close w
bcb0: 69 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65  ith last stateme
bcc0: 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a  nt close */../*.
bcd0: 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63  ** Each SQL func
bce0: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20  tion is defined 
bcf0: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
bd00: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
bd10: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 41  ** structure.  A
bd20: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
bd30: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 73 74   structure is st
bd40: 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
bd50: 74 65 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68  te.aFunc.** hash
bd60: 20 74 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75   table.  When mu
bd70: 6c 74 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73  ltiple functions
bd80: 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e   have the same n
bd90: 61 6d 65 2c 20 74 68 65 20 68 61 73 68 20 74 61  ame, the hash ta
bda0: 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f  ble.** points to
bdb0: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f   a linked list o
bdc0: 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72  f these structur
bdd0: 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  es..*/.struct Fu
bde0: 6e 63 44 65 66 20 7b 0a 20 20 69 31 36 20 6e 41  ncDef {.  i16 nA
bdf0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rg;            /
be00: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
be10: 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73  ments.  -1 means
be20: 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20   unlimited */.  
be30: 75 31 36 20 66 75 6e 63 46 6c 61 67 73 3b 20 20  u16 funcFlags;  
be40: 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d       /* Some com
be50: 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49  bination of SQLI
be60: 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76  TE_FUNC_* */.  v
be70: 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20  oid *pUserData; 
be80: 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61      /* User data
be90: 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20   parameter */.  
bea0: 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20  FuncDef *pNext; 
beb0: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e       /* Next fun
bec0: 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20  ction with same 
bed0: 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28  name */.  void (
bee0: 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f  *xFunc)(sqlite3_
bef0: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
bf00: 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f  ite3_value**); /
bf10: 2a 20 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69  * Regular functi
bf20: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  on */.  void (*x
bf30: 53 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f  Step)(sqlite3_co
bf40: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
bf50: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20  e3_value**); /* 
bf60: 41 67 67 72 65 67 61 74 65 20 73 74 65 70 20 2a  Aggregate step *
bf70: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61  /.  void (*xFina
bf80: 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f  lize)(sqlite3_co
bf90: 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20  ntext*);        
bfa0: 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67 72 65          /* Aggre
bfb0: 67 61 74 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a  gate finalizer *
bfc0: 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  /.  char *zName;
bfd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20           /* SQL 
bfe0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  name of the func
bff0: 74 69 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63 44  tion. */.  FuncD
c000: 65 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20  ef *pHash;      
c010: 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20 64  /* Next with a d
c020: 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75  ifferent name bu
c030: 74 20 74 68 65 20 73 61 6d 65 20 68 61 73 68 20  t the same hash 
c040: 2a 2f 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63  */.  FuncDestruc
c050: 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72  tor *pDestructor
c060: 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65  ;   /* Reference
c070: 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63   counted destruc
c080: 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  tor function */.
c090: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73  };../*.** This s
c0a0: 74 72 75 63 74 75 72 65 20 65 6e 63 61 70 73 75  tructure encapsu
c0b0: 6c 61 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e  lates a user-fun
c0c0: 63 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72  ction destructor
c0d0: 20 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a   callback (as.**
c0e0: 20 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e   configured usin
c0f0: 67 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  g create_functio
c100: 6e 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72 65  n_v2()) and a re
c110: 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e  ference counter.
c120: 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f   When.** create_
c130: 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73  function_v2() is
c140: 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74   called to creat
c150: 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  e a function wit
c160: 68 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a  h a destructor,.
c170: 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65  ** a single obje
c180: 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ct of this type 
c190: 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75  is allocated. Fu
c1a0: 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65  ncDestructor.nRe
c1b0: 66 20 69 73 20 73 65 74 20 74 6f 20 0a 2a 2a 20  f is set to .** 
c1c0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75  the number of Fu
c1d0: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72  ncDef objects cr
c1e0: 65 61 74 65 64 20 28 65 69 74 68 65 72 20 31 20  eated (either 1 
c1f0: 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20  or 3, depending 
c200: 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72  on whether.** or
c210: 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66 69   not the specifi
c220: 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53  ed encoding is S
c230: 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20  QLITE_ANY). The 
c240: 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63  FuncDef.pDestruc
c250: 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66  tor.** member of
c260: 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77   each of the new
c270: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73   FuncDef objects
c280: 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74   is set to point
c290: 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65   to the allocate
c2a0: 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63  d.** FuncDestruc
c2b0: 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  tor..**.** There
c2c0: 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20  after, when one 
c2d0: 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f  of the FuncDef o
c2e0: 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74 65  bjects is delete
c2f0: 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63 65  d, the reference
c300: 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69  .** count on thi
c310: 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72  s object is decr
c320: 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74  emented. When it
c330: 20 72 65 61 63 68 65 73 20 30 2c 20 74 68 65 20   reaches 0, the 
c340: 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73  destructor.** is
c350: 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65   invoked and the
c360: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
c370: 73 74 72 75 63 74 75 72 65 20 66 72 65 65 64 2e  structure freed.
c380: 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44  .*/.struct FuncD
c390: 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e  estructor {.  in
c3a0: 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28  t nRef;.  void (
c3b0: 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20  *xDestroy)(void 
c3c0: 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65  *);.  void *pUse
c3d0: 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  rData;.};../*.**
c3e0: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
c3f0: 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61   for FuncDef.fla
c400: 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74  gs.  Note that t
c410: 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f  he _LENGTH and _
c420: 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73  TYPEOF.** values
c430: 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64   must correspond
c440: 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54   to OPFLAG_LENGT
c450: 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f  HARG and OPFLAG_
c460: 54 59 50 45 4f 46 41 52 47 2e 20 20 54 68 65 72  TYPEOFARG.  Ther
c470: 65 0a 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28  e.** are assert(
c480: 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  ) statements in 
c490: 74 68 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69  the code to veri
c4a0: 66 79 20 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66  fy this..*/.#def
c4b0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
c4c0: 45 4e 43 4d 41 53 4b 20 20 30 78 30 30 33 20 2f  ENCMASK  0x003 /
c4d0: 2a 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53  * SQLITE_UTF8, S
c4e0: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72  QLITE_UTF16BE or
c4f0: 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66   UTF16LE */.#def
c500: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
c510: 4c 49 4b 45 20 20 20 20 20 30 78 30 30 34 20 2f  LIKE     0x004 /
c520: 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20  * Candidate for 
c530: 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a  the LIKE optimiz
c540: 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
c550: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53   SQLITE_FUNC_CAS
c560: 45 20 20 20 20 20 30 78 30 30 38 20 2f 2a 20 43  E     0x008 /* C
c570: 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49  ase-sensitive LI
c580: 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e  KE-type function
c590: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c5a0: 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20  TE_FUNC_EPHEM   
c5b0: 20 30 78 30 31 30 20 2f 2a 20 45 70 68 65 6d 65   0x010 /* Epheme
c5c0: 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74  ral.  Delete wit
c5d0: 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e  h VDBE */.#defin
c5e0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  e SQLITE_FUNC_NE
c5f0: 45 44 43 4f 4c 4c 20 30 78 30 32 30 20 2f 2a 20  EDCOLL 0x020 /* 
c600: 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f  sqlite3GetFuncCo
c610: 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62 65  llSeq() might be
c620: 20 63 61 6c 6c 65 64 20 2a 2f 0a 23 64 65 66 69   called */.#defi
c630: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
c640: 45 4e 47 54 48 20 20 20 30 78 30 34 30 20 2f 2a  ENGTH   0x040 /*
c650: 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68   Built-in length
c660: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
c670: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
c680: 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78 30 38  NC_TYPEOF   0x08
c690: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79  0 /* Built-in ty
c6a0: 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20  peof() function 
c6b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c6c0: 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20  E_FUNC_COUNT    
c6d0: 30 78 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  0x100 /* Built-i
c6e0: 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65  n count(*) aggre
c6f0: 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gate */.#define 
c700: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c  SQLITE_FUNC_COAL
c710: 45 53 43 45 20 30 78 32 30 30 20 2f 2a 20 42 75  ESCE 0x200 /* Bu
c720: 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28  ilt-in coalesce(
c730: 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f  ) or ifnull() */
c740: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c750: 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78  FUNC_UNLIKELY 0x
c760: 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  400 /* Built-in 
c770: 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74  unlikely() funct
c780: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
c790: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
c7a0: 41 4e 54 20 30 78 38 30 30 20 2f 2a 20 43 6f 6e  ANT 0x800 /* Con
c7b0: 73 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76  stant inputs giv
c7c0: 65 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74  e a constant out
c7d0: 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  put */.#define S
c7e0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
c7f0: 58 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72 75  X  0x1000 /* Tru
c800: 65 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20  e for min() and 
c810: 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65 73  max() aggregates
c820: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66   */../*.** The f
c830: 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d  ollowing three m
c840: 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28  acros, FUNCTION(
c850: 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e  ), LIKEFUNC() an
c860: 64 20 41 47 47 52 45 47 41 54 45 28 29 20 61 72  d AGGREGATE() ar
c870: 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65  e.** used to cre
c880: 61 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69  ate the initiali
c890: 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e  zers for the Fun
c8a0: 63 44 65 66 20 73 74 72 75 63 74 75 72 65 73 2e  cDef structures.
c8b0: 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f  .**.**   FUNCTIO
c8c0: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
c8d0: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
c8e0: 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
c8f0: 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20  create a scalar 
c900: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
c910: 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ion of a functio
c920: 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20  n zName .**     
c930: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43  implemented by C
c940: 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20   function xFunc 
c950: 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72  that accepts nAr
c960: 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65  g arguments. The
c970: 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61  .**     value pa
c980: 73 73 65 64 20 61 73 20 69 41 72 67 20 69 73 20  ssed as iArg is 
c990: 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a  cast to a (void*
c9a0: 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c  ) and made avail
c9b0: 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74  able.**     as t
c9c0: 68 65 20 75 73 65 72 2d 64 61 74 61 20 28 73 71  he user-data (sq
c9d0: 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28  lite3_user_data(
c9e0: 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74  )) for the funct
c9f0: 69 6f 6e 2e 20 49 66 20 0a 2a 2a 20 20 20 20 20  ion. If .**     
ca00: 61 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20  argument bNC is 
ca10: 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53  true, then the S
ca20: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
ca30: 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e  OLL flag is set.
ca40: 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49  .**.**   VFUNCTI
ca50: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
ca60: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
ca70: 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55  ).**     Like FU
ca80: 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74  NCTION except it
ca90: 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54   omits the SQLIT
caa0: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
cab0: 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47  flag..**.**   AG
cac0: 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
cad0: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
cae0: 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a  xStep, xFinal).*
caf0: 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
cb00: 65 61 74 65 20 61 6e 20 61 67 67 72 65 67 61 74  eate an aggregat
cb10: 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  e function defin
cb20: 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ition implemente
cb30: 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20  d by.**     the 
cb40: 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65  C functions xSte
cb50: 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68  p and xFinal. Th
cb60: 65 20 66 69 72 73 74 20 66 6f 75 72 20 70 61 72  e first four par
cb70: 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61  ameters.**     a
cb80: 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 69  re interpreted i
cb90: 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61  n the same way a
cba0: 73 20 74 68 65 20 66 69 72 73 74 20 34 20 70 61  s the first 4 pa
cbb0: 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20  rameters to.**  
cbc0: 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a     FUNCTION()..*
cbd0: 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28  *.**   LIKEFUNC(
cbe0: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72  zName, nArg, pAr
cbf0: 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20  g, flags).**    
cc00: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
cc10: 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  a scalar functio
cc20: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  n definition of 
cc30: 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65  a function zName
cc40: 20 0a 2a 2a 20 20 20 20 20 74 68 61 74 20 61 63   .**     that ac
cc50: 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
cc60: 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d 70 6c  ents and is impl
cc70: 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63 61 6c  emented by a cal
cc80: 6c 20 74 6f 20 43 20 0a 2a 2a 20 20 20 20 20 66  l to C .**     f
cc90: 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63  unction likeFunc
cca0: 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20  . Argument pArg 
ccb0: 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f  is cast to a (vo
ccc0: 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a  id *) and made.*
ccd0: 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20  *     available 
cce0: 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  as the function 
ccf0: 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74  user-data (sqlit
cd00: 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e  e3_user_data()).
cd10: 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63   The.**     Func
cd20: 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62  Def.flags variab
cd30: 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  le is set to the
cd40: 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
cd50: 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20   the flags.**   
cd60: 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a    parameter..*/.
cd70: 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e  #define FUNCTION
cd80: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
cd90: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
cda0: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
cdb0: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
cdc0: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
cdd0: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
cde0: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
cdf0: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
ce00: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
ce10: 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c  0, 0, #zName, 0,
ce20: 20 30 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e   0}.#define VFUN
ce30: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
ce40: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
ce50: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
ce60: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
ce70: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
ce80: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
ce90: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
cea0: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
ceb0: 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c  0, 0, #zName, 0,
cec0: 20 30 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43   0}.#define FUNC
ced0: 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72  TION2(zName, nAr
cee0: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
cef0: 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29  unc, extraFlags)
cf00: 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54   \.  {nArg,SQLIT
cf10: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
cf20: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
cf30: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
cf40: 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67  DCOLL)|extraFlag
cf50: 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  s,\.   SQLITE_IN
cf60: 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
cf70: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
cf80: 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64  #zName, 0, 0}.#d
cf90: 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49  efine STR_FUNCTI
cfa0: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
cfb0: 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  pArg, bNC, xFunc
cfc0: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
cfd0: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
cfe0: 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62  T|SQLITE_UTF8|(b
cff0: 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  NC*SQLITE_FUNC_N
d000: 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70  EEDCOLL), \.   p
d010: 41 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  Arg, 0, xFunc, 0
d020: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20  , 0, #zName, 0, 
d030: 30 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46  0}.#define LIKEF
d040: 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
d050: 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20   arg, flags) \. 
d060: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
d070: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
d080: 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20  ITE_UTF8|flags, 
d090: 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67  \.   (void *)arg
d0a0: 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30  , 0, likeFunc, 0
d0b0: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20  , 0, #zName, 0, 
d0c0: 30 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45  0}.#define AGGRE
d0d0: 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  GATE(zName, nArg
d0e0: 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70  , arg, nc, xStep
d0f0: 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e  , xFinal) \.  {n
d100: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
d110: 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43  |(nc*SQLITE_FUNC
d120: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
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 61 72 67 29 2c 20 30 2c 20 30 2c 20 78  TR(arg), 0, 0, x
d150: 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61  Step,xFinal,#zNa
d160: 6d 65 2c 30 2c 30 7d 0a 23 64 65 66 69 6e 65 20  me,0,0}.#define 
d170: 41 47 47 52 45 47 41 54 45 32 28 7a 4e 61 6d 65  AGGREGATE2(zName
d180: 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c  , nArg, arg, nc,
d190: 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20   xStep, xFinal, 
d1a0: 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20  extraFlags) \.  
d1b0: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
d1c0: 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55  F8|(nc*SQLITE_FU
d1d0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74  NC_NEEDCOLL)|ext
d1e0: 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51  raFlags, \.   SQ
d1f0: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
d200: 61 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74 65  arg), 0, 0, xSte
d210: 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c  p,xFinal,#zName,
d220: 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20  0,0}../*.** All 
d230: 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e  current savepoin
d240: 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ts are stored in
d250: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73   a linked list s
d260: 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71  tarting at.** sq
d270: 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74  lite3.pSavepoint
d280: 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d  . The first elem
d290: 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ent in the list 
d2a0: 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  is the most rece
d2b0: 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73  ntly.** opened s
d2c0: 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f  avepoint. Savepo
d2d0: 69 6e 74 73 20 61 72 65 20 61 64 64 65 64 20 74  ints are added t
d2e0: 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20 74 68  o the list by th
d2f0: 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76  e vdbe.** OP_Sav
d300: 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69  epoint instructi
d310: 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61  on..*/.struct Sa
d320: 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72  vepoint {.  char
d330: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
d340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d350: 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d  /* Savepoint nam
d360: 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65  e (nul-terminate
d370: 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  d) */.  i64 nDef
d380: 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
d390: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
d3a0: 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65  umber of deferre
d3b0: 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20  d fk violations 
d3c0: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
d3d0: 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
d3e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
d3f0: 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 69  er of deferred i
d400: 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65  mm fk. */.  Save
d410: 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20  point *pNext;   
d420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d430: 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f  /* Parent savepo
d440: 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a  int (if any) */.
d450: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
d460: 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64  llowing are used
d470: 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70   as the second p
d480: 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69  arameter to sqli
d490: 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a  te3Savepoint(),.
d4a0: 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50 31  ** and as the P1
d4b0: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
d4c0: 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e   OP_Savepoint in
d4d0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64  struction..*/.#d
d4e0: 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
d4f0: 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65  BEGIN      0.#de
d500: 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52  fine SAVEPOINT_R
d510: 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65 66  ELEASE    1.#def
d520: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f  ine SAVEPOINT_RO
d530: 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a  LLBACK   2.../*.
d540: 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d  ** Each SQLite m
d550: 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74  odule (virtual t
d560: 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29  able definition)
d570: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
d580: 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  n.** instance of
d590: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
d5a0: 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64  tructure, stored
d5b0: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e   in the sqlite3.
d5c0: 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20  aModule.** hash 
d5d0: 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  table..*/.struct
d5e0: 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73   Module {.  cons
d5f0: 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
d600: 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20   *pModule;      
d610: 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69   /* Callback poi
d620: 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74  nters */.  const
d630: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
d640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d650: 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74  /* Name passed t
d660: 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  o create_module(
d670: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  ) */.  void *pAu
d680: 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
d690: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70              /* p
d6a0: 41 75 78 20 70 61 73 73 65 64 20 74 6f 20 63 72  Aux passed to cr
d6b0: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
d6c0: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72  .  void (*xDestr
d6d0: 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  oy)(void *);    
d6e0: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c          /* Modul
d6f0: 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e  e destructor fun
d700: 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ction */.};../*.
d710: 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ** information a
d720: 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
d730: 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   of an SQL table
d740: 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69   is held in an i
d750: 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
d760: 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  is structure..*/
d770: 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b  .struct Column {
d780: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
d790: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
d7a0: 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  his column */.  
d7b0: 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20  Expr *pDflt;    
d7c0: 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75   /* Default valu
d7d0: 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
d7e0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c   */.  char *zDfl
d7f0: 74 3b 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e  t;     /* Origin
d800: 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 64  al text of the d
d810: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a  efault value */.
d820: 20 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20    char *zType;  
d830: 20 20 20 2f 2a 20 44 61 74 61 20 74 79 70 65 20     /* Data type 
d840: 66 6f 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20  for this column 
d850: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c  */.  char *zColl
d860: 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  ;     /* Collati
d870: 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66  ng sequence.  If
d880: 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64   NULL, use the d
d890: 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e  efault */.  u8 n
d8a0: 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20  otNull;      /* 
d8b0: 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20  An OE_ code for 
d8c0: 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e  handling a NOT N
d8d0: 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ULL constraint *
d8e0: 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
d8f0: 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74  y;   /* One of t
d900: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e  he SQLITE_AFF_..
d910: 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38  . values */.  u8
d920: 20 73 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f   szEst;        /
d930: 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65  * Estimated size
d940: 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e   of this column.
d950: 20 20 49 4e 54 3d 3d 31 20 2a 2f 0a 20 20 75 38    INT==1 */.  u8
d960: 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f   colFlags;     /
d970: 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72  * Boolean proper
d980: 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c  ties.  See COLFL
d990: 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f  AG_ defines belo
d9a0: 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f  w */.};../* Allo
d9b0: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43  wed values for C
d9c0: 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a  olumn.colFlags:.
d9d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
d9e0: 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30  AG_PRIMKEY  0x00
d9f0: 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  01    /* Column 
da00: 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  is part of the p
da10: 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64  rimary key */.#d
da20: 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49  efine COLFLAG_HI
da30: 44 44 45 4e 20 20 20 30 78 30 30 30 32 20 20 20  DDEN   0x0002   
da40: 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c   /* A hidden col
da50: 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c  umn in a virtual
da60: 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   table */../*.**
da70: 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65   A "Collating Se
da80: 71 75 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e  quence" is defin
da90: 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ed by an instanc
daa0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
dab0: 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e  ng.** structure.
dac0: 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61   Conceptually, a
dad0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
dae0: 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  nce consists of 
daf0: 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20  a name and.** a 
db00: 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69  comparison routi
db10: 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  ne that defines 
db20: 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61  the order of tha
db30: 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a  t sequence..**.*
db40: 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d  * If CollSeq.xCm
db50: 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65  p is NULL, it me
db60: 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20  ans that the.** 
db70: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
db80: 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  ce is undefined.
db90: 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20    Indices built 
dba0: 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a  on an undefined.
dbb0: 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ** collating seq
dbc0: 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65  uence may not be
dbd0: 20 72 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e   read or written
dbe0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c  ..*/.struct Coll
dbf0: 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  Seq {.  char *zN
dc00: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ame;          /*
dc10: 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c   Name of the col
dc20: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c  lating sequence,
dc30: 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a   UTF-8 encoded *
dc40: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
dc50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
dc60: 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c  t encoding handl
dc70: 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a  ed by xCmp() */.
dc80: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20    void *pUser;  
dc90: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
dca0: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d   argument to xCm
dcb0: 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  p() */.  int (*x
dcc0: 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20  Cmp)(void*,int, 
dcd0: 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
dce0: 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a  , const void*);.
dcf0: 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76    void (*xDel)(v
dd00: 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72  oid*);  /* Destr
dd10: 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20  uctor for pUser 
dd20: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73  */.};../*.** A s
dd30: 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65  ort order can be
dd40: 20 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44   either ASC or D
dd50: 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ESC..*/.#define 
dd60: 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20  SQLITE_SO_ASC   
dd70: 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69      0  /* Sort i
dd80: 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
dd90: 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  r */.#define SQL
dda0: 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20  ITE_SO_DESC     
ddb0: 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61   1  /* Sort in a
ddc0: 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a  scending order *
ddd0: 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20  /../*.** Column 
dde0: 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a  affinity types..
ddf0: 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64  **.** These used
de00: 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69   to have mnemoni
de10: 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20  c name like 'i' 
de20: 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  for SQLITE_AFF_I
de30: 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74  NTEGER and.** 't
de40: 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46  ' for SQLITE_AFF
de50: 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63  _TEXT.  But we c
de60: 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65  an save a little
de70: 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f   space and impro
de80: 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20  ve.** the speed 
de90: 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62  a little by numb
dea0: 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73  ering the values
deb0: 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 20   consecutively. 
dec0: 20 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68   .**.** But rath
ded0: 65 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69  er than start wi
dee0: 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65  th 0 or 1, we be
def0: 67 69 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54  gin with 'A'.  T
df00: 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e  hat way,.** when
df10: 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69   multiple affini
df20: 74 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e  ty types are con
df30: 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61  catenated into a
df40: 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75   string and.** u
df50: 73 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70  sed as the P4 op
df60: 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c  erand, they will
df70: 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c   be more readabl
df80: 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c  e..**.** Note al
df90: 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65  so that the nume
dfa0: 72 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72  ric types are gr
dfb0: 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73  ouped together s
dfc0: 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a  o that testing.*
dfd0: 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20  * for a numeric 
dfe0: 74 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65  type is a single
dff0: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e   comparison.  An
e000: 64 20 74 68 65 20 4e 4f 4e 45 20 74 79 70 65 20  d the NONE type 
e010: 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65  is first..*/.#de
e020: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
e030: 4e 4f 4e 45 20 20 20 20 20 27 41 27 0a 23 64 65  NONE     'A'.#de
e040: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
e050: 54 45 58 54 20 20 20 20 20 27 42 27 0a 23 64 65  TEXT     'B'.#de
e060: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
e070: 4e 55 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65  NUMERIC  'C'.#de
e080: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
e090: 49 4e 54 45 47 45 52 20 20 27 44 27 0a 23 64 65  INTEGER  'D'.#de
e0a0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
e0b0: 52 45 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64  REAL     'E'..#d
e0c0: 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e  efine sqlite3IsN
e0d0: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58  umericAffinity(X
e0e0: 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f  )  ((X)>=SQLITE_
e0f0: 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a  AFF_NUMERIC)../*
e100: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
e110: 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d  FF_MASK values m
e120: 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67  asks off the sig
e130: 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66  nificant bits of
e140: 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20   an.** affinity 
e150: 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69  value. .*/.#defi
e160: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  ne SQLITE_AFF_MA
e170: 53 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a  SK     0x47../*.
e180: 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69  ** Additional bi
e190: 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63 61  t values that ca
e1a0: 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20 61  n be ORed with a
e1b0: 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f  n affinity witho
e1c0: 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74  ut.** changing t
e1d0: 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a  he affinity..**.
e1e0: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f  ** The SQLITE_NO
e1f0: 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20 61 20  TNULL flag is a 
e200: 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e  combination of N
e210: 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49 46  ULLEQ and JUMPIF
e220: 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73  NULL..** It caus
e230: 65 73 20 61 6e 20 61 73 73 65 72 74 28 29 20 74  es an assert() t
e240: 6f 20 66 69 72 65 20 69 66 20 65 69 74 68 65 72  o fire if either
e250: 20 6f 70 65 72 61 6e 64 20 74 6f 20 61 20 63 6f   operand to a co
e260: 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72  mparison.** oper
e270: 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49  ator is NULL.  I
e280: 74 20 69 73 20 61 64 64 65 64 20 74 6f 20 63 65  t is added to ce
e290: 72 74 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e  rtain comparison
e2a0: 20 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a   operators to.**
e2b0: 20 70 72 6f 76 65 20 74 68 61 74 20 74 68 65 20   prove that the 
e2c0: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 61 6c 77  operands are alw
e2d0: 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f  ays NOT NULL..*/
e2e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e2f0: 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 31  JUMPIFNULL   0x1
e300: 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65  0  /* jumps if e
e310: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
e320: 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65   NULL */.#define
e330: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
e340: 20 20 20 20 20 30 78 32 30 20 20 2f 2a 20 53 74       0x20  /* St
e350: 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  ore result in re
e360: 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68 61  g[P2] rather tha
e370: 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e  n jump */.#defin
e380: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
e390: 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e        0x80  /* N
e3a0: 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66  ULL=NULL */.#def
e3b0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55  ine SQLITE_NOTNU
e3c0: 4c 4c 20 20 20 20 20 20 30 78 39 30 20 20 2f 2a  LL      0x90  /*
e3d0: 20 41 73 73 65 72 74 20 74 68 61 74 20 6f 70 65   Assert that ope
e3e0: 72 61 6e 64 73 20 61 72 65 20 6e 65 76 65 72 20  rands are never 
e3f0: 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  NULL */../*.** A
e400: 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73  n object of this
e410: 20 74 79 70 65 20 69 73 20 63 72 65 61 74 65 64   type is created
e420: 20 66 6f 72 20 65 61 63 68 20 76 69 72 74 75 61   for each virtua
e430: 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20  l table present 
e440: 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61  in.** the databa
e450: 73 65 20 73 63 68 65 6d 61 2e 20 0a 2a 2a 0a 2a  se schema. .**.*
e460: 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73  * If the databas
e470: 65 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  e schema is shar
e480: 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69  ed, then there i
e490: 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  s one instance o
e4a0: 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  f this.** struct
e4b0: 75 72 65 20 66 6f 72 20 65 61 63 68 20 64 61 74  ure for each dat
e4c0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
e4d0: 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74   (sqlite3*) that
e4e0: 20 75 73 65 73 20 74 68 65 20 73 68 61 72 65 64   uses the shared
e4f0: 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73  .** schema. This
e500: 20 69 73 20 62 65 63 61 75 73 65 20 65 61 63 68   is because each
e510: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
e520: 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74  tion requires it
e530: 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20  s own unique.** 
e540: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
e550: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
e560: 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63  ndle used to acc
e570: 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 20  ess the virtual 
e580: 74 61 62 6c 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d  table .** implem
e590: 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65  entation. sqlite
e5a0: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
e5b0: 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65  can not be share
e5c0: 64 20 62 65 74 77 65 65 6e 20 0a 2a 2a 20 64 61  d between .** da
e5d0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
e5e0: 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68  ns, even when th
e5f0: 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e  e rest of the in
e600: 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
e610: 20 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73   .** schema is s
e620: 68 61 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d  hared, as the im
e630: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74  plementation oft
e640: 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64 61  en stores the da
e650: 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63  tabase.** connec
e660: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73  tion handle pass
e670: 65 64 20 74 6f 20 69 74 20 76 69 61 20 74 68 65  ed to it via the
e680: 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78   xConnect() or x
e690: 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a  Create() method.
e6a0: 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61  ** during initia
e6b0: 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61  lization interna
e6c0: 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62 61  lly. This databa
e6d0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  se connection ha
e6e0: 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e  ndle may.** then
e6f0: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
e700: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d  virtual table im
e710: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
e720: 61 63 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c  access real tabl
e730: 65 73 20 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68  es .** within th
e740: 65 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74  e database. So t
e750: 68 61 74 20 74 68 65 79 20 61 70 70 65 61 72 20  hat they appear 
e760: 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 63  as part of the c
e770: 61 6c 6c 65 72 73 20 0a 2a 2a 20 74 72 61 6e 73  allers .** trans
e780: 61 63 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63  action, these ac
e790: 63 65 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62  cesses need to b
e7a0: 65 20 6d 61 64 65 20 76 69 61 20 74 68 65 20 73  e made via the s
e7b0: 61 6d 65 20 64 61 74 61 62 61 73 65 20 0a 2a 2a  ame database .**
e7c0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74   connection as t
e7d0: 68 61 74 20 75 73 65 64 20 74 6f 20 65 78 65 63  hat used to exec
e7e0: 75 74 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f  ute SQL operatio
e7f0: 6e 73 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61  ns on the virtua
e800: 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  l table..**.** A
e810: 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  ll VTable object
e820: 73 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  s that correspon
e830: 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61  d to a single ta
e840: 62 6c 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a  ble in a shared.
e850: 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ** database sche
e860: 6d 61 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79  ma are initially
e870: 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e   stored in a lin
e880: 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64  ked-list pointed
e890: 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61   to by.** the Ta
e8a0: 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62  ble.pVTable memb
e8b0: 65 72 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74  er variable of t
e8c0: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
e8d0: 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a   Table object..*
e8e0: 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65  * When an sqlite
e8f0: 33 5f 70 72 65 70 61 72 65 28 29 20 6f 70 65 72  3_prepare() oper
e900: 61 74 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65  ation is require
e910: 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  d to access the 
e920: 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
e930: 2c 20 69 74 20 73 65 61 72 63 68 65 73 20 74 68  , it searches th
e940: 65 20 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56  e list for the V
e950: 54 61 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65  Table that corre
e960: 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a  sponds to the.**
e970: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
e980: 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70  tion doing the p
e990: 72 65 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74  reparing so as t
e9a0: 6f 20 75 73 65 20 74 68 65 20 63 6f 72 72 65 63  o use the correc
e9b0: 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61  t.** sqlite3_vta
e9c0: 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65  b* handle in the
e9d0: 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e   compiled query.
e9e0: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69  .**.** When an i
e9f0: 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f  n-memory Table o
ea00: 62 6a 65 63 74 20 69 73 20 64 65 6c 65 74 65 64  bject is deleted
ea10: 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68   (for example wh
ea20: 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  en the.** schema
ea30: 20 69 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64   is being reload
ea40: 65 64 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73  ed for some reas
ea50: 6f 6e 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20  on), the VTable 
ea60: 6f 62 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 20  objects are not 
ea70: 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20  .** deleted and 
ea80: 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
ea90: 2a 20 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f  * handles are no
eaa0: 74 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65  t xDisconnect()e
eab0: 64 20 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  d .** immediatel
eac0: 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79  y. Instead, they
ead0: 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20   are moved from 
eae0: 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
eaf0: 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f  e list to.** ano
eb00: 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74  ther linked list
eb10: 20 68 65 61 64 65 64 20 62 79 20 74 68 65 20 73   headed by the s
eb20: 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65  qlite3.pDisconne
eb30: 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  ct member of the
eb40: 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  .** correspondin
eb50: 67 20 73 71 6c 69 74 65 33 20 73 74 72 75 63 74  g sqlite3 struct
eb60: 75 72 65 2e 20 54 68 65 79 20 61 72 65 20 74 68  ure. They are th
eb70: 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63  en deleted/xDisc
eb80: 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a 20 6e 65 78  onnected .** nex
eb90: 74 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65  t time a stateme
eba0: 6e 74 20 69 73 20 70 72 65 70 61 72 65 64 20 75  nt is prepared u
ebb0: 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65  sing said sqlite
ebc0: 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65  3*. This is done
ebd0: 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61  .** to avoid dea
ebe0: 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76  dlock issues inv
ebf0: 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20  olving multiple 
ec00: 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75  sqlite3.mutex mu
ec10: 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20  texes..** Refer 
ec20: 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76  to comments abov
ec30: 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  e function sqlit
ec40: 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
ec50: 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70  () for an.** exp
ec60: 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77  lanation as to w
ec70: 68 79 20 69 74 20 69 73 20 73 61 66 65 20 74 6f  hy it is safe to
ec80: 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f   add an entry to
ec90: 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73   an sqlite3.pDis
eca0: 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20  connect.** list 
ecb0: 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20  without holding 
ecc0: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
ecd0: 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20  g sqlite3.mutex 
ece0: 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  mutex..**.** The
ecf0: 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65   memory for obje
ed00: 63 74 73 20 6f 66 20 74 68 69 73 20 74 79 70 65  cts of this type
ed10: 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63   is always alloc
ed20: 61 74 65 64 20 62 79 20 0a 2a 2a 20 73 71 6c 69  ated by .** sqli
ed30: 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75  te3DbMalloc(), u
ed40: 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74  sing the connect
ed50: 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65  ion handle store
ed60: 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61  d in VTable.db a
ed70: 73 20 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20  s .** the first 
ed80: 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72  argument..*/.str
ed90: 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73  uct VTable {.  s
eda0: 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
edb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
edc0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
edd0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
ede0: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
edf0: 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20  Module *pMod;   
ee00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
ee10: 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69  nter to module i
ee20: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f  mplementation */
ee30: 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
ee40: 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20  *pVtab;      /* 
ee50: 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20  Pointer to vtab 
ee60: 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e  instance */.  in
ee70: 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  t nRef;         
ee80: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
ee90: 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
eea0: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
eeb0: 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61  */.  u8 bConstra
eec0: 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
eed0: 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72  * True if constr
eee0: 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72  aints are suppor
eef0: 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61  ted */.  int iSa
ef00: 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
ef10: 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74     /* Depth of t
ef20: 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61  he SAVEPOINT sta
ef30: 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  ck */.  VTable *
ef40: 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
ef50: 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e    /* Next in lin
ef60: 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20 61 62  ked list (see ab
ef70: 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ove) */.};../*.*
ef80: 2a 20 45 61 63 68 20 53 51 4c 20 74 61 62 6c 65  * Each SQL table
ef90: 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
efa0: 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 20  in memory by an 
efb0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 0a  instance of the.
efc0: 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  ** following str
efd0: 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 61  ucture..**.** Ta
efe0: 62 6c 65 2e 7a 4e 61 6d 65 20 69 73 20 74 68 65  ble.zName is the
eff0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
f000: 6c 65 2e 20 20 54 68 65 20 63 61 73 65 20 6f 66  le.  The case of
f010: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
f020: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
f030: 61 74 65 6d 65 6e 74 20 69 73 20 73 74 6f 72 65  atement is store
f040: 64 2c 20 62 75 74 20 63 61 73 65 20 69 73 20 6e  d, but case is n
f050: 6f 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20 66  ot significant f
f060: 6f 72 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  or.** comparison
f070: 73 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 6e  s..**.** Table.n
f080: 43 6f 6c 20 69 73 20 74 68 65 20 6e 75 6d 62 65  Col is the numbe
f090: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
f0a0: 74 68 69 73 20 74 61 62 6c 65 2e 20 20 54 61 62  this table.  Tab
f0b0: 6c 65 2e 61 43 6f 6c 20 69 73 20 61 0a 2a 2a 20  le.aCol is a.** 
f0c0: 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 61 72  pointer to an ar
f0d0: 72 61 79 20 6f 66 20 43 6f 6c 75 6d 6e 20 73 74  ray of Column st
f0e0: 72 75 63 74 75 72 65 73 2c 20 6f 6e 65 20 66 6f  ructures, one fo
f0f0: 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 2a  r each column..*
f100: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  *.** If the tabl
f110: 65 20 68 61 73 20 61 6e 20 49 4e 54 45 47 45 52  e has an INTEGER
f120: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68   PRIMARY KEY, th
f130: 65 6e 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69  en Table.iPKey i
f140: 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 0a 2a  s the index of.*
f150: 2a 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 68 61  * the column tha
f160: 74 20 69 73 20 74 68 61 74 20 6b 65 79 2e 20 20  t is that key.  
f170: 20 4f 74 68 65 72 77 69 73 65 20 54 61 62 6c 65   Otherwise Table
f180: 2e 69 50 4b 65 79 20 69 73 20 6e 65 67 61 74 69  .iPKey is negati
f190: 76 65 2e 20 20 4e 6f 74 65 0a 2a 2a 20 74 68 61  ve.  Note.** tha
f1a0: 74 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f  t the datatype o
f1b0: 66 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  f the PRIMARY KE
f1c0: 59 20 6d 75 73 74 20 62 65 20 49 4e 54 45 47 45  Y must be INTEGE
f1d0: 52 20 66 6f 72 20 74 68 69 73 20 66 69 65 6c 64  R for this field
f1e0: 20 74 6f 0a 2a 2a 20 62 65 20 73 65 74 2e 20 20   to.** be set.  
f1f0: 41 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  An INTEGER PRIMA
f200: 52 59 20 4b 45 59 20 69 73 20 75 73 65 64 20 61  RY KEY is used a
f210: 73 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20  s the rowid for 
f220: 65 61 63 68 20 72 6f 77 20 6f 66 0a 2a 2a 20 74  each row of.** t
f230: 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 61 20  he table.  If a 
f240: 74 61 62 6c 65 20 68 61 73 20 6e 6f 20 49 4e 54  table has no INT
f250: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
f260: 2c 20 74 68 65 6e 20 61 20 72 61 6e 64 6f 6d 20  , then a random 
f270: 72 6f 77 69 64 0a 2a 2a 20 69 73 20 67 65 6e 65  rowid.** is gene
f280: 72 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72  rated for each r
f290: 6f 77 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e  ow of the table.
f2a0: 20 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b    TF_HasPrimaryK
f2b0: 65 79 20 69 73 20 73 65 74 20 69 66 0a 2a 2a 20  ey is set if.** 
f2c0: 74 68 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e  the table has an
f2d0: 79 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 49  y PRIMARY KEY, I
f2e0: 4e 54 45 47 45 52 20 6f 72 20 6f 74 68 65 72 77  NTEGER or otherw
f2f0: 69 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65  ise..**.** Table
f300: 2e 74 6e 75 6d 20 69 73 20 74 68 65 20 70 61 67  .tnum is the pag
f310: 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65  e number for the
f320: 20 72 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65   root BTree page
f330: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69 6e   of the table in
f340: 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
f350: 20 66 69 6c 65 2e 20 20 49 66 20 54 61 62 6c 65   file.  If Table
f360: 2e 69 44 62 20 69 73 20 74 68 65 20 69 6e 64 65  .iDb is the inde
f370: 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
f380: 65 20 74 61 62 6c 65 20 62 61 63 6b 65 6e 64 0a  e table backend.
f390: 2a 2a 20 69 6e 20 73 71 6c 69 74 65 2e 61 44 62  ** in sqlite.aDb
f3a0: 5b 5d 2e 20 20 30 20 69 73 20 66 6f 72 20 74 68  [].  0 is for th
f3b0: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
f3c0: 61 6e 64 20 31 20 69 73 20 66 6f 72 20 74 68 65  and 1 is for the
f3d0: 20 66 69 6c 65 20 74 68 61 74 0a 2a 2a 20 68 6f   file that.** ho
f3e0: 6c 64 73 20 74 65 6d 70 6f 72 61 72 79 20 74 61  lds temporary ta
f3f0: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
f400: 2e 20 20 49 66 20 54 46 5f 45 70 68 65 6d 65 72  .  If TF_Ephemer
f410: 61 6c 20 69 73 20 73 65 74 0a 2a 2a 20 74 68 65  al is set.** the
f420: 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 73  n the table is s
f430: 74 6f 72 65 64 20 69 6e 20 61 20 66 69 6c 65 20  tored in a file 
f440: 74 68 61 74 20 69 73 20 61 75 74 6f 6d 61 74 69  that is automati
f450: 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 0a 2a 2a  cally deleted.**
f460: 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 63   when the VDBE c
f470: 75 72 73 6f 72 20 74 6f 20 74 68 65 20 74 61 62  ursor to the tab
f480: 6c 65 20 69 73 20 63 6c 6f 73 65 64 2e 20 20 49  le is closed.  I
f490: 6e 20 74 68 69 73 20 63 61 73 65 20 54 61 62 6c  n this case Tabl
f4a0: 65 2e 74 6e 75 6d 20 0a 2a 2a 20 72 65 66 65 72  e.tnum .** refer
f4b0: 73 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75  s VDBE cursor nu
f4c0: 6d 62 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20  mber that holds 
f4d0: 74 68 65 20 74 61 62 6c 65 20 6f 70 65 6e 2c 20  the table open, 
f4e0: 6e 6f 74 20 74 6f 20 74 68 65 20 72 6f 6f 74 0a  not to the root.
f4f0: 2a 2a 20 70 61 67 65 20 6e 75 6d 62 65 72 2e 20  ** page number. 
f500: 20 54 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   Transient table
f510: 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 68 6f  s are used to ho
f520: 6c 64 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  ld the results o
f530: 66 20 61 0a 2a 2a 20 73 75 62 2d 71 75 65 72 79  f a.** sub-query
f540: 20 74 68 61 74 20 61 70 70 65 61 72 73 20 69 6e   that appears in
f550: 73 74 65 61 64 20 6f 66 20 61 20 72 65 61 6c 20  stead of a real 
f560: 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68  table name in th
f570: 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 0a 2a  e FROM clause .*
f580: 2a 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74  * of a SELECT st
f590: 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  atement..*/.stru
f5a0: 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61  ct Table {.  cha
f5b0: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
f5c0: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
f5d0: 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a   table or view *
f5e0: 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c  /.  Column *aCol
f5f0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  ;        /* Info
f600: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61  rmation about ea
f610: 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49  ch column */.  I
f620: 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20  ndex *pIndex;   
f630: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53      /* List of S
f640: 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68  QL indexes on th
f650: 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53  is table. */.  S
f660: 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
f670: 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20      /* NULL for 
f680: 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20  tables.  Points 
f690: 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66  to definition if
f6a0: 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b   a view. */.  FK
f6b0: 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20  ey *pFKey;      
f6c0: 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73     /* Linked lis
f6d0: 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e  t of all foreign
f6e0: 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74 61   keys in this ta
f6f0: 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ble */.  char *z
f700: 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a  ColAff;       /*
f710: 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67   String defining
f720: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   the affinity of
f730: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
f740: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
f750: 4d 49 54 5f 43 48 45 43 4b 0a 20 20 45 78 70 72  MIT_CHECK.  Expr
f760: 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20  List *pCheck;   
f770: 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f   /* All CHECK co
f780: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 65 6e  nstraints */.#en
f790: 64 69 66 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f  dif.  LogEst nRo
f7a0: 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45 73  wLogEst;   /* Es
f7b0: 74 69 6d 61 74 65 64 20 72 6f 77 73 20 69 6e 20  timated rows in 
f7c0: 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c  table - from sql
f7d0: 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20  ite_stat1 table 
f7e0: 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20  */.  int tnum;  
f7f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f            /* Roo
f800: 74 20 42 54 72 65 65 20 6e 6f 64 65 20 66 6f 72  t BTree node for
f810: 20 74 68 69 73 20 74 61 62 6c 65 20 28 73 65 65   this table (see
f820: 20 6e 6f 74 65 20 61 62 6f 76 65 29 20 2a 2f 0a   note above) */.
f830: 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20    i16 iPKey;    
f840: 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74         /* If not
f850: 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20 61   negative, use a
f860: 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68  Col[iPKey] as th
f870: 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  e primary key */
f880: 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20  .  i16 nCol;    
f890: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
f8a0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
f8b0: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
f8c0: 75 31 36 20 6e 52 65 66 3b 20 20 20 20 20 20 20  u16 nRef;       
f8d0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
f8e0: 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68  f pointers to th
f8f0: 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f  is Table */.  Lo
f900: 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20  gEst szTabRow;  
f910: 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
f920: 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62  size of each tab
f930: 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20  le row in bytes 
f940: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
f950: 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54  _ENABLE_COSTMULT
f960: 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75  .  LogEst costMu
f970: 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20  lt;     /* Cost 
f980: 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75  multiplier for u
f990: 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20  sing this table 
f9a0: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 74  */.#endif.  u8 t
f9b0: 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  abFlags;        
f9c0: 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a   /* Mask of TF_*
f9d0: 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20   values */.  u8 
f9e0: 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20  keyConf;        
f9f0: 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20    /* What to do 
fa00: 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75  in case of uniqu
fa10: 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f  eness conflict o
fa20: 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64  n iPKey */.#ifnd
fa30: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
fa40: 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20  LTERTABLE.  int 
fa50: 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20  addColOffset;   
fa60: 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52   /* Offset in CR
fa70: 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20  EATE TABLE stmt 
fa80: 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c  to add a new col
fa90: 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  umn */.#endif.#i
faa0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
fab0: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
fac0: 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b   int nModuleArg;
fad0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
fae0: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  of arguments to 
faf0: 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20  the module */.  
fb00: 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41  char **azModuleA
fb10: 72 67 3b 20 20 2f 2a 20 54 65 78 74 20 6f 66 20  rg;  /* Text of 
fb20: 61 6c 6c 20 6d 6f 64 75 6c 65 20 61 72 67 73 2e  all module args.
fb30: 20 5b 30 5d 20 69 73 20 6d 6f 64 75 6c 65 20 6e   [0] is module n
fb40: 61 6d 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ame */.  VTable 
fb50: 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a  *pVTable;     /*
fb60: 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20   List of VTable 
fb70: 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64  objects. */.#end
fb80: 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  if.  Trigger *pT
fb90: 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73  rigger;   /* Lis
fba0: 74 20 6f 66 20 74 72 69 67 67 65 72 73 20 73 74  t of triggers st
fbb0: 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20  ored in pSchema 
fbc0: 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
fbd0: 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68  hema;     /* Sch
fbe0: 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ema that contain
fbf0: 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  s this table */.
fc00: 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f    Table *pNextZo
fc10: 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  mbie;  /* Next o
fc20: 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d  n the Parse.pZom
fc30: 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d  bieTab list */.}
fc40: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
fc50: 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c   values for Tabl
fc60: 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2f 0a 23  e.tabFlags..*/.#
fc70: 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e  define TF_Readon
fc80: 6c 79 20 20 20 20 20 20 20 20 30 78 30 31 20 20  ly        0x01  
fc90: 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73    /* Read-only s
fca0: 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23  ystem table */.#
fcb0: 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65  define TF_Epheme
fcc0: 72 61 6c 20 20 20 20 20 20 20 30 78 30 32 20 20  ral       0x02  
fcd0: 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72 61    /* An ephemera
fce0: 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
fcf0: 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79  ne TF_HasPrimary
fd00: 4b 65 79 20 20 20 30 78 30 34 20 20 20 20 2f 2a  Key   0x04    /*
fd10: 20 54 61 62 6c 65 20 68 61 73 20 61 20 70 72 69   Table has a pri
fd20: 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66  mary key */.#def
fd30: 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63 72 65  ine TF_Autoincre
fd40: 6d 65 6e 74 20 20 20 30 78 30 38 20 20 20 20 2f  ment   0x08    /
fd50: 2a 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72  * Integer primar
fd60: 79 20 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63  y key is autoinc
fd70: 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  rement */.#defin
fd80: 65 20 54 46 5f 56 69 72 74 75 61 6c 20 20 20 20  e TF_Virtual    
fd90: 20 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20       0x10    /* 
fda0: 49 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  Is a virtual tab
fdb0: 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  le */.#define TF
fdc0: 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 20 20 20  _WithoutRowid   
fdd0: 20 30 78 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72   0x20    /* No r
fde0: 6f 77 69 64 20 75 73 65 64 2e 20 50 52 49 4d 41  owid used. PRIMA
fdf0: 52 59 20 4b 45 59 20 69 73 20 74 68 65 20 6b 65  RY KEY is the ke
fe00: 79 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73  y */.../*.** Tes
fe10: 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65 72  t to see whether
fe20: 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20   or not a table 
fe30: 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  is a virtual tab
fe40: 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20  le.  This is.** 
fe50: 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20  done as a macro 
fe60: 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20  so that it will 
fe70: 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74  be optimized out
fe80: 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a   when virtual.**
fe90: 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69   table support i
fea0: 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74  s omitted from t
feb0: 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66  he build..*/.#if
fec0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
fed0: 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
fee0: 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61   define IsVirtua
fef0: 6c 28 58 29 20 20 20 20 20 20 28 28 28 58 29 2d  l(X)      (((X)-
ff00: 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 56  >tabFlags & TF_V
ff10: 69 72 74 75 61 6c 29 21 3d 30 29 0a 23 20 20 64  irtual)!=0).#  d
ff20: 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
ff30: 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63  lumn(X) (((X)->c
ff40: 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41  olFlags & COLFLA
ff50: 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65  G_HIDDEN)!=0).#e
ff60: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73  lse.#  define Is
ff70: 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20  Virtual(X)      
ff80: 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  0.#  define IsHi
ff90: 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a  ddenColumn(X) 0.
ffa0: 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 65 73 20  #endif../* Does 
ffb0: 74 68 65 20 74 61 62 6c 65 20 68 61 76 65 20 61  the table have a
ffc0: 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e   rowid */.#defin
ffd0: 65 20 48 61 73 52 6f 77 69 64 28 58 29 20 20 20  e HasRowid(X)   
ffe0: 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67    (((X)->tabFlag
fff0: 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f  s & TF_WithoutRo
10000 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  wid)==0)../*.** 
10010 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79  Each foreign key
10020 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61   constraint is a
10030 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
10040 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
10050 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66  cture..**.** A f
10060 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73  oreign key is as
10070 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77  sociated with tw
10080 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22  o tables.  The "
10090 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a  from" table is.*
100a0 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  * the table that
100b0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45   contains the RE
100c0 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
100d0 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65  that creates the
100e0 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e   foreign.** key.
100f0 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65    The "to" table
10100 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68   is the table th
10110 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74  at is named in t
10120 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
10130 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65  ause..** Conside
10140 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a  r this example:.
10150 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
10160 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20   TABLE ex1(.**  
10170 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50       a INTEGER P
10180 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20  RIMARY KEY,.**  
10190 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43       b INTEGER C
101a0 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45  ONSTRAINT fk1 RE
101b0 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a  FERENCES ex2(x).
101c0 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20  **     );.**.** 
101d0 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  For foreign key 
101e0 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d  "fk1", the from-
101f0 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61  table is "ex1" a
10200 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20  nd the to-table 
10210 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75  is "ex2"..** Equ
10220 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a  ivalent names:.*
10230 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61  *.**     from-ta
10240 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62  ble == child-tab
10250 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74  le.**       to-t
10260 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74  able == parent-t
10270 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20  able.**.** Each 
10280 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
10290 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69  e generates an i
102a0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
102b0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
102c0 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61  re.** which is a
102d0 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 66  ttached to the f
102e0 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20  rom-table.  The 
102f0 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f  to-table need no
10300 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20  t exist when.** 
10310 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69  the from-table i
10320 73 20 63 72 65 61 74 65 64 2e 20 20 54 68 65 20  s created.  The 
10330 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65  existence of the
10340 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74   to-table is not
10350 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20   checked..**.** 
10360 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  The list of all 
10370 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c  parents for chil
10380 64 20 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c  d Table X is hel
10390 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a  d at X.pFKey..**
103a0 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c  .** A list of al
103b0 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61  l children for a
103c0 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28   table named Z (
103d0 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20  which might not 
103e0 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69  even exist).** i
103f0 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61  s held in Schema
10400 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68 20 61  .fkeyHash with a
10410 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a   hash key of Z..
10420 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b  */.struct FKey {
10430 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b  .  Table *pFrom;
10440 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f       /* Table co
10450 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46  ntaining the REF
10460 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28  ERENCES clause (
10470 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20  aka: Child) */. 
10480 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d   FKey *pNextFrom
10490 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20  ;  /* Next FKey 
104a0 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e  with the same in
104b0 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72   pFrom. Next par
104c0 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a  ent of pFrom */.
104d0 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20    char *zTo;    
104e0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
104f0 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65  able that the ke
10500 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61  y points to (aka
10510 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46  : Parent) */.  F
10520 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20  Key *pNextTo;   
10530 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68   /* Next with th
10540 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74  e same zTo. Next
10550 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a   child of zTo. *
10560 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54  /.  FKey *pPrevT
10570 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75  o;    /* Previou
10580 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  s with the same 
10590 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f  zTo */.  int nCo
105a0 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  l;         /* Nu
105b0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
105c0 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20  in this key */. 
105d0 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d   /* EV: R-30323-
105e0 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73  21917 */.  u8 is
105f0 44 65 66 65 72 72 65 64 3b 20 20 20 20 20 20 20  Deferred;       
10600 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74  /* True if const
10610 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69  raint checking i
10620 73 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20  s deferred till 
10630 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61  COMMIT */.  u8 a
10640 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20  Action[2];      
10650 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61    /* ON DELETE a
10660 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74  nd ON UPDATE act
10670 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65  ions, respective
10680 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  ly */.  Trigger 
10690 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a  *apTrigger[2];/*
106a0 20 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41   Triggers for aA
106b0 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20  ction[] actions 
106c0 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c  */.  struct sCol
106d0 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61  Map {      /* Ma
106e0 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73  pping of columns
106f0 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c   in pFrom to col
10700 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20  umns in zTo */. 
10710 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20     int iFrom;   
10720 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
10730 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70  x of column in p
10740 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72  From */.    char
10750 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20   *zCol;         
10760 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c    /* Name of col
10770 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20  umn in zTo.  If 
10780 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59  NULL use PRIMARY
10790 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c   KEY */.  } aCol
107a0 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
107b0 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72  /* One entry for
107c0 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f   each of nCol co
107d0 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  lumns */.};../*.
107e0 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72  ** SQLite suppor
107f0 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e  ts many differen
10800 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76  t ways to resolv
10810 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  e a constraint.*
10820 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41  * error.  ROLLBA
10830 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  CK processing me
10840 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74  ans that a const
10850 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a  raint violation.
10860 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70  ** causes the op
10870 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
10880 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66  ss to fail and f
10890 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  or the current t
108a0 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ransaction.** to
108b0 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   be rolled back.
108c0 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69    ABORT processi
108d0 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65  ng means the ope
108e0 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
108f0 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61  s.** fails and a
10900 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ny prior changes
10910 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f   from that one o
10920 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63  peration are bac
10930 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20  ked out,.** but 
10940 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
10950 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61  is not rolled ba
10960 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73  ck.  FAIL proces
10970 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a  sing means that.
10980 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ** the operation
10990 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f   in progress sto
109a0 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61  ps and returns a
109b0 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42  n error code.  B
109c0 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e  ut prior.** chan
109d0 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73  ges due to the s
109e0 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  ame operation ar
109f0 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74  e not backed out
10a00 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b   and no rollback
10a10 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e  .** occurs.  IGN
10a20 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ORE means that t
10a30 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f  he particular ro
10a40 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68  w that caused th
10a50 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  e constraint.** 
10a60 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73  error is not ins
10a70 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64  erted or updated
10a80 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
10a90 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
10aa0 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72  rror.** is retur
10ab0 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65  ned.  REPLACE me
10ac0 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73  ans that preexis
10ad0 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f  ting database ro
10ae0 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a  ws that caused.*
10af0 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  * a UNIQUE const
10b00 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
10b10 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74  are removed so t
10b20 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65  hat the new inse
10b30 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20  rt or.** update 
10b40 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72  can proceed.  Pr
10b50 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75  ocessing continu
10b60 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20  es and no error 
10b70 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a  is reported..**.
10b80 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54  ** RESTRICT, SET
10b90 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44  NULL, and CASCAD
10ba0 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20  E actions apply 
10bb0 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20  only to foreign 
10bc0 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43  keys..** RESTRIC
10bd0 54 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  T is the same as
10be0 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44   ABORT for IMMED
10bf0 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79  IATE foreign key
10c00 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d  s and the.** sam
10c10 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f  e as ROLLBACK fo
10c20 72 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e  r DEFERRED keys.
10c30 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20    SETNULL means 
10c40 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e  that the foreign
10c50 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74  .** key is set t
10c60 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45  o NULL.  CASCADE
10c70 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45   means that a DE
10c80 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f  LETE or UPDATE o
10c90 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e  f the.** referen
10ca0 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73  ced table row is
10cb0 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f   propagated into
10cc0 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f   the row that ho
10cd0 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69  lds the.** forei
10ce0 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54  gn key..** .** T
10cf0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d  he following sym
10d00 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65  bolic values are
10d10 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20   used to record 
10d20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66  which type.** of
10d30 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e   action to take.
10d40 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e  .*/.#define OE_N
10d50 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54  one     0   /* T
10d60 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74  here is no const
10d70 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a  raint to check *
10d80 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c  /.#define OE_Rol
10d90 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69  lback 1   /* Fai
10da0 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  l the operation 
10db0 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65  and rollback the
10dc0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
10dd0 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74  #define OE_Abort
10de0 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20      2   /* Back 
10df0 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20  out changes but 
10e00 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74  do no rollback t
10e10 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64  ransaction */.#d
10e20 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20  efine OE_Fail   
10e30 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68    3   /* Stop th
10e40 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20  e operation but 
10e50 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20  leave all prior 
10e60 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
10e70 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34  ne OE_Ignore   4
10e80 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65     /* Ignore the
10e90 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64   error. Do not d
10ea0 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20  o the INSERT or 
10eb0 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
10ec0 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20  e OE_Replace  5 
10ed0 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73    /* Delete exis
10ee0 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65  ting record, the
10ef0 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55  n do INSERT or U
10f00 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e  PDATE */..#defin
10f10 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20  e OE_Restrict 6 
10f20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f    /* OE_Abort fo
10f30 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f  r IMMEDIATE, OE_
10f40 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46  Rollback for DEF
10f50 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65  ERRED */.#define
10f60 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20   OE_SetNull  7  
10f70 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
10f80 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
10f90 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65   NULL */.#define
10fa0 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20   OE_SetDflt  8  
10fb0 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
10fc0 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
10fd0 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a   its default */.
10fe0 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61  #define OE_Casca
10ff0 64 65 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61  de  9   /* Casca
11000 64 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a  de the changes *
11010 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65  /..#define OE_De
11020 66 61 75 6c 74 20 20 31 30 20 20 2f 2a 20 44 6f  fault  10  /* Do
11030 20 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65   whatever the de
11040 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20  fault action is 
11050 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  */.../*.** An in
11060 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
11070 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
11080 65 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74  e is passed as t
11090 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75  he first.** argu
110a0 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56  ment to sqlite3V
110b0 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e  dbeKeyCompare an
110c0 64 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e  d is used to con
110d0 74 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63 6f 6d  trol the .** com
110e0 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74  parison of the t
110f0 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a  wo index keys..*
11100 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61  *.** Note that a
11110 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20  SortOrder[] and 
11120 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69  aColl[] have nFi
11130 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68  eld+1 slots.  Th
11140 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c  ere.** are nFiel
11150 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20  d slots for the 
11160 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e  columns of an in
11170 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74  dex then one ext
11180 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74  ra slot.** for t
11190 68 65 20 72 6f 77 69 64 20 61 74 20 74 68 65 20  he rowid at the 
111a0 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b  end..*/.struct K
111b0 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e  eyInfo {.  u32 n
111c0 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Ref;           /
111d0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 66 65  * Number of refe
111e0 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73 20 4b  rences to this K
111f0 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f  eyInfo object */
11200 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
11210 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65         /* Text e
11220 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66  ncoding - one of
11230 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a   the SQLITE_UTF*
11240 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36   values */.  u16
11250 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
11260 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65   /* Number of ke
11270 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  y columns in the
11280 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36 20   index */.  u16 
11290 6e 58 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20  nXField;        
112a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
112b0 75 6d 6e 73 20 62 65 79 6f 6e 64 20 74 68 65 20  umns beyond the 
112c0 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  key columns */. 
112d0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
112e0 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
112f0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
11300 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72  */.  u8 *aSortOr
11310 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74  der;     /* Sort
11320 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68 20   order for each 
11330 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c  column. */.  Col
11340 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20  lSeq *aColl[1]; 
11350 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
11360 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20  quence for each 
11370 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20  term of the key 
11380 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
11390 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
113a0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
113b0 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d  ure holds inform
113c0 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 0a 2a 2a  ation about a.**
113d0 20 73 69 6e 67 6c 65 20 69 6e 64 65 78 20 72 65   single index re
113e0 63 6f 72 64 20 74 68 61 74 20 68 61 73 20 61 6c  cord that has al
113f0 72 65 61 64 79 20 62 65 65 6e 20 70 61 72 73 65  ready been parse
11400 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76  d out into indiv
11410 69 64 75 61 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e  idual.** values.
11420 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20  .**.** A record 
11430 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61  is an object tha
11440 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  t contains one o
11450 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66  r more fields of
11460 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64   data..** Record
11470 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 74  s are used to st
11480 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ore the content 
11490 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61  of a table row a
114a0 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74  nd to store.** t
114b0 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64  he key of an ind
114c0 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f  ex.  A blob enco
114d0 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64  ding of a record
114e0 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a   is created by.*
114f0 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63  * the OP_MakeRec
11500 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68  ord opcode of th
11510 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64 69  e VDBE and is di
11520 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68  sassembled by th
11530 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f  e.** OP_Column o
11540 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  pcode..**.** Thi
11550 73 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  s structure hold
11560 73 20 61 20 72 65 63 6f 72 64 20 74 68 61 74 20  s a record that 
11570 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e  has already been
11580 20 64 69 73 61 73 73 65 6d 62 6c 65 64 0a 2a 2a   disassembled.**
11590 20 69 6e 74 6f 20 69 74 73 20 63 6f 6e 73 74 69   into its consti
115a0 74 75 65 6e 74 20 66 69 65 6c 64 73 2e 0a 2a 2a  tuent fields..**
115b0 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64 20 72  .** The r1 and r
115c0 32 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c  2 member variabl
115d0 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64  es are only used
115e0 20 62 79 20 74 68 65 20 6f 70 74 69 6d 69 7a 65   by the optimize
115f0 64 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20  d comparison.** 
11600 66 75 6e 63 74 69 6f 6e 73 20 76 64 62 65 52 65  functions vdbeRe
11610 63 6f 72 64 43 6f 6d 70 61 72 65 49 6e 74 28 29  cordCompareInt()
11620 20 61 6e 64 20 76 64 62 65 52 65 63 6f 72 64 43   and vdbeRecordC
11630 6f 6d 70 61 72 65 53 74 72 69 6e 67 28 29 2e 0a  ompareString()..
11640 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b  */.struct Unpack
11650 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79  edRecord {.  Key
11660 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20  Info *pKeyInfo; 
11670 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e   /* Collation an
11680 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66  d sort-order inf
11690 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 31  ormation */.  u1
116a0 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  6 nField;       
116b0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
116c0 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b  ntries in apMem[
116d0 5d 20 2a 2f 0a 20 20 69 38 20 64 65 66 61 75 6c  ] */.  i8 defaul
116e0 74 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f  t_rc;      /* Co
116f0 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20  mparison result 
11700 69 66 20 6b 65 79 73 20 61 72 65 20 65 71 75 61  if keys are equa
11710 6c 20 2a 2f 0a 20 20 75 38 20 65 72 72 43 6f 64  l */.  u8 errCod
11720 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72  e;         /* Er
11730 72 6f 72 20 64 65 74 65 63 74 65 64 20 62 79 20  ror detected by 
11740 78 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 20 28  xRecordCompare (
11750 43 4f 52 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d  CORRUPT or NOMEM
11760 29 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d  ) */.  Mem *aMem
11770 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61  ;          /* Va
11780 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72 31  lues */.  int r1
11790 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
117a0 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
117b0 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29 20   if (lhs > rhs) 
117c0 2a 2f 0a 20 20 69 6e 74 20 72 32 3b 20 20 20 20  */.  int r2;    
117d0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
117e0 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28  e to return if (
117f0 72 68 73 20 3c 20 6c 68 73 29 20 2a 2f 0a 7d 3b  rhs < lhs) */.};
11800 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  .../*.** Each SQ
11810 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70 72 65  L index is repre
11820 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
11830 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e   by an.** instan
11840 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
11850 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
11860 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73  *.** The columns
11870 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
11880 61 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64  at are to be ind
11890 65 78 65 64 20 61 72 65 20 64 65 73 63 72 69 62  exed are describ
118a0 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43  ed.** by the aiC
118b0 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66  olumn[] field of
118c0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
118d0 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73    For example, s
118e0 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76  uppose.** we hav
118f0 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  e the following 
11900 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a  table and index:
11910 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  .**.**     CREAT
11920 45 20 54 41 42 4c 45 20 45 78 31 28 63 31 20 69  E TABLE Ex1(c1 i
11930 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74  nt, c2 int, c3 t
11940 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45  ext);.**     CRE
11950 41 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e  ATE INDEX Ex2 ON
11960 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a   Ex1(c3,c1);.**.
11970 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20  ** In the Table 
11980 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
11990 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d  bing Ex1, nCol==
119a0 33 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20  3 because there 
119b0 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c  are.** three col
119c0 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
119d0 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78  e.  In the Index
119e0 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
119f0 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43  ibing.** Ex2, nC
11a00 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32  olumn==2 since 2
11a10 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e   of the 3 column
11a20 73 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64  s of Ex1 are ind
11a30 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c  exed..** The val
11a40 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69  ue of aiColumn i
11a50 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c  s {2, 0}.  aiCol
11a60 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73  umn[0]==2 becaus
11a70 65 20 74 68 65 20 0a 2a 2a 20 66 69 72 73 74 20  e the .** first 
11a80 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64  column to be ind
11a90 65 78 65 64 20 28 63 33 29 20 68 61 73 20 61 6e  exed (c3) has an
11aa0 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45   index of 2 in E
11ab0 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68  x1.aCol[]..** Th
11ac0 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20  e second column 
11ad0 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63  to be indexed (c
11ae0 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20  1) has an index 
11af0 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61  of 0 in.** Ex1.a
11b00 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32  Col[], hence Ex2
11b10 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e  .aiColumn[1]==0.
11b20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78  .**.** The Index
11b30 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64  .onError field d
11b40 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65  etermines whethe
11b50 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64  r or not the ind
11b60 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20  exed columns.** 
11b70 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65 20 61  must be unique a
11b80 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66  nd what to do if
11b90 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20   they are not.  
11ba0 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72  When Index.onErr
11bb0 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69  or=OE_None,.** i
11bc0 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20  t means this is 
11bd0 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64  not a unique ind
11be0 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69  ex.  Otherwise i
11bf0 74 20 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e  t is a unique in
11c00 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76  dex.** and the v
11c10 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e  alue of Index.on
11c20 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74  Error indicate t
11c30 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63  he which conflic
11c40 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a  t resolution .**
11c50 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d   algorithm to em
11c60 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e  ploy whenever an
11c70 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65   attempt is made
11c80 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e   to insert a non
11c90 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65  -unique.** eleme
11ca0 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e  nt..*/.struct In
11cb0 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  dex {.  char *zN
11cc0 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
11cd0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
11ce0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20   index */.  i16 
11cf0 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  *aiColumn;      
11d00 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f       /* Which co
11d10 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62  lumns are used b
11d20 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31  y this index.  1
11d30 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67  st is 0 */.  Log
11d40 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74  Est *aiRowLogEst
11d50 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e  ;     /* From AN
11d60 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73  ALYZE: Est. rows
11d70 20 73 65 6c 65 63 74 65 64 20 62 79 20 65 61 63   selected by eac
11d80 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61  h column */.  Ta
11d90 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20  ble *pTable;    
11da0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51         /* The SQ
11db0 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e  L table being in
11dc0 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  dexed */.  char 
11dd0 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20  *zColAff;       
11de0 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65      /* String de
11df0 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e  fining the affin
11e00 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ity of each colu
11e10 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  mn */.  Index *p
11e20 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
11e30 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64   /* The next ind
11e40 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ex associated wi
11e50 74 68 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c  th the same tabl
11e60 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
11e70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20  Schema;         
11e80 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
11e90 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20  ning this index 
11ea0 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72  */.  u8 *aSortOr
11eb0 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  der;          /*
11ec0 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
11ed0 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61  : True==DESC, Fa
11ee0 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 68  lse==ASC */.  ch
11ef0 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20  ar **azColl;    
11f00 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20         /* Array 
11f10 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  of collation seq
11f20 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20  uence names for 
11f30 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20  index */.  Expr 
11f40 2a 70 50 61 72 74 49 64 78 57 68 65 72 65 3b 20  *pPartIdxWhere; 
11f50 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61      /* WHERE cla
11f60 75 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20  use for partial 
11f70 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 69 6e 74  indices */.  int
11f80 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20   tnum;          
11f90 20 20 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65        /* DB Page
11fa0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74   containing root
11fb0 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a   of this index *
11fc0 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49 64 78  /.  LogEst szIdx
11fd0 52 6f 77 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Row;         /* 
11fe0 45 73 74 69 6d 61 74 65 64 20 61 76 65 72 61 67  Estimated averag
11ff0 65 20 72 6f 77 20 73 69 7a 65 20 69 6e 20 62 79  e row size in by
12000 74 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65  tes */.  u16 nKe
12010 79 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  yCol;           
12020 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
12030 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74  olumns forming t
12040 68 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20  he key */.  u16 
12050 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  nColumn;        
12060 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
12070 66 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64  f columns stored
12080 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f   in the index */
12090 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20  .  u8 onError;  
120a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
120b0 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f  E_Abort, OE_Igno
120c0 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20  re, OE_Replace, 
120d0 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20  or OE_None */.  
120e0 75 6e 73 69 67 6e 65 64 20 69 64 78 54 79 70 65  unsigned idxType
120f0 3a 32 3b 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55  :2;      /* 1==U
12100 4e 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52  NIQUE, 2==PRIMAR
12110 59 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45  Y KEY, 0==CREATE
12120 20 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69   INDEX */.  unsi
12130 67 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a  gned bUnordered:
12140 31 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73  1;   /* Use this
12150 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72   index for == or
12160 20 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79   IN queries only
12170 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75   */.  unsigned u
12180 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f  niqNotNull:1;  /
12190 2a 20 54 72 75 65 20 69 66 20 55 4e 49 51 55 45  * True if UNIQUE
121a0 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f   and NOT NULL fo
121b0 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f  r all columns */
121c0 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65  .  unsigned isRe
121d0 73 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54  sized:1;    /* T
121e0 72 75 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64  rue if resizeInd
121f0 65 78 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62  exObject() has b
12200 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20  een called */.  
12210 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72  unsigned isCover
12220 69 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65  ing:1;   /* True
12230 20 69 66 20 74 68 69 73 20 69 73 20 61 20 63 6f   if this is a co
12240 76 65 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  vering index */.
12250 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 53 6b 69    unsigned noSki
12260 70 53 63 61 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f  pScan:1;   /* Do
12270 20 6e 6f 74 20 74 72 79 20 74 6f 20 75 73 65 20   not try to use 
12280 73 6b 69 70 2d 73 63 61 6e 20 69 66 20 74 72 75  skip-scan if tru
12290 65 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  e */.#ifdef SQLI
122a0 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
122b0 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20 6e  OR_STAT4.  int n
122c0 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20  Sample;         
122d0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
122e0 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61   elements in aSa
122f0 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  mple[] */.  int 
12300 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20  nSampleCol;     
12310 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
12320 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71  IndexSample.anEq
12330 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a  [] and so on */.
12340 20 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67 45    tRowcnt *aAvgE
12350 71 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76  q;         /* Av
12360 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65 73  erage nEq values
12370 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e   for keys not in
12380 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e   aSample */.  In
12390 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70  dexSample *aSamp
123a0 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65  le;    /* Sample
123b0 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f  s of the left-mo
123c0 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77  st key */.  tRow
123d0 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20 20  cnt *aiRowEst;  
123e0 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61       /* Non-loga
123f0 72 69 74 68 6d 69 63 20 73 74 61 74 31 20 64 61  rithmic stat1 da
12400 74 61 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65  ta for this inde
12410 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e  x */.  tRowcnt n
12420 52 6f 77 45 73 74 30 3b 20 20 20 20 20 20 20 20  RowEst0;        
12430 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d  /* Non-logarithm
12440 69 63 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  ic number of row
12450 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a  s in the index *
12460 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a  /.#endif.};../*.
12470 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
12480 73 20 66 6f 72 20 49 6e 64 65 78 2e 69 64 78 54  s for Index.idxT
12490 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ype.*/.#define S
124a0 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 41 50  QLITE_IDXTYPE_AP
124b0 50 44 45 46 20 20 20 20 20 20 30 20 20 20 2f 2a  PDEF      0   /*
124c0 20 43 72 65 61 74 65 64 20 75 73 69 6e 67 20 43   Created using C
124d0 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23  REATE INDEX */.#
124e0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
124f0 58 54 59 50 45 5f 55 4e 49 51 55 45 20 20 20 20  XTYPE_UNIQUE    
12500 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65    1   /* Impleme
12510 6e 74 73 20 61 20 55 4e 49 51 55 45 20 63 6f 6e  nts a UNIQUE con
12520 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
12530 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50  ne SQLITE_IDXTYP
12540 45 5f 50 52 49 4d 41 52 59 4b 45 59 20 20 32 20  E_PRIMARYKEY  2 
12550 20 20 2f 2a 20 49 73 20 74 68 65 20 50 52 49 4d    /* Is the PRIM
12560 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20  ARY KEY for the 
12570 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74  table */../* Ret
12580 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65  urn true if inde
12590 78 20 58 20 69 73 20 61 20 50 52 49 4d 41 52 59  x X is a PRIMARY
125a0 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64   KEY index */.#d
125b0 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72 79 4b  efine IsPrimaryK
125c0 65 79 49 6e 64 65 78 28 58 29 20 20 28 28 58 29  eyIndex(X)  ((X)
125d0 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c 49 54  ->idxType==SQLIT
125e0 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52  E_IDXTYPE_PRIMAR
125f0 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e  YKEY)../* Return
12600 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58   true if index X
12610 20 69 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64   is a UNIQUE ind
12620 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73  ex */.#define Is
12630 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29 20 20  UniqueIndex(X)  
12640 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f      ((X)->onErro
12650 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 0a  r!=OE_None)../*.
12660 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20 73  ** Each sample s
12670 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c  tored in the sql
12680 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20  ite_stat3 table 
12690 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
126a0 6e 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75 73 69  n memory .** usi
126b0 6e 67 20 61 20 73 74 72 75 63 74 75 72 65 20 6f  ng a structure o
126c0 66 20 74 68 69 73 20 74 79 70 65 2e 20 20 53 65  f this type.  Se
126d0 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  e documentation 
126e0 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
126f0 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73  e.** analyze.c s
12700 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61  ource file for a
12710 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
12720 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
12730 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20   IndexSample {. 
12740 20 76 6f 69 64 20 2a 70 3b 20 20 20 20 20 20 20   void *p;       
12750 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
12760 20 73 61 6d 70 6c 65 64 20 72 65 63 6f 72 64 20   sampled record 
12770 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20  */.  int n;     
12780 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
12790 66 20 72 65 63 6f 72 64 20 69 6e 20 62 79 74 65  f record in byte
127a0 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  s */.  tRowcnt *
127b0 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e  anEq;    /* Est.
127c0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
127d0 77 68 65 72 65 20 74 68 65 20 6b 65 79 20 65 71  where the key eq
127e0 75 61 6c 73 20 74 68 69 73 20 73 61 6d 70 6c 65  uals this sample
127f0 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
12800 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20  nLt;    /* Est. 
12810 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77  number of rows w
12820 68 65 72 65 20 6b 65 79 20 69 73 20 6c 65 73 73  here key is less
12830 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c   than this sampl
12840 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  e */.  tRowcnt *
12850 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e  anDLt;   /* Est.
12860 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74 69   number of disti
12870 6e 63 74 20 6b 65 79 73 20 6c 65 73 73 20 74 68  nct keys less th
12880 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a  an this sample *
12890 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  /.};../*.** Each
128a0 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75   token coming ou
128b0 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69  t of the lexer i
128c0 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
128d0 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74 75  .** this structu
128e0 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20  re.  Tokens are 
128f0 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61 72  also used as par
12900 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69  t of an expressi
12910 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69  on..**.** Note i
12920 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65  f Token.z==0 the
12930 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20  n Token.dyn and 
12940 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65  Token.n are unde
12950 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79  fined and.** may
12960 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20   contain random 
12970 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20  values.  Do not 
12980 6d 61 6b 65 20 61 6e 79 20 61 73 73 75 6d 70 74  make any assumpt
12990 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e  ions about Token
129a0 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65  .dyn.** and Toke
129b0 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a  n.n when Token.z
129c0 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ==0..*/.struct T
129d0 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63  oken {.  const c
129e0 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54  har *z;     /* T
129f0 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e  ext of the token
12a00 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d  .  Not NULL-term
12a10 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73  inated! */.  uns
12a20 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20  igned int n;    
12a30 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61  /* Number of cha
12a40 72 61 63 74 65 72 73 20 69 6e 20 74 68 69 73 20  racters in this 
12a50 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  token */.};../*.
12a60 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
12a70 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
12a80 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d   contains inform
12a90 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
12aa0 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
12ab0 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68   for a SELECT th
12ac0 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72  at contains aggr
12ad0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e  egate functions.
12ae0 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f  .**.** If Expr.o
12af0 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  p==TK_AGG_COLUMN
12b00 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54   or TK_AGG_FUNCT
12b10 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41  ION then Expr.pA
12b20 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70  ggInfo is a.** p
12b30 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
12b40 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 20 45  tructure.  The E
12b50 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c  xpr.iColumn fiel
12b60 64 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 69  d is the index i
12b70 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f  n.** AggInfo.aCo
12b80 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61  l[] or AggInfo.a
12b90 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d  Func[] of inform
12ba0 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
12bb0 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
12bc0 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a   for that node..
12bd0 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47  **.** AggInfo.pG
12be0 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e  roupBy and AggIn
12bf0 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70  fo.aFunc.pExpr p
12c00 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77  oint to fields w
12c10 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69  ithin the.** ori
12c20 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72  ginal Select str
12c30 75 63 74 75 72 65 20 74 68 61 74 20 64 65 73 63  ucture that desc
12c40 72 69 62 65 73 20 74 68 65 20 53 45 4c 45 43 54  ribes the SELECT
12c50 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
12c60 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20  se.** fields do 
12c70 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66  not need to be f
12c80 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f  reed when deallo
12c90 63 61 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e  cating the AggIn
12ca0 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  fo structure..*/
12cb0 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20  .struct AggInfo 
12cc0 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64  {.  u8 directMod
12cd0 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  e;          /* D
12ce0 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20  irect rendering 
12cf0 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20  mode means take 
12d00 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20  data directly.  
12d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d20 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20          ** from 
12d30 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72 61  source tables ra
12d40 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61  ther than from a
12d50 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20  ccumulators */. 
12d60 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64   u8 useSortingId
12d70 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64  x;       /* In d
12d80 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65  irect mode, refe
12d90 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e  rence the sortin
12da0 67 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20  g index rather. 
12db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12dc0 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e           ** than
12dd0 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
12de0 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69  e */.  int sorti
12df0 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f  ngIdx;         /
12e00 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
12e10 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  of the sorting i
12e20 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f  ndex */.  int so
12e30 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20  rtingIdxPTab;   
12e40 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
12e50 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62  er of pseudo-tab
12e60 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72  le */.  int nSor
12e70 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  tingColumn;     
12e80 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
12e90 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74  umns in the sort
12ea0 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  ing index */.  i
12eb0 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b  nt mnReg, mxReg;
12ec0 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20         /* Range 
12ed0 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c  of registers all
12ee0 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20  ocated for aCol 
12ef0 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45  and aFunc */.  E
12f00 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42  xprList *pGroupB
12f10 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72  y;     /* The gr
12f20 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f  oup by clause */
12f30 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
12f40 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f  o_col {    /* Fo
12f50 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73  r each column us
12f60 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62  ed in source tab
12f70 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  les */.    Table
12f80 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
12f90 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61      /* Source ta
12fa0 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
12fb0 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
12fc0 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
12fd0 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72  mber of the sour
12fe0 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
12ff0 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  int iColumn;    
13000 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75           /* Colu
13010 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e  mn number within
13020 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
13030 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f  e */.    int iSo
13040 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  rterColumn;     
13050 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62    /* Column numb
13060 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e  er in the sortin
13070 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69  g index */.    i
13080 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt iMem;        
13090 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
130a0 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
130b0 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61  acts as accumula
130c0 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  tor */.    Expr 
130d0 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
130e0 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69      /* The origi
130f0 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  nal expression *
13100 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69  /.  } *aCol;.  i
13110 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nt nColumn;     
13120 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13130 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65 73   of used entries
13140 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20   in aCol[] */.  
13150 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72  int nAccumulator
13160 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
13170 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61  r of columns tha
13180 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74  t show through t
13190 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20  o the output..  
131a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131b0 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74          ** Addit
131c0 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72  ional columns ar
131d0 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70  e used only as p
131e0 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20  arameters to.   
131f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13200 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67         ** aggreg
13210 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
13220 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
13230 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f  o_func {   /* Fo
13240 72 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65  r each aggregate
13250 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20   function */.   
13260 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
13270 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
13280 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67  ression encoding
13290 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f   the function */
132a0 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46  .    FuncDef *pF
132b0 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  unc;          /*
132c0 20 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66   The aggregate f
132d0 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  unction implemen
132e0 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  tation */.    in
132f0 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t iMem;         
13300 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
13310 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61   location that a
13320 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74  cts as accumulat
13330 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44  or */.    int iD
13340 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20  istinct;        
13350 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20     /* Ephemeral 
13360 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e  table used to en
13370 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a  force DISTINCT *
13380 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20  /.  } *aFunc;.  
13390 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20  int nFunc;      
133a0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
133b0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
133c0 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f  aFunc[] */.};../
133d0 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70  *.** The datatyp
133e0 65 20 79 6e 56 61 72 20 69 73 20 61 20 73 69 67  e ynVar is a sig
133f0 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74  ned integer, eit
13400 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32  her 16-bit or 32
13410 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79  -bit..** Usually
13420 20 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20   it is 16-bits. 
13430 20 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d   But if SQLITE_M
13440 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
13450 45 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a  ER is greater.**
13460 20 74 68 61 6e 20 33 32 37 36 37 20 77 65 20 68   than 32767 we h
13470 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33  ave to make it 3
13480 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69  2-bit.  16-bit i
13490 73 20 70 72 65 66 65 72 72 65 64 20 62 65 63 61  s preferred beca
134a0 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c  use.** it uses l
134b0 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68  ess memory in th
134c0 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77  e Expr object, w
134d0 68 69 63 68 20 69 73 20 61 20 62 69 67 20 6d 65  hich is a big me
134e0 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20  mory user.** in 
134f0 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74  systems with lot
13500 73 20 6f 66 20 70 72 65 70 61 72 65 64 20 73 74  s of prepared st
13510 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66  atements.  And f
13520 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a  ew applications.
13530 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61  ** need more tha
13540 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30  n about 10 or 20
13550 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74   variables.  But
13560 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73   some extreme us
13570 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68  ers want.** to h
13580 61 76 65 20 70 72 65 70 61 72 65 64 20 73 74 61  ave prepared sta
13590 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65  tements with ove
135a0 72 20 33 32 37 36 37 20 76 61 72 69 61 62 6c 65  r 32767 variable
135b0 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a  s, and for them.
135c0 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73  ** the option is
135d0 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63   available (at c
135e0 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f  ompile-time)..*/
135f0 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
13600 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c  VARIABLE_NUMBER<
13610 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66 20 69  =32767.typedef i
13620 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a  16 ynVar;.#else.
13630 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61  typedef int ynVa
13640 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  r;.#endif../*.**
13650 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e   Each node of an
13660 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
13670 68 65 20 70 61 72 73 65 20 74 72 65 65 20 69 73  he parse tree is
13680 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
13690 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
136a0 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70  e..**.** Expr.op
136b0 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20   is the opcode. 
136c0 54 68 65 20 69 6e 74 65 67 65 72 20 70 61 72 73  The integer pars
136d0 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61  er token codes a
136e0 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20  re reused.** as 
136f0 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f  opcodes here. Fo
13700 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70  r example, the p
13710 61 72 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b  arser defines TK
13720 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  _GE to be an int
13730 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70  eger.** code rep
13740 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e  resenting the ">
13750 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69  =" operator. Thi
13760 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63  s same integer c
13770 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a  ode is reused.**
13780 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68   to represent th
13790 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f  e greater-than-o
137a0 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61  r-equal-to opera
137b0 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72 65  tor in the expre
137c0 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a  ssion.** tree..*
137d0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
137e0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
137f0 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54   literal (TK_INT
13800 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20  EGER, TK_FLOAT, 
13810 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a 20 6f 72 20  TK_BLOB, .** or 
13820 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e  TK_STRING), then
13830 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
13840 61 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66  ains the text of
13850 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c   the SQL literal
13860 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72  . If.** the expr
13870 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69  ession is a vari
13880 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c  able (TK_VARIABL
13890 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f  E), then Expr.to
138a0 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ken contains the
138b0 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61   .** variable na
138c0 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20  me. Finally, if 
138d0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
138e0 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f  s an SQL functio
138f0 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c  n (TK_FUNCTION),
13900 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f  .** then Expr.to
13910 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ken contains the
13920 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   name of the fun
13930 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70  ction..**.** Exp
13940 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78 70  r.pRight and Exp
13950 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65 20  r.pLeft are the 
13960 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 73  left and right s
13970 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66  ubexpressions of
13980 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65   a.** binary ope
13990 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72  rator. Either or
139a0 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c   both may be NUL
139b0 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e  L..**.** Expr.x.
139c0 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74 20  pList is a list 
139d0 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20  of arguments if 
139e0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
139f0 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f  s an SQL functio
13a00 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70  n,.** a CASE exp
13a10 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e  ression or an IN
13a20 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74   expression of t
13a30 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49  he form "<lhs> I
13a40 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22  N (<y>, <z>...)"
13a50 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c  ..** Expr.x.pSel
13a60 65 63 74 20 69 73 20 75 73 65 64 20 69 66 20 74  ect is used if t
13a70 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
13a80 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72   a sub-select or
13a90 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   an expression o
13aa0 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c  f.** the form "<
13ab0 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20  lhs> IN (SELECT 
13ac0 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50  ...)". If the EP
13ad0 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74 20 69  _xIsSelect bit i
13ae0 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20  s set in the.** 
13af0 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
13b00 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65   then Expr.x.pSe
13b10 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f  lect is valid. O
13b20 74 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78  therwise, Expr.x
13b30 2e 70 4c 69 73 74 20 69 73 20 0a 2a 2a 20 76 61  .pList is .** va
13b40 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78  lid..**.** An ex
13b50 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20  pression of the 
13b60 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49 44  form ID or ID.ID
13b70 20 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f 6c   refers to a col
13b80 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a  umn in a table..
13b90 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70 72  ** For such expr
13ba0 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70  essions, Expr.op
13bb0 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f   is set to TK_CO
13bc0 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69 54  LUMN and Expr.iT
13bd0 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 69  able is.** the i
13be0 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e 75  nteger cursor nu
13bf0 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45 20 63  mber of a VDBE c
13c00 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74  ursor pointing t
13c10 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64  o that table and
13c20 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  .** Expr.iColumn
13c30 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e   is the column n
13c40 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73 70  umber for the sp
13c50 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20  ecific column.  
13c60 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65 73  If the.** expres
13c70 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73 20  sion is used as 
13c80 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61  a result in an a
13c90 67 67 72 65 67 61 74 65 20 53 45 4c 45 43 54 2c  ggregate SELECT,
13ca0 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c   then the.** val
13cb0 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72 65  ue is also store
13cc0 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69 41  d in the Expr.iA
13cd0 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  gg column in the
13ce0 20 61 67 67 72 65 67 61 74 65 20 73 6f 20 74 68   aggregate so th
13cf0 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65 20  at.** it can be 
13d00 61 63 63 65 73 73 65 64 20 61 66 74 65 72 20 61  accessed after a
13d10 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20 61 72  ll aggregates ar
13d20 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a  e computed..**.*
13d30 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73  * If the express
13d40 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e  ion is an unboun
13d50 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b 65  d variable marke
13d60 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d 61  r (a question ma
13d70 72 6b 20 0a 2a 2a 20 63 68 61 72 61 63 74 65 72  rk .** character
13d80 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67   '?' in the orig
13d90 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74  inal SQL) then t
13da0 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68  he Expr.iTable h
13db0 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78 20 0a  olds the index .
13dc0 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  ** number for th
13dd0 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a  at variable..**.
13de0 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
13df0 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65  sion is a subque
13e00 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f  ry then Expr.iCo
13e10 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e  lumn holds an in
13e20 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65  teger.** registe
13e30 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e  r number contain
13e40 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ing the result o
13e50 66 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 20  f the subquery. 
13e60 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75   If the.** subqu
13e70 65 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73  ery gives a cons
13e80 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65  tant result, the
13e90 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20  n iTable is -1. 
13ea0 20 49 66 20 74 68 65 20 73 75 62 71 75 65 72 79   If the subquery
13eb0 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66 66  .** gives a diff
13ec0 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20  erent answer at 
13ed0 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20  different times 
13ee0 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  during statement
13ef0 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74   processing.** t
13f00 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68  hen iTable is th
13f10 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 73  e address of a s
13f20 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63  ubroutine that c
13f30 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75 62 71  omputes the subq
13f40 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  uery..**.** If t
13f50 68 65 20 45 78 70 72 20 69 73 20 6f 66 20 74 79  he Expr is of ty
13f60 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e  pe OP_Column, an
13f70 64 20 74 68 65 20 74 61 62 6c 65 20 69 74 20 69  d the table it i
13f80 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d  s selecting from
13f90 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61  .** is a disk ta
13fa0 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e  ble or the "old.
13fb0 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c  *" pseudo-table,
13fc0 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74   then pTab point
13fd0 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72  s to the.** corr
13fe0 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20  esponding table 
13ff0 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a  definition..**.*
14000 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54  * ALLOCATION NOT
14010 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f  ES:.**.** Expr o
14020 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20 61  bjects can use a
14030 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73   lot of memory s
14040 70 61 63 65 20 69 6e 20 64 61 74 61 62 61 73 65  pace in database
14050 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20   schema.  To.** 
14060 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f  help reduce memo
14070 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c  ry requirements,
14080 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78   sometimes an Ex
14090 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62  pr object will b
140a0 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20  e.** truncated. 
140b0 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74   And to reduce t
140c0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  he number of mem
140d0 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c  ory allocations,
140e0 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77   sometimes.** tw
140f0 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f  o or more Expr o
14100 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73  bjects will be s
14110 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c  tored in a singl
14120 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
14130 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72  ion,.** together
14140 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65   with Expr.zToke
14150 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a  n strings..**.**
14160 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63   If the EP_Reduc
14170 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f  ed and EP_TokenO
14180 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73 65  nly flags are se
14190 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70  t when.** an Exp
141a0 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e  r object is trun
141b0 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f  cated.  When EP_
141c0 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2c 20  Reduced is set, 
141d0 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20  then all.** the 
141e0 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63  child Expr objec
141f0 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70  ts in the Expr.p
14200 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52  Left and Expr.pR
14210 69 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a  ight subtrees.**
14220 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77   are contained w
14230 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d  ithin the same m
14240 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
14250 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72  .  Note, however
14260 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75  , that.** the su
14270 62 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78  btrees in Expr.x
14280 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78  .pList or Expr.x
14290 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77  .pSelect are alw
142a0 61 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a  ays separately.*
142b0 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67  * allocated, reg
142c0 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
142d0 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64  er or not EP_Red
142e0 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a  uced is set..*/.
142f0 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20  struct Expr {.  
14300 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
14310 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74         /* Operat
14320 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79  ion performed by
14330 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20   this node */.  
14340 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20  char affinity;  
14350 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66         /* The af
14360 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f  finity of the co
14370 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74  lumn or 0 if not
14380 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75   a column */.  u
14390 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20  32 flags;       
143a0 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73        /* Various
143b0 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53 65   flags.  EP_* Se
143c0 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69  e below */.  uni
143d0 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  on {.    char *z
143e0 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 20  Token;          
143f0 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20  /* Token value. 
14400 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20  Zero terminated 
14410 61 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a  and dequoted */.
14420 20 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b 20      int iValue; 
14430 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f             /* No
14440 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67  n-negative integ
14450 65 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f 49  er value if EP_I
14460 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75  ntValue */.  } u
14470 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45  ;..  /* If the E
14480 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
14490 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45   is set in the E
144a0 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  xpr.flags mask, 
144b0 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61  then no.  ** spa
144c0 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  ce is allocated 
144d0 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62  for the fields b
144e0 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e  elow this point.
144f0 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20   An attempt to. 
14500 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20   ** access them 
14510 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61  will result in a
14520 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c   segfault or mal
14530 66 75 6e 63 74 69 6f 6e 2e 20 0a 20 20 2a 2a 2a  function. .  ***
14540 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14550 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14560 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14570 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14580 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65  **/..  Expr *pLe
14590 66 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ft;           /*
145a0 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f   Left subnode */
145b0 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68 74 3b  .  Expr *pRight;
145c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 69 67            /* Rig
145d0 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20  ht subnode */.  
145e0 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72  union {.    Expr
145f0 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20  List *pList;    
14600 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49   /* op = IN, EXI
14610 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43 41 53  STS, SELECT, CAS
14620 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54  E, FUNCTION, BET
14630 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65  WEEN */.    Sele
14640 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
14650 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65 63 74   /* EP_xIsSelect
14660 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58   and op = IN, EX
14670 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a  ISTS, SELECT */.
14680 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20    } x;..  /* If 
14690 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66  the EP_Reduced f
146a0 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68  lag is set in th
146b0 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  e Expr.flags mas
146c0 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20  k, then no.  ** 
146d0 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74  space is allocat
146e0 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64  ed for the field
146f0 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69  s below this poi
14700 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74  nt. An attempt t
14710 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68  o.  ** access th
14720 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  em will result i
14730 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20  n a segfault or 
14740 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a  malfunction..  *
14750 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14760 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14770 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14780 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14790 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54  ****/..#if SQLIT
147a0 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48  E_MAX_EXPR_DEPTH
147b0 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74  >0.  int nHeight
147c0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48  ;           /* H
147d0 65 69 67 68 74 20 6f 66 20 74 68 65 20 74 72 65  eight of the tre
147e0 65 20 68 65 61 64 65 64 20 62 79 20 74 68 69 73  e headed by this
147f0 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a   node */.#endif.
14800 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20    int iTable;   
14810 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43           /* TK_C
14820 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75  OLUMN: cursor nu
14830 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f  mber of table ho
14840 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20  lding column.   
14850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14860 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49        ** TK_REGI
14870 53 54 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e  STER: register n
14880 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20 20  umber.          
14890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
148a0 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20  * TK_TRIGGER: 1 
148b0 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64  -> new, 0 -> old
148c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
148d0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45 50 5f            ** EP_
148e0 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34 32 31  Unlikely:  13421
148f0 37 37 32 38 20 74 69 6d 65 73 20 6c 69 6b 65 6c  7728 times likel
14900 69 68 6f 6f 64 20 2a 2f 0a 20 20 79 6e 56 61 72  ihood */.  ynVar
14910 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   iColumn;       
14920 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    /* TK_COLUMN: 
14930 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d  column index.  -
14940 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20  1 for rowid..   
14950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14960 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49        ** TK_VARI
14970 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e  ABLE: variable n
14980 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d  umber (always >=
14990 20 31 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41   1). */.  i16 iA
149a0 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gg;             
149b0 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20   /* Which entry 
149c0 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f  in pAggInfo->aCo
149d0 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d  l[] or ->aFunc[]
149e0 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74   */.  i16 iRight
149f0 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20  JoinTable;   /* 
14a00 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20  If EP_FromJoin, 
14a10 74 68 65 20 72 69 67 68 74 20 74 61 62 6c 65 20  the right table 
14a20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20  of the join */. 
14a30 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20 20   u8 op2;        
14a40 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45          /* TK_RE
14a50 47 49 53 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c  GISTER: original
14a60 20 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f   value of Expr.o
14a70 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p.              
14a80 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
14a90 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c  _COLUMN: the val
14aa0 75 65 20 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f  ue of p5 for OP_
14ab0 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20  Column.         
14ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ad0 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49  ** TK_AGG_FUNCTI
14ae0 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65 70 74  ON: nesting dept
14af0 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a  h */.  AggInfo *
14b00 70 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a  pAggInfo;     /*
14b10 20 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f   Used by TK_AGG_
14b20 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47  COLUMN and TK_AG
14b30 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20  G_FUNCTION */.  
14b40 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
14b50 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
14b60 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78  for TK_COLUMN ex
14b70 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b  pressions. */.};
14b80 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
14b90 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65  owing are the me
14ba0 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69  anings of bits i
14bb0 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
14bc0 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
14bd0 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20  ne EP_FromJoin  
14be0 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67  0x000001 /* Orig
14bf0 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49  inates in ON/USI
14c00 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 6f 75 74  NG clause of out
14c10 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
14c20 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20 20 20  ne EP_Agg       
14c30 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74  0x000002 /* Cont
14c40 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
14c50 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
14c60 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
14c70 45 50 5f 52 65 73 6f 6c 76 65 64 20 20 30 78 30  EP_Resolved  0x0
14c80 30 30 30 30 34 20 2f 2a 20 49 44 73 20 68 61 76  00004 /* IDs hav
14c90 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20  e been resolved 
14ca0 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64  to COLUMNs */.#d
14cb0 65 66 69 6e 65 20 45 50 5f 45 72 72 6f 72 20 20  efine EP_Error  
14cc0 20 20 20 30 78 30 30 30 30 30 38 20 2f 2a 20 45     0x000008 /* E
14cd0 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74 61 69  xpression contai
14ce0 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 65  ns one or more e
14cf0 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  rrors */.#define
14d00 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30 78   EP_Distinct  0x
14d10 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65 67  000010 /* Aggreg
14d20 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ate function wit
14d30 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  h DISTINCT keywo
14d40 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  rd */.#define EP
14d50 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 30  _VarSelect 0x000
14d60 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69  020 /* pSelect i
14d70 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f  s correlated, no
14d80 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64  t constant */.#d
14d90 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74  efine EP_DblQuot
14da0 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20 74  ed 0x000040 /* t
14db0 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69  oken.z was origi
14dc0 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a  nally in "..." *
14dd0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66  /.#define EP_Inf
14de0 69 78 46 75 6e 63 20 30 78 30 30 30 30 38 30 20  ixFunc 0x000080 
14df0 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20 69  /* True for an i
14e00 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c  nfix function: L
14e10 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a  IKE, GLOB, etc *
14e20 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c  /.#define EP_Col
14e30 6c 61 74 65 20 20 20 30 78 30 30 30 31 30 30 20  late   0x000100 
14e40 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73  /* Tree contains
14e50 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70   a TK_COLLATE op
14e60 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  erator */.#defin
14e70 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20 30  e EP_Generic   0
14e80 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72  x000200 /* Ignor
14e90 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66  e COLLATE or aff
14ea0 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74 72  inity on this tr
14eb0 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ee */.#define EP
14ec0 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30  _IntValue  0x000
14ed0 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76  400 /* Integer v
14ee0 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69  alue contained i
14ef0 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64  n u.iValue */.#d
14f00 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65  efine EP_xIsSele
14f10 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78  ct 0x000800 /* x
14f20 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69  .pSelect is vali
14f30 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70  d (otherwise x.p
14f40 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66  List is) */.#def
14f50 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20  ine EP_Skip     
14f60 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c   0x001000 /* COL
14f70 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c  LATE, AS, or UNL
14f80 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65  IKELY */.#define
14f90 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 30 78   EP_Reduced   0x
14fa0 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73  002000 /* Expr s
14fb0 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55 43  truct EXPR_REDUC
14fc0 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  EDSIZE bytes onl
14fd0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
14fe0 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30  TokenOnly 0x0040
14ff0 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  00 /* Expr struc
15000 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  t EXPR_TOKENONLY
15010 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20  SIZE bytes only 
15020 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74  */.#define EP_St
15030 61 74 69 63 20 20 20 20 30 78 30 30 38 30 30 30  atic    0x008000
15040 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f   /* Held in memo
15050 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20  ry not obtained 
15060 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f  from malloc() */
15070 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54  .#define EP_MemT
15080 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f  oken  0x010000 /
15090 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65  * Need to sqlite
150a0 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a  3DbFree() Expr.z
150b0 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  Token */.#define
150c0 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78   EP_NoReduce  0x
150d0 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74  020000 /* Cannot
150e0 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
150f0 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65  this Expr */.#de
15100 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79  fine EP_Unlikely
15110 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e    0x040000 /* un
15120 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65  likely() or like
15130 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f  lihood() functio
15140 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
15150 43 6f 6e 73 74 46 75 6e 63 20 30 78 30 38 30 30  ConstFunc 0x0800
15160 30 30 20 2f 2a 20 4e 6f 64 65 20 69 73 20 61 20  00 /* Node is a 
15170 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
15180 54 41 4e 54 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  TANT function */
15190 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 61 6e 42  .#define EP_CanB
151a0 65 4e 75 6c 6c 20 30 78 31 30 30 30 30 30 20 2f  eNull 0x100000 /
151b0 2a 20 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65  * Can be null de
151c0 73 70 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63  spite NOT NULL c
151d0 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
151e0 66 69 6e 65 20 45 50 5f 53 75 62 71 75 65 72 79  fine EP_Subquery
151f0 20 20 30 78 32 30 30 30 30 30 20 2f 2a 20 54 72    0x200000 /* Tr
15200 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b  ee contains a TK
15210 5f 53 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72  _SELECT operator
15220 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 62 69   */../*.** Combi
15230 6e 61 74 69 6f 6e 73 20 6f 66 20 74 77 6f 20 6f  nations of two o
15240 72 20 6d 6f 72 65 20 45 50 5f 2a 20 66 6c 61 67  r more EP_* flag
15250 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s.*/.#define EP_
15260 50 72 6f 70 61 67 61 74 65 20 28 45 50 5f 43 6f  Propagate (EP_Co
15270 6c 6c 61 74 65 7c 45 50 5f 53 75 62 71 75 65 72  llate|EP_Subquer
15280 79 29 20 2f 2a 20 50 72 6f 70 61 67 61 74 65 20  y) /* Propagate 
15290 74 68 65 73 65 20 62 69 74 73 20 75 70 20 74 72  these bits up tr
152a0 65 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ee */../*.** The
152b0 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
152c0 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
152d0 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
152e0 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 45 78 70  s in the .** Exp
152f0 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
15300 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  /.#define ExprHa
15310 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  sProperty(E,P)  
15320 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26     (((E)->flags&
15330 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  (P))!=0).#define
15340 20 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65   ExprHasAllPrope
15350 72 74 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d  rty(E,P)  (((E)-
15360 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29  >flags&(P))==(P)
15370 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53 65  ).#define ExprSe
15380 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  tProperty(E,P)  
15390 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28     (E)->flags|=(
153a0 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43  P).#define ExprC
153b0 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50  learProperty(E,P
153c0 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d  )   (E)->flags&=
153d0 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70  ~(P)../* The Exp
153e0 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
153f0 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  ) macro is used 
15400 66 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e  for Verification
15410 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a  , Validation,.**
15420 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69   and Accreditati
15430 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72  on only.  It wor
15440 6b 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50  ks like ExprSetP
15450 72 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e 67  roperty() during
15460 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65   VVA.** processe
15470 73 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70  s but is a no-op
15480 20 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a   for delivery..*
15490 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
154a0 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45  DEBUG.# define E
154b0 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74  xprSetVVAPropert
154c0 79 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61  y(E,P)  (E)->fla
154d0 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20  gs|=(P).#else.# 
154e0 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56  define ExprSetVV
154f0 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23  AProperty(E,P).#
15500 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  endif../*.** Mac
15510 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ros to determine
15520 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
15530 79 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79  ytes required by
15540 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 20 0a   a normal Expr .
15550 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78  ** struct, an Ex
15560 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74  pr struct with t
15570 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c  he EP_Reduced fl
15580 61 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66  ag set in Expr.f
15590 6c 61 67 73 20 0a 2a 2a 20 61 6e 64 20 61 6e 20  lags .** and an 
155a0 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68  Expr struct with
155b0 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   the EP_TokenOnl
155c0 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23  y flag set..*/.#
155d0 64 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c  define EXPR_FULL
155e0 53 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 73  SIZE           s
155f0 69 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20 20  izeof(Expr)     
15600 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69        /* Full si
15610 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  ze */.#define EX
15620 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20  PR_REDUCEDSIZE  
15630 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45        offsetof(E
15640 78 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20  xpr,iTable)  /* 
15650 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20  Common features 
15660 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
15670 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20  TOKENONLYSIZE   
15680 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72     offsetof(Expr
15690 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77  ,pLeft)   /* Few
156a0 65 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a  er features */..
156b0 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73  /*.** Flags pass
156c0 65 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  ed to the sqlite
156d0 33 45 78 70 72 44 75 70 28 29 20 66 75 6e 63 74  3ExprDup() funct
156e0 69 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61  ion. See the hea
156f0 64 65 72 20 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20  der comment .** 
15700 61 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70  above sqlite3Exp
15710 72 44 75 70 28 29 20 66 6f 72 20 64 65 74 61 69  rDup() for detai
15720 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ls..*/.#define E
15730 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 20 20  XPRDUP_REDUCE   
15740 20 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a        0x0001  /*
15750 20 55 73 65 64 20 72 65 64 75 63 65 64 2d 73 69   Used reduced-si
15760 7a 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f  ze Expr nodes */
15770 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ../*.** A list o
15780 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20  f expressions.  
15790 45 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  Each expression 
157a0 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68  may optionally h
157b0 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20  ave a.** name.  
157c0 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d  An expr/name com
157d0 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20  bination can be 
157e0 75 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20  used in several 
157f0 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73  ways, such.** as
15800 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78   the list of "ex
15810 70 72 20 41 53 20 49 44 22 20 66 69 65 6c 64 73  pr AS ID" fields
15820 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45   following a "SE
15830 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a  LECT" or in the.
15840 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d  ** list of "ID =
15850 20 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20   expr" items in 
15860 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69  an UPDATE.  A li
15870 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
15880 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65  s can.** also be
15890 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67   used as the arg
158a0 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74  ument to a funct
158b0 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61  ion, in which ca
158c0 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a  se the a.zName.*
158d0 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75  * field is not u
158e0 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65  sed..**.** By de
158f0 66 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a  fault the Expr.z
15900 53 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73  Span field holds
15910 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c   a human-readabl
15920 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66  e description of
15930 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69  .** the expressi
15940 6f 6e 20 74 68 61 74 20 69 73 20 75 73 65 64 20  on that is used 
15950 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f  in the generatio
15960 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61  n of error messa
15970 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d  ges and.** colum
15980 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68  n labels.  In th
15990 69 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53  is case, Expr.zS
159a0 70 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79  pan is typically
159b0 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a   the text of a.*
159c0 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73  * column express
159d0 69 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74 73  ion as it exists
159e0 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61   in a SELECT sta
159f0 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72  tement.  However
15a00 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61  , if.** the bSpa
15a10 6e 49 73 54 61 62 20 66 6c 61 67 20 69 73 20 73  nIsTab flag is s
15a20 65 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69  et, then zSpan i
15a30 73 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20  s overloaded to 
15a40 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a  mean the name.**
15a50 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63   of the result c
15a60 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72  olumn in the for
15a70 6d 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c  m: DATABASE.TABL
15a80 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20  E.COLUMN.  This 
15a90 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73  later.** form is
15aa0 20 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72   used for name r
15ab0 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e  esolution with n
15ac0 65 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73  ested FROM claus
15ad0 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78  es..*/.struct Ex
15ae0 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e  prList {.  int n
15af0 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
15b00 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
15b10 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68  xpressions on th
15b20 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75  e list */.  stru
15b30 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d  ct ExprList_item
15b40 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65   { /* For each e
15b50 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
15b60 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70   list */.    Exp
15b70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
15b80 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 69 73 74       /* The list
15b90 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
15ba0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  */.    char *zNa
15bb0 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  me;            /
15bc0 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74  * Token associat
15bd0 65 64 20 77 69 74 68 20 74 68 69 73 20 65 78 70  ed with this exp
15be0 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63  ression */.    c
15bf0 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20  har *zSpan;     
15c00 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e         /* Origin
15c10 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 65  al text of the e
15c20 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20  xpression */.   
15c30 20 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20   u8 sortOrder;  
15c40 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f           /* 1 fo
15c50 72 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20  r DESC or 0 for 
15c60 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  ASC */.    unsig
15c70 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20  ned done :1;    
15c80 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20     /* A flag to 
15c90 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70 72  indicate when pr
15ca0 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69  ocessing is fini
15cb0 73 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69  shed */.    unsi
15cc0 67 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62 20  gned bSpanIsTab 
15cd0 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c  :1; /* zSpan hol
15ce0 64 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55  ds DB.TABLE.COLU
15cf0 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  MN */.    unsign
15d00 65 64 20 72 65 75 73 61 62 6c 65 20 3a 31 3b 20  ed reusable :1; 
15d10 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78    /* Constant ex
15d20 70 72 65 73 73 69 6f 6e 20 69 73 20 72 65 75 73  pression is reus
15d30 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f  able */.    unio
15d40 6e 20 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74  n {.      struct
15d50 20 7b 0a 20 20 20 20 20 20 20 20 75 31 36 20 69   {.        u16 i
15d60 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20  OrderByCol;     
15d70 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59   /* For ORDER BY
15d80 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  , column number 
15d90 69 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f  in result set */
15da0 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 41 6c  .        u16 iAl
15db0 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ias;           /
15dc0 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72  * Index into Par
15dd0 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20  se.aAlias[] for 
15de0 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d  zName */.      }
15df0 20 78 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43   x;.      int iC
15e00 6f 6e 73 74 45 78 70 72 52 65 67 3b 20 20 20 20  onstExprReg;    
15e10 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e    /* Register in
15e20 20 77 68 69 63 68 20 45 78 70 72 20 76 61 6c 75   which Expr valu
15e30 65 20 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20  e is cached */. 
15e40 20 20 20 7d 20 75 3b 0a 20 20 7d 20 2a 61 3b 20     } u;.  } *a; 
15e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e60 20 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65   /* Alloc a powe
15e70 72 20 6f 66 20 74 77 6f 20 67 72 65 61 74 65 72  r of two greater
15e80 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e 45 78   or equal to nEx
15e90 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  pr */.};../*.** 
15ea0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
15eb0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
15ec0 20 75 73 65 64 20 62 79 20 74 68 65 20 70 61 72   used by the par
15ed0 73 65 72 20 74 6f 20 72 65 63 6f 72 64 20 62 6f  ser to record bo
15ee0 74 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 20  th.** the parse 
15ef0 74 72 65 65 20 66 6f 72 20 61 6e 20 65 78 70 72  tree for an expr
15f00 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73  ession and the s
15f10 70 61 6e 20 6f 66 20 69 6e 70 75 74 20 74 65 78  pan of input tex
15f20 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72  t for an.** expr
15f30 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  ession..*/.struc
15f40 74 20 45 78 70 72 53 70 61 6e 20 7b 0a 20 20 45  t ExprSpan {.  E
15f50 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
15f60 20 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70 72       /* The expr
15f70 65 73 73 69 6f 6e 20 70 61 72 73 65 20 74 72 65  ession parse tre
15f80 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  e */.  const cha
15f90 72 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20  r *zStart;   /* 
15fa0 46 69 72 73 74 20 63 68 61 72 61 63 74 65 72 20  First character 
15fb0 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f  of input text */
15fc0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
15fd0 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20  End;     /* One 
15fe0 63 68 61 72 61 63 74 65 72 20 70 61 73 74 20 74  character past t
15ff0 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 20  he end of input 
16000 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  text */.};../*.*
16010 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
16020 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
16030 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c  can hold a simpl
16040 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69  e list of identi
16050 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61  fiers,.** such a
16060 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c  s the list "a,b,
16070 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77  c" in the follow
16080 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a  ing statements:.
16090 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52  **.**      INSER
160a0 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20  T INTO t(a,b,c) 
160b0 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20  VALUES ...;.**  
160c0 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
160d0 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29   idx ON t(a,b,c)
160e0 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45  ;.**      CREATE
160f0 20 54 52 49 47 47 45 52 20 74 72 69 67 20 42 45   TRIGGER trig BE
16100 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74  FORE UPDATE ON t
16110 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a  (a,b,c) ...;.**.
16120 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e  ** The IdList.a.
16130 69 64 78 20 66 69 65 6c 64 20 69 73 20 75 73 65  idx field is use
16140 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73  d when the IdLis
16150 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65  t represents the
16160 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75   list of.** colu
16170 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61  mn names after a
16180 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61   table name in a
16190 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  n INSERT stateme
161a0 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74  nt.  In the stat
161b0 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ement.**.**     
161c0 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c  INSERT INTO t(a,
161d0 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49  b,c) ....**.** I
161e0 66 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74  f "a" is the k-t
161f0 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c  h column of tabl
16200 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69  e "t", then IdLi
16210 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a  st.a[0].idx==k..
16220 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74  */.struct IdList
16230 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69   {.  struct IdLi
16240 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68  st_item {.    ch
16250 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
16260 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69  /* Name of the i
16270 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20  dentifier */.   
16280 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20   int idx;       
16290 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73     /* Index in s
162a0 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d  ome Table.aCol[]
162b0 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d   of a column nam
162c0 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20  ed zName */.  } 
162d0 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20  *a;.  int nId;  
162e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
162f0 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 20   of identifiers 
16300 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d  on the list */.}
16310 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74  ;../*.** The bit
16320 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20 64 65  mask datatype de
16330 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75  fined below is u
16340 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20  sed for various 
16350 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a  optimizations..*
16360 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68  *.** Changing th
16370 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74  is from a 64-bit
16380 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70   to a 32-bit typ
16390 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d  e limits the num
163a0 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73  ber of.** tables
163b0 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32   in a join to 32
163c0 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20   instead of 64. 
163d0 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64   But it also red
163e0 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a  uces the size.**
163f0 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79 20   of the library 
16400 62 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20  by 738 bytes on 
16410 69 78 38 36 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  ix86..*/.typedef
16420 20 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f   u64 Bitmask;../
16430 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20  *.** The number 
16440 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42 69 74  of bits in a Bit
16450 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61  mask.  "BMS" mea
16460 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65  ns "BitMask Size
16470 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d  "..*/.#define BM
16480 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66  S  ((int)(sizeof
16490 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f  (Bitmask)*8))../
164a0 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20 61 20  *.** A bit in a 
164b0 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66 69  Bitmask.*/.#defi
164c0 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29 20 20 20  ne MASKBIT(n)   
164d0 28 28 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c 28  (((Bitmask)1)<<(
164e0 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b  n)).#define MASK
164f0 42 49 54 33 32 28 6e 29 20 28 28 28 75 6e 73 69  BIT32(n) (((unsi
16500 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28 6e 29  gned int)1)<<(n)
16510 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  )../*.** The fol
16520 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
16530 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20 46   describes the F
16540 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ROM clause of a 
16550 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
16560 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20  ..** Each table 
16570 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 74  or subquery in t
16580 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69  he FROM clause i
16590 73 20 61 20 73 65 70 61 72 61 74 65 20 65 6c 65  s a separate ele
165a0 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53  ment of.** the S
165b0 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79  rcList.a[] array
165c0 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65  ..**.** With the
165d0 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c   addition of mul
165e0 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 73  tiple database s
165f0 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c  upport, the foll
16600 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a  owing structure.
16610 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75  ** can also be u
16620 73 65 64 20 74 6f 20 64 65 73 63 72 69 62 65 20  sed to describe 
16630 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62  a particular tab
16640 6c 65 20 73 75 63 68 20 61 73 20 74 68 65 20 74  le such as the t
16650 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20  able that.** is 
16660 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20 49  modified by an I
16670 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f  NSERT, DELETE, o
16680 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  r UPDATE stateme
16690 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64  nt.  In standard
166a0 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20   SQL,.** such a 
166b0 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20  table must be a 
166c0 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e  simple name: ID.
166d0 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c    But in SQLite,
166e0 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a   the table can.*
166f0 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66  * now be identif
16700 69 65 64 20 62 79 20 61 20 64 61 74 61 62 61 73  ied by a databas
16710 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74  e name, a dot, t
16720 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61  hen the table na
16730 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a  me: ID.ID..**.**
16740 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74   The jointype st
16750 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67  arts out showing
16760 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62   the join type b
16770 65 74 77 65 65 6e 20 74 68 65 20 63 75 72 72 65  etween the curre
16780 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20  nt table.** and 
16790 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f  the next table o
167a0 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65  n the list.  The
167b0 20 70 61 72 73 65 72 20 62 75 69 6c 64 73 20 74   parser builds t
167c0 68 65 20 6c 69 73 74 20 74 68 69 73 20 77 61 79  he list this way
167d0 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33  ..** But sqlite3
167e0 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e  SrcListShiftJoin
167f0 54 79 70 65 28 29 20 6c 61 74 65 72 20 73 68 69  Type() later shi
16800 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65  fts the jointype
16810 73 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a  s so that each.*
16820 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65  * jointype expre
16830 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65  sses the join be
16840 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20  tween the table 
16850 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73  and the previous
16860 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e   table..**.** In
16870 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65   the colUsed fie
16880 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64  ld, the high-ord
16890 65 72 20 62 69 74 20 28 62 69 74 20 36 33 29 20  er bit (bit 63) 
168a0 69 73 20 73 65 74 20 69 66 20 74 68 65 20 74 61  is set if the ta
168b0 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20  ble.** contains 
168c0 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c  more than 63 col
168d0 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d  umns and the 64-
168e0 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75  th or later colu
168f0 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73  mn is used..*/.s
16900 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a  truct SrcList {.
16910 20 20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20 20    int nSrc;     
16920 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
16930 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65  tables or subque
16940 72 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d  ries in the FROM
16950 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33 32   clause */.  u32
16960 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a   nAlloc;      /*
16970 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
16980 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20  es allocated in 
16990 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73  a[] below */.  s
169a0 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
169b0 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20  em {.    Schema 
169c0 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63  *pSchema;  /* Sc
169d0 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68  hema to which th
169e0 69 73 20 69 74 65 6d 20 69 73 20 66 69 78 65 64  is item is fixed
169f0 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44   */.    char *zD
16a00 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d  atabase;  /* Nam
16a10 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f  e of database ho
16a20 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65  lding this table
16a30 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
16a40 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
16a50 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a  e of the table *
16a60 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69  /.    char *zAli
16a70 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22  as;     /* The "
16a80 42 22 20 70 61 72 74 20 6f 66 20 61 20 22 41 20  B" part of a "A 
16a90 41 53 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a  AS B" phrase.  z
16aa0 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41 22 20  Name is the "A" 
16ab0 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  */.    Table *pT
16ac0 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53  ab;      /* An S
16ad0 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70  QL table corresp
16ae0 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20  onding to zName 
16af0 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
16b00 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45  Select;  /* A SE
16b10 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75  LECT statement u
16b20 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20  sed in place of 
16b30 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a  a table name */.
16b40 20 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c      int addrFill
16b50 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73  Sub;  /* Address
16b60 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74   of subroutine t
16b70 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62  o manifest a sub
16b80 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74  query */.    int
16b90 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f   regReturn;    /
16ba0 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
16bb0 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72 65 73  ng return addres
16bc0 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62  s of addrFillSub
16bd0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52   */.    int regR
16be0 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67  esult;    /* Reg
16bf0 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 72  isters holding r
16c00 65 73 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72  esults of a co-r
16c10 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 75 38  outine */.    u8
16c20 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20   jointype;      
16c30 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20  /* Type of join 
16c40 62 65 74 77 65 65 6e 20 74 68 69 73 20 61 62 6c  between this abl
16c50 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f  e and the previo
16c60 75 73 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  us */.    unsign
16c70 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31  ed notIndexed :1
16c80 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
16c90 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20 49  there is a NOT I
16ca0 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a 2f  NDEXED clause */
16cb0 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73  .    unsigned is
16cc0 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20 20  Correlated :1;  
16cd0 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d 71  /* True if sub-q
16ce0 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61 74  uery is correlat
16cf0 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  ed */.    unsign
16d00 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20  ed viaCoroutine 
16d10 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e  :1;  /* Implemen
16d20 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74  ted as a co-rout
16d30 69 6e 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  ine */.    unsig
16d40 6e 65 64 20 69 73 52 65 63 75 72 73 69 76 65 20  ned isRecursive 
16d50 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66 6f  :1;   /* True fo
16d60 72 20 72 65 63 75 72 73 69 76 65 20 72 65 66 65  r recursive refe
16d70 72 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a 2f  rence in WITH */
16d80 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
16d90 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 20  OMIT_EXPLAIN.   
16da0 20 75 38 20 69 53 65 6c 65 63 74 49 64 3b 20 20   u8 iSelectId;  
16db0 20 20 20 2f 2a 20 49 66 20 70 53 65 6c 65 63 74     /* If pSelect
16dc0 21 3d 30 2c 20 74 68 65 20 69 64 20 6f 66 20 74  !=0, the id of t
16dd0 68 65 20 73 75 62 2d 73 65 6c 65 63 74 20 69 6e  he sub-select in
16de0 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20   EQP */.#endif. 
16df0 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20     int iCursor; 
16e00 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45       /* The VDBE
16e10 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75   cursor number u
16e20 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68  sed to access th
16e30 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
16e40 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20  Expr *pOn;      
16e50 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75    /* The ON clau
16e60 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a  se of a join */.
16e70 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69      IdList *pUsi
16e80 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49  ng;   /* The USI
16e90 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a  NG clause of a j
16ea0 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61  oin */.    Bitma
16eb0 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20  sk colUsed;  /* 
16ec0 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74  Bit N (1<<N) set
16ed0 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20   if column N of 
16ee0 70 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a  pTab is used */.
16ef0 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65 78      char *zIndex
16f00 3b 20 20 20 20 20 2f 2a 20 49 64 65 6e 74 69 66  ;     /* Identif
16f10 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45  ier from "INDEXE
16f20 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63  D BY <zIndex>" c
16f30 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 49 6e 64  lause */.    Ind
16f40 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 2f  ex *pIndex;    /
16f50 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72  * Index structur
16f60 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
16f70 74 6f 20 7a 49 6e 64 65 78 2c 20 69 66 20 61 6e  to zIndex, if an
16f80 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20  y */.  } a[1];  
16f90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
16fa0 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  e entry for each
16fb0 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74   identifier on t
16fc0 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  he list */.};../
16fd0 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76  *.** Permitted v
16fe0 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72 63  alues of the Src
16ff0 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20  List.a.jointype 
17000 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65  field.*/.#define
17010 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78   JT_INNER     0x
17020 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b  0001    /* Any k
17030 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20  ind of inner or 
17040 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64  cross join */.#d
17050 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20  efine JT_CROSS  
17060 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20     0x0002    /* 
17070 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66 20  Explicit use of 
17080 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f 72  the CROSS keywor
17090 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  d */.#define JT_
170a0 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30 30 34  NATURAL   0x0004
170b0 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20      /* True for 
170c0 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e  a "natural" join
170d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c   */.#define JT_L
170e0 45 46 54 20 20 20 20 20 20 30 78 30 30 30 38 20  EFT      0x0008 
170f0 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72     /* Left outer
17100 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
17110 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30 78   JT_RIGHT     0x
17120 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68 74  0010    /* Right
17130 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
17140 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20  define JT_OUTER 
17150 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a      0x0020    /*
17160 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65 79   The "OUTER" key
17170 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74 20  word is present 
17180 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45 52  */.#define JT_ER
17190 52 4f 52 20 20 20 20 20 30 78 30 30 34 30 20 20  ROR     0x0040  
171a0 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20    /* unknown or 
171b0 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e  unsupported join
171c0 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a   type */.../*.**
171d0 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61   Flags appropria
171e0 74 65 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c  te for the wctrl
171f0 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72 20  Flags parameter 
17200 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72 65 42  of sqlite3WhereB
17210 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68  egin().** and th
17220 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72  e WhereInfo.wctr
17230 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a  lFlags member..*
17240 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
17250 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20  ORDERBY_NORMAL  
17260 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70   0x0000 /* No-op
17270 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
17280 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20  E_ORDERBY_MIN   
17290 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44     0x0001 /* ORD
172a0 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67  ER BY processing
172b0 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20   for min() func 
172c0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
172d0 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20  _ORDERBY_MAX    
172e0 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45    0x0002 /* ORDE
172f0 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20  R BY processing 
17300 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a  for max() func *
17310 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
17320 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44 20  ONEPASS_DESIRED 
17330 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20   0x0004 /* Want 
17340 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55  to do one-pass U
17350 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a  PDATE/DELETE */.
17360 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55  #define WHERE_DU
17370 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30  PLICATES_OK    0
17380 78 30 30 30 38 20 2f 2a 20 4f 6b 20 74 6f 20 72  x0008 /* Ok to r
17390 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65  eturn a row more
173a0 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64   than once */.#d
173b0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4d 49 54  efine WHERE_OMIT
173c0 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20 20 30 78 30  _OPEN_CLOSE  0x0
173d0 30 31 30 20 2f 2a 20 54 61 62 6c 65 20 63 75 72  010 /* Table cur
173e0 73 6f 72 73 20 61 72 65 20 61 6c 72 65 61 64 79  sors are already
173f0 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   open */.#define
17400 20 57 48 45 52 45 5f 46 4f 52 43 45 5f 54 41 42   WHERE_FORCE_TAB
17410 4c 45 20 20 20 20 20 20 30 78 30 30 32 30 20 2f  LE      0x0020 /
17420 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 61 6e 20  * Do not use an 
17430 69 6e 64 65 78 2d 6f 6e 6c 79 20 73 65 61 72 63  index-only searc
17440 68 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  h */.#define WHE
17450 52 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59  RE_ONETABLE_ONLY
17460 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20 4f 6e      0x0040 /* On
17470 6c 79 20 63 6f 64 65 20 74 68 65 20 31 73 74 20  ly code the 1st 
17480 74 61 62 6c 65 20 69 6e 20 70 54 61 62 4c 69 73  table in pTabLis
17490 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t */.#define WHE
174a0 52 45 5f 4e 4f 5f 41 55 54 4f 49 4e 44 45 58 20  RE_NO_AUTOINDEX 
174b0 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20 44 69      0x0080 /* Di
174c0 73 61 6c 6c 6f 77 20 61 75 74 6f 6d 61 74 69 63  sallow automatic
174d0 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66   indexes */.#def
174e0 69 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42  ine WHERE_GROUPB
174f0 59 20 20 20 20 20 20 20 20 20 20 30 78 30 31 30  Y          0x010
17500 30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73  0 /* pOrderBy is
17510 20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20   really a GROUP 
17520 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  BY */.#define WH
17530 45 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20  ERE_DISTINCTBY  
17540 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a 20 70       0x0200 /* p
17550 4f 72 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c  Orderby is reall
17560 79 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61  y a DISTINCT cla
17570 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  use */.#define W
17580 48 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e  HERE_WANT_DISTIN
17590 43 54 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20  CT    0x0400 /* 
175a0 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73  All output needs
175b0 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20   to be distinct 
175c0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
175d0 5f 53 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20  _SORTBYGROUP    
175e0 20 20 30 78 30 38 30 30 20 2f 2a 20 53 75 70 70    0x0800 /* Supp
175f0 6f 72 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  ort sqlite3Where
17600 49 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64  IsSorted() */.#d
17610 65 66 69 6e 65 20 57 48 45 52 45 5f 52 45 4f 50  efine WHERE_REOP
17620 45 4e 5f 49 44 58 20 20 20 20 20 20 20 30 78 31  EN_IDX       0x1
17630 30 30 30 20 2f 2a 20 54 72 79 20 74 6f 20 75 73  000 /* Try to us
17640 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 20 2a  e OP_ReopenIdx *
17650 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65  /../* Allowed re
17660 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d  turn values from
17670 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44   sqlite3WhereIsD
17680 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65  istinct().*/.#de
17690 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
176a0 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20  NCT_NOOP      0 
176b0 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79   /* DISTINCT key
176c0 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f  word not used */
176d0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
176e0 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20  ISTINCT_UNIQUE  
176f0 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69    1  /* No dupli
17700 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cates */.#define
17710 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
17720 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20  ORDERED   2  /* 
17730 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61  All duplicates a
17740 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23  re adjacent */.#
17750 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
17760 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20  TINCT_UNORDERED 
17770 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73  3  /* Duplicates
17780 20 61 72 65 20 73 63 61 74 74 65 72 65 64 20 2a   are scattered *
17790 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43  /../*.** A NameC
177a0 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20 61  ontext defines a
177b0 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63   context in whic
177c0 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62  h to resolve tab
177d0 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a  le and column.**
177e0 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e   names.  The con
177f0 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  text consists of
17800 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65   a list of table
17810 73 20 28 74 68 65 20 70 53 72 63 4c 69 73 74 29  s (the pSrcList)
17820 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20   field and.** a 
17830 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78  list of named ex
17840 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74  pression (pEList
17850 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78  ).  The named ex
17860 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61  pression list ma
17870 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54  y.** be NULL.  T
17880 68 65 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f  he pSrc correspo
17890 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20  nds to the FROM 
178a0 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
178b0 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20  CT or.** to the 
178c0 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72  table being oper
178d0 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52  ated on by INSER
178e0 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45  T, UPDATE, or DE
178f0 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45  LETE.  The.** pE
17900 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  List corresponds
17910 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73   to the result s
17920 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61  et of a SELECT a
17930 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a  nd is NULL for.*
17940 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e  * other statemen
17950 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f  ts..**.** NameCo
17960 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65  ntexts can be ne
17970 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f  sted.  When reso
17980 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65  lving names, the
17990 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20   inner-most .** 
179a0 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72 63  context is searc
179b0 68 65 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e  hed first.  If n
179c0 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  o match is found
179d0 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72  , the next outer
179e0 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63  .** context is c
179f0 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72  hecked.  If ther
17a00 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61  e is still no ma
17a10 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f  tch, the next co
17a20 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63  ntext.** is chec
17a30 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65  ked.  This proce
17a40 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74  ss continues unt
17a50 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74 63  il either a matc
17a60 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72  h is found.** or
17a70 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72   all contexts ar
17a80 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61  e check.  When a
17a90 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c   match is found,
17aa0 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72   the nRef member
17ab0 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   of.** the conte
17ac0 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  xt containing th
17ad0 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65  e match is incre
17ae0 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45  mented. .**.** E
17af0 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65 74  ach subquery get
17b00 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74  s a new NameCont
17b10 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20  ext.  The pNext 
17b20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20  field points to 
17b30 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  the.** NameConte
17b40 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74  xt in the parent
17b50 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74 68   query.  Thus th
17b60 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61  e process of sca
17b70 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d  nning the.** Nam
17b80 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f  eContext list co
17b90 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61  rresponds to sea
17ba0 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73  rching through s
17bb0 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65  uccessively oute
17bc0 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20  r.** subqueries 
17bd0 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61  looking for a ma
17be0 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e  tch..*/.struct N
17bf0 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50  ameContext {.  P
17c00 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
17c10 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65      /* The parse
17c20 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  r */.  SrcList *
17c30 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f  pSrcList;   /* O
17c40 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65  ne or more table
17c50 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76  s used to resolv
17c60 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70  e names */.  Exp
17c70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20  rList *pEList;  
17c80 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69    /* Optional li
17c90 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74  st of result-set
17ca0 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67   columns */.  Ag
17cb0 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b  gInfo *pAggInfo;
17cc0 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
17cd0 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67 61 74  n about aggregat
17ce0 65 73 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c  es at this level
17cf0 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78   */.  NameContex
17d00 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65  t *pNext;  /* Ne
17d10 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f  xt outer name co
17d20 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72  ntext.  NULL for
17d30 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20   outermost */.  
17d40 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20  int nRef;       
17d50 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17d60 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64  f names resolved
17d70 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74   by this context
17d80 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
17d90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
17da0 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65  mber of errors e
17db0 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65  ncountered while
17dc0 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
17dd0 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61 67   */.  u16 ncFlag
17de0 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65  s;         /* Ze
17df0 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20  ro or more NC_* 
17e00 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62 65  flags defined be
17e10 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  low */.};../*.**
17e20 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
17e30 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74  for the NameCont
17e40 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65  ext, ncFlags fie
17e50 6c 64 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 3a 20  ld..**.** Note: 
17e60 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 6d 75   NC_MinMaxAgg mu
17e70 73 74 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  st have the same
17e80 20 76 61 6c 75 65 20 61 73 20 53 46 5f 4d 69 6e   value as SF_Min
17e90 4d 61 78 41 67 67 20 61 6e 64 0a 2a 2a 20 53 51  MaxAgg and.** SQ
17ea0 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
17eb0 2e 0a 2a 2a 20 0a 2a 2f 0a 23 64 65 66 69 6e 65  ..** .*/.#define
17ec0 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78   NC_AllowAgg  0x
17ed0 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61  0001  /* Aggrega
17ee0 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  te functions are
17ef0 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f   allowed here */
17f00 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41  .#define NC_HasA
17f10 67 67 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a  gg    0x0002  /*
17f20 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67   One or more agg
17f30 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
17f40 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   seen */.#define
17f50 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78   NC_IsCheck   0x
17f60 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66  0004  /* True if
17f70 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
17f80 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73   in a CHECK cons
17f90 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
17fa0 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30  e NC_InAggFunc 0
17fb0 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20 69  x0008  /* True i
17fc0 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75  f analyzing argu
17fd0 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20  ments to an agg 
17fe0 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
17ff0 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30 78 30  NC_PartIdx   0x0
18000 30 31 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  010  /* True if 
18010 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74  resolving a part
18020 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20  ial index WHERE 
18030 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69  */.#define NC_Mi
18040 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30 20 20  nMaxAgg 0x1000  
18050 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65  /* min/max aggre
18060 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65  gates seen.  See
18070 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 0a   note above */..
18080 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
18090 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
180a0 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
180b0 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d  tains all inform
180c0 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20  ation.** needed 
180d0 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65  to generate code
180e0 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45   for a single SE
180f0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
18100 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20  **.** nLimit is 
18110 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65  set to -1 if the
18120 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63  re is no LIMIT c
18130 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20  lause.  nOffset 
18140 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20  is set to 0..** 
18150 49 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49  If there is a LI
18160 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20  MIT clause, the 
18170 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d  parser sets nLim
18180 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  it to the value 
18190 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20  of the.** limit 
181a0 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74  and nOffset to t
181b0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
181c0 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20  offset (or 0 if 
181d0 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20  there is not.** 
181e0 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61  offset).  But la
181f0 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61  ter on, nLimit a
18200 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d  nd nOffset becom
18210 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63  e the memory loc
18220 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65  ations.** in the
18230 20 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72   VDBE that recor
18240 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20  d the limit and 
18250 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e  offset counters.
18260 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45  .**.** addrOpenE
18270 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f  phm[] entries co
18280 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73  ntain the addres
18290 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65  s of OP_OpenEphe
182a0 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a  meral opcodes..*
182b0 2a 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65  * These addresse
182c0 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64  s must be stored
182d0 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20   so that we can 
182e0 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c  go back and fill
182f0 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45   in.** the P4_KE
18300 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72  YINFO and P2 par
18310 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20  ameters later.  
18320 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49  Neither the KeyI
18330 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e  nfo nor.** the n
18340 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
18350 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f   in P2 can be co
18360 6d 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61  mputed at the sa
18370 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68  me time.** as th
18380 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e  e OP_OpenEphm in
18390 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64  struction is cod
183a0 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a  ed because not.*
183b0 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61  * enough informa
183c0 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63  tion about the c
183d0 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73  ompound query is
183e0 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70   known at that p
183f0 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79  oint..** The Key
18400 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
18410 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d  nTran[0] and [1]
18420 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74   contains collat
18430 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a  ing sequences.**
18440 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20   for the result 
18450 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  set.  The KeyInf
18460 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70  o for addrOpenEp
18470 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63  hm[2] contains c
18480 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75  ollating.** sequ
18490 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52  ences for the OR
184a0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
184b0 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  /.struct Select 
184c0 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  {.  ExprList *pE
184d0 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68  List;      /* Th
184e0 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20  e fields of the 
184f0 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f  result */.  u8 o
18500 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
18510 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b     /* One of: TK
18520 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b  _UNION TK_ALL TK
18530 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58  _INTERSECT TK_EX
18540 43 45 50 54 20 2a 2f 0a 20 20 75 31 36 20 73 65  CEPT */.  u16 se
18550 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  lFlags;         
18560 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a   /* Various SF_*
18570 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74   values */.  int
18580 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74   iLimit, iOffset
18590 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65  ;   /* Memory re
185a0 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20  gisters holding 
185b0 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63  LIMIT & OFFSET c
185c0 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20 53  ounters */.#if S
185d0 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
185e0 45 44 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e 61  ED.  char zSelNa
185f0 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53  me[12];     /* S
18600 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20  ymbolic name of 
18610 74 68 69 73 20 53 45 4c 45 43 54 20 75 73 65 20  this SELECT use 
18620 66 6f 72 20 64 65 62 75 67 67 69 6e 67 20 2a 2f  for debugging */
18630 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 61 64  .#endif.  int ad
18640 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20  drOpenEphm[2];  
18650 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   /* OP_OpenEphem
18660 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64   opcodes related
18670 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20   to this select 
18680 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65 63 74  */.  u64 nSelect
18690 52 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a 20 45  Row;        /* E
186a0 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20  stimated number 
186b0 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a  of result rows *
186c0 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
186d0 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  c;         /* Th
186e0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
186f0 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b  .  Expr *pWhere;
18700 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
18710 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f   WHERE clause */
18720 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
18730 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  oupBy;    /* The
18740 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
18750 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76   */.  Expr *pHav
18760 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ing;         /* 
18770 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  The HAVING claus
18780 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
18790 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a  *pOrderBy;    /*
187a0 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
187b0 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ause */.  Select
187c0 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20   *pPrior;       
187d0 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74   /* Prior select
187e0 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73   in a compound s
187f0 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20  elect statement 
18800 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65  */.  Select *pNe
18810 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  xt;         /* N
18820 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68  ext select to th
18830 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70  e left in a comp
18840 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ound */.  Expr *
18850 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20  pLimit;         
18860 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73   /* LIMIT expres
18870 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73  sion. NULL means
18880 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20   not used. */.  
18890 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20  Expr *pOffset;  
188a0 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54         /* OFFSET
188b0 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c   expression. NUL
188c0 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64  L means not used
188d0 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69  . */.  With *pWi
188e0 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  th;           /*
188f0 20 57 49 54 48 20 63 6c 61 75 73 65 20 61 74 74   WITH clause att
18900 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 73 65  ached to this se
18910 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a  lect. Or NULL. *
18920 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
18930 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53  wed values for S
18940 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20  elect.selFlags. 
18950 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78   The "SF" prefix
18960 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22   stands for.** "
18970 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f  Select Flag"..*/
18980 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74  .#define SF_Dist
18990 69 6e 63 74 20 20 20 20 20 20 20 20 30 78 30 30  inct        0x00
189a0 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68  01  /* Output sh
189b0 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54  ould be DISTINCT
189c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52   */.#define SF_R
189d0 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 20 30  esolved        0
189e0 78 30 30 30 32 20 20 2f 2a 20 49 64 65 6e 74 69  x0002  /* Identi
189f0 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e 20  fiers have been 
18a00 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66  resolved */.#def
18a10 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74 65  ine SF_Aggregate
18a20 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
18a30 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  * Contains aggre
18a40 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
18a50 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65  /.#define SF_Use
18a60 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30 78 30  sEphemeral   0x0
18a70 30 30 38 20 20 2f 2a 20 55 73 65 73 20 74 68 65  008  /* Uses the
18a80 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f   OpenEphemeral o
18a90 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65  pcode */.#define
18aa0 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20   SF_Expanded    
18ab0 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 73      0x0010  /* s
18ac0 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61  qlite3SelectExpa
18ad0 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74  nd() called on t
18ae0 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  his */.#define S
18af0 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20  F_HasTypeInfo   
18b00 20 20 30 78 30 30 32 30 20 20 2f 2a 20 46 52 4f    0x0020  /* FRO
18b10 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76  M subqueries hav
18b20 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61  e Table metadata
18b30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43   */.#define SF_C
18b40 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 20 30  ompound        0
18b50 78 30 30 34 30 20 20 2f 2a 20 50 61 72 74 20 6f  x0040  /* Part o
18b60 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65  f a compound que
18b70 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ry */.#define SF
18b80 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20  _Values         
18b90 20 30 78 30 30 38 30 20 20 2f 2a 20 53 79 6e 74   0x0080  /* Synt
18ba0 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c  hesized from VAL
18bb0 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  UES clause */.#d
18bc0 65 66 69 6e 65 20 53 46 5f 41 6c 6c 56 61 6c 75  efine SF_AllValu
18bd0 65 73 20 20 20 20 20 20 20 30 78 30 31 30 30 20  es       0x0100 
18be0 20 2f 2a 20 41 6c 6c 20 74 65 72 6d 73 20 6f 66   /* All terms of
18bf0 20 63 6f 6d 70 6f 75 6e 64 20 61 72 65 20 56 41   compound are VA
18c00 4c 55 45 53 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LUES */.#define 
18c10 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20  SF_NestedFrom   
18c20 20 20 20 30 78 30 32 30 30 20 20 2f 2a 20 50 61     0x0200  /* Pa
18c30 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65  rt of a parenthe
18c40 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73  sized FROM claus
18c50 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
18c60 4d 61 79 62 65 43 6f 6e 76 65 72 74 20 20 20 20  MaybeConvert    
18c70 30 78 30 34 30 30 20 20 2f 2a 20 4e 65 65 64 20  0x0400  /* Need 
18c80 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53  convertCompoundS
18c90 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28  electToSubquery(
18ca0 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  ) */.#define SF_
18cb0 52 65 63 75 72 73 69 76 65 20 20 20 20 20 20 20  Recursive       
18cc0 30 78 30 38 30 30 20 20 2f 2a 20 54 68 65 20 72  0x0800  /* The r
18cd0 65 63 75 72 73 69 76 65 20 70 61 72 74 20 6f 66  ecursive part of
18ce0 20 61 20 72 65 63 75 72 73 69 76 65 20 43 54 45   a recursive CTE
18cf0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
18d00 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 20 30  inMaxAgg       0
18d10 78 31 30 30 30 20 20 2f 2a 20 41 67 67 72 65 67  x1000  /* Aggreg
18d20 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d  ate containing m
18d30 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f  in() or max() */
18d40 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73  .../*.** The res
18d50 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54  ults of a SELECT
18d60 20 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75   can be distribu
18d70 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77  ted in several w
18d80 61 79 73 2c 20 61 73 20 64 65 66 69 6e 65 64 0a  ays, as defined.
18d90 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65  ** by one of the
18da0 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
18db0 73 2e 20 20 54 68 65 20 22 53 52 54 22 20 70 72  s.  The "SRT" pr
18dc0 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45  efix means "SELE
18dd0 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70  CT Result.** Typ
18de0 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  e"..**.**     SR
18df0 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 53 74  T_Union       St
18e00 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 61  ore results as a
18e10 20 6b 65 79 20 69 6e 20 61 20 74 65 6d 70 6f 72   key in a tempor
18e20 61 72 79 20 69 6e 64 65 78 20 0a 2a 2a 20 20 20  ary index .**   
18e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e40 20 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20    identified by 
18e50 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
18e60 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78  **.**     SRT_Ex
18e70 63 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76 65  cept      Remove
18e80 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74 68   results from th
18e90 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65  e temporary inde
18ea0 78 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  x pDest->iSDParm
18eb0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
18ec0 45 78 69 73 74 73 20 20 20 20 20 20 53 74 6f 72  Exists      Stor
18ed0 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20  e a 1 in memory 
18ee0 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44 50  cell pDest->iSDP
18ef0 61 72 6d 20 69 66 20 74 68 65 20 72 65 73 75 6c  arm if the resul
18f00 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
18f10 20 20 20 20 20 20 20 20 20 73 65 74 20 69 73 20           set is 
18f20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a  not empty..**.**
18f30 20 20 20 20 20 53 52 54 5f 44 69 73 63 61 72 64       SRT_Discard
18f40 20 20 20 20 20 54 68 72 6f 77 20 74 68 65 20 72       Throw the r
18f50 65 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54 68  esults away.  Th
18f60 69 73 20 69 73 20 75 73 65 64 20 62 79 20 53 45  is is used by SE
18f70 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20 20  LECT.**         
18f80 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74              stat
18f90 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72  ements within tr
18fa0 69 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c  iggers whose onl
18fb0 79 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20  y purpose is.** 
18fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fd0 20 20 20 20 74 68 65 20 73 69 64 65 2d 65 66 66      the side-eff
18fe0 65 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e  ects of function
18ff0 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20  s..**.** All of 
19000 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 66 72  the above are fr
19010 65 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68 65  ee to ignore the
19020 69 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  ir ORDER BY clau
19030 73 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a 2a  se. Those that.*
19040 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f  * follow must ho
19050 6e 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59  nor the ORDER BY
19060 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   clause..**.**  
19070 20 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20     SRT_Output   
19080 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 72 6f     Generate a ro
19090 77 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73 69  w of output (usi
190a0 6e 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c 74  ng the OP_Result
190b0 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  Row.**          
190c0 20 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f 64             opcod
190d0 65 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  e) for each row 
190e0 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  in the result se
190f0 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
19100 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c  _Mem         Onl
19110 79 20 76 61 6c 69 64 20 69 66 20 74 68 65 20 72  y valid if the r
19120 65 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67 6c  esult is a singl
19130 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20  e column..**    
19140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19150 20 53 74 6f 72 65 20 74 68 65 20 66 69 72 73 74   Store the first
19160 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66   column of the f
19170 69 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77 0a  irst result row.
19180 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19190 20 20 20 20 20 20 20 69 6e 20 72 65 67 69 73 74         in regist
191a0 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  er pDest->iSDPar
191b0 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74  m then abandon t
191c0 68 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20 20  he rest.**      
191d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
191e0 66 20 74 68 65 20 71 75 65 72 79 2e 20 20 54 68  f the query.  Th
191f0 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69  is destination i
19200 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31 22  mplies "LIMIT 1"
19210 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
19220 53 65 74 20 20 20 20 20 20 20 20 20 54 68 65 20  Set         The 
19230 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20 61  result must be a
19240 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20   single column. 
19250 20 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20   Store each.**  
19260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19270 20 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74     row of result
19280 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20 74   as the key in t
19290 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
192a0 61 72 6d 2e 20 0a 2a 2a 20 20 20 20 20 20 20 20  arm. .**        
192b0 20 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70               App
192c0 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ly the affinity 
192d0 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20 62  pDest->affSdst b
192e0 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a  efore storing.**
192f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19300 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20 55       results.  U
19310 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
19320 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e   "IN (SELECT ...
19330 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  )"..**.**     SR
19340 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43 72  T_EphemTab    Cr
19350 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61 72  eate an temporar
19360 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
19370 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65  SDParm and store
19380 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19390 20 20 20 20 20 20 20 20 74 68 65 20 72 65 73 75          the resu
193a0 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20 63 75  lt there. The cu
193b0 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70 65  rsor is left ope
193c0 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20 20  n after.**      
193d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
193e0 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73 20  eturning.  This 
193f0 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c  is like SRT_Tabl
19400 65 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a  e except that.**
19410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19420 20 20 20 20 20 74 68 69 73 20 64 65 73 74 69 6e       this destin
19430 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70  ation uses OP_Op
19440 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20 63  enEphemeral to c
19450 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20  reate.**        
19460 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
19470 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a   table first..**
19480 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72 6f  .**     SRT_Coro
19490 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74 65  utine   Generate
194a0 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68   a co-routine th
194b0 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77  at returns a new
194c0 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20   row of.**      
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 20 65 61 63 68 20 74 69 6d 65  esults each time
194f0 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20   it is invoked. 
19500 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74   The entry point
19510 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19520 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63          of the c
19530 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74 6f  o-routine is sto
19540 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
19550 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a  pDest->iSDParm.*
19560 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19570 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 72 65        and the re
19580 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f 72  sult row is stor
19590 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65  ed in pDest->nDe
195a0 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  st registers.** 
195b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195c0 20 20 20 20 73 74 61 72 74 69 6e 67 20 77 69 74      starting wit
195d0 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a  h pDest->iSdst..
195e0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54 61  **.**     SRT_Ta
195f0 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65 20  ble       Store 
19600 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f  results in tempo
19610 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
19620 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
19630 20 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20    SRT_Fifo      
19640 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53    This is like S
19650 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63 65  RT_EphemTab exce
19660 70 74 20 74 68 61 74 20 74 68 65 20 74 61 62 6c  pt that the tabl
19670 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
19680 20 20 20 20 20 20 20 20 20 69 73 20 61 73 73 75           is assu
19690 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20 62  med to already b
196a0 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69 66  e open.  SRT_Fif
196b0 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20 20  o has.**        
196c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
196d0 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70   additional prop
196e0 65 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61 62  erty of being ab
196f0 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20  le to ignore.** 
19700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19710 20 20 20 20 74 68 65 20 4f 52 44 45 52 20 42 59      the ORDER BY
19720 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   clause..**.**  
19730 20 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20     SRT_DistFifo 
19740 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
19750 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20   in a temporary 
19760 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
19770 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20  Parm..**        
19780 20 20 20 20 20 20 20 20 20 20 20 20 20 42 75 74               But
19790 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72   also use tempor
197a0 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
197b0 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a  >iSDParm+1 as.**
197c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197d0 20 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66       a record of
197e0 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c   all prior resul
197f0 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e  ts and ignore an
19800 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20  y duplicate.**  
19810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19820 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d     rows.  Name m
19830 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74  eans:  "Distinct
19840 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   Fifo"..**.**   
19850 20 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20    SRT_Queue     
19860 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
19870 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75  in priority queu
19880 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
19890 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20   (really.**     
198a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198b0 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70 65  an index).  Appe
198c0 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75  nd a sequence nu
198d0 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c 6c  mber so that all
198e0 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20 20   entries.**     
198f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19900 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a  are distinct..**
19910 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74  .**     SRT_Dist
19920 51 75 65 75 65 20 20 20 53 74 6f 72 65 20 72 65  Queue   Store re
19930 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74  sults in priorit
19940 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69  y queue pDest->i
19950 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a  SDParm only if.*
19960 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19970 20 20 20 20 20 20 74 68 65 20 73 61 6d 65 20 72        the same r
19980 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72 20  ecord has never 
19990 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66 6f  been stored befo
199a0 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20 20  re.  The.**     
199b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199c0 69 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d 3e  index at pDest->
199d0 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61  iSDParm+1 hold a
199e0 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73 2e  ll prior stores.
199f0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f  .*/.#define SRT_
19a00 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20  Union        1  
19a10 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
19a20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e  as keys in an in
19a30 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
19a40 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 20  RT_Except       
19a50 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73  2  /* Remove res
19a60 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e  ult from a UNION
19a70 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
19a80 65 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20  e SRT_Exists    
19a90 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31     3  /* Store 1
19aa0 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69   if the result i
19ab0 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23  s not empty */.#
19ac0 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61  define SRT_Disca
19ad0 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f  rd      4  /* Do
19ae0 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72 65   not save the re
19af0 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a  sults anywhere *
19b00 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46 69  /.#define SRT_Fi
19b10 66 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a  fo         5  /*
19b20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
19b30 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75   data with an au
19b40 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f  tomatic rowid */
19b50 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
19b60 74 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a 20  tFifo     6  /* 
19b70 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20 62  Like SRT_Fifo, b
19b80 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74  ut unique result
19b90 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
19ba0 65 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20  e SRT_Queue     
19bb0 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72     7  /* Store r
19bc0 65 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65 75  esult in an queu
19bd0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
19be0 5f 44 69 73 74 51 75 65 75 65 20 20 20 20 38 20  _DistQueue    8 
19bf0 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75 65   /* Like SRT_Que
19c00 75 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72  ue, but unique r
19c10 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a  esults only */..
19c20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
19c30 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65  clause is ignore
19c40 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65  d for all of the
19c50 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e   above */.#defin
19c60 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72  e IgnorableOrder
19c70 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74  by(X) ((X->eDest
19c80 29 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75 65  )<=SRT_DistQueue
19c90 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f  )..#define SRT_O
19ca0 75 74 70 75 74 20 20 20 20 20 20 20 39 20 20 2f  utput       9  /
19cb0 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f  * Output each ro
19cc0 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23  w of result */.#
19cd0 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20  define SRT_Mem  
19ce0 20 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74         10  /* St
19cf0 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ore result in a 
19d00 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23  memory cell */.#
19d10 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20  define SRT_Set  
19d20 20 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53 74         11  /* St
19d30 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b  ore results as k
19d40 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  eys in an index 
19d50 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
19d60 70 68 65 6d 54 61 62 20 20 20 20 31 32 20 20 2f  phemTab    12  /
19d70 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73 69 65  * Create transie
19d80 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65  nt tab and store
19d90 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20   like SRT_Table 
19da0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43  */.#define SRT_C
19db0 6f 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20 2f  oroutine   13  /
19dc0 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e  * Generate a sin
19dd0 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  gle row of resul
19de0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
19df0 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31 34 20  _Table       14 
19e00 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
19e10 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e   as data with an
19e20 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64   automatic rowid
19e30 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e   */../*.** An in
19e40 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f  stance of this o
19e50 62 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20  bject describes 
19e60 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20  where to put of 
19e70 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a  the results of.*
19e80 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  * a SELECT state
19e90 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ment..*/.struct 
19ea0 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75  SelectDest {.  u
19eb0 38 20 65 44 65 73 74 3b 20 20 20 20 20 20 20 20  8 eDest;        
19ec0 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69      /* How to di
19ed0 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73  spose of the res
19ee0 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54  ults.  On of SRT
19ef0 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 63  _* above. */.  c
19f00 68 61 72 20 61 66 66 53 64 73 74 3b 20 20 20 20  har affSdst;    
19f10 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20      /* Affinity 
19f20 75 73 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d  used when eDest=
19f30 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e  =SRT_Set */.  in
19f40 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20  t iSDParm;      
19f50 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65     /* A paramete
19f60 72 20 75 73 65 64 20 62 79 20 74 68 65 20 65 44  r used by the eD
19f70 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74  est disposal met
19f80 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64  hod */.  int iSd
19f90 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  st;           /*
19fa0 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20 77   Base register w
19fb0 68 65 72 65 20 72 65 73 75 6c 74 73 20 61 72 65  here results are
19fc0 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e   written */.  in
19fd0 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20 20  t nSdst;        
19fe0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
19ff0 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61  registers alloca
1a000 74 65 64 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  ted */.  ExprLis
1a010 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a  t *pOrderBy;  /*
1a020 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72   Key columns for
1a030 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20 53   SRT_Queue and S
1a040 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f 0a  RT_DistQueue */.
1a050 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67  };../*.** During
1a060 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e   code generation
1a070 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74   of statements t
1a080 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69  hat do inserts i
1a090 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  nto AUTOINCREMEN
1a0a0 54 20 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68  T .** tables, th
1a0b0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f  e following info
1a0c0 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63  rmation is attac
1a0d0 68 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65  hed to the Table
1a0e0 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20  .u.autoInc.p.** 
1a0f0 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20  pointer of each 
1a100 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61  autoincrement ta
1a110 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f  ble to record so
1a120 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74  me side informat
1a130 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ion that.** the 
1a140 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e  code generator n
1a150 65 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74  eeds.  We have t
1a160 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65  o keep per-table
1a170 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a   autoincrement.*
1a180 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e  * information in
1a190 20 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72   case inserts ar
1a1a0 65 20 64 6f 77 6e 20 77 69 74 68 69 6e 20 74 72  e down within tr
1a1b0 69 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72  iggers.  Trigger
1a1c0 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d  s do not.** norm
1a1d0 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20  ally coordinate 
1a1e0 74 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73  their activities
1a1f0 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64  , but we do need
1a200 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74   to coordinate t
1a210 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e  he.** loading an
1a220 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f  d saving of auto
1a230 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d  increment inform
1a240 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
1a250 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20   AutoincInfo {. 
1a260 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e   AutoincInfo *pN
1a270 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69  ext;   /* Next i
1a280 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c  nfo block in a l
1a290 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20  ist of them all 
1a2a0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
1a2b0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61  ;          /* Ta
1a2c0 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c  ble this info bl
1a2d0 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f  ock refers to */
1a2e0 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
1a2f0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
1a300 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62  x in sqlite3.aDb
1a310 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  [] of database h
1a320 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20  olding pTab */. 
1a330 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20   int regCtr;    
1a340 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
1a350 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   register holdin
1a360 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e  g the rowid coun
1a370 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ter */.};../*.**
1a380 20 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c   Size of the col
1a390 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66  umn cache.*/.#if
1a3a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f  ndef SQLITE_N_CO
1a3b0 4c 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20  LCACHE.# define 
1a3c0 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
1a3d0 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E 10.#endif../*.
1a3e0 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20  ** At least one 
1a3f0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
1a400 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1a410 75 72 65 20 69 73 20 63 72 65 61 74 65 64 20 66  ure is created f
1a420 6f 72 20 65 61 63 68 20 0a 2a 2a 20 74 72 69 67  or each .** trig
1a430 67 65 72 20 74 68 61 74 20 6d 61 79 20 62 65 20  ger that may be 
1a440 66 69 72 65 64 20 77 68 69 6c 65 20 70 61 72 73  fired while pars
1a450 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55  ing an INSERT, U
1a460 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a  PDATE or DELETE.
1a470 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c  ** statement. Al
1a480 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61  l such objects a
1a490 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  re stored in the
1a4a0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61   linked list hea
1a4b0 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e  ded at.** Parse.
1a4c0 70 54 72 69 67 67 65 72 50 72 67 20 61 6e 64 20  pTriggerPrg and 
1a4d0 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61  deleted once sta
1a4e0 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69  tement compilati
1a4f0 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63  on has been.** c
1a500 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  ompleted..**.** 
1a510 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72  A Vdbe sub-progr
1a520 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e  am that implemen
1a530 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20  ts the body and 
1a540 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74  WHEN clause of t
1a550 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65  rigger.** Trigge
1a560 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61  rPrg.pTrigger, a
1a570 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c  ssuming a defaul
1a580 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c  t ON CONFLICT cl
1a590 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67  ause of.** Trigg
1a5a0 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73  erPrg.orconf, is
1a5b0 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54   stored in the T
1a5c0 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72  riggerPrg.pProgr
1a5d0 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20  am variable..** 
1a5e0 54 68 65 20 50 61 72 73 65 2e 70 54 72 69 67 67  The Parse.pTrigg
1a5f0 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72  erPrg list never
1a600 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e   contains two en
1a610 74 72 69 65 73 20 77 69 74 68 20 74 68 65 20 73  tries with the s
1a620 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f  ame.** values fo
1a630 72 20 62 6f 74 68 20 70 54 72 69 67 67 65 72 20  r both pTrigger 
1a640 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a  and orconf..**.*
1a650 2a 20 54 68 65 20 54 72 69 67 67 65 72 50 72 67  * The TriggerPrg
1a660 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72  .aColmask[0] var
1a670 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20  iable is set to 
1a680 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  a mask of old.* 
1a690 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73  columns.** acces
1a6a0 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30  sed (or set to 0
1a6b0 20 66 6f 72 20 74 72 69 67 67 65 72 73 20 66 69   for triggers fi
1a6c0 72 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  red as a result 
1a6d0 6f 66 20 49 4e 53 45 52 54 20 0a 2a 2a 20 73 74  of INSERT .** st
1a6e0 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c  atements). Simil
1a6f0 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65  arly, the Trigge
1a700 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d  rPrg.aColmask[1]
1a710 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
1a720 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66   to.** a mask of
1a730 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75   new.* columns u
1a740 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72  sed by the progr
1a750 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72  am..*/.struct Tr
1a760 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69  iggerPrg {.  Tri
1a770 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20  gger *pTrigger; 
1a780 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20       /* Trigger 
1a790 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73  this program was
1a7a0 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20   coded from */. 
1a7b0 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65   TriggerPrg *pNe
1a7c0 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  xt;      /* Next
1a7d0 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e   entry in Parse.
1a7e0 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74  pTriggerPrg list
1a7f0 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d   */.  SubProgram
1a800 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a   *pProgram;   /*
1a810 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65   Program impleme
1a820 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f  nting pTrigger/o
1a830 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f  rconf */.  int o
1a840 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
1a850 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e     /* Default ON
1a860 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79   CONFLICT policy
1a870 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61   */.  u32 aColma
1a880 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  sk[2];        /*
1a890 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c   Masks of old.*,
1a8a0 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61   new.* columns a
1a8b0 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f  ccessed */.};../
1a8c0 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b  *.** The yDbMask
1a8d0 20 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68   datatype for th
1a8e0 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c  e bitmask of all
1a8f0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
1a900 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  ses..*/.#if SQLI
1a910 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e  TE_MAX_ATTACHED>
1a920 33 30 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73  30.  typedef uns
1a930 69 67 6e 65 64 20 63 68 61 72 20 79 44 62 4d 61  igned char yDbMa
1a940 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41  sk[(SQLITE_MAX_A
1a950 54 54 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23  TTACHED+9)/8];.#
1a960 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65   define DbMaskTe
1a970 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29  st(M,I)    (((M)
1a980 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29  [(I)/8]&(1<<((I)
1a990 26 37 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69  &7)))!=0).# defi
1a9a0 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29  ne DbMaskZero(M)
1a9b0 20 20 20 20 20 20 6d 65 6d 73 65 74 28 28 4d 29        memset((M)
1a9c0 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20  ,0,sizeof(M)).# 
1a9d0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74  define DbMaskSet
1a9e0 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 5b 28 49  (M,I)     (M)[(I
1a9f0 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37  )/8]|=(1<<((I)&7
1aa00 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
1aa10 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73  skAllZero(M)   s
1aa20 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
1aa30 65 72 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65 20  ero(M).# define 
1aa40 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29  DbMaskNonZero(M)
1aa50 20 20 20 28 73 71 6c 69 74 65 33 44 62 4d 61 73     (sqlite3DbMas
1aa60 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a  kAllZero(M)==0).
1aa70 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20  #else.  typedef 
1aa80 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62  unsigned int yDb
1aa90 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44  Mask;.# define D
1aaa0 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20  bMaskTest(M,I)  
1aab0 20 20 28 28 28 4d 29 26 28 28 28 79 44 62 4d 61    (((M)&(((yDbMa
1aac0 73 6b 29 31 29 3c 3c 28 49 29 29 29 21 3d 30 29  sk)1)<<(I)))!=0)
1aad0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1aae0 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 28 4d 29  Zero(M)      (M)
1aaf0 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  =0.# define DbMa
1ab00 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28  skSet(M,I)     (
1ab10 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29 31  M)|=(((yDbMask)1
1ab20 29 3c 3c 28 49 29 29 0a 23 20 64 65 66 69 6e 65  )<<(I)).# define
1ab30 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d   DbMaskAllZero(M
1ab40 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66  )   (M)==0.# def
1ab50 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72  ine DbMaskNonZer
1ab60 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23 65  o(M)   (M)!=0.#e
1ab70 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53  ndif../*.** An S
1ab80 51 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78  QL parser contex
1ab90 74 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68  t.  A copy of th
1aba0 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
1abb0 70 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a  passed through.*
1abc0 2a 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64  * the parser and
1abd0 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74   down into all t
1abe0 68 65 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e  he parser action
1abf0 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65   routine in orde
1ac00 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72  r to.** carry ar
1ac10 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ound information
1ac20 20 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20   that is global 
1ac30 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70 61  to the entire pa
1ac40 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  rse..**.** The s
1ac50 74 72 75 63 74 75 72 65 20 69 73 20 64 69 76 69  tructure is divi
1ac60 64 65 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72  ded into two par
1ac70 74 73 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61  ts.  When the pa
1ac80 72 73 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a  rser and code.**
1ac90 20 67 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74   generate call t
1aca0 68 65 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73  hemselves recurs
1acb0 69 76 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74  ively, the first
1acc0 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 74 72   part of the str
1acd0 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e  ucture.** is con
1ace0 73 74 61 6e 74 20 62 75 74 20 74 68 65 20 73 65  stant but the se
1acf0 63 6f 6e 64 20 70 61 72 74 20 69 73 20 72 65 73  cond part is res
1ad00 65 74 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  et at the beginn
1ad10 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a  ing and end of.*
1ad20 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e  * each recursion
1ad30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62  ..**.** The nTab
1ad40 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c  leLock and aTabl
1ad50 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20  eLock variables 
1ad60 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66  are only used if
1ad70 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68   the shared-cach
1ad80 65 20 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73  e .** feature is
1ad90 20 65 6e 61 62 6c 65 64 20 28 69 66 20 73 71 6c   enabled (if sql
1ada0 69 74 65 33 54 73 64 28 29 2d 3e 75 73 65 53 68  ite3Tsd()->useSh
1adb0 61 72 65 64 44 61 74 61 20 69 73 20 74 72 75 65  aredData is true
1adc0 29 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a 20 75  ). They are.** u
1add0 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
1ade0 20 73 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f   set of table-lo
1adf0 63 6b 73 20 72 65 71 75 69 72 65 64 20 62 79 20  cks required by 
1ae00 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65  the statement be
1ae10 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e  ing.** compiled.
1ae20 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65   Function sqlite
1ae30 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20  3TableLock() is 
1ae40 75 73 65 64 20 74 6f 20 61 64 64 20 65 6e 74 72  used to add entr
1ae50 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69  ies to the.** li
1ae60 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61  st..*/.struct Pa
1ae70 72 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  rse {.  sqlite3 
1ae80 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  *db;         /* 
1ae90 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  The main databas
1aea0 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20  e structure */. 
1aeb0 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20   char *zErrMsg; 
1aec0 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f        /* An erro
1aed0 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 56  r message */.  V
1aee0 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20  dbe *pVdbe;     
1aef0 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65      /* An engine
1af00 20 66 6f 72 20 65 78 65 63 75 74 69 6e 67 20 64   for executing d
1af10 61 74 61 62 61 73 65 20 62 79 74 65 63 6f 64 65  atabase bytecode
1af20 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20   */.  int rc;   
1af30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
1af40 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65  turn code from e
1af50 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  xecution */.  u8
1af60 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20   colNamesSet;   
1af70 20 20 20 2f 2a 20 54 52 55 45 20 61 66 74 65 72     /* TRUE after
1af80 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68   OP_ColumnName h
1af90 61 73 20 62 65 65 6e 20 69 73 73 75 65 64 20 74  as been issued t
1afa0 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20 75 38 20  o pVdbe */.  u8 
1afb0 63 68 65 63 6b 53 63 68 65 6d 61 3b 20 20 20 20  checkSchema;    
1afc0 20 20 2f 2a 20 43 61 75 73 65 73 20 73 63 68 65    /* Causes sche
1afd0 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20  ma cookie check 
1afe0 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 2a  after an error *
1aff0 2f 0a 20 20 75 38 20 6e 65 73 74 65 64 3b 20 20  /.  u8 nested;  
1b000 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1b010 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c  er of nested cal
1b020 6c 73 20 74 6f 20 74 68 65 20 70 61 72 73 65 72  ls to the parser
1b030 2f 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20  /code generator 
1b040 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52 65 67  */.  u8 nTempReg
1b050 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
1b060 62 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72 79  ber of temporary
1b070 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 61 54   registers in aT
1b080 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38  empReg[] */.  u8
1b090 20 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20   isMultiWrite;  
1b0a0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74     /* True if st
1b0b0 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69  atement may modi
1b0c0 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70  fy/insert multip
1b0d0 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20  le rows */.  u8 
1b0e0 6d 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20  mayAbort;       
1b0f0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61    /* True if sta
1b100 74 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77  tement may throw
1b110 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74   an ABORT except
1b120 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73 43  ion */.  u8 hasC
1b130 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a  ompound;      /*
1b140 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20   Need to invoke 
1b150 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53  convertCompoundS
1b160 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28  electToSubquery(
1b170 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73  ) */.  u8 okCons
1b180 74 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f  tFactor;    /* O
1b190 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f 75 74 20  K to factor out 
1b1a0 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20 69  constants */.  i
1b1b0 6e 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20  nt aTempReg[8]; 
1b1c0 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61      /* Holding a
1b1d0 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72  rea for temporar
1b1e0 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20  y registers */. 
1b1f0 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20   int nRangeReg; 
1b200 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
1b210 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72   the temporary r
1b220 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
1b230 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67  .  int iRangeReg
1b240 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74  ;       /* First
1b250 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d   register in tem
1b260 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
1b270 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  block */.  int n
1b280 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
1b290 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
1b2a0 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e  ors seen */.  in
1b2b0 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20  t nTab;         
1b2c0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1b2d0 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63  previously alloc
1b2e0 61 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72  ated VDBE cursor
1b2f0 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b  s */.  int nMem;
1b300 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1b310 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
1b320 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61  cells used so fa
1b330 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b  r */.  int nSet;
1b340 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1b350 75 6d 62 65 72 20 6f 66 20 73 65 74 73 20 75 73  umber of sets us
1b360 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
1b370 6e 74 20 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20  nt nOnce;       
1b380 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1b390 20 4f 50 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63   OP_Once instruc
1b3a0 74 69 6f 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a  tions so far */.
1b3b0 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20    int nOpAlloc; 
1b3c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b3d0 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61   of slots alloca
1b3e0 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70  ted for Vdbe.aOp
1b3f0 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 46 69 78  [] */.  int iFix
1b400 65 64 4f 70 3b 20 20 20 20 20 20 20 20 2f 2a 20  edOp;        /* 
1b410 4e 65 76 65 72 20 62 61 63 6b 20 6f 75 74 20 6f  Never back out o
1b420 70 63 6f 64 65 73 20 69 46 69 78 65 64 4f 70 2d  pcodes iFixedOp-
1b430 31 20 6f 72 20 65 61 72 6c 69 65 72 20 2a 2f 0a  1 or earlier */.
1b440 20 20 69 6e 74 20 63 6b 42 61 73 65 3b 20 20 20    int ckBase;   
1b450 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72         /* Base r
1b460 65 67 69 73 74 65 72 20 6f 66 20 64 61 74 61 20  egister of data 
1b470 64 75 72 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e  during check con
1b480 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  straints */.  in
1b490 74 20 69 50 61 72 74 49 64 78 54 61 62 3b 20 20  t iPartIdxTab;  
1b4a0 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 72 72     /* Table corr
1b4b0 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 61 20 70  esponding to a p
1b4c0 61 72 74 69 61 6c 20 69 6e 64 65 78 20 2a 2f 0a  artial index */.
1b4d0 20 20 69 6e 74 20 69 43 61 63 68 65 4c 65 76 65    int iCacheLeve
1b4e0 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63  l;     /* ColCac
1b4f0 68 65 20 76 61 6c 69 64 20 77 68 65 6e 20 61 43  he valid when aC
1b500 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c  olCache[].iLevel
1b510 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f  <=iCacheLevel */
1b520 0a 20 20 69 6e 74 20 69 43 61 63 68 65 43 6e 74  .  int iCacheCnt
1b530 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74  ;       /* Count
1b540 65 72 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72  er used to gener
1b550 61 74 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e  ate aColCache[].
1b560 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  lru values */.  
1b570 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20  int nLabel;     
1b580 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1b590 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f  f labels used */
1b5a0 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20  .  int *aLabel; 
1b5b0 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
1b5c0 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62   to hold the lab
1b5d0 65 6c 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  els */.  struct 
1b5e0 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20  yColCache {.    
1b5f0 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
1b600 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63        /* Table c
1b610 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ursor number */.
1b620 20 20 20 20 69 31 36 20 69 43 6f 6c 75 6d 6e 3b      i16 iColumn;
1b630 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
1b640 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  le column number
1b650 20 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52   */.    u8 tempR
1b660 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  eg;           /*
1b670 20 69 52 65 67 20 69 73 20 61 20 74 65 6d 70 20   iReg is a temp 
1b680 72 65 67 69 73 74 65 72 20 74 68 61 74 20 6e 65  register that ne
1b690 65 64 73 20 74 6f 20 62 65 20 66 72 65 65 64 20  eds to be freed 
1b6a0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65  */.    int iLeve
1b6b0 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
1b6c0 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f  Nesting level */
1b6d0 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20  .    int iReg;  
1b6e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
1b6f0 67 20 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20  g with value of 
1b700 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d  this column. 0 m
1b710 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20  eans none. */.  
1b720 20 20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20    int lru;      
1b730 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74          /* Least
1b740 20 72 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65   recently used e
1b750 6e 74 72 79 20 68 61 73 20 74 68 65 20 73 6d 61  ntry has the sma
1b760 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20  llest value */. 
1b770 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c   } aColCache[SQL
1b780 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b  ITE_N_COLCACHE];
1b790 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63    /* One for eac
1b7a0 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65  h column cache e
1b7b0 6e 74 72 79 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ntry */.  ExprLi
1b7c0 73 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f  st *pConstExpr;/
1b7d0 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  * Constant expre
1b7e0 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65  ssions */.  Toke
1b7f0 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65  n constraintName
1b800 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  ;/* Name of the 
1b810 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65  constraint curre
1b820 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65  ntly being parse
1b830 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77  d */.  yDbMask w
1b840 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53  riteMask;   /* S
1b850 74 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61  tart a write tra
1b860 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73  nsaction on thes
1b870 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20  e databases */. 
1b880 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d   yDbMask cookieM
1b890 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b  ask;  /* Bitmask
1b8a0 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66   of schema verif
1b8b0 69 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f  ied databases */
1b8c0 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61 6c  .  int cookieVal
1b8d0 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  ue[SQLITE_MAX_AT
1b8e0 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20 56  TACHED+2];  /* V
1b8f0 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65 73  alues of cookies
1b900 20 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a 20 20   to verify */.  
1b910 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20  int regRowid;   
1b920 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
1b930 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f   holding rowid o
1b940 66 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65  f CREATE TABLE e
1b950 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65  ntry */.  int re
1b960 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f  gRoot;         /
1b970 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
1b980 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  ng root page num
1b990 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65  ber for new obje
1b9a0 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61  cts */.  int nMa
1b9b0 78 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  xArg;         /*
1b9c0 20 4d 61 78 20 61 72 67 73 20 70 61 73 73 65 64   Max args passed
1b9d0 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f   to user functio
1b9e0 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d  n by sub-program
1b9f0 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52   */.#if SELECTTR
1ba00 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 69 6e  ACE_ENABLED.  in
1ba10 74 20 6e 53 65 6c 65 63 74 3b 20 20 20 20 20 20  t nSelect;      
1ba20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1ba30 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1ba40 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  s seen */.  int 
1ba50 6e 53 65 6c 65 63 74 49 6e 64 65 6e 74 3b 20 20  nSelectIndent;  
1ba60 20 2f 2a 20 48 6f 77 20 66 61 72 20 74 6f 20 69   /* How far to i
1ba70 6e 64 65 6e 74 20 53 45 4c 45 43 54 54 52 41 43  ndent SELECTTRAC
1ba80 45 28 29 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65  E() output */.#e
1ba90 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
1baa0 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
1bab0 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62  CACHE.  int nTab
1bac0 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f  leLock;        /
1bad0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b  * Number of lock
1bae0 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20  s in aTableLock 
1baf0 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a  */.  TableLock *
1bb00 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52  aTableLock; /* R
1bb10 65 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f  equired table lo
1bb20 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63  cks for shared-c
1bb30 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e  ache mode */.#en
1bb40 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  dif.  AutoincInf
1bb50 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e  o *pAinc;  /* In
1bb60 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
1bb70 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f  AUTOINCREMENT co
1bb80 75 6e 74 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20  unters */..  /* 
1bb90 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  Information used
1bba0 20 77 68 69 6c 65 20 63 6f 64 69 6e 67 20 74 72   while coding tr
1bbb0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 20  igger programs. 
1bbc0 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70  */.  Parse *pTop
1bbd0 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72  level;    /* Par
1bbe0 73 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  se structure for
1bbf0 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f   main program (o
1bc00 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62  r NULL) */.  Tab
1bc10 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b  le *pTriggerTab;
1bc20 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67    /* Table trigg
1bc30 65 72 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f  ers are being co
1bc40 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74  ded for */.  int
1bc50 20 61 64 64 72 43 72 54 61 62 3b 20 20 20 20 20   addrCrTab;     
1bc60 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20    /* Address of 
1bc70 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f  OP_CreateTable o
1bc80 70 63 6f 64 65 20 6f 6e 20 43 52 45 41 54 45 20  pcode on CREATE 
1bc90 54 41 42 4c 45 20 2a 2f 0a 20 20 69 6e 74 20 61  TABLE */.  int a
1bca0 64 64 72 53 6b 69 70 50 4b 3b 20 20 20 20 20 20  ddrSkipPK;      
1bcb0 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 69 6e  /* Address of in
1bcc0 73 74 72 75 63 74 69 6f 6e 20 74 6f 20 73 6b 69  struction to ski
1bcd0 70 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e  p PRIMARY KEY in
1bce0 64 65 78 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75  dex */.  u32 nQu
1bcf0 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a  eryLoop;      /*
1bd00 20 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69   Est number of i
1bd10 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71  terations of a q
1bd20 75 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29  uery (10*log2(N)
1bd30 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61  ) */.  u32 oldma
1bd40 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  sk;         /* M
1bd50 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c  ask of old.* col
1bd60 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20  umns referenced 
1bd70 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b  */.  u32 newmask
1bd80 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
1bd90 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
1bda0 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f  ns referenced */
1bdb0 0a 20 20 75 38 20 65 54 72 69 67 67 65 72 4f 70  .  u8 eTriggerOp
1bdc0 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50  ;       /* TK_UP
1bdd0 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20  DATE, TK_INSERT 
1bde0 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a  or TK_DELETE */.
1bdf0 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20    u8 eOrconf;   
1be00 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1be10 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f  t ON CONFLICT po
1be20 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67 65 72  licy for trigger
1be30 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64   steps */.  u8 d
1be40 69 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20  isableTriggers; 
1be50 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61   /* True to disa
1be60 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ble triggers */.
1be70 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  /************
1be80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1be90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bea0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1beb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a  ************.  *
1bec0 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74  * Above is const
1bed0 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75  ant between recu
1bee0 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69  rsions.  Below i
1bef0 73 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61  s reset before a
1bf00 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61  nd after.  ** ea
1bf10 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54  ch recursion.  T
1bf20 68 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77  he boundary betw
1bf30 65 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65  een these two re
1bf40 67 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69  gions is determi
1bf50 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f  ned.  ** using o
1bf60 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 6e 56  ffsetof(Parse,nV
1bf70 61 72 29 20 73 6f 20 74 68 65 20 6e 56 61 72 20  ar) so the nVar 
1bf80 66 69 65 6c 64 20 6d 75 73 74 20 62 65 20 74 68  field must be th
1bf90 65 20 66 69 72 73 74 20 66 69 65 6c 64 0a 20 20  e first field.  
1bfa0 2a 2a 20 69 6e 20 74 68 65 20 72 65 63 75 72 73  ** in the recurs
1bfb0 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a  ive region..  **
1bfc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bfd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bfe0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1bff0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c000 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69 6e 74 20 6e  ******/..  int n
1c010 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Var;            
1c020 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1c030 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20  f '?' variables 
1c040 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20  seen in the SQL 
1c050 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1c060 6e 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20 20  nzVar;          
1c070 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1c080 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 6c 6f  of available slo
1c090 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f  ts in azVar[] */
1c0a0 0a 20 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64  .  u8 iPkSortOrd
1c0b0 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
1c0c0 41 53 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20  ASC or DESC for 
1c0d0 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
1c0e0 4b 45 59 20 2a 2f 0a 20 20 75 38 20 62 46 72 65  KEY */.  u8 bFre
1c0f0 65 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20  eWith;          
1c100 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 57     /* True if pW
1c110 69 74 68 20 73 68 6f 75 6c 64 20 62 65 20 66 72  ith should be fr
1c120 65 65 64 20 77 69 74 68 20 70 61 72 73 65 72 20  eed with parser 
1c130 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b  */.  u8 explain;
1c140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c150 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 45 58  * True if the EX
1c160 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f  PLAIN flag is fo
1c170 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79  und on the query
1c180 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
1c190 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
1c1a0 41 42 4c 45 0a 20 20 75 38 20 64 65 63 6c 61 72  ABLE.  u8 declar
1c1b0 65 56 74 61 62 3b 20 20 20 20 20 20 20 20 20 20  eVtab;          
1c1c0 20 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69   /* True if insi
1c1d0 64 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  de sqlite3_decla
1c1e0 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 69  re_vtab() */.  i
1c1f0 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20  nt nVtabLock;   
1c200 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1c210 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61  er of virtual ta
1c220 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a  bles to lock */.
1c230 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 41 6c  #endif.  int nAl
1c240 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ias;            
1c250 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1c260 61 6c 69 61 73 65 64 20 72 65 73 75 6c 74 20 73  aliased result s
1c270 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  et columns */.  
1c280 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20  int nHeight;    
1c290 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
1c2a0 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69  ression tree hei
1c2b0 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73  ght of current s
1c2c0 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66  ub-select */.#if
1c2d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1c2e0 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69  _EXPLAIN.  int i
1c2f0 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20  SelectId;       
1c300 20 20 20 20 20 2f 2a 20 49 44 20 6f 66 20 63 75       /* ID of cu
1c310 72 72 65 6e 74 20 73 65 6c 65 63 74 20 66 6f 72  rrent select for
1c320 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20   EXPLAIN output 
1c330 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74 53 65  */.  int iNextSe
1c340 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 2f  lectId;        /
1c350 2a 20 4e 65 78 74 20 61 76 61 69 6c 61 62 6c 65  * Next available
1c360 20 73 65 6c 65 63 74 20 49 44 20 66 6f 72 20 45   select ID for E
1c370 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f  XPLAIN output */
1c380 0a 23 65 6e 64 69 66 0a 20 20 63 68 61 72 20 2a  .#endif.  char *
1c390 2a 61 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20  *azVar;         
1c3a0 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 73 20      /* Pointers 
1c3b0 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70 61 72 61  to names of para
1c3c0 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56 64 62 65  meters */.  Vdbe
1c3d0 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20 20   *pReprepare;   
1c3e0 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e        /* VM bein
1c3f0 67 20 72 65 70 72 65 70 61 72 65 64 20 28 73 71  g reprepared (sq
1c400 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28 29  lite3Reprepare()
1c410 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  ) */.  const cha
1c420 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20 20  r *zTail;       
1c430 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78 74   /* All SQL text
1c440 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 73   past the last s
1c450 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20  emicolon parsed 
1c460 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 77  */.  Table *pNew
1c470 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 2f  Table;         /
1c480 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67 20  * A table being 
1c490 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43  constructed by C
1c4a0 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20  REATE TABLE */. 
1c4b0 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72   Trigger *pNewTr
1c4c0 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72  igger;     /* Tr
1c4d0 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73  igger under cons
1c4e0 74 72 75 63 74 20 62 79 20 61 20 43 52 45 41 54  truct by a CREAT
1c4f0 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63  E TRIGGER */.  c
1c500 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68  onst char *zAuth
1c510 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20  Context; /* The 
1c520 36 74 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f  6th parameter to
1c530 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62   db->xAuth callb
1c540 61 63 6b 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  acks */.  Token 
1c550 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20  sNameToken;     
1c560 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74      /* Token wit
1c570 68 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73 63  h unqualified sc
1c580 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65  hema object name
1c590 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73   */.  Token sLas
1c5a0 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20  tToken;         
1c5b0 2f 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65  /* The last toke
1c5c0 6e 20 70 61 72 73 65 64 20 2a 2f 0a 23 69 66 6e  n parsed */.#ifn
1c5d0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1c5e0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54  VIRTUALTABLE.  T
1c5f0 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20  oken sArg;      
1c600 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70           /* Comp
1c610 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d  lete text of a m
1c620 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a  odule argument *
1c630 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74  /.  Table **apVt
1c640 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a  abLock;       /*
1c650 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74   Pointer to virt
1c660 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69  ual tables needi
1c670 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65  ng locking */.#e
1c680 6e 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a  ndif.  Table *pZ
1c690 6f 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20 20  ombieTab;       
1c6a0 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c   /* List of Tabl
1c6b0 65 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c  e objects to del
1c6c0 65 74 65 20 61 66 74 65 72 20 63 6f 64 65 20 67  ete after code g
1c6d0 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50  en */.  TriggerP
1c6e0 72 67 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b  rg *pTriggerPrg;
1c6f0 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74    /* Linked list
1c700 20 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67 65   of coded trigge
1c710 72 73 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57  rs */.  With *pW
1c720 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  ith;            
1c730 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 57 49 54    /* Current WIT
1c740 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c  H clause, or NUL
1c750 4c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52  L */.};../*.** R
1c760 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 63 75  eturn true if cu
1c770 72 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61  rrently inside a
1c780 6e 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72  n sqlite3_declar
1c790 65 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a  e_vtab() call..*
1c7a0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
1c7b0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
1c7c0 45 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44  E.  #define IN_D
1c7d0 45 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65  ECLARE_VTAB 0.#e
1c7e0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e  lse.  #define IN
1c7f0 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70  _DECLARE_VTAB (p
1c800 50 61 72 73 65 2d 3e 64 65 63 6c 61 72 65 56 74  Parse->declareVt
1c810 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ab).#endif../*.*
1c820 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1c830 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1c840 74 72 75 63 74 75 72 65 20 63 61 6e 20 62 65 20  tructure can be 
1c850 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74  declared on a st
1c860 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20  ack and used.** 
1c870 74 6f 20 73 61 76 65 20 74 68 65 20 50 61 72 73  to save the Pars
1c880 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76  e.zAuthContext v
1c890 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74 20  alue so that it 
1c8a0 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20  can be restored 
1c8b0 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74  later..*/.struct
1c8c0 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20   AuthContext {. 
1c8d0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75   const char *zAu
1c8e0 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20  thContext;   /* 
1c8f0 50 75 74 20 73 61 76 65 64 20 50 61 72 73 65 2e  Put saved Parse.
1c900 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72  zAuthContext her
1c910 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50  e */.  Parse *pP
1c920 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  arse;           
1c930 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20     /* The Parse 
1c940 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a  structure */.};.
1c950 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20  ./*.** Bitfield 
1c960 66 6c 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c  flags for P5 val
1c970 75 65 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70  ue in various op
1c980 63 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  codes..*/.#defin
1c990 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
1c9a0 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
1c9b0 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20  * Set to update 
1c9c0 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 23  db->nChange */.#
1c9d0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50  define OPFLAG_EP
1c9e0 48 45 4d 20 20 20 20 20 20 20 20 20 30 78 30 31  HEM         0x01
1c9f0 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
1ca00 3a 20 45 70 68 65 6d 65 72 61 6c 20 6f 75 74 70  : Ephemeral outp
1ca10 75 74 20 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66  ut is ok */.#def
1ca20 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  ine OPFLAG_LASTR
1ca30 4f 57 49 44 20 20 20 20 20 30 78 30 32 20 20 20  OWID     0x02   
1ca40 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74   /* Set to updat
1ca50 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20  e db->lastRowid 
1ca60 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1ca70 47 5f 49 53 55 50 44 41 54 45 20 20 20 20 20 20  G_ISUPDATE      
1ca80 30 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20  0x04    /* This 
1ca90 4f 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20  OP_Insert is an 
1caa0 73 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64  sql UPDATE */.#d
1cab0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50  efine OPFLAG_APP
1cac0 45 4e 44 20 20 20 20 20 20 20 20 30 78 30 38 20  END        0x08 
1cad0 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69     /* This is li
1cae0 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70  kely to be an ap
1caf0 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  pend */.#define 
1cb00 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
1cb10 53 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20  SULT 0x10    /* 
1cb20 54 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73  Try to avoid a s
1cb30 65 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65  eek in BtreeInse
1cb40 72 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rt() */.#define 
1cb50 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
1cb60 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20       0x40    /* 
1cb70 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75  OP_Column only u
1cb80 73 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29  sed for length()
1cb90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1cba0 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20  AG_TYPEOFARG    
1cbb0 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43   0x80    /* OP_C
1cbc0 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20  olumn only used 
1cbd0 66 6f 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a  for typeof() */.
1cbe0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42  #define OPFLAG_B
1cbf0 55 4c 4b 43 53 52 20 20 20 20 20 20 20 30 78 30  ULKCSR       0x0
1cc00 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a  1    /* OP_Open*
1cc10 2a 20 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62  * used to open b
1cc20 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64  ulk cursor */.#d
1cc30 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45  efine OPFLAG_SEE
1cc40 4b 45 51 20 20 20 20 20 20 20 20 30 78 30 32 20  KEQ        0x02 
1cc50 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20     /* OP_Open** 
1cc60 63 75 72 73 6f 72 20 75 73 65 73 20 45 51 20 73  cursor uses EQ s
1cc70 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  eek only */.#def
1cc80 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52  ine OPFLAG_P2ISR
1cc90 45 47 20 20 20 20 20 20 20 30 78 30 34 20 20 20  EG       0x04   
1cca0 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65   /* P2 to OP_Ope
1ccb0 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74 65  n** is a registe
1ccc0 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66  r number */.#def
1ccd0 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  ine OPFLAG_PERMU
1cce0 54 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20  TE       0x01   
1ccf0 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20   /* OP_Compare: 
1cd00 75 73 65 20 74 68 65 20 70 65 72 6d 75 74 61 74  use the permutat
1cd10 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61  ion */../*. * Ea
1cd20 63 68 20 74 72 69 67 67 65 72 20 70 72 65 73 65  ch trigger prese
1cd30 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nt in the databa
1cd40 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f  se schema is sto
1cd50 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e  red as an instan
1cd60 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20  ce of. * struct 
1cd70 54 72 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20  Trigger. . *. * 
1cd80 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74  Pointers to inst
1cd90 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20  ances of struct 
1cda0 54 72 69 67 67 65 72 20 61 72 65 20 73 74 6f 72  Trigger are stor
1cdb0 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a  ed in two ways..
1cdc0 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72   * 1. In the "tr
1cdd0 69 67 48 61 73 68 22 20 68 61 73 68 20 74 61 62  igHash" hash tab
1cde0 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68 65 20  le (part of the 
1cdf0 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65  sqlite3* that re
1ce00 70 72 65 73 65 6e 74 73 20 74 68 65 20 0a 20 2a  presents the . *
1ce10 20 20 20 20 64 61 74 61 62 61 73 65 29 2e 20 54      database). T
1ce20 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67  his allows Trigg
1ce30 65 72 20 73 74 72 75 63 74 75 72 65 73 20 74 6f  er structures to
1ce40 20 62 65 20 72 65 74 72 69 65 76 65 64 20 62 79   be retrieved by
1ce50 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c   name.. * 2. All
1ce60 20 74 72 69 67 67 65 72 73 20 61 73 73 6f 63 69   triggers associ
1ce70 61 74 65 64 20 77 69 74 68 20 61 20 73 69 6e 67  ated with a sing
1ce80 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20  le table form a 
1ce90 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69  linked list, usi
1cea0 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65  ng the. *    pNe
1ceb0 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72  xt member of str
1cec0 75 63 74 20 54 72 69 67 67 65 72 2e 20 41 20 70  uct Trigger. A p
1ced0 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69  ointer to the fi
1cee0 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  rst element of t
1cef0 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20  he. *    linked 
1cf00 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64 20 61  list is stored a
1cf10 73 20 74 68 65 20 22 70 54 72 69 67 67 65 72 22  s the "pTrigger"
1cf20 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61   member of the a
1cf30 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20  ssociated. *    
1cf40 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a  struct Table.. *
1cf50 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69  . * The "step_li
1cf60 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74  st" member point
1cf70 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65  s to the first e
1cf80 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b  lement of a link
1cf90 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61  ed list. * conta
1cfa0 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74  ining the SQL st
1cfb0 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69  atements specifi
1cfc0 65 64 20 61 73 20 74 68 65 20 74 72 69 67 67 65  ed as the trigge
1cfd0 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73  r program.. */.s
1cfe0 74 72 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a  truct Trigger {.
1cff0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
1d000 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1d010 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69   name of the tri
1d020 67 67 65 72 20 20 20 20 20 20 20 20 20 20 20 20  gger            
1d030 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20              */. 
1d040 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20   char *table;   
1d050 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1d060 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f  table or view to
1d070 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67   which the trigg
1d080 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20  er applies */.  
1d090 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
1d0a0 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
1d0b0 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f  f TK_DELETE, TK_
1d0c0 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52  UPDATE, TK_INSER
1d0d0 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75  T         */.  u
1d0e0 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20  8 tr_tm;        
1d0f0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
1d100 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c   TRIGGER_BEFORE,
1d110 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a   TRIGGER_AFTER *
1d120 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b  /.  Expr *pWhen;
1d130 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1d140 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f  he WHEN clause o
1d150 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
1d160 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a   (may be NULL) *
1d170 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c  /.  IdList *pCol
1d180 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49  umns;       /* I
1d190 66 20 74 68 69 73 20 69 73 20 61 6e 20 55 50 44  f this is an UPD
1d1a0 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c  ATE OF <column-l
1d1b0 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20  ist> trigger,.  
1d1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1d0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 3c             the <
1d1e0 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20  column-list> is 
1d1f0 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20  stored here */. 
1d200 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
1d210 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65  ;        /* Sche
1d220 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
1d230 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53  e trigger */.  S
1d240 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d  chema *pTabSchem
1d250 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  a;     /* Schema
1d260 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
1d270 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67  table */.  Trigg
1d280 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73  erStep *step_lis
1d290 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20  t; /* Link list 
1d2a0 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  of trigger progr
1d2b0 61 6d 20 73 74 65 70 73 20 20 20 20 20 20 20 20  am steps        
1d2c0 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65       */.  Trigge
1d2d0 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  r *pNext;       
1d2e0 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65    /* Next trigge
1d2f0 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
1d300 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d  h the table */.}
1d310 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67  ;../*.** A trigg
1d320 65 72 20 69 73 20 65 69 74 68 65 72 20 61 20 42  er is either a B
1d330 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45  EFORE or an AFTE
1d340 52 20 74 72 69 67 67 65 72 2e 20 20 54 68 65 20  R trigger.  The 
1d350 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61  following consta
1d360 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65  nts.** determine
1d370 20 77 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49   which. .**.** I
1d380 66 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74  f there are mult
1d390 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79  iple triggers, y
1d3a0 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65  ou might of some
1d3b0 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65   BEFORE and some
1d3c0 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68   AFTER..** In th
1d3d0 61 74 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f  at cases, the co
1d3e0 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61  nstants below ca
1d3f0 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68  n be ORed togeth
1d400 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54  er..*/.#define T
1d410 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31  RIGGER_BEFORE  1
1d420 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52  .#define TRIGGER
1d430 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20  _AFTER   2../*. 
1d440 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1d450 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
1d460 74 65 70 20 69 73 20 75 73 65 64 20 74 6f 20 73  tep is used to s
1d470 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51  tore a single SQ
1d480 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74  L statement. * t
1d490 68 61 74 20 69 73 20 61 20 70 61 72 74 20 6f 66  hat is a part of
1d4a0 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72   a trigger-progr
1d4b0 61 6d 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61  am. . *. * Insta
1d4c0 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54  nces of struct T
1d4d0 72 69 67 67 65 72 53 74 65 70 20 61 72 65 20 73  riggerStep are s
1d4e0 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c  tored in a singl
1d4f0 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c  y linked list (l
1d500 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74  inked. * using t
1d510 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65  he "pNext" membe
1d520 72 29 20 72 65 66 65 72 65 6e 63 65 64 20 62 79  r) referenced by
1d530 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   the "step_list"
1d540 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 0a   member of the .
1d550 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73 74   * associated st
1d560 72 75 63 74 20 54 72 69 67 67 65 72 20 69 6e 73  ruct Trigger ins
1d570 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74  tance. The first
1d580 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20   element of the 
1d590 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20  linked list is. 
1d5a0 2a 20 74 68 65 20 66 69 72 73 74 20 73 74 65 70  * the first step
1d5b0 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2d   of the trigger-
1d5c0 70 72 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20  program.. * . * 
1d5d0 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20  The "op" member 
1d5e0 69 6e 64 69 63 61 74 65 73 20 77 68 65 74 68 65  indicates whethe
1d5f0 72 20 74 68 69 73 20 69 73 20 61 20 22 44 45 4c  r this is a "DEL
1d600 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20  ETE", "INSERT", 
1d610 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22  "UPDATE" or. * "
1d620 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e  SELECT" statemen
1d630 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20  t. The meanings 
1d640 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d  of the other mem
1d650 62 65 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e  bers is determin
1d660 65 64 20 62 79 20 74 68 65 20 0a 20 2a 20 76 61  ed by the . * va
1d670 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66  lue of "op" as f
1d680 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f  ollows:. *. * (o
1d690 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a  p == TK_INSERT).
1d6a0 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20   * orconf    -> 
1d6b0 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f  stores the ON CO
1d6c0 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d  NFLICT algorithm
1d6d0 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e  . * pSelect   ->
1d6e0 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
1d6f0 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53  NSERT INTO ... S
1d700 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d  ELECT ... statem
1d710 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20  ent, then. *    
1d720 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73            this s
1d730 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20  tores a pointer 
1d740 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  to the SELECT st
1d750 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69  atement. Otherwi
1d760 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72 67  se NULL.. * targ
1d770 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e  et    -> A token
1d780 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f   holding the quo
1d790 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
1d7a0 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20  table to insert 
1d7b0 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69  into.. * pExprLi
1d7c0 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73  st -> If this is
1d7d0 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
1d7e0 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73  ... VALUES ... s
1d7f0 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20  tatement, then. 
1d800 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
1d810 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65  his stores value
1d820 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  s to be inserted
1d830 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c  . Otherwise NULL
1d840 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d  .. * pIdList   -
1d850 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
1d860 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
1d870 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29  (<column-names>)
1d880 20 56 41 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a 20   VALUES ... . * 
1d890 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
1d8a0 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69  tement, then thi
1d8b0 73 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c  s stores the col
1d8c0 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a  umn-names to be.
1d8d0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1d8e0 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20  inserted into.. 
1d8f0 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44  *. * (op == TK_D
1d900 45 4c 45 54 45 29 0a 20 2a 20 74 61 72 67 65 74  ELETE). * target
1d910 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68      -> A token h
1d920 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65  olding the quote
1d930 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
1d940 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72  ble to delete fr
1d950 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20  om.. * pWhere   
1d960 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c   -> The WHERE cl
1d970 61 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45  ause of the DELE
1d980 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20  TE statement if 
1d990 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64  one is specified
1d9a0 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
1d9b0 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c    Otherwise NULL
1d9c0 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20  .. * . * (op == 
1d9d0 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 74 61  TK_UPDATE). * ta
1d9e0 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b  rget    -> A tok
1d9f0 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71  en holding the q
1da00 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
1da10 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74  e table to updat
1da20 65 20 72 6f 77 73 20 6f 66 2e 0a 20 2a 20 70 57  e rows of.. * pW
1da30 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57  here    -> The W
1da40 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74  HERE clause of t
1da50 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
1da60 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70  ent if one is sp
1da70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20  ecified.. *     
1da80 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69           Otherwi
1da90 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70  se NULL.. * pExp
1daa0 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20  rList -> A list 
1dab0 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74  of the columns t
1dac0 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65  o update and the
1dad0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20   expressions to 
1dae0 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20  update. *       
1daf0 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20         them to. 
1db00 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61 74  See sqlite3Updat
1db10 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  e() documentatio
1db20 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a  n of "pChanges".
1db30 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1db40 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a  argument.. * . *
1db50 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
1db60 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20  Step {.  u8 op; 
1db70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1db80 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
1db90 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
1dba0 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45  _INSERT, TK_SELE
1dbb0 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e  CT */.  u8 orcon
1dbc0 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
1dbd0 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e  OE_Rollback etc.
1dbe0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
1dbf0 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68  Trig;      /* Th
1dc00 65 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74  e trigger that t
1dc10 68 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61  his step is a pa
1dc20 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63  rt of */.  Selec
1dc30 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
1dc40 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 6d 65  /* SELECT statme
1dc50 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53  nt or RHS of INS
1dc60 45 52 54 20 49 4e 54 4f 20 2e 2e 20 53 45 4c 45  ERT INTO .. SELE
1dc70 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 54 6f 6b 65  CT ... */.  Toke
1dc80 6e 20 74 61 72 67 65 74 3b 20 20 20 20 20 20 20  n target;       
1dc90 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65   /* Target table
1dca0 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44   for DELETE, UPD
1dcb0 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20  ATE, INSERT */. 
1dcc0 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20   Expr *pWhere;  
1dcd0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
1dce0 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45  RE clause for DE
1dcf0 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73  LETE or UPDATE s
1dd00 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  teps */.  ExprLi
1dd10 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f  st *pExprList; /
1dd20 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72  * SET clause for
1dd30 20 55 50 44 41 54 45 2e 20 2a 2f 0a 20 20 49 64   UPDATE. */.  Id
1dd40 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20  List *pIdList;  
1dd50 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d     /* Column nam
1dd60 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f  es for INSERT */
1dd70 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
1dd80 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20  pNext;  /* Next 
1dd90 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74  in the link-list
1dda0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65   */.  TriggerSte
1ddb0 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61  p *pLast;  /* La
1ddc0 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69  st element in li
1ddd0 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66  nk-list. Valid f
1dde0 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79  or 1st elem only
1ddf0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
1de00 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
1de10 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69  cture contains i
1de20 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
1de30 62 79 20 74 68 65 20 73 71 6c 69 74 65 46 69 78  by the sqliteFix
1de40 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20  ....** routines 
1de50 61 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65  as they walk the
1de60 20 70 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d   parse tree to m
1de70 61 6b 65 20 64 61 74 61 62 61 73 65 20 72 65 66  ake database ref
1de80 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69  erences.** expli
1de90 63 69 74 2e 20 20 0a 2a 2f 0a 74 79 70 65 64 65  cit.  .*/.typede
1dea0 66 20 73 74 72 75 63 74 20 44 62 46 69 78 65 72  f struct DbFixer
1deb0 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75 63 74   DbFixer;.struct
1dec0 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50 61 72   DbFixer {.  Par
1ded0 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
1dee0 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e 67 20   /* The parsing 
1def0 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f 72 20  context.  Error 
1df00 6d 65 73 73 61 67 65 73 20 77 72 69 74 74 65 6e  messages written
1df10 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d   here */.  Schem
1df20 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 2f  a *pSchema;    /
1df30 2a 20 46 69 78 20 69 74 65 6d 73 20 74 6f 20 74  * Fix items to t
1df40 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20  his schema */.  
1df50 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20  int bVarOnly;   
1df60 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72      /* Check for
1df70 20 76 61 72 69 61 62 6c 65 20 72 65 66 65 72 65   variable refere
1df80 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63  nces only */.  c
1df90 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20  onst char *zDb; 
1dfa0 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20     /* Make sure 
1dfb0 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72 65 20  all objects are 
1dfc0 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 69  contained in thi
1dfd0 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  s database */.  
1dfe0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70  const char *zTyp
1dff0 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74  e;  /* Type of t
1e000 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75  he container - u
1e010 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65  sed for error me
1e020 73 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73  ssages */.  cons
1e030 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20  t Token *pName; 
1e040 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
1e050 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20  ontainer - used 
1e060 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67  for error messag
1e070 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  es */.};../*.** 
1e080 41 6e 20 6f 62 6a 65 63 74 65 64 20 75 73 65 64  An objected used
1e090 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65 20 74   to accumulate t
1e0a0 68 65 20 74 65 78 74 20 6f 66 20 61 20 73 74 72  he text of a str
1e0b0 69 6e 67 20 77 68 65 72 65 20 77 65 0a 2a 2a 20  ing where we.** 
1e0c0 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 69  do not necessari
1e0d0 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20  ly know how big 
1e0e0 74 68 65 20 73 74 72 69 6e 67 20 77 69 6c 6c 20  the string will 
1e0f0 62 65 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a  be in the end..*
1e100 2f 0a 73 74 72 75 63 74 20 53 74 72 41 63 63 75  /.struct StrAccu
1e110 6d 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  m {.  sqlite3 *d
1e120 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70  b;         /* Op
1e130 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20  tional database 
1e140 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20  for lookaside.  
1e150 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20  Can be NULL */. 
1e160 20 63 68 61 72 20 2a 7a 42 61 73 65 3b 20 20 20   char *zBase;   
1e170 20 20 20 20 20 20 2f 2a 20 41 20 62 61 73 65 20        /* A base 
1e180 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74  allocation.  Not
1e190 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f   from malloc. */
1e1a0 0a 20 20 63 68 61 72 20 2a 7a 54 65 78 74 3b 20  .  char *zText; 
1e1b0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73          /* The s
1e1c0 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20  tring collected 
1e1d0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1e1e0 20 6e 43 68 61 72 3b 20 20 20 20 20 20 20 20 20   nChar;         
1e1f0 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68   /* Length of th
1e200 65 20 73 74 72 69 6e 67 20 73 6f 20 66 61 72 20  e string so far 
1e210 2a 2f 0a 20 20 69 6e 74 20 20 6e 41 6c 6c 6f 63  */.  int  nAlloc
1e220 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f  ;         /* Amo
1e230 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c  unt of space all
1e240 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20  ocated in zText 
1e250 2a 2f 0a 20 20 69 6e 74 20 20 6d 78 41 6c 6c 6f  */.  int  mxAllo
1e260 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78  c;        /* Max
1e270 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 73 74 72  imum allowed str
1e280 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20  ing length */.  
1e290 75 38 20 20 20 75 73 65 4d 61 6c 6c 6f 63 3b 20  u8   useMalloc; 
1e2a0 20 20 20 20 20 2f 2a 20 30 3a 20 6e 6f 6e 65 2c       /* 0: none,
1e2b0 20 20 31 3a 20 73 71 6c 69 74 65 33 44 62 4d 61    1: sqlite3DbMa
1e2c0 6c 6c 6f 63 2c 20 20 32 3a 20 73 71 6c 69 74 65  lloc,  2: sqlite
1e2d0 33 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 20 20 75 38  3_malloc */.  u8
1e2e0 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20     accError;    
1e2f0 20 20 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e     /* STRACCUM_N
1e300 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43 43 55 4d  OMEM or STRACCUM
1e310 5f 54 4f 4f 42 49 47 20 2a 2f 0a 7d 3b 0a 23 64  _TOOBIG */.};.#d
1e320 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 4e  efine STRACCUM_N
1e330 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66 69 6e 65  OMEM   1.#define
1e340 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47   STRACCUM_TOOBIG
1e350 20 20 32 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69    2../*.** A poi
1e360 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
1e370 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74  ucture is used t
1e380 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e  o communicate in
1e390 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f  formation.** fro
1e3a0 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e  m sqlite3Init an
1e3b0 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61  d OP_ParseSchema
1e3c0 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65   into the sqlite
1e3d0 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a  3InitCallback..*
1e3e0 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
1e3f0 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
1e400 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
1e410 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 69  database being i
1e420 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
1e430 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b  char **pzErrMsg;
1e440 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73      /* Error mes
1e450 73 61 67 65 20 73 74 6f 72 65 64 20 68 65 72 65  sage stored here
1e460 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20   */.  int iDb;  
1e470 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66            /* 0 f
1e480 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  or main database
1e490 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32  .  1 for TEMP, 2
1e4a0 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64 20  .. for ATTACHed 
1e4b0 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20  */.  int rc;    
1e4c0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
1e4d0 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68  lt code stored h
1e4e0 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74  ere */.} InitDat
1e4f0 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74  a;../*.** Struct
1e500 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67  ure containing g
1e510 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74  lobal configurat
1e520 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65  ion data for the
1e530 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
1e540 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75  .**.** This stru
1e550 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61  cture also conta
1e560 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69  ins some state i
1e570 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
1e580 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
1e590 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d  fig {.  int bMem
1e5a0 73 74 61 74 3b 20 20 20 20 20 20 20 20 20 20 20  stat;           
1e5b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1e5c0 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f  e to enable memo
1e5d0 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69  ry status */.  i
1e5e0 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20  nt bCoreMutex;  
1e5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e600 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
1e610 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67  le core mutexing
1e620 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d   */.  int bFullM
1e630 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
1e640 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1e650 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d  to enable full m
1e660 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  utexing */.  int
1e670 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20   bOpenUri;      
1e680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e690 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70  * True to interp
1e6a0 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73  ret filenames as
1e6b0 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62   URIs */.  int b
1e6c0 55 73 65 43 69 73 3b 20 20 20 20 20 20 20 20 20  UseCis;         
1e6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e6e0 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  Use covering ind
1e6f0 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63  ices for full-sc
1e700 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53  ans */.  int mxS
1e710 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  trlen;          
1e720 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
1e730 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e  ximum string len
1e740 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76  gth */.  int nev
1e750 65 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20  erCorrupt;      
1e760 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
1e770 74 61 62 61 73 65 20 69 73 20 61 6c 77 61 79 73  tabase is always
1e780 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a   well-formed */.
1e790 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64    int szLookasid
1e7a0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1e7b0 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
1e7c0 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20  ookaside buffer 
1e7d0 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c  size */.  int nL
1e7e0 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
1e7f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
1e800 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65  efault lookaside
1e810 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f   buffer count */
1e820 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  .  sqlite3_mem_m
1e830 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20  ethods m;       
1e840 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65       /* Low-leve
1e850 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  l memory allocat
1e860 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  ion interface */
1e870 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
1e880 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20  _methods mutex; 
1e890 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65       /* Low-leve
1e8a0 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63  l mutex interfac
1e8b0 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70  e */.  sqlite3_p
1e8c0 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70  cache_methods2 p
1e8d0 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d  cache2;  /* Low-
1e8e0 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65  level page-cache
1e8f0 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
1e900 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20  void *pHeap;    
1e910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e920 20 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67    /* Heap storag
1e930 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74  e space */.  int
1e940 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20 20   nHeap;         
1e950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e960 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b  * Size of pHeap[
1e970 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71  ] */.  int mnReq
1e980 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20  , mxReq;        
1e990 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20           /* Min 
1e9a0 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65 71  and max heap req
1e9b0 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20  uests sizes */. 
1e9c0 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73   sqlite3_int64 s
1e9d0 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  zMmap;          
1e9e0 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61     /* mmap() spa
1e9f0 63 65 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65  ce per open file
1ea00 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e   */.  sqlite3_in
1ea10 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20  t64 mxMmap;     
1ea20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
1ea30 75 6d 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d  um value for szM
1ea40 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  map */.  void *p
1ea50 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20  Scratch;        
1ea60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63             /* Sc
1ea70 72 61 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a  ratch memory */.
1ea80 20 20 69 6e 74 20 73 7a 53 63 72 61 74 63 68 3b    int szScratch;
1ea90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eaa0 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65      /* Size of e
1eab0 61 63 68 20 73 63 72 61 74 63 68 20 62 75 66 66  ach scratch buff
1eac0 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72  er */.  int nScr
1ead0 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20  atch;           
1eae0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1eaf0 62 65 72 20 6f 66 20 73 63 72 61 74 63 68 20 62  ber of scratch b
1eb00 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64  uffers */.  void
1eb10 20 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20 20   *pPage;        
1eb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1eb30 20 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f   Page cache memo
1eb40 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61  ry */.  int szPa
1eb50 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
1eb60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
1eb70 65 20 6f 66 20 65 61 63 68 20 70 61 67 65 20 69  e of each page i
1eb80 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69  n pPage[] */.  i
1eb90 6e 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20  nt nPage;       
1eba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebb0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61   /* Number of pa
1ebc0 67 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a  ges in pPage[] *
1ebd0 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72  /.  int mxParser
1ebe0 53 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20  Stack;          
1ebf0 20 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d        /* maximum
1ec00 20 64 65 70 74 68 20 6f 66 20 74 68 65 20 70 61   depth of the pa
1ec10 72 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20  rser stack */.  
1ec20 69 6e 74 20 73 68 61 72 65 64 43 61 63 68 65 45  int sharedCacheE
1ec30 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20  nabled;         
1ec40 20 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61    /* true if sha
1ec50 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65  red-cache mode e
1ec60 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 75 33 32 20  nabled */.  u32 
1ec70 73 7a 50 6d 61 3b 20 20 20 20 20 20 20 20 20 20  szPma;          
1ec80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ec90 20 4d 61 78 69 6d 75 6d 20 53 6f 72 74 65 72 20   Maximum Sorter 
1eca0 50 4d 41 20 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a  PMA size */.  /*
1ecb0 20 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74   The above might
1ecc0 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   be initialized 
1ecd0 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68  to non-zero.  Th
1ece0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64  e following need
1ecf0 20 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20   to always.  ** 
1ed00 69 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72  initially be zer
1ed10 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20  o, however. */. 
1ed20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20   int isInit;    
1ed30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed40 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
1ed50 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
1ed60 68 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a  has finished */.
1ed70 20 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73    int inProgress
1ed80 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ed90 20 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c      /* True whil
1eda0 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
1edb0 20 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a   in progress */.
1edc0 20 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69    int isMutexIni
1edd0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1ede0 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
1edf0 72 20 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e  r mutexes are in
1ee00 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
1ee10 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b  nt isMallocInit;
1ee20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee30 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
1ee40 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c  alloc is initial
1ee50 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ized */.  int is
1ee60 50 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20  PCacheInit;     
1ee70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1ee80 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63  rue after malloc
1ee90 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
1eea0 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69  */.  int nRefIni
1eeb0 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  tMutex;         
1eec0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1eed0 20 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e   of users of pIn
1eee0 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c  itMutex */.  sql
1eef0 69 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69  ite3_mutex *pIni
1ef00 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f  tMutex;        /
1ef10 2a 20 4d 75 74 65 78 20 75 73 65 64 20 62 79 20  * Mutex used by 
1ef20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69  sqlite3_initiali
1ef30 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28  ze() */.  void (
1ef40 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74  *xLog)(void*,int
1ef50 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f  ,const char*); /
1ef60 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c  * Function for l
1ef70 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64  ogging */.  void
1ef80 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20   *pLogArg;      
1ef90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efa0 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
1efb0 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a  nt to xLog() */.
1efc0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
1efd0 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f  ABLE_SQLLOG.  vo
1efe0 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69  id(*xSqllog)(voi
1eff0 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
1f000 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20  t char*, int);. 
1f010 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72   void *pSqllogAr
1f020 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  g;.#endif.#ifdef
1f030 20 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56   SQLITE_VDBE_COV
1f040 45 52 41 47 45 0a 20 20 2f 2a 20 54 68 65 20 66  ERAGE.  /* The f
1f050 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63  ollowing callbac
1f060 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20  k (if not NULL) 
1f070 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76  is invoked on ev
1f080 65 72 79 20 56 44 42 45 20 62 72 61 6e 63 68 0a  ery VDBE branch.
1f090 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20    ** operation. 
1f0a0 20 53 65 74 20 74 68 65 20 63 61 6c 6c 62 61 63   Set the callbac
1f0b0 6b 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54  k using SQLITE_T
1f0c0 45 53 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56  ESTCTRL_VDBE_COV
1f0d0 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f  ERAGE..  */.  vo
1f0e0 69 64 20 28 2a 78 56 64 62 65 42 72 61 6e 63 68  id (*xVdbeBranch
1f0f0 29 28 76 6f 69 64 2a 2c 69 6e 74 20 69 53 72 63  )(void*,int iSrc
1f100 4c 69 6e 65 2c 75 38 20 65 54 68 69 73 2c 75 38  Line,u8 eThis,u8
1f110 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62   eMx);  /* Callb
1f120 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
1f130 56 64 62 65 42 72 61 6e 63 68 41 72 67 3b 20 20  VdbeBranchArg;  
1f140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f160 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65     /* 1st argume
1f170 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  nt */.#endif.#if
1f180 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1f190 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20  _BUILTIN_TEST.  
1f1a0 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c 62  int (*xTestCallb
1f1b0 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20 20  ack)(int);      
1f1c0 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20    /* Invoked by 
1f1d0 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28  sqlite3FaultSim(
1f1e0 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  ) */.#endif.  in
1f1f0 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c  t bLocaltimeFaul
1f200 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1f210 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20  /* True to fail 
1f220 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c  localtime() call
1f230 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  s */.};../*.** T
1f240 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65  his macro is use
1f250 64 20 69 6e 73 69 64 65 20 6f 66 20 61 73 73 65  d inside of asse
1f260 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
1f270 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61 74  to indicate that
1f280 0a 2a 2a 20 74 68 65 20 61 73 73 65 72 74 20 69  .** the assert i
1f290 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20  s only valid on 
1f2a0 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61  a well-formed da
1f2b0 74 61 62 61 73 65 2e 20 20 49 6e 73 74 65 61 64  tabase.  Instead
1f2c0 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61   of:.**.**     a
1f2d0 73 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a  ssert( X );.**.*
1f2e0 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a  * One writes:.**
1f2f0 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
1f300 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20  X || CORRUPT_DB 
1f310 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54  );.**.** CORRUPT
1f320 5f 44 42 20 69 73 20 74 72 75 65 20 64 75 72 69  _DB is true duri
1f330 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74  ng normal operat
1f340 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44 42  ion.  CORRUPT_DB
1f350 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63 61   does not indica
1f360 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64  te.** that the d
1f370 61 74 61 62 61 73 65 20 69 73 20 64 65 66 69 6e  atabase is defin
1f380 69 74 65 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f  itely corrupt, o
1f390 6e 6c 79 20 74 68 61 74 20 69 74 20 6d 69 67 68  nly that it migh
1f3a0 74 20 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a  t be corrupt..**
1f3b0 20 46 6f 72 20 6d 6f 73 74 20 74 65 73 74 20 63   For most test c
1f3c0 61 73 65 73 2c 20 43 4f 52 52 55 50 54 5f 44 42  ases, CORRUPT_DB
1f3d0 20 69 73 20 73 65 74 20 74 6f 20 66 61 6c 73 65   is set to false
1f3e0 20 75 73 69 6e 67 20 61 20 73 70 65 63 69 61 6c   using a special
1f3f0 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74  .** sqlite3_test
1f400 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69  _control().  Thi
1f410 73 20 65 6e 61 62 6c 65 73 20 61 73 73 65 72 74  s enables assert
1f420 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  () statements to
1f430 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73   prove.** things
1f440 20 74 68 61 74 20 61 72 65 20 61 6c 77 61 79 73   that are always
1f450 20 74 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66   true for well-f
1f460 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 73 2e  ormed databases.
1f470 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52 52  .*/.#define CORR
1f480 55 50 54 5f 44 42 20 20 28 73 71 6c 69 74 65 33  UPT_DB  (sqlite3
1f490 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72 72  Config.neverCorr
1f4a0 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43  upt==0)../*.** C
1f4b0 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70  ontext pointer p
1f4c0 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75  assed down throu
1f4d0 67 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b  gh the tree-walk
1f4e0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b  ..*/.struct Walk
1f4f0 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 45 78  er {.  int (*xEx
1f500 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b  prCallback)(Walk
1f510 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20  er*, Expr*);    
1f520 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72   /* Callback for
1f530 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
1f540 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43    int (*xSelectC
1f550 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a  allback)(Walker*
1f560 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43  ,Select*);  /* C
1f570 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45  allback for SELE
1f580 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  CTs */.  void (*
1f590 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32  xSelectCallback2
1f5a0 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74  )(Walker*,Select
1f5b0 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c  *);/* Second cal
1f5c0 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54  lback for SELECT
1f5d0 73 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50  s */.  Parse *pP
1f5e0 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  arse;           
1f5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f600 20 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65   /* Parser conte
1f610 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 77 61  xt.  */.  int wa
1f620 6c 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20 20  lkerDepth;      
1f630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f640 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1f650 20 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20   subqueries */. 
1f660 20 75 38 20 65 43 6f 64 65 3b 20 20 20 20 20 20   u8 eCode;      
1f670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f680 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
1f690 73 6d 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67  small processing
1f6a0 20 63 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e   code */.  union
1f6b0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
1f6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6d0 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61       /* Extra da
1f6e0 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20  ta for callback 
1f6f0 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65  */.    NameConte
1f700 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20  xt *pNC;        
1f710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f720 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74    /* Naming cont
1f730 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e  ext */.    int n
1f740 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f760 20 20 20 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74        /* A count
1f770 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  er */.    int iC
1f780 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ur;             
1f790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7a0 20 20 20 20 20 2f 2a 20 41 20 63 75 72 73 6f 72       /* A cursor
1f7b0 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 53   number */.    S
1f7c0 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74  rcList *pSrcList
1f7d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f7e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f            /* FRO
1f7f0 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  M clause */.    
1f800 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20  struct SrcCount 
1f810 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20  *pSrcCount;     
1f820 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
1f830 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65  unting column re
1f840 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20  ferences */.  } 
1f850 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72  u;.};../* Forwar
1f860 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a  d declarations *
1f870 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  /.int sqlite3Wal
1f880 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45  kExpr(Walker*, E
1f890 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
1f8a0 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57  e3WalkExprList(W
1f8b0 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74  alker*, ExprList
1f8c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
1f8d0 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72  alkSelect(Walker
1f8e0 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
1f8f0 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
1f900 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20  ctExpr(Walker*, 
1f910 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
1f920 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46  lite3WalkSelectF
1f930 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  rom(Walker*, Sel
1f940 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65  ect*);../*.** Re
1f950 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74  turn code from t
1f960 68 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61  he parse-tree wa
1f970 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73  lking primitives
1f980 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61   and their.** ca
1f990 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66  llbacks..*/.#def
1f9a0 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65  ine WRC_Continue
1f9b0 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69      0   /* Conti
1f9c0 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68  nue down into ch
1f9d0 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  ildren */.#defin
1f9e0 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20  e WRC_Prune     
1f9f0 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68    1   /* Omit ch
1fa00 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69  ildren but conti
1fa10 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c  nue walking sibl
1fa20 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ings */.#define 
1fa30 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20  WRC_Abort       
1fa40 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74  2   /* Abandon t
1fa50 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a  he tree walk */.
1fa60 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
1fa70 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
1fa80 74 75 72 65 20 72 65 70 72 65 73 65 6e 74 73 20  ture represents 
1fa90 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20  a set of one or 
1faa0 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f  more CTEs.** (co
1fab0 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
1fac0 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20  ssions) created 
1fad0 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48  by a single WITH
1fae0 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
1faf0 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20  ct With {.  int 
1fb00 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  nCte;           
1fb10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1fb20 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e  umber of CTEs in
1fb30 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
1fb40 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74   */.  With *pOut
1fb50 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
1fb60 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e        /* Contain
1fb70 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c  ing WITH clause,
1fb80 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74   or NULL */.  st
1fb90 72 75 63 74 20 43 74 65 20 7b 20 20 20 20 20 20  ruct Cte {      
1fba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1fbb0 20 46 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e   For each CTE in
1fbc0 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
1fbd0 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72  .... */.    char
1fbe0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
1fbf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1fc00 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45 20  ame of this CTE 
1fc10 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20  */.    ExprList 
1fc20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20  *pCols;         
1fc30 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
1fc40 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d  f explicit colum
1fc50 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c  n names, or NULL
1fc60 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
1fc70 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20  pSelect;        
1fc80 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
1fc90 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69  efinition of thi
1fca0 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e  s CTE */.    con
1fcb0 73 74 20 63 68 61 72 20 2a 7a 45 72 72 3b 20 20  st char *zErr;  
1fcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1fcd0 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f  Error message fo
1fce0 72 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72  r circular refer
1fcf0 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31  ences */.  } a[1
1fd00 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51  ];.};..#ifdef SQ
1fd10 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
1fd20 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1fd30 74 68 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a  the TreeView obj
1fd40 65 63 74 20 69 73 20 75 73 65 64 20 66 6f 72 20  ect is used for 
1fd50 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e  printing the con
1fd60 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20  tent of.** data 
1fd70 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71  structures on sq
1fd80 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
1fd90 28 29 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d  () using a tree-
1fda0 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74  like view..*/.st
1fdb0 72 75 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a  ruct TreeView {.
1fdc0 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20    int iLevel;   
1fdd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
1fde0 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20  ch level of the 
1fdf0 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a  tree we are on *
1fe00 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30  /.  u8  bLine[10
1fe10 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44  0];         /* D
1fe20 72 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20  raw vertical in 
1fe30 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e  column i if bLin
1fe40 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a  e[i] is true */.
1fe50 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  };.#endif /* SQL
1fe60 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a  ITE_DEBUG */../*
1fe70 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e  .** Assuming zIn
1fe80 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66   points to the f
1fe90 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 20 55  irst byte of a U
1fea0 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a  TF-8 character,.
1feb0 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74  ** advance zIn t
1fec0 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66  o point to the f
1fed0 69 72 73 74 20 62 79 74 65 20 6f 66 20 74 68 65  irst byte of the
1fee0 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61 72   next UTF-8 char
1fef0 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  acter..*/.#defin
1ff00 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54  e SQLITE_SKIP_UT
1ff10 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20  F8(zIn) {       
1ff20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff30 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b   \.  if( (*(zIn+
1ff40 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20  +))>=0xc0 ){    
1ff50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff60 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20            \.    
1ff70 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30  while( (*zIn & 0
1ff80 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49  xc0)==0x80 ){ zI
1ff90 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20  n++; }          
1ffa0 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20     \.  }        
1ffb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ffc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ffd0 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a              \.}.
1ffe0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
1fff0 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20  E_*_BKPT macros 
20000 61 72 65 20 73 75 62 73 74 69 74 75 74 65 73 20  are substitutes 
20010 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f  for the error co
20020 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20  des with.** the 
20030 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69  same name but wi
20040 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20  thout the _BKPT 
20050 73 75 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d  suffix.  These m
20060 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20  acros invoke.** 
20070 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72 65  routines that re
20080 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75  port the line-nu
20090 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68  mber on which th
200a0 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74  e error originat
200b0 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69  ed.** using sqli
200c0 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20  te3_log().  The 
200d0 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72  routines also pr
200e0 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65  ovide a convenie
200f0 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73  nt place.** to s
20100 65 74 20 61 20 64 65 62 75 67 67 65 72 20 62 72  et a debugger br
20110 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74  eakpoint..*/.int
20120 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45   sqlite3CorruptE
20130 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rror(int);.int s
20140 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f  qlite3MisuseErro
20150 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
20160 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72  te3CantopenError
20170 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53  (int);.#define S
20180 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
20190 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  PT sqlite3Corrup
201a0 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  tError(__LINE__)
201b0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
201c0 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69  MISUSE_BKPT sqli
201d0 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f  te3MisuseError(_
201e0 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65  _LINE__).#define
201f0 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e   SQLITE_CANTOPEN
20200 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e  _BKPT sqlite3Can
20210 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e  topenError(__LIN
20220 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53  E__).../*.** FTS
20230 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65  4 is really an e
20240 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53  xtension for FTS
20250 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65  3.  It is enable
20260 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53  d using the.** S
20270 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
20280 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f  3 macro.  But to
20290 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e   avoid confusion
202a0 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a   we also call.**
202b0 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
202c0 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74 6f  LE_FTS4 macro to
202d0 20 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c 69   serve as an ali
202e0 61 73 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e  as for SQLITE_EN
202f0 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69  ABLE_FTS3..*/.#i
20300 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
20310 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26  _ENABLE_FTS4) &&
20320 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
20330 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20  _ENABLE_FTS3).# 
20340 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
20350 41 42 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e 64  ABLE_FTS3 1.#end
20360 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74  if../*.** The ct
20370 79 70 65 2e 68 20 68 65 61 64 65 72 20 69 73 20  ype.h header is 
20380 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41  needed for non-A
20390 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20 49  SCII systems.  I
203a0 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65  t is also.** nee
203b0 64 65 64 20 62 79 20 46 54 53 33 20 77 68 65 6e  ded by FTS3 when
203c0 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64 65   FTS3 is include
203d0 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d  d in the amalgam
203e0 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64  ation..*/.#if !d
203f0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 53  efined(SQLITE_AS
20400 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64  CII) || \.    (d
20410 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
20420 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64 65  ABLE_FTS3) && de
20430 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d 41  fined(SQLITE_AMA
20440 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e  LGAMATION)).# in
20450 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a  clude <ctype.h>.
20460 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
20470 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
20480 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74 61  os mimic the sta
20490 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20 66 75  ndard library fu
204a0 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72 28  nctions toupper(
204b0 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29 2c  ),.** isspace(),
204c0 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69   isalnum(), isdi
204d0 67 69 74 28 29 20 61 6e 64 20 69 73 78 64 69 67  git() and isxdig
204e0 69 74 28 29 2c 20 72 65 73 70 65 63 74 69 76 65  it(), respective
204f0 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74  ly. The.** sqlit
20500 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20  e versions only 
20510 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20 63  work for ASCII c
20520 68 61 72 61 63 74 65 72 73 2c 20 72 65 67 61 72  haracters, regar
20530 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e  dless of locale.
20540 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
20550 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e 65  E_ASCII.# define
20560 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28   sqlite3Toupper(
20570 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69 74  x)  ((x)&~(sqlit
20580 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
20590 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
205a0 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20 73  x20)).# define s
205b0 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29  qlite3Isspace(x)
205c0 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
205d0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
205e0 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23 20  ar)(x)]&0x01).# 
205f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
20600 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c 69  alnum(x)   (sqli
20610 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
20620 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
20630 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20 73  0x06).# define s
20640 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29  qlite3Isalpha(x)
20650 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
20660 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
20670 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23 20  ar)(x)]&0x02).# 
20680 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
20690 64 69 67 69 74 28 78 29 20 20 20 28 73 71 6c 69  digit(x)   (sqli
206a0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
206b0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
206c0 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20 73  0x04).# define s
206d0 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78  qlite3Isxdigit(x
206e0 29 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65  )  (sqlite3Ctype
206f0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
20700 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23 20  ar)(x)]&0x08).# 
20710 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
20720 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c 69  lower(x)   (sqli
20730 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b  te3UpperToLower[
20740 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
20750 78 29 5d 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  x)]).#else.# def
20760 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70  ine sqlite3Toupp
20770 65 72 28 78 29 20 20 20 74 6f 75 70 70 65 72 28  er(x)   toupper(
20780 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
20790 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
207a0 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20  ite3Isspace(x)  
207b0 20 69 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e   isspace((unsign
207c0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
207d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
207e0 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75  lnum(x)   isalnu
207f0 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  m((unsigned char
20800 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
20810 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29  qlite3Isalpha(x)
20820 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69     isalpha((unsi
20830 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
20840 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
20850 73 64 69 67 69 74 28 78 29 20 20 20 69 73 64 69  sdigit(x)   isdi
20860 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68  git((unsigned ch
20870 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
20880 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74   sqlite3Isxdigit
20890 28 78 29 20 20 69 73 78 64 69 67 69 74 28 28 75  (x)  isxdigit((u
208a0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
208b0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
208c0 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74  e3Tolower(x)   t
208d0 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64  olower((unsigned
208e0 20 63 68 61 72 29 28 78 29 29 0a 23 65 6e 64 69   char)(x)).#endi
208f0 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 49  f.int sqlite3IsI
20900 64 43 68 61 72 28 75 38 29 3b 0a 0a 2f 2a 0a 2a  dChar(u8);../*.*
20910 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74  * Internal funct
20920 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a  ion prototypes.*
20930 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  /.#define sqlite
20940 33 53 74 72 49 43 6d 70 20 73 71 6c 69 74 65 33  3StrICmp sqlite3
20950 5f 73 74 72 69 63 6d 70 0a 69 6e 74 20 73 71 6c  _stricmp.int sql
20960 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e  ite3Strlen30(con
20970 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69  st char*);.#defi
20980 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  ne sqlite3StrNIC
20990 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69  mp sqlite3_strni
209a0 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  cmp..int sqlite3
209b0 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29  MallocInit(void)
209c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ;.void sqlite3Ma
209d0 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76  llocEnd(void);.v
209e0 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
209f0 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  oc(u64);.void *s
20a00 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f  qlite3MallocZero
20a10 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (u64);.void *sql
20a20 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
20a30 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b  (sqlite3*, u64);
20a40 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
20a50 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65  MallocRaw(sqlite
20a60 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a  3*, u64);.char *
20a70 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
20a80 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
20a90 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  har*);.char *sql
20aa0 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71  ite3DbStrNDup(sq
20ab0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
20ac0 72 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a  r*, u64);.void *
20ad0 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76  sqlite3Realloc(v
20ae0 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  oid*, u64);.void
20af0 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
20b00 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33  ocOrFree(sqlite3
20b10 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29   *, void *, u64)
20b20 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
20b30 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33  bRealloc(sqlite3
20b40 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29   *, void *, u64)
20b50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62  ;.void sqlite3Db
20b60 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76  Free(sqlite3*, v
20b70 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
20b80 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69  e3MallocSize(voi
20b90 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
20ba0 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c  DbMallocSize(sql
20bb0 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76  ite3*, void*);.v
20bc0 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61  oid *sqlite3Scra
20bd0 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  tchMalloc(int);.
20be0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72 61  void sqlite3Scra
20bf0 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a  tchFree(void*);.
20c00 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67  void *sqlite3Pag
20c10 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f  eMalloc(int);.vo
20c20 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72  id sqlite3PageFr
20c30 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  ee(void*);.void 
20c40 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66  sqlite3MemSetDef
20c50 61 75 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ault(void);.void
20c60 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61   sqlite3BenignMa
20c70 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28  llocHooks(void (
20c80 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28  *)(void), void (
20c90 2a 29 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20 73  *)(void));.int s
20ca0 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79  qlite3HeapNearly
20cb0 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a  Full(void);../*.
20cc0 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69  ** On systems wi
20cd0 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73  th ample stack s
20ce0 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73 75  pace and that su
20cf0 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20  pport alloca(), 
20d00 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61  make.** use of a
20d10 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69  lloca() to obtai
20d20 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67  n space for larg
20d30 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65  e automatic obje
20d40 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74  cts.  By default
20d50 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63  ,.** obtain spac
20d60 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e  e from malloc().
20d70 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63  .**.** The alloc
20d80 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65  a() routine neve
20d90 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20  r returns NULL. 
20da0 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65   This will cause
20db0 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74   code paths.** t
20dc0 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73 71  hat deal with sq
20dd0 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28  lite3StackAlloc(
20de0 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65  ) failures to be
20df0 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f   unreachable..*/
20e00 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
20e10 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69  SE_ALLOCA.# defi
20e20 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
20e30 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61  llocRaw(D,N)   a
20e40 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e  lloca(N).# defin
20e50 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
20e60 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65  locZero(D,N)  me
20e70 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20  mset(alloca(N), 
20e80 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  0, N).# define s
20e90 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28  qlite3StackFree(
20ea0 44 2c 50 29 20 20 20 20 20 20 20 0a 23 65 6c 73  D,P)       .#els
20eb0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
20ec0 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28  e3StackAllocRaw(
20ed0 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62  D,N)   sqlite3Db
20ee0 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23  MallocRaw(D,N).#
20ef0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
20f00 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c  tackAllocZero(D,
20f10 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  N)  sqlite3DbMal
20f20 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64  locZero(D,N).# d
20f30 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
20f40 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20  ckFree(D,P)     
20f50 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
20f60 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  D,P).#endif..#if
20f70 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
20f80 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20  E_MEMSYS3.const 
20f90 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
20fa0 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47  ods *sqlite3MemG
20fb0 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b  etMemsys3(void);
20fc0 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
20fd0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
20fe0 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74  SYS5.const sqlit
20ff0 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a  e3_mem_methods *
21000 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d  sqlite3MemGetMem
21010 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64  sys5(void);.#end
21020 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  if...#ifndef SQL
21030 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20  ITE_MUTEX_OMIT. 
21040 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
21050 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71  ethods const *sq
21060 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65  lite3DefaultMute
21070 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74  x(void);.  sqlit
21080 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
21090 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e   const *sqlite3N
210a0 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  oopMutex(void);.
210b0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
210c0 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c  *sqlite3MutexAll
210d0 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  oc(int);.  int s
210e0 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28  qlite3MutexInit(
210f0 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c  void);.  int sql
21100 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69  ite3MutexEnd(voi
21110 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  d);.#endif..int 
21120 73 71 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c  sqlite3StatusVal
21130 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  ue(int);.void sq
21140 6c 69 74 65 33 53 74 61 74 75 73 41 64 64 28 69  lite3StatusAdd(i
21150 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
21160 71 6c 69 74 65 33 53 74 61 74 75 73 53 65 74 28  qlite3StatusSet(
21170 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 6e  int, int);..#ifn
21180 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
21190 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
211a0 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61   int sqlite3IsNa
211b0 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65  N(double);.#else
211c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
211d0 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e  3IsNaN(X)  0.#en
211e0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
211f0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
21200 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
21210 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74  e holds informat
21220 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a  ion about SQL.**
21230 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d   functions argum
21240 65 6e 74 73 20 74 68 61 74 20 61 72 65 20 74 68  ents that are th
21250 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20  e parameters to 
21260 74 68 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e  the printf() fun
21270 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ction..*/.struct
21280 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73   PrintfArguments
21290 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20   {.  int nArg;  
212a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
212b0 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   Total number of
212c0 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
212d0 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20  int nUsed;      
212e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
212f0 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
21300 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
21310 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
21320 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65  *apArg;   /* The
21330 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73   argument values
21340 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65 20   */.};..#define 
21350 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e  SQLITE_PRINTF_IN
21360 54 45 52 4e 41 4c 20 30 78 30 31 0a 23 64 65 66  TERNAL 0x01.#def
21370 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  ine SQLITE_PRINT
21380 46 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32 0a  F_SQLFUNC  0x02.
21390 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50 72  void sqlite3VXPr
213a0 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20  intf(StrAccum*, 
213b0 75 33 32 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  u32, const char*
213c0 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f 69 64  , va_list);.void
213d0 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28   sqlite3XPrintf(
213e0 53 74 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c 20  StrAccum*, u32, 
213f0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
21400 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
21410 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a  MPrintf(sqlite3*
21420 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e  ,const char*, ..
21430 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  .);.char *sqlite
21440 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65  3VMPrintf(sqlite
21450 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
21460 76 61 5f 6c 69 73 74 29 3b 0a 63 68 61 72 20 2a  va_list);.char *
21470 73 71 6c 69 74 65 33 4d 41 70 70 65 6e 64 66 28  sqlite3MAppendf(
21480 73 71 6c 69 74 65 33 2a 2c 63 68 61 72 2a 2c 63  sqlite3*,char*,c
21490 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
214a0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
214b0 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 64 65 66  ITE_TEST) || def
214c0 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
214d0 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  G).  void sqlite
214e0 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e  3DebugPrintf(con
214f0 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
21500 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
21510 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a  ed(SQLITE_TEST).
21520 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54    void *sqlite3T
21530 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e  estTextToPtr(con
21540 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  st char*);.#endi
21550 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
21560 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20 54  QLITE_DEBUG).  T
21570 72 65 65 56 69 65 77 20 2a 73 71 6c 69 74 65 33  reeView *sqlite3
21580 54 72 65 65 56 69 65 77 50 75 73 68 28 54 72 65  TreeViewPush(Tre
21590 65 56 69 65 77 2a 2c 75 38 29 3b 0a 20 20 76 6f  eView*,u8);.  vo
215a0 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
215b0 65 77 50 6f 70 28 54 72 65 65 56 69 65 77 2a 29  ewPop(TreeView*)
215c0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
215d0 54 72 65 65 56 69 65 77 4c 69 6e 65 28 54 72 65  TreeViewLine(Tre
215e0 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 63 68  eView*, const ch
215f0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 76 6f 69  ar*, ...);.  voi
21600 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
21610 77 49 74 65 6d 28 54 72 65 65 56 69 65 77 2a 2c  wItem(TreeView*,
21620 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 38   const char*, u8
21630 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
21640 33 54 72 65 65 56 69 65 77 45 78 70 72 28 54 72  3TreeViewExpr(Tr
21650 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45  eeView*, const E
21660 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69  xpr*, u8);.  voi
21670 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
21680 77 45 78 70 72 4c 69 73 74 28 54 72 65 65 56 69  wExprList(TreeVi
21690 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c  ew*, const ExprL
216a0 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20  ist*, u8, const 
216b0 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
216c0 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 53 65  qlite3TreeViewSe
216d0 6c 65 63 74 28 54 72 65 65 56 69 65 77 2a 2c 20  lect(TreeView*, 
216e0 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20 75  const Select*, u
216f0 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69  8);.#endif...voi
21700 64 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69  d sqlite3SetStri
21710 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69  ng(char **, sqli
21720 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  te3*, const char
21730 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  *, ...);.void sq
21740 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61  lite3ErrorMsg(Pa
21750 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
21760 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c  *, ...);.int sql
21770 69 74 65 33 44 65 71 75 6f 74 65 28 63 68 61 72  ite3Dequote(char
21780 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b  *);.int sqlite3K
21790 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74  eywordCode(const
217a0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c   unsigned char*,
217b0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
217c0 65 33 52 75 6e 50 61 72 73 65 72 28 50 61 72 73  e3RunParser(Pars
217d0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
217e0 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20   char **);.void 
217f0 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64  sqlite3FinishCod
21800 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74  ing(Parse*);.int
21810 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52   sqlite3GetTempR
21820 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  eg(Parse*);.void
21830 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54   sqlite3ReleaseT
21840 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e  empReg(Parse*,in
21850 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  t);.int sqlite3G
21860 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73  etTempRange(Pars
21870 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
21880 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70  lite3ReleaseTemp
21890 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
218a0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
218b0 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43  te3ClearTempRegC
218c0 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a 45 78  ache(Parse*);.Ex
218d0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
218e0 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e  lloc(sqlite3*,in
218f0 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69  t,const Token*,i
21900 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
21910 65 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c  e3Expr(sqlite3*,
21920 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
21930 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
21940 70 72 41 74 74 61 63 68 53 75 62 74 72 65 65 73  prAttachSubtrees
21950 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
21960 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78  Expr*,Expr*);.Ex
21970 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72  pr *sqlite3PExpr
21980 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78  (Parse*, int, Ex
21990 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73  pr*, Expr*, cons
219a0 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20  t Token*);.Expr 
219b0 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28  *sqlite3ExprAnd(
219c0 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20  sqlite3*,Expr*, 
219d0 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  Expr*);.Expr *sq
219e0 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f  lite3ExprFunctio
219f0 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  n(Parse*,ExprLis
21a00 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  t*, Token*);.voi
21a10 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 73 73  d sqlite3ExprAss
21a20 69 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72  ignVarNumber(Par
21a30 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
21a40 64 20 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c  d sqlite3ExprDel
21a50 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78  ete(sqlite3*, Ex
21a60 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a  pr*);.ExprList *
21a70 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41  sqlite3ExprListA
21a80 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70  ppend(Parse*,Exp
21a90 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76  rList*,Expr*);.v
21aa0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
21ab0 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65  istSetName(Parse
21ac0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65  *,ExprList*,Toke
21ad0 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  n*,int);.void sq
21ae0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74  lite3ExprListSet
21af0 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72  Span(Parse*,Expr
21b00 4c 69 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a 29  List*,ExprSpan*)
21b10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
21b20 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c  prListDelete(sql
21b30 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a  ite3*, ExprList*
21b40 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 45 78  );.u32 sqlite3Ex
21b50 70 72 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e 73  prListFlags(cons
21b60 74 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  t ExprList*);.in
21b70 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71  t sqlite3Init(sq
21b80 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b  lite3*, char**);
21b90 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74  .int sqlite3Init
21ba0 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20  Callback(void*, 
21bb0 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61  int, char**, cha
21bc0 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  r**);.void sqlit
21bd0 65 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c  e3Pragma(Parse*,
21be0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Token*,Token*,To
21bf0 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ken*,int);.void 
21c00 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53  sqlite3ResetAllS
21c10 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69  chemasOfConnecti
21c20 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  on(sqlite3*);.vo
21c30 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f  id sqlite3ResetO
21c40 6e 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33  neSchema(sqlite3
21c50 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
21c60 69 74 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61  ite3CollapseData
21c70 62 61 73 65 41 72 72 61 79 28 73 71 6c 69 74 65  baseArray(sqlite
21c80 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
21c90 33 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73  3BeginParse(Pars
21ca0 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
21cb0 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72  lite3CommitInter
21cc0 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74  nalChanges(sqlit
21cd0 65 33 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  e3*);.Table *sql
21ce0 69 74 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53  ite3ResultSetOfS
21cf0 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c  elect(Parse*,Sel
21d00 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ect*);.void sqli
21d10 74 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62  te3OpenMasterTab
21d20 6c 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29  le(Parse *, int)
21d30 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
21d40 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28  PrimaryKeyIndex(
21d50 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c  Table*);.i16 sql
21d60 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65  ite3ColumnOfInde
21d70 78 28 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a  x(Index*, i16);.
21d80 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 72  void sqlite3Star
21d90 74 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f  tTable(Parse*,To
21da0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c  ken*,Token*,int,
21db0 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f  int,int,int);.vo
21dc0 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c  id sqlite3AddCol
21dd0 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  umn(Parse*,Token
21de0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21df0 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65  AddNotNull(Parse
21e00 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
21e10 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b  lite3AddPrimaryK
21e20 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  ey(Parse*, ExprL
21e30 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ist*, int, int, 
21e40 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21e50 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72  e3AddCheckConstr
21e60 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70  aint(Parse*, Exp
21e70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
21e80 33 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 28 50  3AddColumnType(P
21e90 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76  arse*,Token*);.v
21ea0 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 44 65  oid sqlite3AddDe
21eb0 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65  faultValue(Parse
21ec0 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f  *,ExprSpan*);.vo
21ed0 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c  id sqlite3AddCol
21ee0 6c 61 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c  lateType(Parse*,
21ef0 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
21f00 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50  qlite3EndTable(P
21f10 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
21f20 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b  en*,u8,Select*);
21f30 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73  .int sqlite3Pars
21f40 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a  eUri(const char*
21f50 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73  ,const char*,uns
21f60 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20  igned int*,.    
21f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f80 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68  sqlite3_vfs**,ch
21f90 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42  ar**,char **);.B
21fa0 74 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e  tree *sqlite3DbN
21fb0 61 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74  ameToBtree(sqlit
21fc0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  e3*,const char*)
21fd0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64  ;.int sqlite3Cod
21fe0 65 4f 6e 63 65 28 50 61 72 73 65 20 2a 29 3b 0a  eOnce(Parse *);.
21ff0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
22000 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
22010 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
22020 33 46 61 75 6c 74 53 69 6d 28 58 29 20 53 51 4c  3FaultSim(X) SQL
22030 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69  ITE_OK.#else.  i
22040 6e 74 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  nt sqlite3FaultS
22050 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  im(int);.#endif.
22060 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33  .Bitvec *sqlite3
22070 42 69 74 76 65 63 43 72 65 61 74 65 28 75 33 32  BitvecCreate(u32
22080 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
22090 74 76 65 63 54 65 73 74 28 42 69 74 76 65 63 2a  tvecTest(Bitvec*
220a0 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  , u32);.int sqli
220b0 74 65 33 42 69 74 76 65 63 53 65 74 28 42 69 74  te3BitvecSet(Bit
220c0 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64  vec*, u32);.void
220d0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c   sqlite3BitvecCl
220e0 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32  ear(Bitvec*, u32
220f0 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  , void*);.void s
22100 71 6c 69 74 65 33 42 69 74 76 65 63 44 65 73 74  qlite3BitvecDest
22110 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33  roy(Bitvec*);.u3
22120 32 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53  2 sqlite3BitvecS
22130 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 69 6e  ize(Bitvec*);.in
22140 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42  t sqlite3BitvecB
22150 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69  uiltinTest(int,i
22160 6e 74 2a 29 3b 0a 0a 52 6f 77 53 65 74 20 2a 73  nt*);..RowSet *s
22170 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74  qlite3RowSetInit
22180 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
22190 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b  , unsigned int);
221a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
221b0 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a  SetClear(RowSet*
221c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
221d0 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53  owSetInsert(RowS
221e0 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  et*, i64);.int s
221f0 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74  qlite3RowSetTest
22200 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42  (RowSet*, int iB
22210 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20  atch, i64);.int 
22220 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78  sqlite3RowSetNex
22230 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29  t(RowSet*, i64*)
22240 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  ;..void sqlite3C
22250 72 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a  reateView(Parse*
22260 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54  ,Token*,Token*,T
22270 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e  oken*,Select*,in
22280 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65  t,int);..#if !de
22290 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
222a0 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69  T_VIEW) || !defi
222b0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
222c0 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20  VIRTUALTABLE).  
222d0 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77 47  int sqlite3ViewG
222e0 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61  etColumnNames(Pa
222f0 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65  rse*,Table*);.#e
22300 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
22310 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
22320 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65  nNames(A,B) 0.#e
22330 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45  ndif..#if SQLITE
22340 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30  _MAX_ATTACHED>30
22350 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62  .  int sqlite3Db
22360 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d  MaskAllZero(yDbM
22370 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ask);.#endif.voi
22380 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62  d sqlite3DropTab
22390 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
223a0 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
223b0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
223c0 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
223d0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
223e0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
223f0 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c  3DeleteTable(sql
22400 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ite3*, Table*);.
22410 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
22420 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
22430 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
22440 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67  AutoincrementBeg
22450 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  in(Parse *pParse
22460 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
22470 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e  3AutoincrementEn
22480 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  d(Parse *pParse)
22490 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
224a0 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
224b0 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20  ementBegin(X).# 
224c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
224d0 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58  toincrementEnd(X
224e0 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
224f0 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61 72 73  lite3Insert(Pars
22500 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65  e*, SrcList*, Se
22510 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20  lect*, IdList*, 
22520 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
22530 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65  te3ArrayAllocate
22540 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c  (sqlite3*,void*,
22550 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a  int,int*,int*);.
22560 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49  IdList *sqlite3I
22570 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69  dListAppend(sqli
22580 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54  te3*, IdList*, T
22590 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
225a0 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49  te3IdListIndex(I
225b0 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  dList*,const cha
225c0 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  r*);.SrcList *sq
225d0 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61  lite3SrcListEnla
225e0 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  rge(sqlite3*, Sr
225f0 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  cList*, int, int
22600 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
22610 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64  te3SrcListAppend
22620 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
22630 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
22640 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  en*);.SrcList *s
22650 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70  qlite3SrcListApp
22660 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73  endFromTerm(Pars
22670 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
22680 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20  ken*, Token*,.  
22690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226b0 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65      Token*, Sele
226c0 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69  ct*, Expr*, IdLi
226d0 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
226e0 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64  e3SrcListIndexed
226f0 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  By(Parse *, SrcL
22700 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b  ist *, Token *);
22710 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65  .int sqlite3Inde
22720 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73  xedByLookup(Pars
22730 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c  e *, struct SrcL
22740 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69  ist_item *);.voi
22750 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
22760 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72  ShiftJoinType(Sr
22770 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  cList*);.void sq
22780 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73 73 69  lite3SrcListAssi
22790 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a  gnCursors(Parse*
227a0 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69  , SrcList*);.voi
227b0 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44  d sqlite3IdListD
227c0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
227d0 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  IdList*);.void s
227e0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c  qlite3SrcListDel
227f0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  ete(sqlite3*, Sr
22800 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a  cList*);.Index *
22810 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49  sqlite3AllocateI
22820 6e 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74  ndexObject(sqlit
22830 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72  e3*,i16,int,char
22840 2a 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  **);.Index *sqli
22850 74 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50  te3CreateIndex(P
22860 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
22870 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  en*,SrcList*,Exp
22880 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e  rList*,int,Token
22890 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
228a0 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
228b0 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
228c0 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49  oid sqlite3DropI
228d0 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63  ndex(Parse*, Src
228e0 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  List*, int);.int
228f0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50   sqlite3Select(P
22900 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
22910 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65  SelectDest*);.Se
22920 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c  lect *sqlite3Sel
22930 65 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78  ectNew(Parse*,Ex
22940 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a  prList*,SrcList*
22950 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
22960 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
22970 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a             Expr*
22980 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45  ,ExprList*,u16,E
22990 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69  xpr*,Expr*);.voi
229a0 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
229b0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
229c0 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20  Select*);.Table 
229d0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c  *sqlite3SrcListL
229e0 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72  ookup(Parse*, Sr
229f0 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  cList*);.int sql
22a00 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50  ite3IsReadOnly(P
22a10 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
22a20 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
22a30 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65  3OpenTable(Parse
22a40 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74  *, int iCur, int
22a50 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e   iDb, Table*, in
22a60 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  t);.#if defined(
22a70 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50  SQLITE_ENABLE_UP
22a80 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49  DATE_DELETE_LIMI
22a90 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
22aa0 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55  QLITE_OMIT_SUBQU
22ab0 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74  ERY).Expr *sqlit
22ac0 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72  e3LimitWhere(Par
22ad0 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  se*,SrcList*,Exp
22ae0 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  r*,ExprList*,Exp
22af0 72 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b  r*,Expr*,char*);
22b00 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
22b10 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50  ite3DeleteFrom(P
22b20 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
22b30 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
22b40 6c 69 74 65 33 55 70 64 61 74 65 28 50 61 72 73  lite3Update(Pars
22b50 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
22b60 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20  prList*, Expr*, 
22b70 69 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20  int);.WhereInfo 
22b80 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67  *sqlite3WhereBeg
22b90 69 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73  in(Parse*,SrcLis
22ba0 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
22bb0 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36  t*,ExprList*,u16
22bc0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
22bd0 74 65 33 57 68 65 72 65 45 6e 64 28 57 68 65 72  te3WhereEnd(Wher
22be0 65 49 6e 66 6f 2a 29 3b 0a 75 36 34 20 73 71 6c  eInfo*);.u64 sql
22bf0 69 74 65 33 57 68 65 72 65 4f 75 74 70 75 74 52  ite3WhereOutputR
22c00 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66  owCount(WhereInf
22c10 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
22c20 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28  WhereIsDistinct(
22c30 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
22c40 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f   sqlite3WhereIsO
22c50 72 64 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f  rdered(WhereInfo
22c60 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
22c70 68 65 72 65 49 73 53 6f 72 74 65 64 28 57 68 65  hereIsSorted(Whe
22c80 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
22c90 6c 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e  lite3WhereContin
22ca0 75 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66  ueLabel(WhereInf
22cb0 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
22cc0 57 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28  WhereBreakLabel(
22cd0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
22ce0 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f   sqlite3WhereOkO
22cf0 6e 65 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f  nePass(WhereInfo
22d00 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
22d10 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
22d20 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54  Column(Parse*, T
22d30 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
22d40 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20   int, u8);.void 
22d50 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
22d60 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28  etColumnOfTable(
22d70 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  Vdbe*, Table*, i
22d80 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
22d90 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
22da0 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20  odeMove(Parse*, 
22db0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
22dc0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
22dd0 43 61 63 68 65 53 74 6f 72 65 28 50 61 72 73 65  CacheStore(Parse
22de0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
22df0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
22e00 78 70 72 43 61 63 68 65 50 75 73 68 28 50 61 72  xprCachePush(Par
22e10 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
22e20 65 33 45 78 70 72 43 61 63 68 65 50 6f 70 28 50  e3ExprCachePop(P
22e30 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
22e40 69 74 65 33 45 78 70 72 43 61 63 68 65 52 65 6d  ite3ExprCacheRem
22e50 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ove(Parse*, int,
22e60 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
22e70 74 65 33 45 78 70 72 43 61 63 68 65 43 6c 65 61  te3ExprCacheClea
22e80 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  r(Parse*);.void 
22e90 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
22ea0 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50  AffinityChange(P
22eb0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
22ec0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
22ed0 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45  prCode(Parse*, E
22ee0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
22ef0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
22f00 46 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65  Factorable(Parse
22f10 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
22f20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
22f30 43 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73 65  CodeAtInit(Parse
22f40 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75  *, Expr*, int, u
22f50 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  8);.int sqlite3E
22f60 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73  xprCodeTemp(Pars
22f70 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29  e*, Expr*, int*)
22f80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
22f90 72 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73  rCodeTarget(Pars
22fa0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
22fb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
22fc0 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61  rCodeAndCache(Pa
22fd0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
22fe0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
22ff0 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50  prCodeExprList(P
23000 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
23010 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66  , int, u8);.#def
23020 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
23030 44 55 50 20 20 20 20 20 20 30 78 30 31 20 20 2f  DUP      0x01  /
23040 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c  * Deep, not shal
23050 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64  low copies */.#d
23060 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45  efine SQLITE_ECE
23070 4c 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32 20  L_FACTOR   0x02 
23080 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63   /* Factor out c
23090 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f  onstant terms */
230a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
230b0 72 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20  rIfTrue(Parse*, 
230c0 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
230d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
230e0 70 72 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a  prIfFalse(Parse*
230f0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e  , Expr*, int, in
23100 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  t);.Table *sqlit
23110 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69  e3FindTable(sqli
23120 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
23130 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
23140 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f  Table *sqlite3Lo
23150 63 61 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a  cateTable(Parse*
23160 2c 69 6e 74 20 69 73 56 69 65 77 2c 63 6f 6e 73  ,int isView,cons
23170 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
23180 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  har*);.Table *sq
23190 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65  lite3LocateTable
231a0 49 74 65 6d 28 50 61 72 73 65 2a 2c 69 6e 74 20  Item(Parse*,int 
231b0 69 73 56 69 65 77 2c 73 74 72 75 63 74 20 53 72  isView,struct Sr
231c0 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49  cList_item *);.I
231d0 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e  ndex *sqlite3Fin
231e0 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  dIndex(sqlite3*,
231f0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
23200 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
23210 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
23220 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69  DeleteTable(sqli
23230 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
23240 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
23250 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
23260 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a  teIndex(sqlite3*
23270 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
23280 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
23290 61 63 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69  acuum(Parse*);.i
232a0 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63  nt sqlite3RunVac
232b0 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69  uum(char**, sqli
232c0 74 65 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  te3*);.char *sql
232d0 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65  ite3NameFromToke
232e0 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65  n(sqlite3*, Toke
232f0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
23300 45 78 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72  ExprCompare(Expr
23310 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
23320 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c  int sqlite3ExprL
23330 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c  istCompare(ExprL
23340 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
23350 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
23360 65 33 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70  e3ExprImpliesExp
23370 72 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  r(Expr*, Expr*, 
23380 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
23390 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67  e3ExprAnalyzeAgg
233a0 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74  regates(NameCont
233b0 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ext*, Expr*);.vo
233c0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e  id sqlite3ExprAn
233d0 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d  alyzeAggList(Nam
233e0 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69  eContext*,ExprLi
233f0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
23400 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69  3FunctionUsesThi
23410 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c  sSrc(Expr*, SrcL
23420 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c  ist*);.Vdbe *sql
23430 69 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73  ite3GetVdbe(Pars
23440 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
23450 33 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76  3PrngSaveState(v
23460 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
23470 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61  e3PrngRestoreSta
23480 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  te(void);.void s
23490 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
234a0 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  l(sqlite3*,int);
234b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
234c0 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50 61  eVerifySchema(Pa
234d0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
234e0 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
234f0 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61  fyNamedSchema(Pa
23500 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
23510 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c   *zDb);.void sql
23520 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63  ite3BeginTransac
23530 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
23540 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
23550 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f 6e  ommitTransaction
23560 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
23570 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72  qlite3RollbackTr
23580 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a  ansaction(Parse*
23590 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
235a0 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c  avepoint(Parse*,
235b0 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76   int, Token*);.v
235c0 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  oid sqlite3Close
235d0 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74  Savepoints(sqlit
235e0 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e3 *);.void sqli
235f0 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64  te3LeaveMutexAnd
23600 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69  CloseZombie(sqli
23610 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
23620 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
23630 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
23640 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
23650 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29  ntNotJoin(Expr*)
23660 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
23670 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e  rIsConstantOrFun
23680 63 74 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29  ction(Expr*, u8)
23690 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
236a0 72 49 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e 74  rIsTableConstant
236b0 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 69 6e 74  (Expr*,int);.int
236c0 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 49 6e   sqlite3ExprIsIn
236d0 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e 74  teger(Expr*, int
236e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
236f0 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e  xprCanBeNull(con
23700 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  st Expr*);.int s
23710 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e  qlite3ExprNeedsN
23720 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28  oAffinityChange(
23730 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61  const Expr*, cha
23740 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  r);.int sqlite3I
23750 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61  sRowid(const cha
23760 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
23770 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65  3GenerateRowDele
23780 74 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  te(Parse*,Table*
23790 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e  ,Trigger*,int,in
237a0 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c  t,int,i16,u8,u8,
237b0 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
237c0 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65  3GenerateRowInde
237d0 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20  xDelete(Parse*, 
237e0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
237f0 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
23800 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65  ite3GenerateInde
23810 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64  xKey(Parse*, Ind
23820 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  ex*, int, int, i
23830 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c  nt, int*,Index*,
23840 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
23850 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78  e3ResolvePartIdx
23860 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74  Label(Parse*,int
23870 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
23880 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e  enerateConstrain
23890 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54  tChecks(Parse*,T
238a0 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69  able*,int*,int,i
238b0 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20  nt,int,int,.    
238c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238e0 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2c 69   u8,u8,int,int,i
238f0 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  nt*);.void sqlit
23900 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74  e3CompleteInsert
23910 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  ion(Parse*,Table
23920 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
23930 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69  t,int*,int,int,i
23940 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
23950 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69  OpenTableAndIndi
23960 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ces(Parse*, Tabl
23970 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  e*, int, int, u8
23980 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a  *, int*, int*);.
23990 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
239a0 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28  nWriteOperation(
239b0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
239c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
239d0 75 6c 74 69 57 72 69 74 65 28 50 61 72 73 65 2a  ultiWrite(Parse*
239e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
239f0 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b  ayAbort(Parse*);
23a00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c  .void sqlite3Hal
23a10 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  tConstraint(Pars
23a20 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68  e*, int, int, ch
23a30 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f  ar*, i8, u8);.vo
23a40 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65  id sqlite3Unique
23a50 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
23a60 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b  *, int, Index*);
23a70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
23a80 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  idConstraint(Par
23a90 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a  se*, int, Table*
23aa0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
23ab0 45 78 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a  ExprDup(sqlite3*
23ac0 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70  ,Expr*,int);.Exp
23ad0 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
23ae0 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  prListDup(sqlite
23af0 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  3*,ExprList*,int
23b00 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
23b10 74 65 33 53 72 63 4c 69 73 74 44 75 70 28 73 71  te3SrcListDup(sq
23b20 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c  lite3*,SrcList*,
23b30 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71  int);.IdList *sq
23b40 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70 28 73  lite3IdListDup(s
23b50 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29  qlite3*,IdList*)
23b60 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65  ;.Select *sqlite
23b70 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74  3SelectDup(sqlit
23b80 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29  e3*,Select*,int)
23b90 3b 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43  ;.#if SELECTTRAC
23ba0 45 5f 45 4e 41 42 4c 45 44 0a 76 6f 69 64 20 73  E_ENABLED.void s
23bb0 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e  qlite3SelectSetN
23bc0 61 6d 65 28 53 65 6c 65 63 74 2a 2c 63 6f 6e 73  ame(Select*,cons
23bd0 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a  t char*);.#else.
23be0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
23bf0 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 41 2c  SelectSetName(A,
23c00 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  B).#endif.void s
23c10 71 6c 69 74 65 33 46 75 6e 63 44 65 66 49 6e 73  qlite3FuncDefIns
23c20 65 72 74 28 46 75 6e 63 44 65 66 48 61 73 68 2a  ert(FuncDefHash*
23c30 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a 46 75 6e  , FuncDef*);.Fun
23c40 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e  cDef *sqlite3Fin
23c50 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
23c60 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  3*,const char*,i
23c70 6e 74 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76  nt,int,u8,u8);.v
23c80 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
23c90 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  terBuiltinFuncti
23ca0 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ons(sqlite3*);.v
23cb0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
23cc0 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74  terDateTimeFunct
23cd0 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ions(void);.void
23ce0 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
23cf0 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 28  GlobalFunctions(
23d00 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74  void);.int sqlit
23d10 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28  e3SafetyCheckOk(
23d20 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
23d30 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
23d40 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65  kSickOrOk(sqlite
23d50 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
23d60 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61  3ChangeCookie(Pa
23d70 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66  rse*, int);..#if
23d80 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
23d90 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21  _OMIT_VIEW) && !
23da0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
23db0 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69  MIT_TRIGGER).voi
23dc0 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61  d sqlite3Materia
23dd0 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c  lizeView(Parse*,
23de0 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20   Table*, Expr*, 
23df0 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  int);.#endif..#i
23e00 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
23e10 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64  T_TRIGGER.  void
23e20 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69   sqlite3BeginTri
23e30 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b  gger(Parse*, Tok
23e40 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69  en*,Token*,int,i
23e50 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69  nt,IdList*,SrcLi
23e60 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
23e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e80 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b  Expr*,int, int);
23e90 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
23ea0 69 6e 69 73 68 54 72 69 67 67 65 72 28 50 61 72  inishTrigger(Par
23eb0 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  se*, TriggerStep
23ec0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f  *, Token*);.  vo
23ed0 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  id sqlite3DropTr
23ee0 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72  igger(Parse*, Sr
23ef0 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  cList*, int);.  
23f00 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
23f10 54 72 69 67 67 65 72 50 74 72 28 50 61 72 73 65  TriggerPtr(Parse
23f20 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
23f30 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33  Trigger *sqlite3
23f40 54 72 69 67 67 65 72 73 45 78 69 73 74 28 50 61  TriggersExist(Pa
23f50 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  rse *, Table*, i
23f60 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  nt, ExprList*, i
23f70 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72  nt *pMask);.  Tr
23f80 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72  igger *sqlite3Tr
23f90 69 67 67 65 72 4c 69 73 74 28 50 61 72 73 65 20  iggerList(Parse 
23fa0 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76  *, Table *);.  v
23fb0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52  oid sqlite3CodeR
23fc0 6f 77 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  owTrigger(Parse*
23fd0 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74  , Trigger *, int
23fe0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
23ff0 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20  , Table *,.     
24000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24010 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c         int, int,
24020 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
24030 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
24040 67 65 72 44 69 72 65 63 74 28 50 61 72 73 65 20  gerDirect(Parse 
24050 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61  *, Trigger *, Ta
24060 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ble *, int, int,
24070 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
24080 6c 69 74 65 56 69 65 77 54 72 69 67 67 65 72 73  liteViewTriggers
24090 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
240a0 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70   Expr*, int, Exp
240b0 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20  rList*);.  void 
240c0 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
240d0 67 67 65 72 53 74 65 70 28 73 71 6c 69 74 65 33  ggerStep(sqlite3
240e0 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29  *, TriggerStep*)
240f0 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
24100 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 53  *sqlite3TriggerS
24110 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69 74 65  electStep(sqlite
24120 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54  3*,Select*);.  T
24130 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
24140 74 65 33 54 72 69 67 67 65 72 49 6e 73 65 72 74  te3TriggerInsert
24150 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f  Step(sqlite3*,To
24160 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20  ken*, IdList*,. 
24170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24190 20 20 20 20 20 20 20 53 65 6c 65 63 74 2a 2c 75         Select*,u
241a0 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  8);.  TriggerSte
241b0 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
241c0 72 55 70 64 61 74 65 53 74 65 70 28 73 71 6c 69  rUpdateStep(sqli
241d0 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  te3*,Token*,Expr
241e0 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38  List*, Expr*, u8
241f0 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
24200 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
24210 44 65 6c 65 74 65 53 74 65 70 28 73 71 6c 69 74  DeleteStep(sqlit
24220 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72  e3*,Token*, Expr
24230 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
24240 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  e3DeleteTrigger(
24250 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65  sqlite3*, Trigge
24260 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
24270 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
24280 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65  teTrigger(sqlite
24290 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
242a0 72 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74  r*);.  u32 sqlit
242b0 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b  e3TriggerColmask
242c0 28 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a  (Parse*,Trigger*
242d0 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69  ,ExprList*,int,i
242e0 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a  nt,Table*,int);.
242f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24300 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29  ParseToplevel(p)
24310 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c   ((p)->pToplevel
24320 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65   ? (p)->pTopleve
24330 6c 20 3a 20 28 70 29 29 0a 23 65 6c 73 65 0a 23  l : (p)).#else.#
24340 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
24350 72 69 67 67 65 72 73 45 78 69 73 74 28 42 2c 43  riggersExist(B,C
24360 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69  ,D,E,F) 0.# defi
24370 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  ne sqlite3Delete
24380 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64  Trigger(A,B).# d
24390 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f  efine sqlite3Dro
243a0 70 54 72 69 67 67 65 72 50 74 72 28 41 2c 42 29  pTriggerPtr(A,B)
243b0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
243c0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
243d0 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23  Trigger(A,B,C).#
243e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
243f0 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c  odeRowTrigger(A,
24400 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29  B,C,D,E,F,G,H,I)
24410 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24420 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44  3CodeRowTriggerD
24430 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c  irect(A,B,C,D,E,
24440 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  F).# define sqli
24450 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 58  te3TriggerList(X
24460 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20  , Y) 0.# define 
24470 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c  sqlite3ParseTopl
24480 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69  evel(p) p.# defi
24490 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
244a0 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44  rColmask(A,B,C,D
244b0 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66  ,E,F,G) 0.#endif
244c0 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69  ..int sqlite3Joi
244d0 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f  nType(Parse*, To
244e0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ken*, Token*, To
244f0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
24500 74 65 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e  te3CreateForeign
24510 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Key(Parse*, Expr
24520 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45  List*, Token*, E
24530 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  xprList*, int);.
24540 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 65  void sqlite3Defe
24550 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73  rForeignKey(Pars
24560 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65  e*, int);.#ifnde
24570 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
24580 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f  THORIZATION.  vo
24590 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  id sqlite3AuthRe
245a0 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  ad(Parse*,Expr*,
245b0 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a  Schema*,SrcList*
245c0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
245d0 41 75 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a  AuthCheck(Parse*
245e0 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72  ,int, const char
245f0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
24600 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
24610 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
24620 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72 73  ContextPush(Pars
24630 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a  e*, AuthContext*
24640 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
24650 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
24660 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74  thContextPop(Aut
24670 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e  hContext*);.  in
24680 74 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  t sqlite3AuthRea
24690 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e  dCol(Parse*, con
246a0 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74  st char *, const
246b0 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23   char *, int);.#
246c0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
246d0 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 61 2c  lite3AuthRead(a,
246e0 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20  b,c,d).# define 
246f0 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b  sqlite3AuthCheck
24700 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53  (a,b,c,d,e)    S
24710 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e  QLITE_OK.# defin
24720 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  e sqlite3AuthCon
24730 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a  textPush(a,b,c).
24740 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24750 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61  AuthContextPop(a
24760 29 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23  )  ((void)(a)).#
24770 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
24780 65 33 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c  e3Attach(Parse*,
24790 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45   Expr*, Expr*, E
247a0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
247b0 74 65 33 44 65 74 61 63 68 28 50 61 72 73 65 2a  te3Detach(Parse*
247c0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
247d0 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44 62  qlite3FixInit(Db
247e0 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20  Fixer*, Parse*, 
247f0 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
24800 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b  , const Token*);
24810 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53  .int sqlite3FixS
24820 72 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c  rcList(DbFixer*,
24830 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20   SrcList*);.int 
24840 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74  sqlite3FixSelect
24850 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63  (DbFixer*, Selec
24860 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
24870 46 69 78 45 78 70 72 28 44 62 46 69 78 65 72 2a  FixExpr(DbFixer*
24880 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
24890 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69 73 74  lite3FixExprList
248a0 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c  (DbFixer*, ExprL
248b0 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
248c0 65 33 46 69 78 54 72 69 67 67 65 72 53 74 65 70  e3FixTriggerStep
248d0 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67  (DbFixer*, Trigg
248e0 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71  erStep*);.int sq
248f0 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20  lite3AtoF(const 
24900 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a  char *z, double*
24910 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
24920 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28  sqlite3GetInt32(
24930 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
24940 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
24950 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a  Atoi(const char*
24960 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74  );.int sqlite3Ut
24970 66 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74  f16ByteLen(const
24980 20 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e   void *pData, in
24990 74 20 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71  t nChar);.int sq
249a0 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e  lite3Utf8CharLen
249b0 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61  (const char *pDa
249c0 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a  ta, int nByte);.
249d0 75 33 32 20 73 71 6c 69 74 65 33 55 74 66 38 52  u32 sqlite3Utf8R
249e0 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b  ead(const u8**);
249f0 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
24a00 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45  ogEst(u64);.LogE
24a10 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  st sqlite3LogEst
24a20 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73  Add(LogEst,LogEs
24a30 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
24a40 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
24a50 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69  ABLE.LogEst sqli
24a60 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75  te3LogEstFromDou
24a70 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e  ble(double);.#en
24a80 64 69 66 0a 75 36 34 20 73 71 6c 69 74 65 33 4c  dif.u64 sqlite3L
24a90 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73  ogEstToInt(LogEs
24aa0 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69  t);../*.** Routi
24ab0 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20  nes to read and 
24ac0 77 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c  write variable-l
24ad0 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20  ength integers. 
24ae0 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a   These used to.*
24af0 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63  * be defined loc
24b00 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65  ally, but now we
24b10 20 75 73 65 20 74 68 65 20 76 61 72 69 6e 74 20   use the varint 
24b20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20  routines in the 
24b30 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a  util.c.** file..
24b40 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75  */.int sqlite3Pu
24b50 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64  tVarint(unsigned
24b60 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38   char*, u64);.u8
24b70 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
24b80 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  t(const unsigned
24b90 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b   char *, u64 *);
24ba0 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61  .u8 sqlite3GetVa
24bb0 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73  rint32(const uns
24bc0 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33  igned char *, u3
24bd0 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  2 *);.int sqlite
24be0 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76  3VarintLen(u64 v
24bf0 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f  );../*.** The co
24c00 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72  mmon case is for
24c10 20 61 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20   a varint to be 
24c20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20  a single byte.  
24c30 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a  They following.*
24c40 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20  * macros handle 
24c50 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  the common case 
24c60 77 69 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64  without a proced
24c70 75 72 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68  ure call, but th
24c80 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70  en call.** the p
24c90 72 6f 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72  rocedure for lar
24ca0 67 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a  ger varints..*/.
24cb0 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e  #define getVarin
24cc0 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75  t32(A,B)  \.  (u
24cd0 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38  8)((*(A)<(u8)0x8
24ce0 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41  0)?((B)=(u32)*(A
24cf0 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56  )),1:sqlite3GetV
24d00 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32  arint32((A),(u32
24d10 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e   *)&(B))).#defin
24d20 65 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c  e putVarint32(A,
24d30 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75  B)  \.  (u8)(((u
24d40 33 32 29 28 42 29 3c 28 75 33 32 29 30 78 38 30  32)(B)<(u32)0x80
24d50 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65  )?(*(A)=(unsigne
24d60 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a  d char)(B)),1:\.
24d70 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69    sqlite3PutVari
24d80 6e 74 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65  nt((A),(B))).#de
24d90 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20  fine getVarint  
24da0 20 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69    sqlite3GetVari
24db0 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61  nt.#define putVa
24dc0 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50  rint    sqlite3P
24dd0 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74  utVarint...const
24de0 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e   char *sqlite3In
24df0 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 56  dexAffinityStr(V
24e00 64 62 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b  dbe *, Index *);
24e10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62  .void sqlite3Tab
24e20 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a  leAffinity(Vdbe*
24e30 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
24e40 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70  char sqlite3Comp
24e50 61 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72  areAffinity(Expr
24e60 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66   *pExpr, char af
24e70 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  f2);.int sqlite3
24e80 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28  IndexAffinityOk(
24e90 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
24ea0 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b  r idx_affinity);
24eb0 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70  .char sqlite3Exp
24ec0 72 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  rAffinity(Expr *
24ed0 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69  pExpr);.int sqli
24ee0 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20  te3Atoi64(const 
24ef0 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74  char*, i64*, int
24f00 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
24f10 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28  e3DecOrHexToI64(
24f20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34  const char*, i64
24f30 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24f40 45 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c  ErrorWithMsg(sql
24f50 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
24f60 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f  t char*,...);.vo
24f70 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  id sqlite3Error(
24f80 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
24f90 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54  oid *sqlite3HexT
24fa0 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20  oBlob(sqlite3*, 
24fb0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
24fc0 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65  nt n);.u8 sqlite
24fd0 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29  3HexToInt(int h)
24fe0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f  ;.int sqlite3Two
24ff0 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  PartName(Parse *
25000 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e  , Token *, Token
25010 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a   *, Token **);..
25020 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
25030 54 45 5f 54 45 53 54 29 20 0a 63 6f 6e 73 74 20  TE_TEST) .const 
25040 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72  char *sqlite3Err
25050 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69  Name(int);.#endi
25060 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  f..const char *s
25070 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74  qlite3ErrStr(int
25080 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
25090 61 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a  adSchema(Parse *
250a0 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71  pParse);.CollSeq
250b0 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c   *sqlite3FindCol
250c0 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38  lSeq(sqlite3*,u8
250d0 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72   enc, const char
250e0 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20  *,int);.CollSeq 
250f0 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f  *sqlite3LocateCo
25100 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
25110 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  rse, const char*
25120 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20  zName);.CollSeq 
25130 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c  *sqlite3ExprColl
25140 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
25150 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b  e, Expr *pExpr);
25160 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
25170 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65  prAddCollateToke
25180 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  n(Parse *pParse,
25190 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   Expr*, const To
251a0 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72  ken*, int);.Expr
251b0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
251c0 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61  CollateString(Pa
251d0 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74  rse*,Expr*,const
251e0 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73   char*);.Expr *s
251f0 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f  qlite3ExprSkipCo
25200 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e  llate(Expr*);.in
25210 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f  t sqlite3CheckCo
25220 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43  llSeq(Parse *, C
25230 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73  ollSeq *);.int s
25240 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63  qlite3CheckObjec
25250 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63  tName(Parse *, c
25260 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f  onst char *);.vo
25270 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  id sqlite3VdbeSe
25280 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  tChanges(sqlite3
25290 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71   *, int);.int sq
252a0 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 69 36  lite3AddInt64(i6
252b0 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
252c0 69 74 65 33 53 75 62 49 6e 74 36 34 28 69 36 34  ite3SubInt64(i64
252d0 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
252e0 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a  te3MulInt64(i64*
252f0 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
25300 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b  e3AbsInt32(int);
25310 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
25320 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a  NABLE_8_3_NAMES.
25330 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65  void sqlite3File
25340 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68  Suffix3(const ch
25350 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c  ar*, char*);.#el
25360 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
25370 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 58  te3FileSuffix3(X
25380 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71  ,Y).#endif.u8 sq
25390 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
253a0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75 38  const char *z,u8
253b0 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  );..const void *
253c0 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74  sqlite3ValueText
253d0 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
253e0 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
253f0 33 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69  3ValueBytes(sqli
25400 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b  te3_value*, u8);
25410 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
25420 75 65 53 65 74 53 74 72 28 73 71 6c 69 74 65 33  ueSetStr(sqlite3
25430 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f  _value*, int, co
25440 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a  nst void *,u8, .
25450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25460 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28          void(*)(
25470 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71  void*));.void sq
25480 6c 69 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c  lite3ValueSetNul
25490 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  l(sqlite3_value*
254a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
254b0 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65 33  alueFree(sqlite3
254c0 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65  _value*);.sqlite
254d0 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33  3_value *sqlite3
254e0 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33  ValueNew(sqlite3
254f0 20 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74   *);.char *sqlit
25500 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74  e3Utf16to8(sqlit
25510 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64  e3 *, const void
25520 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
25530 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f   sqlite3ValueFro
25540 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  mExpr(sqlite3 *,
25550 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c   Expr *, u8, u8,
25560 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
25570 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25580 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
25590 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ty(sqlite3_value
255a0 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66   *, u8, u8);.#if
255b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  ndef SQLITE_AMAL
255c0 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20  GAMATION.extern 
255d0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
255e0 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64  har sqlite3Opcod
255f0 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74  eProperty[];.ext
25600 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
25610 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 55  ed char sqlite3U
25620 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65  pperToLower[];.e
25630 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
25640 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
25650 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74  3CtypeMap[];.ext
25660 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20  ern const Token 
25670 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73  sqlite3IntTokens
25680 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54  [];.extern SQLIT
25690 45 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c  E_WSD struct Sql
256a0 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74  ite3Config sqlit
256b0 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e  e3Config;.extern
256c0 20 53 51 4c 49 54 45 5f 57 53 44 20 46 75 6e 63   SQLITE_WSD Func
256d0 44 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 47  DefHash sqlite3G
256e0 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a  lobalFunctions;.
256f0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
25700 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69  MIT_WSD.extern i
25710 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e  nt sqlite3Pendin
25720 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65  gByte;.#endif.#e
25730 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
25740 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73  3RootPageMoved(s
25750 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e  qlite3*, int, in
25760 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
25770 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50 61 72  lite3Reindex(Par
25780 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
25790 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
257a0 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73  e3AlterFunctions
257b0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
257c0 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54  ite3AlterRenameT
257d0 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
257e0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
257f0 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f  int sqlite3GetTo
25800 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ken(const unsign
25810 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a  ed char *, int *
25820 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e  );.void sqlite3N
25830 65 73 74 65 64 50 61 72 73 65 28 50 61 72 73 65  estedParse(Parse
25840 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
25850 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
25860 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
25870 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74  Statements(sqlit
25880 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
25890 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50  3CodeSubselect(P
258a0 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
258b0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
258c0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65  sqlite3SelectPre
258d0 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  p(Parse*, Select
258e0 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29  *, NameContext*)
258f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74  ;.int sqlite3Mat
25900 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74  chSpanName(const
25910 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
25920 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
25930 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
25940 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
25950 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65  veExprNames(Name
25960 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
25970 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
25980 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73  solveSelectNames
25990 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
259a0 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b  , NameContext*);
259b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
259c0 6f 6c 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63  olveSelfReferenc
259d0 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  e(Parse*,Table*,
259e0 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  int,Expr*,ExprLi
259f0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
25a00 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f  3ResolveOrderGro
25a10 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c  upBy(Parse*, Sel
25a20 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ect*, ExprList*,
25a30 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
25a40 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  oid sqlite3Colum
25a50 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c  nDefault(Vdbe *,
25a60 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69   Table *, int, i
25a70 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25a80 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43  3AlterFinishAddC
25a90 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54  olumn(Parse *, T
25aa0 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71  oken *);.void sq
25ab0 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41  lite3AlterBeginA
25ac0 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a  ddColumn(Parse *
25ad0 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f  , SrcList *);.Co
25ae0 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65  llSeq *sqlite3Ge
25af0 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c  tCollSeq(Parse*,
25b00 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20   u8, CollSeq *, 
25b10 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
25b20 61 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69  ar sqlite3Affini
25b30 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61  tyType(const cha
25b40 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73  r*, u8*);.void s
25b50 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61  qlite3Analyze(Pa
25b60 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
25b70 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
25b80 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64  e3InvokeBusyHand
25b90 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a  ler(BusyHandler*
25ba0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
25bb0 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54  ndDb(sqlite3*, T
25bc0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
25bd0 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71  te3FindDbName(sq
25be0 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
25bf0 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
25c00 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28  te3AnalysisLoad(
25c10 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42  sqlite3*,int iDB
25c20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
25c30 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65  eleteIndexSample
25c40 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78  s(sqlite3*,Index
25c50 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25c60 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e  DefaultRowEst(In
25c70 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
25c80 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46  te3RegisterLikeF
25c90 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33  unctions(sqlite3
25ca0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
25cb0 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69  ite3IsLikeFuncti
25cc0 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  on(sqlite3*,Expr
25cd0 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76  *,int*,char*);.v
25ce0 6f 69 64 20 73 71 6c 69 74 65 33 4d 69 6e 69 6d  oid sqlite3Minim
25cf0 75 6d 46 69 6c 65 46 6f 72 6d 61 74 28 50 61 72  umFileFormat(Par
25d00 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
25d10 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68 65  void sqlite3Sche
25d20 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b  maClear(void *);
25d30 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33  .Schema *sqlite3
25d40 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65  SchemaGet(sqlite
25d50 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69  3 *, Btree *);.i
25d60 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  nt sqlite3Schema
25d70 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20  ToIndex(sqlite3 
25d80 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a  *db, Schema *);.
25d90 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
25da0 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c  KeyInfoAlloc(sql
25db0 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  ite3*,int,int);.
25dc0 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49  void sqlite3KeyI
25dd0 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f  nfoUnref(KeyInfo
25de0 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
25df0 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b  ite3KeyInfoRef(K
25e00 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66  eyInfo*);.KeyInf
25e10 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
25e20 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  oOfIndex(Parse*,
25e30 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65 66   Index*);.#ifdef
25e40 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e   SQLITE_DEBUG.in
25e50 74 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f  t sqlite3KeyInfo
25e60 49 73 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49  IsWriteable(KeyI
25e70 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  nfo*);.#endif.in
25e80 74 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46  t sqlite3CreateF
25e90 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  unc(sqlite3 *, c
25ea0 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
25eb0 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a  , int, void *, .
25ec0 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
25ed0 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
25ee0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
25ef0 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71  ),.  void (*)(sq
25f00 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
25f10 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
25f20 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73   **), void (*)(s
25f30 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
25f40 2c 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74  ,.  FuncDestruct
25f50 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a  or *pDestructor.
25f60 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70  );.int sqlite3Ap
25f70 69 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64  iExit(sqlite3 *d
25f80 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  b, int);.int sql
25f90 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61  ite3OpenTempData
25fa0 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a  base(Parse *);..
25fb0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
25fc0 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75  ccumInit(StrAccu
25fd0 6d 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20  m*, char*, int, 
25fe0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
25ff0 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
26000 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74  (StrAccum*,const
26010 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69   char*,int);.voi
26020 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
26030 6d 41 70 70 65 6e 64 41 6c 6c 28 53 74 72 41 63  mAppendAll(StrAc
26040 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  cum*,const char*
26050 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
26060 70 70 65 6e 64 43 68 61 72 28 53 74 72 41 63 63  ppendChar(StrAcc
26070 75 6d 2a 2c 69 6e 74 2c 63 68 61 72 29 3b 0a 63  um*,int,char);.c
26080 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41  har *sqlite3StrA
26090 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63  ccumFinish(StrAc
260a0 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
260b0 74 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74  te3StrAccumReset
260c0 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69  (StrAccum*);.voi
260d0 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
260e0 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65  estInit(SelectDe
260f0 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78  st*,int,int);.Ex
26100 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  pr *sqlite3Creat
26110 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69  eColumnExpr(sqli
26120 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  te3 *, SrcList *
26130 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f  , int, int);..vo
26140 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70  id sqlite3Backup
26150 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f  Restart(sqlite3_
26160 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20  backup *);.void 
26170 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64  sqlite3BackupUpd
26180 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  ate(sqlite3_back
26190 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73  up *, Pgno, cons
261a0 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 64 65 66  t u8 *);..#ifdef
261b0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
261c0 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f  TAT3_OR_STAT4.vo
261d0 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a  id sqlite3Analyz
261e0 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  eFunctions(void)
261f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61  ;.int sqlite3Sta
26200 74 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28  t4ProbeSetValue(
26210 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e  Parse*,Index*,Un
26220 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45  packedRecord**,E
26230 78 70 72 2a 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a  xpr*,u8,int,int*
26240 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
26250 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  at4ValueFromExpr
26260 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
26270 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  u8, sqlite3_valu
26280 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e**);.void sqlit
26290 65 33 53 74 61 74 34 50 72 6f 62 65 46 72 65 65  e3Stat4ProbeFree
262a0 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a  (UnpackedRecord*
262b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
262c0 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65  at4Column(sqlite
262d0 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  3*, const void*,
262e0 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74   int, int, sqlit
262f0 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 23 65 6e  e3_value**);.#en
26300 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69  dif../*.** The i
26310 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
26320 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20  LEMON-generated 
26330 70 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a  parser.*/.void *
26340 73 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c  sqlite3ParserAll
26350 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75 36 34 29  oc(void*(*)(u64)
26360 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
26370 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c  arserFree(void*,
26380 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29   void(*)(void*))
26390 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
263a0 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  rser(void*, int,
263b0 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b   Token, Parse*);
263c0 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d  .#ifdef YYTRACKM
263d0 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69  AXSTACKDEPTH.  i
263e0 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  nt sqlite3Parser
263f0 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29  StackPeak(void*)
26400 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73  ;.#endif..void s
26410 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78  qlite3AutoLoadEx
26420 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33  tensions(sqlite3
26430 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
26440 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54  TE_OMIT_LOAD_EXT
26450 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ENSION.  void sq
26460 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73  lite3CloseExtens
26470 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
26480 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
26490 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
264a0 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a  sions(X).#endif.
264b0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
264c0 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
264d0 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  E.  void sqlite3
264e0 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20  TableLock(Parse 
264f0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c  *, int, int, u8,
26500 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
26510 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
26520 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
26530 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64  (v,w,x,y,z).#end
26540 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
26550 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c  E_TEST.  int sql
26560 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69  ite3Utf8To8(unsi
26570 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e  gned char*);.#en
26580 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
26590 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
265a0 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73  ABLE.#  define s
265b0 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28  qlite3VtabClear(
265c0 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  Y).#  define sql
265d0 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59  ite3VtabSync(X,Y
265e0 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64  ) SQLITE_OK.#  d
265f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
26600 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20  bRollback(X).#  
26610 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
26620 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64  abCommit(X).#  d
26630 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
26640 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20  bInSync(db) 0.# 
26650 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
26660 74 61 62 4c 6f 63 6b 28 58 29 20 0a 23 20 20 64  tabLock(X) .#  d
26670 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
26680 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65  bUnlock(X).#  de
26690 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
266a0 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20  UnlockList(X).# 
266b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
266c0 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20  tabSavepoint(X, 
266d0 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  Y, Z) SQLITE_OK.
266e0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
266f0 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20  3GetVTable(X,Y) 
26700 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65   ((VTable*)0).#e
26710 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  lse.   void sqli
26720 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c  te3VtabClear(sql
26730 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a  ite3 *db, Table*
26740 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
26750 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74  e3VtabDisconnect
26760 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61  (sqlite3 *db, Ta
26770 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20  ble *p);.   int 
26780 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28  sqlite3VtabSync(
26790 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62  sqlite3 *db, Vdb
267a0 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  e*);.   int sqli
267b0 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
267c0 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
267d0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
267e0 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a  Commit(sqlite3 *
267f0 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  db);.   void sql
26800 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61  ite3VtabLock(VTa
26810 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
26820 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
26830 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
26840 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
26850 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74  UnlockList(sqlit
26860 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  e3*);.   int sql
26870 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
26880 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  t(sqlite3 *, int
26890 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20  , int);.   void 
268a0 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
268b0 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73  tErrmsg(Vdbe*, s
268c0 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20  qlite3_vtab*);. 
268d0 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65    VTable *sqlite
268e0 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74  3GetVTable(sqlit
268f0 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 20  e3*, Table*);.# 
26900 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
26910 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28  tabInSync(db) ((
26920 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26  db)->nVTrans>0 &
26930 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d  & (db)->aVTrans=
26940 3d 30 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  =0).#endif.void 
26950 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57  sqlite3VtabMakeW
26960 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  ritable(Parse*,T
26970 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  able*);.void sql
26980 69 74 65 33 56 74 61 62 42 65 67 69 6e 50 61 72  ite3VtabBeginPar
26990 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  se(Parse*, Token
269a0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
269b0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
269c0 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73 68 50  lite3VtabFinishP
269d0 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
269e0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
269f0 65 33 56 74 61 62 41 72 67 49 6e 69 74 28 50 61  e3VtabArgInit(Pa
26a00 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
26a10 74 65 33 56 74 61 62 41 72 67 45 78 74 65 6e 64  te3VtabArgExtend
26a20 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
26a30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
26a40 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69  bCallCreate(sqli
26a50 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
26a60 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a   char *, char **
26a70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
26a80 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61  abCallConnect(Pa
26a90 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69  rse*, Table*);.i
26aa0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
26ab0 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65  llDestroy(sqlite
26ac0 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
26ad0 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
26ae0 74 65 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c  te3VtabBegin(sql
26af0 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a  ite3 *, VTable *
26b00 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69  );.FuncDef *sqli
26b10 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64 46  te3VtabOverloadF
26b20 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 20  unction(sqlite3 
26b30 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20  *,FuncDef*, int 
26b40 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  nArg, Expr*);.vo
26b50 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61 6c 69  id sqlite3Invali
26b60 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
26b70 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
26b80 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
26b90 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73  .sqlite3_int64 s
26ba0 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72 65 6e  qlite3StmtCurren
26bb0 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f  tTime(sqlite3_co
26bc0 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  ntext*);.int sql
26bd0 69 74 65 33 56 64 62 65 50 61 72 61 6d 65 74 65  ite3VdbeParamete
26be0 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f  rIndex(Vdbe*, co
26bf0 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  nst char*, int);
26c00 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e  .int sqlite3Tran
26c10 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c  sferBindings(sql
26c20 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c  ite3_stmt *, sql
26c30 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f  ite3_stmt *);.vo
26c40 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
26c50 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b 0a 69  Reset(Parse*);.i
26c60 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65 70  nt sqlite3Reprep
26c70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64  are(Vdbe*);.void
26c80 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
26c90 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73  CheckLength(Pars
26ca0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  e*, ExprList*, c
26cb0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c  onst char*);.Col
26cc0 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e  lSeq *sqlite3Bin
26cd0 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65  aryCompareCollSe
26ce0 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  q(Parse *, Expr 
26cf0 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20  *, Expr *);.int 
26d00 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d  sqlite3TempInMem
26d10 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65  ory(const sqlite
26d20 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20  3*);.const char 
26d30 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d  *sqlite3JournalM
26d40 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69  odename(int);.#i
26d50 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
26d60 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69  T_WAL.  int sqli
26d70 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71  te3Checkpoint(sq
26d80 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74  lite3*, int, int
26d90 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20  , int*, int*);. 
26da0 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44   int sqlite3WalD
26db0 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a  efaultHook(void*
26dc0 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  ,sqlite3*,const 
26dd0 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64  char*,int);.#end
26de0 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
26df0 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69 74  E_OMIT_CTE.  Wit
26e00 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41 64  h *sqlite3WithAd
26e10 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54  d(Parse*,With*,T
26e20 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
26e30 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64  Select*);.  void
26e40 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
26e50 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74 68  te(sqlite3*,With
26e60 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
26e70 65 33 57 69 74 68 50 75 73 68 28 50 61 72 73 65  e3WithPush(Parse
26e80 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23  *, With*, u8);.#
26e90 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c  else.#define sql
26ea0 69 74 65 33 57 69 74 68 50 75 73 68 28 78 2c 79  ite3WithPush(x,y
26eb0 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  ,z).#define sqli
26ec0 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 78 2c  te3WithDelete(x,
26ed0 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65  y).#endif../* De
26ee0 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66  clarations for f
26ef0 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79  unctions in fkey
26f00 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65  .c. All of these
26f10 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79   are replaced by
26f20 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73  .** no-op macros
26f30 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e   if OMIT_FOREIGN
26f40 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e  _KEY is defined.
26f50 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f   In this case no
26f60 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20   foreign.** key 
26f70 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73  functionality is
26f80 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f   available. If O
26f90 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73 20 64  MIT_TRIGGER is d
26fa0 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d  efined but.** OM
26fb0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
26fc0 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65  s not, only some
26fd0 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
26fe0 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49  s are no-oped. I
26ff0 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66  n.** this case f
27000 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20  oreign keys are 
27010 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f  parsed, but no o
27020 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69  ther functionali
27030 74 79 20 69 73 20 0a 2a 2a 20 70 72 6f 76 69 64  ty is .** provid
27040 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20  ed (enforcement 
27050 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  of FK constraint
27060 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74  s requires the t
27070 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74  riggers sub-syst
27080 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  em)..*/.#if !def
27090 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
270a0 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26  _FOREIGN_KEY) &&
270b0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
270c0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20  _OMIT_TRIGGER). 
270d0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43   void sqlite3FkC
270e0 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  heck(Parse*, Tab
270f0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
27100 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  nt*, int);.  voi
27110 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54  d sqlite3FkDropT
27120 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
27130 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b  List *, Table*);
27140 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
27150 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c  kActions(Parse*,
27160 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73   Table*, ExprLis
27170 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  t*, int, int*, i
27180 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
27190 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61 72  e3FkRequired(Par
271a0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
271b0 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73  *, int);.  u32 s
271c0 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
271d0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
271e0 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33  .  FKey *sqlite3
271f0 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61 62  FkReferences(Tab
27200 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  le *);.#else.  #
27210 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
27220 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c  Actions(a,b,c,d,
27230 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
27240 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c  qlite3FkCheck(a,
27250 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65  b,c,d,e,f).  #de
27260 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72  fine sqlite3FkDr
27270 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20  opTable(a,b,c). 
27280 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
27290 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20  FkOldmask(a,b)  
272a0 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66 69         0.  #defi
272b0 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  ne sqlite3FkRequ
272c0 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20  ired(a,b,c,d)   
272d0 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   0.#endif.#ifnde
272e0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
272f0 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64  REIGN_KEY.  void
27300 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65   sqlite3FkDelete
27310 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c  (sqlite3 *, Tabl
27320 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  e*);.  int sqlit
27330 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
27340 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b  Parse*,Table*,FK
27350 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a  ey*,Index**,int*
27360 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
27370 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65 6c  ine sqlite3FkDel
27380 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66 69  ete(a,b).  #defi
27390 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61  ne sqlite3FkLoca
273a0 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c  teIndex(a,b,c,d,
273b0 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  e).#endif.../*.*
273c0 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c  * Available faul
273d0 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68  t injectors.  Sh
273e0 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64  ould be numbered
273f0 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
27400 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  0..*/.#define SQ
27410 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54  LITE_FAULTINJECT
27420 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a  OR_MALLOC     0.
27430 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
27440 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55  AULTINJECTOR_COU
27450 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a  NT      1../*.**
27460 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74   The interface t
27470 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66 61  o the code in fa
27480 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20 69  ult.c used for i
27490 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e 69  dentifying "beni
274a0 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61  gn".** malloc fa
274b0 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73 20  ilures. This is 
274c0 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66 20  only present if 
274d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
274e0 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73 20 6e  TIN_TEST.** is n
274f0 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23  ot defined..*/.#
27500 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
27510 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
27520 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65    void sqlite3Be
27530 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
27540 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71  void);.  void sq
27550 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
27560 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73  lloc(void);.#els
27570 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
27580 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
27590 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e 65  lloc().  #define
275a0 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
275b0 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66  nMalloc().#endif
275c0 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
275d0 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72  return values fr
275e0 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  om sqlite3FindIn
275f0 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69  Index().*/.#defi
27600 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49  ne IN_INDEX_ROWI
27610 44 20 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20  D        1   /* 
27620 53 65 61 72 63 68 20 74 68 65 20 72 6f 77 69 64  Search the rowid
27630 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f   of the table */
27640 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
27650 58 5f 45 50 48 20 20 20 20 20 20 20 20 20 20 32  X_EPH          2
27660 20 20 20 2f 2a 20 53 65 61 72 63 68 20 61 6e 20     /* Search an 
27670 65 70 68 65 6d 65 72 61 6c 20 62 2d 74 72 65 65  ephemeral b-tree
27680 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
27690 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43 20 20  NDEX_INDEX_ASC  
276a0 20 20 33 20 20 20 2f 2a 20 45 78 69 73 74 69 6e    3   /* Existin
276b0 67 20 69 6e 64 65 78 20 41 53 43 45 4e 44 49 4e  g index ASCENDIN
276c0 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  G */.#define IN_
276d0 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45 53 43  INDEX_INDEX_DESC
276e0 20 20 20 34 20 20 20 2f 2a 20 45 78 69 73 74 69     4   /* Existi
276f0 6e 67 20 69 6e 64 65 78 20 44 45 53 43 45 4e 44  ng index DESCEND
27700 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ING */.#define I
27710 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20  N_INDEX_NOOP    
27720 20 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74       5   /* No t
27730 61 62 6c 65 20 61 76 61 69 6c 61 62 6c 65 2e 20  able available. 
27740 55 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20  Use comparisons 
27750 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  */./*.** Allowed
27760 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20 33   flags for the 3
27770 72 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  rd parameter to 
27780 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
27790 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ex()..*/.#define
277a0 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f   IN_INDEX_NOOP_O
277b0 4b 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a  K     0x0001  /*
277c0 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20 49 4e   OK to return IN
277d0 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23  _INDEX_NOOP */.#
277e0 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
277f0 4d 45 4d 42 45 52 53 48 49 50 20 20 30 78 30 30  MEMBERSHIP  0x00
27800 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74  02  /* IN operat
27810 6f 72 20 75 73 65 64 20 66 6f 72 20 6d 65 6d 62  or used for memb
27820 65 72 73 68 69 70 20 74 65 73 74 20 2a 2f 0a 23  ership test */.#
27830 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
27840 4c 4f 4f 50 20 20 20 20 20 20 20 20 30 78 30 30  LOOP        0x00
27850 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74  04  /* IN operat
27860 6f 72 20 75 73 65 64 20 61 73 20 61 20 6c 6f 6f  or used as a loo
27870 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  p */.int sqlite3
27880 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72 73  FindInIndex(Pars
27890 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 33 32  e *, Expr *, u32
278a0 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69 66 64 65 66  , int*);..#ifdef
278b0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41   SQLITE_ENABLE_A
278c0 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20 69 6e  TOMIC_WRITE.  in
278d0 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
278e0 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73  Open(sqlite3_vfs
278f0 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
27900 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  , sqlite3_file *
27910 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 69  , int, int);.  i
27920 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
27930 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f 76 66  lSize(sqlite3_vf
27940 73 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  s *);.  int sqli
27950 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65  te3JournalCreate
27960 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
27970 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  ;.  int sqlite3J
27980 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 73 71 6c  ournalExists(sql
27990 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 23  ite3_file *p);.#
279a0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
279b0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a  qlite3JournalSiz
279c0 65 28 70 56 66 73 29 20 28 28 70 56 66 73 29 2d  e(pVfs) ((pVfs)-
279d0 3e 73 7a 4f 73 46 69 6c 65 29 0a 20 20 23 64 65  >szOsFile).  #de
279e0 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72  fine sqlite3Jour
279f0 6e 61 6c 45 78 69 73 74 73 28 70 29 20 31 0a 23  nalExists(p) 1.#
27a00 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69  endif..void sqli
27a10 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65  te3MemJournalOpe
27a20 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  n(sqlite3_file *
27a30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  );.int sqlite3Me
27a40 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 76 6f 69  mJournalSize(voi
27a50 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  d);.int sqlite3I
27a60 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28 73 71 6c 69  sMemJournal(sqli
27a70 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f  te3_file *);..vo
27a80 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 53 65  id sqlite3ExprSe
27a90 74 48 65 69 67 68 74 41 6e 64 46 6c 61 67 73 28  tHeightAndFlags(
27aa0 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
27ab0 78 70 72 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c  xpr *p);.#if SQL
27ac0 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
27ad0 54 48 3e 30 0a 20 20 69 6e 74 20 73 71 6c 69 74  TH>0.  int sqlit
27ae0 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67  e3SelectExprHeig
27af0 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20  ht(Select *);.  
27b00 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
27b10 68 65 63 6b 48 65 69 67 68 74 28 50 61 72 73 65  heckHeight(Parse
27b20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20  *, int);.#else. 
27b30 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
27b40 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
27b50 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20  (x) 0.  #define 
27b60 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
27b70 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64  Height(x,y).#end
27b80 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47  if..u32 sqlite3G
27b90 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38  et4byte(const u8
27ba0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27bb0 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33  Put4byte(u8*, u3
27bc0 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  2);..#ifdef SQLI
27bd0 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b  TE_ENABLE_UNLOCK
27be0 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73  _NOTIFY.  void s
27bf0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
27c00 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  Blocked(sqlite3 
27c10 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20  *, sqlite3 *);. 
27c20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
27c30 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28  nectionUnlocked(
27c40 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
27c50 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
27c60 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c  ectionClosed(sql
27c70 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65  ite3 *db);.#else
27c80 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
27c90 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63  e3ConnectionBloc
27ca0 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69  ked(x,y).  #defi
27cb0 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
27cc0 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a  tionUnlocked(x).
27cd0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
27ce0 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
27cf0 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  d(x).#endif..#if
27d00 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
27d10 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50  .  void sqlite3P
27d20 61 72 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a  arserTrace(FILE*
27d30 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69  , char *);.#endi
27d40 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20  f../*.** If the 
27d50 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f  SQLITE_ENABLE IO
27d60 54 52 41 43 45 20 65 78 69 73 74 73 20 74 68 65  TRACE exists the
27d70 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  n the global var
27d80 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33  iable.** sqlite3
27d90 49 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f 69  IoTrace is a poi
27da0 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66  nter to a printf
27db0 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73  -like routine us
27dc0 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49  ed to.** print I
27dd0 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61  /O tracing messa
27de0 67 65 73 2e 20 0a 2a 2f 0a 23 69 66 64 65 66 20  ges. .*/.#ifdef 
27df0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f  SQLITE_ENABLE_IO
27e00 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49  TRACE.# define I
27e10 4f 54 52 41 43 45 28 41 29 20 20 69 66 28 20 73  OTRACE(A)  if( s
27e20 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b  qlite3IoTrace ){
27e30 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
27e40 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69  A; }.  void sqli
27e50 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
27e60 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45  l(Vdbe*);.SQLITE
27e70 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 2a 73  _EXTERN void (*s
27e80 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29 28 63  qlite3IoTrace)(c
27e90 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
27ea0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
27eb0 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64 65 66  IOTRACE(A).# def
27ec0 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 49  ine sqlite3VdbeI
27ed0 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e  OTraceSql(X).#en
27ee0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65  dif../*.** These
27ef0 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76   routines are av
27f00 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20  ailable for the 
27f10 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67  mem2.c debugging
27f20 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f   memory allocato
27f30 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79  r.** only.  They
27f40 20 61 72 65 20 75 73 65 64 20 74 6f 20 76 65 72   are used to ver
27f50 69 66 79 20 74 68 61 74 20 64 69 66 66 65 72 65  ify that differe
27f60 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65  nt "types" of me
27f70 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69  mory.** allocati
27f80 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79  ons are properly
27f90 20 74 72 61 63 6b 65 64 20 62 79 20 74 68 65 20   tracked by the 
27fa0 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71  system..**.** sq
27fb0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
27fc0 54 79 70 65 28 29 20 73 65 74 73 20 74 68 65 20  Type() sets the 
27fd0 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c  "type" of an all
27fe0 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f  ocation to one o
27ff0 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45  f.** the MEMTYPE
28000 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65  _* macros define
28010 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79  d below.  The ty
28020 70 65 20 6d 75 73 74 20 62 65 20 61 20 62 69 74  pe must be a bit
28030 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73  mask with.** a s
28040 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a  ingle bit set..*
28050 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
28060 65 62 75 67 48 61 73 54 79 70 65 28 29 20 72 65  ebugHasType() re
28070 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e  turns true if an
28080 79 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  y of the bits in
28090 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
280a0 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
280b0 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
280c0 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
280d0 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
280e0 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  e()..** sqlite3M
280f0 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29  emdebugHasType()
28100 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72   is intended for
28110 20 75 73 65 20 69 6e 73 69 64 65 20 61 73 73 65   use inside asse
28120 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e  rt() statements.
28130 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
28140 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72  mdebugNoType() r
28150 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e  eturns true if n
28160 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74 73 20  one of the bits 
28170 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
28180 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
28190 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
281a0 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
281b0 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
281c0 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72  ype()..**.** Per
281d0 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d  haps the most im
281e0 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73  portant point is
281f0 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   the difference 
28200 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f  between MEMTYPE_
28210 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54  HEAP.** and MEMT
28220 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20  YPE_LOOKASIDE.  
28230 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e  If an allocation
28240 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b   is MEMTYPE_LOOK
28250 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e  ASIDE, that mean
28260 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61  s.** it might ha
28270 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65  ve been allocate
28280 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20  d by lookaside, 
28290 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63  except the alloc
282a0 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f  ation was.** too
282b0 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73   large or lookas
282c0 69 64 65 20 77 61 73 20 61 6c 72 65 61 64 79 20  ide was already 
282d0 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70  full.  It is imp
282e0 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79  ortant to verify
282f0 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74  .** that allocat
28300 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20  ions that might 
28310 68 61 76 65 20 62 65 65 6e 20 73 61 74 69 73 66  have been satisf
28320 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ied by lookaside
28330 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73   are not.** pass
28340 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c  ed back to non-l
28350 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20  ookaside free() 
28360 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72  routines.  Asser
28370 74 73 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a  ts such as the.*
28380 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20  * example above 
28390 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68  are placed on th
283a0 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20  e non-lookaside 
283b0 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20  free() routines 
283c0 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69  to verify.** thi
283d0 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a  s constraint. .*
283e0 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73  *.** All of this
283f0 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20   is no-op for a 
28400 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64  production build
28410 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73  .  It only comes
28420 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68   into.** play wh
28430 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45  en the SQLITE_ME
28440 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74  MDEBUG compile-t
28450 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73  ime option is us
28460 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ed..*/.#ifdef SQ
28470 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20  LITE_MEMDEBUG.  
28480 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64  void sqlite3Memd
28490 65 62 75 67 53 65 74 54 79 70 65 28 76 6f 69 64  ebugSetType(void
284a0 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c  *,u8);.  int sql
284b0 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
284c0 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20  ype(void*,u8);. 
284d0 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64   int sqlite3Memd
284e0 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a  ebugNoType(void*
284f0 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ,u8);.#else.# de
28500 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
28510 65 62 75 67 53 65 74 54 79 70 65 28 58 2c 59 29  ebugSetType(X,Y)
28520 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20    /* no-op */.# 
28530 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
28540 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 58 2c  mdebugHasType(X,
28550 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65 20 73  Y)  1.# define s
28560 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
28570 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a 23 65  Type(X,Y)   1.#e
28580 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d  ndif.#define MEM
28590 54 59 50 45 5f 48 45 41 50 20 20 20 20 20 20 20  TYPE_HEAP       
285a0 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c  0x01  /* General
285b0 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e   heap allocation
285c0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  s */.#define MEM
285d0 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20  TYPE_LOOKASIDE  
285e0 30 78 30 32 20 20 2f 2a 20 48 65 61 70 20 74 68  0x02  /* Heap th
285f0 61 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  at might have be
28600 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a  en lookaside */.
28610 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
28620 53 43 52 41 54 43 48 20 20 20 20 30 78 30 34 20  SCRATCH    0x04 
28630 20 2f 2a 20 53 63 72 61 74 63 68 20 61 6c 6c 6f   /* Scratch allo
28640 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  cations */.#defi
28650 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48  ne MEMTYPE_PCACH
28660 45 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20 50  E     0x08  /* P
28670 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61  age cache alloca
28680 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tions */../*.** 
28690 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65 72 66  Threading interf
286a0 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  ace.*/.#if SQLIT
286b0 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
286c0 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74  EADS>0.int sqlit
286d0 65 33 54 68 72 65 61 64 43 72 65 61 74 65 28 53  e3ThreadCreate(S
286e0 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f  QLiteThread**,vo
286f0 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f  id*(*)(void*),vo
28700 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
28710 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69  3ThreadJoin(SQLi
28720 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a  teThread*, void*
28730 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64  *);.#endif..#end
28740 69 66 20 2f 2a 20 5f 53 51 4c 49 54 45 49 4e 54  if /* _SQLITEINT
28750 5f 48 5f 20 2a 2f 0a                             _H_ */.