/ Hex Artifact Content
Login

Artifact eb4d0375eb9fdfcc95c58f7b4c3f6f738ba42850:


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 44 65 63 6c 61 72 61 74 69 6f 6e  *.** Declaration
3290: 73 20 75 73 65 64 20 66 6f 72 20 74 72 61 63 69  s used for traci
32a0: 6e 67 20 74 68 65 20 6f 70 65 72 61 74 69 6e 67  ng the operating
32b0: 20 73 79 73 74 65 6d 20 69 6e 74 65 72 66 61 63   system interfac
32c0: 65 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  es..*/.#if defin
32d0: 65 64 28 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f  ed(SQLITE_FORCE_
32e0: 4f 53 5f 54 52 41 43 45 29 20 7c 7c 20 64 65 66  OS_TRACE) || def
32f0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
3300: 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69  ) || \.    (defi
3310: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3320: 29 20 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57  ) && SQLITE_OS_W
3330: 49 4e 29 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  IN).  extern int
3340: 20 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65 3b   sqlite3OSTrace;
3350: 0a 23 20 64 65 66 69 6e 65 20 4f 53 54 52 41 43  .# define OSTRAC
3360: 45 28 58 29 20 20 20 20 20 20 20 20 20 20 69 66  E(X)          if
3370: 28 20 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65  ( sqlite3OSTrace
3380: 20 29 20 73 71 6c 69 74 65 33 44 65 62 75 67 50   ) sqlite3DebugP
3390: 72 69 6e 74 66 20 58 0a 23 20 64 65 66 69 6e 65  rintf X.# define
33a0: 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f   SQLITE_HAVE_OS_
33b0: 54 52 41 43 45 0a 23 65 6c 73 65 0a 23 20 64 65  TRACE.#else.# de
33c0: 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58 29 0a  fine OSTRACE(X).
33d0: 23 20 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f  # undef  SQLITE_
33e0: 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65  HAVE_OS_TRACE.#e
33f0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74  ndif../*.** Is t
3400: 68 65 20 73 71 6c 69 74 65 33 45 72 72 4e 61 6d  he sqlite3ErrNam
3410: 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65  e() function nee
3420: 64 65 64 20 69 6e 20 74 68 65 20 62 75 69 6c 64  ded in the build
3430: 3f 20 20 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a  ?  Currently,.**
3440: 20 69 74 20 69 73 20 6e 65 65 64 65 64 20 62 79   it is needed by
3450: 20 22 6d 75 74 65 78 5f 77 33 32 2e 63 22 20 28   "mutex_w32.c" (
3460: 77 68 65 6e 20 64 65 62 75 67 67 69 6e 67 29 2c  when debugging),
3470: 20 22 6f 73 5f 77 69 6e 2e 63 22 20 28 77 68 65   "os_win.c" (whe
3480: 6e 0a 2a 2a 20 4f 53 54 52 41 43 45 20 69 73 20  n.** OSTRACE is 
3490: 65 6e 61 62 6c 65 64 29 2c 20 61 6e 64 20 62 79  enabled), and by
34a0: 20 73 65 76 65 72 61 6c 20 22 74 65 73 74 2a 2e   several "test*.
34b0: 63 22 20 66 69 6c 65 73 20 28 77 68 69 63 68 20  c" files (which 
34c0: 61 72 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20  are.** compiled 
34d0: 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53  using SQLITE_TES
34e0: 54 29 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  T)..*/.#if defin
34f0: 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f  ed(SQLITE_HAVE_O
3500: 53 5f 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69  S_TRACE) || defi
3510: 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
3520: 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e   || \.    (defin
3530: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
3540: 20 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49   && SQLITE_OS_WI
3550: 4e 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  N).# define SQLI
3560: 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45  TE_NEED_ERR_NAME
3570: 0a 23 65 6c 73 65 0a 23 20 75 6e 64 65 66 20 20  .#else.# undef  
3580: 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f  SQLITE_NEED_ERR_
3590: 4e 41 4d 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  NAME.#endif../*.
35a0: 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 28  ** Return true (
35b0: 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65  non-zero) if the
35c0: 20 69 6e 70 75 74 20 69 73 20 61 6e 20 69 6e 74   input is an int
35d0: 65 67 65 72 20 74 68 61 74 20 69 73 20 74 6f 6f  eger that is too
35e0: 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74   large.** to fit
35f0: 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20 54 68   in 32-bits.  Th
3600: 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  is macro is used
3610: 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72 69 6f   inside of vario
3620: 75 73 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a  us testcase().**
3630: 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72 69 66   macros to verif
3640: 79 20 74 68 61 74 20 77 65 20 68 61 76 65 20 74  y that we have t
3650: 65 73 74 65 64 20 53 51 4c 69 74 65 20 66 6f 72  ested SQLite for
3660: 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75 70 70   large-file supp
3670: 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ort..*/.#define 
3680: 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20 20 28  IS_BIG_INT(X)  (
3690: 28 28 58 29 26 7e 28 69 36 34 29 30 78 66 66 66  ((X)&~(i64)0xfff
36a0: 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a  fffff)!=0)../*.*
36b0: 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69  * The macro unli
36c0: 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69 6e 74  kely() is a hint
36d0: 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64 73 20   that surrounds 
36e0: 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70  a boolean.** exp
36f0: 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
3700: 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20  usually false.  
3710: 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73  Macro likely() s
3720: 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f  urrounds.** a bo
3730: 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
3740: 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79   that is usually
3750: 20 74 72 75 65 2e 20 20 54 68 65 73 65 20 68 69   true.  These hi
3760: 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e  nts could,.** in
3770: 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73 65 64   theory, be used
3780: 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   by the compiler
3790: 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62 65 74   to generate bet
37a0: 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a  ter code, but.**
37b0: 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65 79 20   currently they 
37c0: 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74  are just comment
37d0: 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65 61 64  s for human read
37e0: 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ers..*/.#define 
37f0: 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28 58 29  likely(X)    (X)
3800: 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c  .#define unlikel
3810: 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c  y(X)  (X)..#incl
3820: 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23 69 6e  ude "hash.h".#in
3830: 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68 22 0a  clude "parse.h".
3840: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e  #include <stdio.
3850: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h>.#include <std
3860: 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  lib.h>.#include 
3870: 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c  <string.h>.#incl
3880: 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23  ude <assert.h>.#
3890: 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65 66 2e  include <stddef.
38a0: 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d  h>../*.** If com
38b0: 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70 72 6f  piling for a pro
38c0: 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61 63 6b  cessor that lack
38d0: 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  s floating point
38e0: 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62   support,.** sub
38f0: 73 74 69 74 75 74 65 20 69 6e 74 65 67 65 72 20  stitute integer 
3900: 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69  for floating-poi
3910: 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  nt.*/.#ifdef SQL
3920: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
3930: 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65  G_POINT.# define
3940: 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f 69   double sqlite_i
3950: 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 66 6c  nt64.# define fl
3960: 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  oat sqlite_int64
3970: 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f  .# define LONGDO
3980: 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74 65  UBLE_TYPE sqlite
3990: 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65 66 20  _int64.# ifndef 
39a0: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23  SQLITE_BIG_DBL.#
39b0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
39c0: 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71 6c 69  _BIG_DBL (((sqli
39d0: 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30  te3_int64)1)<<50
39e0: 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69  ).# endif.# defi
39f0: 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  ne SQLITE_OMIT_D
3a00: 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a  ATETIME_FUNCS 1.
3a10: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3a20: 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23 20 75  OMIT_TRACE 1.# u
3a30: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49 58 45  ndef SQLITE_MIXE
3a40: 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46  D_ENDIAN_64BIT_F
3a50: 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53 51 4c  LOAT.# undef SQL
3a60: 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23  ITE_HAVE_ISNAN.#
3a70: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
3a80: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64  LITE_BIG_DBL.# d
3a90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
3aa0: 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65 6e 64  _DBL (1e99).#end
3ab0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54  if../*.** OMIT_T
3ac0: 45 4d 50 44 42 20 69 73 20 73 65 74 20 74 6f 20  EMPDB is set to 
3ad0: 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  1 if SQLITE_OMIT
3ae0: 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66 69 6e  _TEMPDB is defin
3af0: 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65  ed, or 0.** afte
3b00: 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20 74 68  rward. Having th
3b10: 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20  is macro allows 
3b20: 75 73 20 74 6f 20 63 61 75 73 65 20 74 68 65 20  us to cause the 
3b30: 43 20 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20 74  C compiler .** t
3b40: 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65 64  o omit code used
3b50: 20 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73 20   by TEMP tables 
3b60: 77 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23 69  without messy #i
3b70: 66 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74 73  fndef statements
3b80: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
3b90: 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23  TE_OMIT_TEMPDB.#
3ba0: 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50  define OMIT_TEMP
3bb0: 44 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66 69  DB 1.#else.#defi
3bc0: 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30  ne OMIT_TEMPDB 0
3bd0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
3be0: 68 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74 22  he "file format"
3bf0: 20 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69 6e   number is an in
3c00: 74 65 67 65 72 20 74 68 61 74 20 69 73 20 69 6e  teger that is in
3c10: 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76  cremented whenev
3c20: 65 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c  er.** the VDBE-l
3c30: 65 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74  evel file format
3c40: 20 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20 66   changes.  The f
3c50: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
3c60: 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68  define the.** th
3c70: 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20 66  e default file f
3c80: 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64 61  ormat for new da
3c90: 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65 20  tabases and the 
3ca0: 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72  maximum file for
3cb0: 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65 20  mat.** that the 
3cc0: 6c 69 62 72 61 72 79 20 63 61 6e 20 72 65 61 64  library can read
3cd0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
3ce0: 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52  ITE_MAX_FILE_FOR
3cf0: 4d 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53 51  MAT 4.#ifndef SQ
3d00: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c  LITE_DEFAULT_FIL
3d10: 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e  E_FORMAT.# defin
3d20: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
3d30: 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23  _FILE_FORMAT 4.#
3d40: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74  endif../*.** Det
3d50: 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74  ermine whether t
3d60: 72 69 67 67 65 72 73 20 61 72 65 20 72 65 63 75  riggers are recu
3d70: 72 73 69 76 65 20 62 79 20 64 65 66 61 75 6c 74  rsive by default
3d80: 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a 2a  .  This can be.*
3d90: 2a 20 63 68 61 6e 67 65 64 20 61 74 20 72 75 6e  * changed at run
3da0: 2d 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70 72  -time using a pr
3db0: 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  agma..*/.#ifndef
3dc0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
3dd0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
3de0: 52 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  RS.# define SQLI
3df0: 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52  TE_DEFAULT_RECUR
3e00: 53 49 56 45 5f 54 52 49 47 47 45 52 53 20 30 0a  SIVE_TRIGGERS 0.
3e10: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72  #endif../*.** Pr
3e20: 6f 76 69 64 65 20 61 20 64 65 66 61 75 6c 74 20  ovide a default 
3e30: 76 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54 45  value for SQLITE
3e40: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63  _TEMP_STORE in c
3e50: 61 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73 70  ase it is not sp
3e60: 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68  ecified.** on th
3e70: 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a  e command-line.*
3e80: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
3e90: 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65  _TEMP_STORE.# de
3ea0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50  fine SQLITE_TEMP
3eb0: 5f 53 54 4f 52 45 20 31 0a 23 20 64 65 66 69 6e  _STORE 1.# defin
3ec0: 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  e SQLITE_TEMP_ST
3ed0: 4f 52 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63  ORE_xc 1  /* Exc
3ee0: 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e  lude from ctime.
3ef0: 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  c */.#endif../*.
3f00: 2a 2a 20 49 66 20 6e 6f 20 76 61 6c 75 65 20 68  ** If no value h
3f10: 61 73 20 62 65 65 6e 20 70 72 6f 76 69 64 65 64  as been provided
3f20: 20 66 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f   for SQLITE_MAX_
3f30: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20  WORKER_THREADS, 
3f40: 6f 72 20 69 66 0a 2a 2a 20 53 51 4c 49 54 45 5f  or if.** SQLITE_
3f50: 54 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 73 65  TEMP_STORE is se
3f60: 74 20 74 6f 20 33 20 28 6e 65 76 65 72 20 75 73  t to 3 (never us
3f70: 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65  e temporary file
3f80: 73 29 2c 20 73 65 74 20 69 74 20 0a 2a 2a 20 74  s), set it .** t
3f90: 6f 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53  o zero..*/.#if S
3fa0: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
3fb0: 3d 3d 33 20 7c 7c 20 53 51 4c 49 54 45 5f 54 48  ==3 || SQLITE_TH
3fc0: 52 45 41 44 53 41 46 45 3d 3d 30 0a 23 20 75 6e  READSAFE==0.# un
3fd0: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  def SQLITE_MAX_W
3fe0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
3ff0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
4000: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
4010: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   0.#endif.#ifnde
4020: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
4030: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
4040: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
4050: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 38  WORKER_THREADS 8
4060: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
4070: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
4080: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
4090: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
40a0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
40b0: 45 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69  EADS 0.#endif.#i
40c0: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
40d0: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e  _WORKER_THREADS>
40e0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
40f0: 52 5f 54 48 52 45 41 44 53 0a 23 20 75 6e 64 65  R_THREADS.# unde
4100: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
4110: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
4120: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
4130: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 53  WORKER_THREADS S
4140: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
4150: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 65 6e  RKER_THREADS.#en
4160: 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20  dif.../*.** GCC 
4170: 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20  does not define 
4180: 74 68 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d  the offsetof() m
4190: 61 63 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61  acro so we'll ha
41a0: 76 65 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f  ve to do it.** o
41b0: 75 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66  urselves..*/.#if
41c0: 6e 64 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64  ndef offsetof.#d
41d0: 65 66 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53  efine offsetof(S
41e0: 54 52 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20  TRUCTURE,FIELD) 
41f0: 28 28 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28  ((int)((char*)&(
4200: 28 53 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e  (STRUCTURE*)0)->
4210: 46 49 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a  FIELD)).#endif..
4220: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
4230: 63 6f 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20  compute minimum 
4240: 61 6e 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74  and maximum of t
4250: 77 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23  wo numbers..*/.#
4260: 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29 20  define MIN(A,B) 
4270: 28 28 41 29 3c 28 42 29 3f 28 41 29 3a 28 42 29  ((A)<(B)?(A):(B)
4280: 29 0a 23 64 65 66 69 6e 65 20 4d 41 58 28 41 2c  ).#define MAX(A,
4290: 42 29 20 28 28 41 29 3e 28 42 29 3f 28 41 29 3a  B) ((A)>(B)?(A):
42a0: 28 42 29 29 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70  (B))../*.** Swap
42b0: 20 74 77 6f 20 6f 62 6a 65 63 74 73 20 6f 66 20   two objects of 
42c0: 74 79 70 65 20 54 59 50 45 2e 0a 2a 2f 0a 23 64  type TYPE..*/.#d
42d0: 65 66 69 6e 65 20 53 57 41 50 28 54 59 50 45 2c  efine SWAP(TYPE,
42e0: 41 2c 42 29 20 7b 54 59 50 45 20 74 3d 41 3b 20  A,B) {TYPE t=A; 
42f0: 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a  A=B; B=t;}../*.*
4300: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
4310: 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75  f this machine u
4320: 73 65 73 20 45 42 43 44 49 43 2e 20 20 28 59 65  ses EBCDIC.  (Ye
4330: 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72  s, believe it or
4340: 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61  .** not, there a
4350: 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65  re still machine
4360: 73 20 6f 75 74 20 74 68 65 72 65 20 74 68 61 74  s out there that
4370: 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f   use EBCDIC.).*/
4380: 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30  .#if 'A' == '\30
4390: 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1'.# define SQLI
43a0: 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73  TE_EBCDIC 1.#els
43b0: 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  e.# define SQLIT
43c0: 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66  E_ASCII 1.#endif
43d0: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73  ../*.** Integers
43e0: 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e   of known sizes.
43f0: 20 20 54 68 65 73 65 20 74 79 70 65 64 65 66 73    These typedefs
4400: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f   might change fo
4410: 72 20 61 72 63 68 69 74 65 63 74 75 72 65 73 0a  r architectures.
4420: 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73 69 7a  ** where the siz
4430: 65 73 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f  es very.  Prepro
4440: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72  cessor macros ar
4450: 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74  e available so t
4460: 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73  hat the.** types
4470: 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65   can be convenie
4480: 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61  ntly redefined a
4490: 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20  t compile-type. 
44a0: 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a   Like this:.**.*
44b0: 2a 20 20 20 20 20 20 20 20 20 63 63 20 27 2d 44  *         cc '-D
44c0: 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e  UINTPTR_TYPE=lon
44d0: 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a  g long int' ....
44e0: 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33  */.#ifndef UINT3
44f0: 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  2_TYPE.# ifdef H
4500: 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20  AVE_UINT32_T.#  
4510: 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59  define UINT32_TY
4520: 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c  PE uint32_t.# el
4530: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
4540: 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  T32_TYPE unsigne
4550: 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  d int.# endif.#e
4560: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e  ndif.#ifndef UIN
4570: 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T16_TYPE.# ifdef
4580: 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23   HAVE_UINT16_T.#
4590: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f    define UINT16_
45a0: 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20  TYPE uint16_t.# 
45b0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
45c0: 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67  INT16_TYPE unsig
45d0: 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  ned short int.# 
45e0: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
45f0: 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a  ndef INT16_TYPE.
4600: 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54  # ifdef HAVE_INT
4610: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49  16_T.#  define I
4620: 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f  NT16_TYPE int16_
4630: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
4640: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68  ne INT16_TYPE sh
4650: 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ort int.# endif.
4660: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
4670: 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65  INT8_TYPE.# ifde
4680: 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23  f HAVE_UINT8_T.#
4690: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
46a0: 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c  YPE uint8_t.# el
46b0: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
46c0: 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  T8_TYPE unsigned
46d0: 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65   char.# endif.#e
46e0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54  ndif.#ifndef INT
46f0: 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  8_TYPE.# ifdef H
4700: 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65  AVE_INT8_T.#  de
4710: 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69  fine INT8_TYPE i
4720: 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  nt8_t.# else.#  
4730: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
4740: 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65   signed char.# e
4750: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
4760: 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  def LONGDOUBLE_T
4770: 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e  YPE.# define LON
4780: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e  GDOUBLE_TYPE lon
4790: 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a  g double.#endif.
47a0: 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69  typedef sqlite_i
47b0: 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20 20 20  nt64 i64;       
47c0: 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67     /* 8-byte sig
47d0: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
47e0: 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69  ypedef sqlite_ui
47f0: 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20 20 20  nt64 u64;       
4800: 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69    /* 8-byte unsi
4810: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
4820: 74 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54  typedef UINT32_T
4830: 59 50 45 20 75 33 32 3b 20 20 20 20 20 20 20 20  YPE u32;        
4840: 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73     /* 4-byte uns
4850: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
4860: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f  .typedef UINT16_
4870: 54 59 50 45 20 75 31 36 3b 20 20 20 20 20 20 20  TYPE u16;       
4880: 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e      /* 2-byte un
4890: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
48a0: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f  /.typedef INT16_
48b0: 54 59 50 45 20 69 31 36 3b 20 20 20 20 20 20 20  TYPE i16;       
48c0: 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73       /* 2-byte s
48d0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
48e0: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54  .typedef UINT8_T
48f0: 59 50 45 20 75 38 3b 20 20 20 20 20 20 20 20 20  YPE u8;         
4900: 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e      /* 1-byte un
4910: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
4920: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54  /.typedef INT8_T
4930: 59 50 45 20 69 38 3b 20 20 20 20 20 20 20 20 20  YPE i8;         
4940: 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73       /* 1-byte s
4950: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
4960: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d  ../*.** SQLITE_M
4970: 41 58 5f 55 33 32 20 69 73 20 61 20 75 36 34 20  AX_U32 is a u64 
4980: 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73  constant that is
4990: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34   the maximum u64
49a0: 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63   value.** that c
49b0: 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  an be stored in 
49c0: 61 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f  a u32 without lo
49d0: 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65  ss of data.  The
49e0: 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30   value.** is 0x0
49f0: 30 30 30 30 30 30 30 66 66 66 66 66 66 66 66 2e  0000000ffffffff.
4a00: 20 20 42 75 74 20 62 65 63 61 75 73 65 20 6f 66    But because of
4a10: 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20   quirks of some 
4a20: 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a  compilers, we.**
4a30: 20 68 61 76 65 20 74 6f 20 73 70 65 63 69 66 79   have to specify
4a40: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68   the value in th
4a50: 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65  e less intuitive
4a60: 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a   manner shown:.*
4a70: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
4a80: 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75 36  _MAX_U32  ((((u6
4a90: 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a  4)1)<<32)-1)../*
4aa0: 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65  .** The datatype
4ab0: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 65   used to store e
4ac0: 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68 65 20  stimates of the 
4ad0: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
4ae0: 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  n a.** table or 
4af0: 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73 20  index.  This is 
4b00: 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  an unsigned inte
4b10: 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72 20 39  ger type.  For 9
4b20: 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77  9.9% of.** the w
4b30: 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74 20 69  orld, a 32-bit i
4b40: 6e 74 65 67 65 72 20 69 73 20 73 75 66 66 69 63  nteger is suffic
4b50: 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36 34 2d  ient.  But a 64-
4b60: 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63  bit integer.** c
4b70: 61 6e 20 62 65 20 75 73 65 64 20 61 74 20 63 6f  an be used at co
4b80: 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20 64 65  mpile-time if de
4b90: 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66  sired..*/.#ifdef
4ba0: 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f 53 54   SQLITE_64BIT_ST
4bb0: 41 54 53 0a 20 74 79 70 65 64 65 66 20 75 36 34  ATS. typedef u64
4bc0: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
4bd0: 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20 72  64-bit only if r
4be0: 65 71 75 65 73 74 65 64 20 61 74 20 63 6f 6d 70  equested at comp
4bf0: 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73  ile-time */.#els
4c00: 65 0a 20 74 79 70 65 64 65 66 20 75 33 32 20 74  e. typedef u32 t
4c10: 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32  Rowcnt;    /* 32
4c20: 2d 62 69 74 20 69 73 20 74 68 65 20 64 65 66 61  -bit is the defa
4c30: 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  ult */.#endif../
4c40: 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64 20 71  *.** Estimated q
4c50: 75 61 6e 74 69 74 69 65 73 20 75 73 65 64 20 66  uantities used f
4c60: 6f 72 20 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e  or query plannin
4c70: 67 20 61 72 65 20 73 74 6f 72 65 64 20 61 73 20  g are stored as 
4c80: 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69  16-bit.** logari
4c90: 74 68 6d 73 2e 20 20 46 6f 72 20 71 75 61 6e 74  thms.  For quant
4ca0: 69 74 79 20 58 2c 20 74 68 65 20 76 61 6c 75 65  ity X, the value
4cb0: 20 73 74 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f   stored is 10*lo
4cc0: 67 32 28 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20  g2(X).  This.** 
4cd0: 67 69 76 65 73 20 61 20 70 6f 73 73 69 62 6c 65  gives a possible
4ce0: 20 72 61 6e 67 65 20 6f 66 20 76 61 6c 75 65 73   range of values
4cf0: 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74 65 6c   of approximatel
4d00: 79 20 31 2e 30 65 39 38 36 20 74 6f 20 31 65 2d  y 1.0e986 to 1e-
4d10: 39 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20  986..** But the 
4d20: 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 61  allowed values a
4d30: 72 65 20 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f  re "grainy".  No
4d40: 74 20 65 76 65 72 79 20 76 61 6c 75 65 20 69 73  t every value is
4d50: 20 72 65 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a   representable..
4d60: 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  ** For example, 
4d70: 71 75 61 6e 74 69 74 69 65 73 20 31 36 20 61 6e  quantities 16 an
4d80: 64 20 31 37 20 61 72 65 20 62 6f 74 68 20 72 65  d 17 are both re
4d90: 70 72 65 73 65 6e 74 65 64 20 62 79 20 61 20 4c  presented by a L
4da0: 6f 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20  ogEst.** of 40. 
4db0: 20 48 6f 77 65 76 65 72 2c 20 73 69 6e 63 65 20   However, since 
4dc0: 4c 6f 67 45 73 74 20 71 75 61 6e 74 69 74 69 65  LogEst quantitie
4dd0: 73 20 61 72 65 20 73 75 70 70 6f 73 65 20 74 6f  s are suppose to
4de0: 20 62 65 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a   be estimates,.*
4df0: 2a 20 6e 6f 74 20 65 78 61 63 74 20 76 61 6c 75  * not exact valu
4e00: 65 73 2c 20 74 68 69 73 20 69 6d 70 72 65 63 69  es, this impreci
4e10: 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20 70 72  sion is not a pr
4e20: 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f  oblem..**.** "Lo
4e30: 67 45 73 74 22 20 69 73 20 73 68 6f 72 74 20 66  gEst" is short f
4e40: 6f 72 20 22 4c 6f 67 61 72 69 74 68 6d 69 63 20  or "Logarithmic 
4e50: 45 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a  Estimate"..**.**
4e60: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20   Examples:.**   
4e70: 20 20 20 31 20 2d 3e 20 30 20 20 20 20 20 20 20     1 -> 0       
4e80: 20 20 20 20 20 20 20 32 30 20 2d 3e 20 34 33 20         20 -> 43 
4e90: 20 20 20 20 20 20 20 20 20 31 30 30 30 30 20 2d           10000 -
4ea0: 3e 20 31 33 32 0a 2a 2a 20 20 20 20 20 20 32 20  > 132.**      2 
4eb0: 2d 3e 20 31 30 20 20 20 20 20 20 20 20 20 20 20  -> 10           
4ec0: 20 20 32 35 20 2d 3e 20 34 36 20 20 20 20 20 20    25 -> 46      
4ed0: 20 20 20 20 32 35 30 30 30 20 2d 3e 20 31 34 36      25000 -> 146
4ee0: 0a 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20 31 36  .**      3 -> 16
4ef0: 20 20 20 20 20 20 20 20 20 20 20 20 31 30 30 20              100 
4f00: 2d 3e 20 36 36 20 20 20 20 20 20 20 20 31 30 30  -> 66        100
4f10: 30 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20  0000 -> 199.**  
4f20: 20 20 20 20 34 20 2d 3e 20 32 30 20 20 20 20 20      4 -> 20     
4f30: 20 20 20 20 20 20 31 30 30 30 20 2d 3e 20 39 39        1000 -> 99
4f40: 20 20 20 20 20 20 20 20 31 30 34 38 35 37 36 20          1048576 
4f50: 2d 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20 31 30  -> 200.**     10
4f60: 20 2d 3e 20 33 33 20 20 20 20 20 20 20 20 20 20   -> 33          
4f70: 20 31 30 32 34 20 2d 3e 20 31 30 30 20 20 20 20   1024 -> 100    
4f80: 34 32 39 34 39 36 37 32 39 36 20 2d 3e 20 33 32  4294967296 -> 32
4f90: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45  0.**.** The LogE
4fa0: 73 74 20 63 61 6e 20 62 65 20 6e 65 67 61 74 69  st can be negati
4fb0: 76 65 20 74 6f 20 69 6e 64 69 63 61 74 65 20 66  ve to indicate f
4fc0: 72 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73  ractional values
4fd0: 2e 20 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a  . .** Examples:.
4fe0: 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20  **.**    0.5 -> 
4ff0: 2d 31 30 20 20 20 20 20 20 20 20 20 20 20 30 2e  -10           0.
5000: 31 20 2d 3e 20 2d 33 33 20 20 20 20 20 20 20 20  1 -> -33        
5010: 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f  0.0625 -> -40.*/
5020: 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54  .typedef INT16_T
5030: 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a  YPE LogEst;../*.
5040: 2a 2a 20 53 65 74 20 74 68 65 20 53 51 4c 49 54  ** Set the SQLIT
5050: 45 5f 50 54 52 53 49 5a 45 20 6d 61 63 72 6f 20  E_PTRSIZE macro 
5060: 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
5070: 20 62 79 74 65 73 20 69 6e 20 61 20 70 6f 69 6e   bytes in a poin
5080: 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ter.*/.#ifndef S
5090: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 0a 23 20  QLITE_PTRSIZE.# 
50a0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 53 49 5a  if defined(__SIZ
50b0: 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 29 0a 23  EOF_POINTER__).#
50c0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
50d0: 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49 5a 45 4f  _PTRSIZE __SIZEO
50e0: 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23 20 65 6c  F_POINTER__.# el
50f0: 69 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29  if defined(i386)
5100: 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28       || defined(
5110: 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64  __i386__)   || d
5120: 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20  efined(_M_IX86) 
5130: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 20 64  ||    \.       d
5140: 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20  efined(_M_ARM)  
5150: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61 72   || defined(__ar
5160: 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65 66 69 6e  m__)    || defin
5170: 65 64 28 5f 5f 78 38 36 29 0a 23 20 20 20 64 65  ed(__x86).#   de
5180: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53  fine SQLITE_PTRS
5190: 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20 20  IZE 4.# else.#  
51a0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
51b0: 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69 66  TRSIZE 8.# endif
51c0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
51d0: 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
51e0: 6e 65 20 77 68 65 74 68 65 72 20 74 68 65 20 6d  ne whether the m
51f0: 61 63 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72  achine is big or
5200: 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a   little endian,.
5210: 2a 2a 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f  ** and whether o
5220: 72 20 6e 6f 74 20 74 68 61 74 20 64 65 74 65 72  r not that deter
5230: 6d 69 6e 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d  mination is run-
5240: 74 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d  time or compile-
5250: 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20  time..**.** For 
5260: 62 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  best performance
5270: 2c 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  , an attempt is 
5280: 6d 61 64 65 20 74 6f 20 67 75 65 73 73 20 61 74  made to guess at
5290: 20 74 68 65 20 62 79 74 65 2d 6f 72 64 65 72 0a   the byte-order.
52a0: 2a 2a 20 75 73 69 6e 67 20 43 2d 70 72 65 70 72  ** using C-prepr
52b0: 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20  ocessor macros. 
52c0: 20 49 66 20 74 68 61 74 20 69 73 20 75 6e 73 75   If that is unsu
52d0: 63 63 65 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a  ccessful, or if.
52e0: 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 52 55 4e 54  ** -DSQLITE_RUNT
52f0: 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 3d 31 20  IME_BYTEORDER=1 
5300: 69 73 20 73 65 74 2c 20 74 68 65 6e 20 62 79 74  is set, then byt
5310: 65 2d 6f 72 64 65 72 20 69 73 20 64 65 74 65 72  e-order is deter
5320: 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72 75 6e 2d  mined.** at run-
5330: 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  time..*/.#ifdef 
5340: 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
5350: 49 4f 4e 0a 63 6f 6e 73 74 20 69 6e 74 20 73 71  ION.const int sq
5360: 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 65  lite3one = 1;.#e
5370: 6c 73 65 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  lse.extern const
5380: 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b   int sqlite3one;
5390: 0a 23 65 6e 64 69 66 0a 23 69 66 20 28 64 65 66  .#endif.#if (def
53a0: 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20 7c  ined(i386)     |
53b0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36  | defined(__i386
53c0: 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  __)   || defined
53d0: 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20 20  (_M_IX86) ||    
53e0: 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f  \.     defined(_
53f0: 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64 65 66 69  _x86_64) || defi
5400: 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20  ned(__x86_64__) 
5410: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36  || defined(_M_X6
5420: 34 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20  4)  ||    \.    
5430: 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36   defined(_M_AMD6
5440: 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d  4) || defined(_M
5450: 5f 41 52 4d 29 20 20 20 20 20 7c 7c 20 64 65 66  _ARM)     || def
5460: 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c  ined(__x86)   ||
5470: 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e      \.     defin
5480: 65 64 28 5f 5f 61 72 6d 5f 5f 29 29 20 26 26 20  ed(__arm__)) && 
5490: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
54a0: 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45  RUNTIME_BYTEORDE
54b0: 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  R).# define SQLI
54c0: 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20  TE_BYTEORDER    
54d0: 31 32 33 34 0a 23 20 64 65 66 69 6e 65 20 53 51  1234.# define SQ
54e0: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20  LITE_BIGENDIAN  
54f0: 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c    0.# define SQL
5500: 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e  ITE_LITTLEENDIAN
5510: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
5520: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20  TE_UTF16NATIVE  
5530: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a 23  SQLITE_UTF16LE.#
5540: 65 6e 64 69 66 0a 23 69 66 20 28 64 65 66 69 6e  endif.#if (defin
5550: 65 64 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20  ed(sparc)    || 
5560: 64 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29  defined(__ppc__)
5570: 29 20 20 5c 0a 20 20 20 20 26 26 20 21 64 65 66  )  \.    && !def
5580: 69 6e 65 64 28 53 51 4c 49 54 45 5f 52 55 4e 54  ined(SQLITE_RUNT
5590: 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23  IME_BYTEORDER).#
55a0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
55b0: 59 54 45 4f 52 44 45 52 20 20 20 20 34 33 32 31  YTEORDER    4321
55c0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
55d0: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 31 0a  _BIGENDIAN    1.
55e0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
55f0: 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a 23  LITTLEENDIAN 0.#
5600: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55   define SQLITE_U
5610: 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49  TF16NATIVE  SQLI
5620: 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6e 64 69  TE_UTF16BE.#endi
5630: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
5640: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 29  QLITE_BYTEORDER)
5650: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5660: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 30 20  _BYTEORDER    0 
5670: 20 20 20 20 2f 2a 20 30 20 6d 65 61 6e 73 20 22      /* 0 means "
5680: 75 6e 6b 6e 6f 77 6e 20 61 74 20 63 6f 6d 70 69  unknown at compi
5690: 6c 65 2d 74 69 6d 65 22 20 2a 2f 0a 23 20 64 65  le-time" */.# de
56a0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45  fine SQLITE_BIGE
56b0: 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72  NDIAN    (*(char
56c0: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
56d0: 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==0).# define SQ
56e0: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
56f0: 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71  N (*(char *)(&sq
5700: 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20  lite3one)==1).# 
5710: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54  define SQLITE_UT
5720: 46 31 36 4e 41 54 49 56 45 20 20 28 53 51 4c 49  F16NATIVE  (SQLI
5730: 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c  TE_BIGENDIAN?SQL
5740: 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49  ITE_UTF16BE:SQLI
5750: 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64  TE_UTF16LE).#end
5760: 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61  if../*.** Consta
5770: 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67  nts for the larg
5780: 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74  est and smallest
5790: 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74   possible 64-bit
57a0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73   signed integers
57b0: 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  ..** These macro
57c0: 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20 74  s are designed t
57d0: 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79  o work correctly
57e0: 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20   on both 32-bit 
57f0: 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f  and 64-bit.** co
5800: 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66  mpilers..*/.#def
5810: 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36  ine LARGEST_INT6
5820: 34 20 20 28 30 78 66 66 66 66 66 66 66 66 7c 28  4  (0xffffffff|(
5830: 28 28 69 36 34 29 30 78 37 66 66 66 66 66 66 66  ((i64)0x7fffffff
5840: 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20  )<<32)).#define 
5850: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28  SMALLEST_INT64 (
5860: 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47  ((i64)-1) - LARG
5870: 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20 0a  EST_INT64)../* .
5880: 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e 75  ** Round up a nu
5890: 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78 74  mber to the next
58a0: 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c 65   larger multiple
58b0: 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73 20   of 8.  This is 
58c0: 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65  used.** to force
58d0: 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e   8-byte alignmen
58e0: 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63 68  t on 64-bit arch
58f0: 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64  itectures..*/.#d
5900: 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29 20  efine ROUND8(x) 
5910: 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37 29      (((x)+7)&~7)
5920: 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f  ../*.** Round do
5930: 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65 73  wn to the neares
5940: 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a  t multiple of 8.
5950: 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44  */.#define ROUND
5960: 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e 37  DOWN8(x) ((x)&~7
5970: 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20  )../*.** Assert 
5980: 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65 72  that the pointer
5990: 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74 6f   X is aligned to
59a0: 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e 64   an 8-byte bound
59b0: 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61  ary.  This.** ma
59c0: 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c 79  cro is used only
59d0: 20 77 69 74 68 69 6e 20 61 73 73 65 72 74 28 29   within assert()
59e0: 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
59f0: 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a  the code gets.**
5a00: 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72   all alignment r
5a10: 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72 72  estrictions corr
5a20: 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70  ect..**.** Excep
5a30: 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f 42  t, if SQLITE_4_B
5a40: 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c  YTE_ALIGNED_MALL
5a50: 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74  OC is defined, t
5a60: 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72  hen the.** under
5a70: 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69  lying malloc() i
5a80: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69  mplementation mi
5a90: 67 68 74 20 72 65 74 75 72 6e 20 75 73 20 34 2d  ght return us 4-
5aa0: 62 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20  byte aligned.** 
5ab0: 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74 68  pointers.  In th
5ac0: 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65  at case, only ve
5ad0: 72 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69 67  rify 4-byte alig
5ae0: 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66  nment..*/.#ifdef
5af0: 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41   SQLITE_4_BYTE_A
5b00: 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20  LIGNED_MALLOC.# 
5b10: 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54  define EIGHT_BYT
5b20: 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20  E_ALIGNMENT(X)  
5b30: 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d   ((((char*)(X) -
5b40: 20 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d 30   (char*)0)&3)==0
5b50: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
5b60: 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47   EIGHT_BYTE_ALIG
5b70: 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63  NMENT(X)   ((((c
5b80: 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72  har*)(X) - (char
5b90: 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64  *)0)&7)==0).#end
5ba0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c  if../*.** Disabl
5bb0: 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f  e MMAP on platfo
5bc0: 72 6d 73 20 77 68 65 72 65 20 69 74 20 69 73 20  rms where it is 
5bd0: 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72  known to not wor
5be0: 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  k.*/.#if defined
5bf0: 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c  (__OpenBSD__) ||
5c00: 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54   defined(__QNXNT
5c10: 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51 4c  O__).# undef SQL
5c20: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
5c30: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
5c40: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
5c50: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
5c60: 44 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20  Default maximum 
5c70: 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75  size of memory u
5c80: 73 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61  sed by memory-ma
5c90: 70 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65 20  pped I/O in the 
5ca0: 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f  VFS.*/.#ifdef __
5cb0: 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64  APPLE__.# includ
5cc0: 65 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74 69  e <TargetConditi
5cd0: 6f 6e 61 6c 73 2e 68 3e 0a 23 20 69 66 20 54 41  onals.h>.# if TA
5ce0: 52 47 45 54 5f 4f 53 5f 49 50 48 4f 4e 45 0a 23  RGET_OS_IPHONE.#
5cf0: 20 20 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f     undef SQLITE_
5d00: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
5d10: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
5d20: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a  MAX_MMAP_SIZE 0.
5d30: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
5d40: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41  ifndef SQLITE_MA
5d50: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66  X_MMAP_SIZE.# if
5d60: 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78   defined(__linux
5d70: 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e  __) \.  || defin
5d80: 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c  ed(_WIN32) \.  |
5d90: 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50  | (defined(__APP
5da0: 4c 45 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64  LE__) && defined
5db0: 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20  (__MACH__)) \.  
5dc0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e  || defined(__sun
5dd0: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
5de0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
5df0: 45 20 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a  E 0x7fff0000  /*
5e00: 20 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23   2147418112 */.#
5e10: 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65   else.#   define
5e20: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
5e30: 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a  _SIZE 0.# endif.
5e40: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5e50: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63  MAX_MMAP_SIZE_xc
5e60: 20 31 20 2f 2a 20 65 78 63 6c 75 64 65 20 66 72   1 /* exclude fr
5e70: 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65  om ctime.c */.#e
5e80: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
5e90: 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a  default MMAP_SIZ
5ea0: 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c  E is zero on all
5eb0: 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c   platforms.  Or,
5ec0: 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65   even if a large
5ed0: 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41  r.** default MMA
5ee0: 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66  P_SIZE is specif
5ef0: 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ied at compile-t
5f00: 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74  ime, make sure t
5f10: 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e  hat it does.** n
5f20: 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61  ot exceed the ma
5f30: 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e  ximum mmap size.
5f40: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
5f50: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
5f60: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
5f70: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
5f80: 50 5f 53 49 5a 45 20 30 0a 23 20 64 65 66 69 6e  P_SIZE 0.# defin
5f90: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
5fa0: 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20  _MMAP_SIZE_xc 1 
5fb0: 20 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d   /* Exclude from
5fc0: 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64   ctime.c */.#end
5fd0: 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45  if.#if SQLITE_DE
5fe0: 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e  FAULT_MMAP_SIZE>
5ff0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
6000: 53 49 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c  SIZE.# undef SQL
6010: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
6020: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
6030: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
6040: 41 50 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d  AP_SIZE SQLITE_M
6050: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e  AX_MMAP_SIZE.#en
6060: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20  dif../*.** Only 
6070: 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e  one of SQLITE_EN
6080: 41 42 4c 45 5f 53 54 41 54 33 20 6f 72 20 53 51  ABLE_STAT3 or SQ
6090: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
60a0: 34 20 63 61 6e 20 62 65 20 64 65 66 69 6e 65 64  4 can be defined
60b0: 2e 0a 2a 2a 20 50 72 69 6f 72 69 74 79 20 69 73  ..** Priority is
60c0: 20 67 69 76 65 6e 20 74 6f 20 53 51 4c 49 54 45   given to SQLITE
60d0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20 20  _ENABLE_STAT4.  
60e0: 49 66 20 65 69 74 68 65 72 20 61 72 65 20 64 65  If either are de
60f0: 66 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64  fined, also.** d
6100: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
6110: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
6120: 54 34 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  T4.*/.#ifdef SQL
6130: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
6140: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
6150: 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64  ENABLE_STAT3.# d
6160: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
6170: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
6180: 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54  T4 1.#elif SQLIT
6190: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23  E_ENABLE_STAT3.#
61a0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
61b0: 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
61c0: 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c  TAT4 1.#elif SQL
61d0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
61e0: 5f 4f 52 5f 53 54 41 54 34 0a 23 20 75 6e 64 65  _OR_STAT4.# unde
61f0: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
6200: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23  STAT3_OR_STAT4.#
6210: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c  endif../*.** SEL
6220: 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
6230: 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20   will be either 
6240: 31 20 6f 72 20 30 20 64 65 70 65 6e 64 69 6e 67  1 or 0 depending
6250: 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e   on whether or n
6260: 6f 74 0a 2a 2a 20 74 68 65 20 53 65 6c 65 63 74  ot.** the Select
6270: 20 71 75 65 72 79 20 67 65 6e 65 72 61 74 6f 72   query generator
6280: 20 74 72 61 63 69 6e 67 20 6c 6f 67 69 63 20 69   tracing logic i
6290: 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a  s turned on..*/.
62a0: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
62b0: 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
62c0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
62d0: 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29 0a  LE_SELECTTRACE).
62e0: 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54  # define SELECTT
62f0: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 31 0a 23  RACE_ENABLED 1.#
6300: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 45  else.# define SE
6310: 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
6320: 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D 0.#endif../*.*
6330: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
6340: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
6350: 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
6360: 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75   to store the bu
6370: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
6380: 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76  llback for a giv
6390: 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65  en sqlite handle
63a0: 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c  . .**.** The sql
63b0: 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20  ite.busyHandler 
63c0: 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71  member of the sq
63d0: 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74  lite struct cont
63e0: 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a  ains the busy.**
63f0: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68   callback for th
6400: 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
6410: 65 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70  e. Each pager op
6420: 65 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c  ened via the sql
6430: 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73  ite.** handle is
6440: 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65   passed a pointe
6450: 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79  r to sqlite.busy
6460: 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73  Handler. The bus
6470: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
6480: 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74  lback is current
6490: 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20  ly invoked only 
64a0: 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65  from within page
64b0: 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  r.c..*/.typedef 
64c0: 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c  struct BusyHandl
64d0: 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a  er BusyHandler;.
64e0: 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c  struct BusyHandl
64f0: 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75  er {.  int (*xFu
6500: 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b  nc)(void *,int);
6510: 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61    /* The busy ca
6520: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
6530: 20 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20   *pArg;         
6540: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
6550: 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c  arg to busy call
6560: 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  back */.  int nB
6570: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
6580: 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e       /* Incremen
6590: 74 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75  ted with each bu
65a0: 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f  sy call */.};../
65b0: 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  *.** Name of the
65c0: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
65d0: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73   table.  The mas
65e0: 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62  ter database tab
65f0: 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69  le.** is a speci
6600: 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f  al table that ho
6610: 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e  lds the names an
6620: 64 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20  d attributes of 
6630: 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c  all.** user tabl
6640: 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a  es and indices..
6650: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45  */.#define MASTE
6660: 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71  R_NAME       "sq
6670: 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65  lite_master".#de
6680: 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52  fine TEMP_MASTER
6690: 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74  _NAME  "sqlite_t
66a0: 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a  emp_master"../*.
66b0: 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65  ** The root-page
66c0: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64   of the master d
66d0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a  atabase table..*
66e0: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
66f0: 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f  _ROOT       1../
6700: 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66  *.** The name of
6710: 20 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c   the schema tabl
6720: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43  e..*/.#define SC
6730: 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28  HEMA_TABLE(x)  (
6740: 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26  (!OMIT_TEMPDB)&&
6750: 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54  (x==1)?TEMP_MAST
6760: 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e  ER_NAME:MASTER_N
6770: 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f  AME)../*.** A co
6780: 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20  nvenience macro 
6790: 74 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65  that returns the
67a0: 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   number of eleme
67b0: 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72  nts in.** an arr
67c0: 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41  ay..*/.#define A
67d0: 72 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28  rraySize(X)    (
67e0: 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f  (int)(sizeof(X)/
67f0: 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a  sizeof(X[0])))..
6800: 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20  /*.** Determine 
6810: 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  if the argument 
6820: 69 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77  is a power of tw
6830: 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50  o.*/.#define IsP
6840: 6f 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28  owerOfTwo(X) (((
6850: 58 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a  X)&((X)-1))==0).
6860: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
6870: 77 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20  wing value as a 
6880: 64 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73  destructor means
6890: 20 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44   to use sqlite3D
68a0: 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20  bFree()..** The 
68b0: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20  sqlite3DbFree() 
68c0: 72 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73  routine requires
68d0: 20 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20   two parameters 
68e0: 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a  instead of the .
68f0: 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72  ** one parameter
6900: 20 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72   that destructor
6910: 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e  s normally want.
6920: 20 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20    So we have to 
6930: 69 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68  introduce .** th
6940: 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74  is magic value t
6950: 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f  hat the code kno
6960: 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66  ws to handle dif
6970: 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a  ferently.  Any .
6980: 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20  ** pointer will 
6990: 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e  work here as lon
69a0: 67 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69  g as it is disti
69b0: 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f  nct from SQLITE_
69c0: 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51  STATIC.** and SQ
69d0: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a  LITE_TRANSIENT..
69e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
69f0: 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71  E_DYNAMIC   ((sq
6a00: 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72  lite3_destructor
6a10: 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c  _type)sqlite3Mal
6a20: 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20  locSize)../*.** 
6a30: 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54  When SQLITE_OMIT
6a40: 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c  _WSD is defined,
6a50: 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74   it means that t
6a60: 68 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f  he target platfo
6a70: 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73  rm does.** not s
6a80: 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20  upport Writable 
6a90: 53 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44  Static Data (WSD
6aa0: 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c  ) such as global
6ab0: 20 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69   and static vari
6ac0: 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61  ables..** All va
6ad0: 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74  riables must eit
6ae0: 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74  her be on the st
6af0: 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c  ack or dynamical
6b00: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f  ly allocated fro
6b10: 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20  m.** the heap.  
6b20: 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75  When WSD is unsu
6b30: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72  pported, the var
6b40: 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f  iable declaratio
6b50: 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20  ns scattered.** 
6b60: 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53  throughout the S
6b70: 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20  QLite code must 
6b80: 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73  become constants
6b90: 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53   instead.  The S
6ba0: 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63  QLITE_WSD.** mac
6bb0: 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74  ro is used for t
6bc0: 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e  his purpose.  An
6bd0: 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66  d instead of ref
6be0: 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72  erencing the var
6bf0: 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c  iable.** directl
6c00: 79 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f  y, we use its co
6c10: 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20  nstant as a key 
6c20: 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75  to lookup the ru
6c30: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
6c40: 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20  .** buffer that 
6c50: 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61  holds real varia
6c60: 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61  ble.  The consta
6c70: 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69  nt is also the i
6c80: 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f  nitializer.** fo
6c90: 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  r the run-time a
6ca0: 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e  llocated buffer.
6cb0: 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73  .**.** In the us
6cc0: 75 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57  ual case where W
6cd0: 53 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c  SD is supported,
6ce0: 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20   the SQLITE_WSD 
6cf0: 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61  and GLOBAL.** ma
6d00: 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f  cros become no-o
6d10: 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f  ps and have zero
6d20: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70   performance imp
6d30: 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  act..*/.#ifdef S
6d40: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20  QLITE_OMIT_WSD. 
6d50: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
6d60: 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66  WSD const.  #def
6d70: 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20  ine GLOBAL(t,v) 
6d80: 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73  (*(t*)sqlite3_ws
6d90: 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28  d_find((void*)&(
6da0: 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a  v), sizeof(v))).
6db0: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
6dc0: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c  3GlobalConfig GL
6dd0: 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69  OBAL(struct Sqli
6de0: 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74  te3Config, sqlit
6df0: 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20  e3Config).  int 
6e00: 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74  sqlite3_wsd_init
6e10: 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a  (int N, int J);.
6e20: 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f    void *sqlite3_
6e30: 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b  wsd_find(void *K
6e40: 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a  , int L);.#else.
6e50: 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
6e60: 5f 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20  _WSD .  #define 
6e70: 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20  GLOBAL(t,v) v.  
6e80: 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47  #define sqlite3G
6e90: 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69  lobalConfig sqli
6ea0: 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66  te3Config.#endif
6eb0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
6ec0: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65  owing macros are
6ed0: 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73   used to suppres
6ee0: 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  s compiler warni
6ef0: 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61  ngs and to.** ma
6f00: 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68  ke it clear to h
6f10: 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65  uman readers whe
6f20: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
6f30: 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65  ameter is delibe
6f40: 72 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20  rately .** left 
6f50: 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68  unused within th
6f60: 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63  e body of a func
6f70: 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c  tion. This usual
6f80: 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a  ly happens when.
6f90: 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73  ** a function is
6fa0: 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75   called via a fu
6fb0: 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20  nction pointer. 
6fc0: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20  For example the 
6fd0: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
6fe0: 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67  on of an SQL agg
6ff0: 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c  regate step call
7000: 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65  back may not use
7010: 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65   the.** paramete
7020: 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65  r indicating the
7030: 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
7040: 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74  ents passed to t
7050: 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a  he aggregate,.**
7060: 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61   if it knows tha
7070: 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63  t this is enforc
7080: 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a  ed elsewhere..**
7090: 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74  .** When a funct
70a0: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
70b0: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
70c0: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
70d0: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a   of a function,.
70e0: 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c  ** it is general
70f0: 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65  ly named "NotUse
7100: 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22  d" or "NotUsed2"
7110: 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20   to make things 
7120: 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a  even clearer..**
7130: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20   However, these 
7140: 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20  macros may also 
7150: 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  be used to suppr
7160: 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c  ess warnings rel
7170: 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d  ated to.** param
7180: 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f  eters that may o
7190: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65  r may not be use
71a0: 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63  d depending on c
71b0: 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f  ompilation optio
71c0: 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  ns..** For examp
71d0: 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74  le those paramet
71e0: 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e  ers only used in
71f0: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
7200: 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a  ents. In these.*
7210: 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61  * cases the para
7220: 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64  meters are named
7230: 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61   as per the usua
7240: 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a  l conventions..*
7250: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  /.#define UNUSED
7260: 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76  _PARAMETER(x) (v
7270: 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20  oid)(x).#define 
7280: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
7290: 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41  2(x,y) UNUSED_PA
72a0: 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45  RAMETER(x),UNUSE
72b0: 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a  D_PARAMETER(y)..
72c0: 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65  /*.** Forward re
72d0: 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75  ferences to stru
72e0: 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65  ctures.*/.typede
72f0: 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  f struct AggInfo
7300: 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65   AggInfo;.typede
7310: 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  f struct AuthCon
7320: 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74  text AuthContext
7330: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7340: 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74   AutoincInfo Aut
7350: 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65  oincInfo;.typede
7360: 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20  f struct Bitvec 
7370: 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20  Bitvec;.typedef 
7380: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43  struct CollSeq C
7390: 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20  ollSeq;.typedef 
73a0: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f  struct Column Co
73b0: 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  lumn;.typedef st
73c0: 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65  ruct Db Db;.type
73d0: 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d  def struct Schem
73e0: 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65  a Schema;.typede
73f0: 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78  f struct Expr Ex
7400: 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  pr;.typedef stru
7410: 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72  ct ExprList Expr
7420: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
7430: 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78  ruct ExprSpan Ex
7440: 70 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20  prSpan;.typedef 
7450: 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79  struct FKey FKey
7460: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7470: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
7480: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a  FuncDestructor;.
7490: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
74a0: 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a  uncDef FuncDef;.
74b0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
74c0: 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44  uncDefHash FuncD
74d0: 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20  efHash;.typedef 
74e0: 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64  struct IdList Id
74f0: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
7500: 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78  ruct Index Index
7510: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7520: 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64   IndexSample Ind
7530: 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65  exSample;.typede
7540: 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73  f struct KeyClas
7550: 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65  s KeyClass;.type
7560: 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e  def struct KeyIn
7570: 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65  fo KeyInfo;.type
7580: 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61  def struct Looka
7590: 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a  side Lookaside;.
75a0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c  typedef struct L
75b0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f  ookasideSlot Loo
75c0: 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65  kasideSlot;.type
75d0: 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c  def struct Modul
75e0: 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65  e Module;.typede
75f0: 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  f struct NameCon
7600: 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  text NameContext
7610: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7620: 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79   Parse Parse;.ty
7630: 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72 65  pedef struct Pre
7640: 55 70 64 61 74 65 20 50 72 65 55 70 64 61 74 65  Update PreUpdate
7650: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7660: 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73   PrintfArguments
7670: 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73   PrintfArguments
7680: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7690: 20 52 6f 77 53 65 74 20 52 6f 77 53 65 74 3b 0a   RowSet RowSet;.
76a0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
76b0: 61 76 65 70 6f 69 6e 74 20 53 61 76 65 70 6f 69  avepoint Savepoi
76c0: 6e 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  nt;.typedef stru
76d0: 63 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63 74  ct Select Select
76e0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
76f0: 20 53 51 4c 69 74 65 54 68 72 65 61 64 20 53 51   SQLiteThread SQ
7700: 4c 69 74 65 54 68 72 65 61 64 3b 0a 74 79 70 65  LiteThread;.type
7710: 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63  def struct Selec
7720: 74 44 65 73 74 20 53 65 6c 65 63 74 44 65 73 74  tDest SelectDest
7730: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7740: 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73 74   SrcList SrcList
7750: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7760: 20 53 74 72 41 63 63 75 6d 20 53 74 72 41 63 63   StrAccum StrAcc
7770: 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  um;.typedef stru
7780: 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a  ct Table Table;.
7790: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
77a0: 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f  ableLock TableLo
77b0: 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ck;.typedef stru
77c0: 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a  ct Token Token;.
77d0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
77e0: 72 65 65 56 69 65 77 20 54 72 65 65 56 69 65 77  reeView TreeView
77f0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7800: 20 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72   Trigger Trigger
7810: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7820: 20 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67   TriggerPrg Trig
7830: 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20  gerPrg;.typedef 
7840: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
7850: 65 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a  ep TriggerStep;.
7860: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55  typedef struct U
7870: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e  npackedRecord Un
7880: 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79  packedRecord;.ty
7890: 70 65 64 65 66 20 73 74 72 75 63 74 20 56 54 61  pedef struct VTa
78a0: 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65  ble VTable;.type
78b0: 64 65 66 20 73 74 72 75 63 74 20 56 74 61 62 43  def struct VtabC
78c0: 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65  tx VtabCtx;.type
78d0: 64 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65  def struct Walke
78e0: 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65  r Walker;.typede
78f0: 66 20 73 74 72 75 63 74 20 57 68 65 72 65 49 6e  f struct WhereIn
7900: 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79  fo WhereInfo;.ty
7910: 70 65 64 65 66 20 73 74 72 75 63 74 20 57 69 74  pedef struct Wit
7920: 68 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44  h With;../*.** D
7930: 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64  efer sourcing vd
7940: 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68  be.h and btree.h
7950: 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65   until after the
7960: 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42   "u8" and .** "B
7970: 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65  usyHandler" type
7980: 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73  defs. vdbe.h als
7990: 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77  o requires a few
79a0: 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a   of the opaque.*
79b0: 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20  * pointer types 
79c0: 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64  (i.e. FuncDef) d
79d0: 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f  efined above..*/
79e0: 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65  .#include "btree
79f0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64  .h".#include "vd
7a00: 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  be.h".#include "
7a10: 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64  pager.h".#includ
7a20: 65 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69  e "pcache.h"..#i
7a30: 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69  nclude "os.h".#i
7a40: 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22  nclude "mutex.h"
7a50: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  .../*.** Each da
7a60: 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62  tabase file to b
7a70: 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68  e accessed by th
7a80: 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69  e system is an i
7a90: 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
7aa0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
7ab0: 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72  cture.  There ar
7ac0: 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f  e normally two o
7ad0: 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72  f these structur
7ae0: 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c  es.** in the sql
7af0: 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e  ite.aDb[] array.
7b00: 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20    aDb[0] is the 
7b10: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
7b20: 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d  le and.** aDb[1]
7b30: 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
7b40: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f   file used to ho
7b50: 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ld temporary tab
7b60: 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c  les.  Additional
7b70: 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61  .** databases ma
7b80: 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a  y be attached..*
7b90: 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20  /.struct Db {.  
7ba0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
7bb0: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
7bc0: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
7bd0: 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20  .  Btree *pBt;  
7be0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42          /* The B
7bf0: 2a 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20  *Tree structure 
7c00: 66 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73  for this databas
7c10: 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73  e file */.  u8 s
7c20: 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20  afety_level;    
7c30: 20 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69   /* How aggressi
7c40: 76 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61  ve at syncing da
7c50: 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20  ta to disk */.  
7c60: 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
7c70: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
7c80: 74 6f 20 64 61 74 61 62 61 73 65 20 73 63 68 65  to database sche
7c90: 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61  ma (possibly sha
7ca0: 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  red) */.};../*.*
7cb0: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
7cc0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
7cd0: 74 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20  tructure stores 
7ce0: 61 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  a database schem
7cf0: 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63  a..**.** Most Sc
7d00: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65  hema objects are
7d10: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
7d20: 20 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65   a Btree.  The e
7d30: 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74  xception is.** t
7d40: 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68  he Schema for th
7d50: 65 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20  e TEMP databaes 
7d60: 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29  (sqlite3.aDb[1])
7d70: 20 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73   which is free-s
7d80: 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73  tanding..** In s
7d90: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
7da0: 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d  , a single Schem
7db0: 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20  a object can be 
7dc0: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
7dd0: 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61  le.** Btrees tha
7de0: 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73  t refer to the s
7df0: 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42  ame underlying B
7e00: 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a  tShared object..
7e10: 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62  ** .** Schema ob
7e20: 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61  jects are automa
7e30: 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61  tically dealloca
7e40: 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73  ted when the las
7e50: 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20  t Btree that.** 
7e60: 72 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20  references them 
7e70: 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20  is destroyed.   
7e80: 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20  The TEMP Schema 
7e90: 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65  is manually free
7ea0: 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  d by.** sqlite3_
7eb0: 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20  close()..*.** A 
7ec0: 74 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68  thread must be h
7ed0: 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f  olding a mutex o
7ee0: 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  n the correspond
7ef0: 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64  ing Btree in ord
7f00: 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20  er.** to access 
7f10: 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20  Schema content. 
7f20: 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68   This implies th
7f30: 61 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75  at the thread mu
7f40: 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f  st also be.** ho
7f50: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
7f60: 20 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e   the sqlite3 con
7f70: 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  nection pointer 
7f80: 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74  that owns the Bt
7f90: 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45  ree..** For a TE
7fa0: 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20  MP Schema, only 
7fb0: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d  the connection m
7fc0: 75 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64  utex is required
7fd0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65  ..*/.struct Sche
7fe0: 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d  ma {.  int schem
7ff0: 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44  a_cookie;   /* D
8000: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76  atabase schema v
8010: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f  ersion number fo
8020: 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20  r this file */. 
8030: 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e   int iGeneration
8040: 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74  ;     /* Generat
8050: 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e  ion counter.  In
8060: 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65  cremented with e
8070: 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20  ach change */.  
8080: 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20  Hash tblHash;   
8090: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c       /* All tabl
80a0: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
80b0: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78  me */.  Hash idx
80c0: 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20  Hash;        /* 
80d0: 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69  All (named) indi
80e0: 63 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  ces indexed by n
80f0: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72  ame */.  Hash tr
8100: 69 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a  igHash;       /*
8110: 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e   All triggers in
8120: 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
8130: 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68  .  Hash fkeyHash
8140: 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66  ;       /* All f
8150: 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72  oreign keys by r
8160: 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20  eferenced table 
8170: 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20  name */.  Table 
8180: 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f  *pSeqTab;      /
8190: 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71  * The sqlite_seq
81a0: 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64  uence table used
81b0: 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   by AUTOINCREMEN
81c0: 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66  T */.  u8 file_f
81d0: 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53  ormat;      /* S
81e0: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72  chema format ver
81f0: 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69  sion for this fi
8200: 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  le */.  u8 enc; 
8210: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8220: 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73  Text encoding us
8230: 65 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62  ed by this datab
8240: 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 73 63 68  ase */.  u16 sch
8250: 65 6d 61 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a  emaFlags;     /*
8260: 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65   Flags associate
8270: 64 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65  d with this sche
8280: 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68  ma */.  int cach
8290: 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20  e_size;      /* 
82a0: 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  Number of pages 
82b0: 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61  to use in the ca
82c0: 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  che */.};../*.**
82d0: 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61   These macros ca
82e0: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73  n be used to tes
82f0: 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72  t, set, or clear
8300: 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a   bits in the .**
8310: 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   Db.pSchema->fla
8320: 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
8330: 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72  fine DbHasProper
8340: 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28  ty(D,I,P)     ((
8350: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
8360: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
8370: 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66  &(P))==(P)).#def
8380: 69 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70  ine DbHasAnyProp
8390: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28  erty(D,I,P)  (((
83a0: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
83b0: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26  ma->schemaFlags&
83c0: 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  (P))!=0).#define
83d0: 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28 44   DbSetProperty(D
83e0: 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e 61  ,I,P)     (D)->a
83f0: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
8400: 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a  chemaFlags|=(P).
8410: 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50  #define DbClearP
8420: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
8430: 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63   (D)->aDb[I].pSc
8440: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
8450: 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41  s&=~(P)../*.** A
8460: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
8470: 72 20 74 68 65 20 44 42 2e 70 53 63 68 65 6d 61  r the DB.pSchema
8480: 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ->flags field..*
8490: 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63 68 65  *.** The DB_Sche
84a0: 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67 20 69 73  maLoaded flag is
84b0: 20 73 65 74 20 61 66 74 65 72 20 74 68 65 20 64   set after the d
84c0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
84d0: 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20  as been.** read 
84e0: 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61  into internal ha
84f0: 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  sh tables..**.**
8500: 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73   DB_UnresetViews
8510: 20 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e 65 20   means that one 
8520: 6f 72 20 6d 6f 72 65 20 76 69 65 77 73 20 68 61  or more views ha
8530: 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ve column names 
8540: 74 68 61 74 0a 2a 2a 20 68 61 76 65 20 62 65 65  that.** have bee
8550: 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49  n filled out.  I
8560: 66 20 74 68 65 20 73 63 68 65 6d 61 20 63 68 61  f the schema cha
8570: 6e 67 65 73 2c 20 74 68 65 73 65 20 63 6f 6c 75  nges, these colu
8580: 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a  mn names might.*
8590: 2a 20 63 68 61 6e 67 65 73 20 61 6e 64 20 73 6f  * changes and so
85a0: 20 74 68 65 20 76 69 65 77 20 77 69 6c 6c 20 6e   the view will n
85b0: 65 65 64 20 74 6f 20 62 65 20 72 65 73 65 74 2e  eed to be reset.
85c0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 53  .*/.#define DB_S
85d0: 63 68 65 6d 61 4c 6f 61 64 65 64 20 20 20 20 30  chemaLoaded    0
85e0: 78 30 30 30 31 20 20 2f 2a 20 54 68 65 20 73 63  x0001  /* The sc
85f0: 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6c 6f  hema has been lo
8600: 61 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aded */.#define 
8610: 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20  DB_UnresetViews 
8620: 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 53 6f     0x0002  /* So
8630: 6d 65 20 76 69 65 77 73 20 68 61 76 65 20 64 65  me views have de
8640: 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d  fined column nam
8650: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  es */.#define DB
8660: 5f 45 6d 70 74 79 20 20 20 20 20 20 20 20 20 20  _Empty          
8670: 20 30 78 30 30 30 34 20 20 2f 2a 20 54 68 65 20   0x0004  /* The 
8680: 66 69 6c 65 20 69 73 20 65 6d 70 74 79 20 28 6c  file is empty (l
8690: 65 6e 67 74 68 20 30 20 62 79 74 65 73 29 20 2a  ength 0 bytes) *
86a0: 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d  /../*.** The num
86b0: 62 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74  ber of different
86c0: 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73   kinds of things
86d0: 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d   that can be lim
86e0: 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68  ited.** using th
86f0: 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28  e sqlite3_limit(
8700: 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a  ) interface..*/.
8710: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
8720: 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c  _LIMIT (SQLITE_L
8730: 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45  IMIT_WORKER_THRE
8740: 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f  ADS+1)../*.** Lo
8750: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69  okaside malloc i
8760: 73 20 61 20 73 65 74 20 6f 66 20 66 69 78 65 64  s a set of fixed
8770: 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20 74 68  -size buffers th
8780: 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a  at can be used.*
8790: 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61  * to satisfy sma
87a0: 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d  ll transient mem
87b0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72  ory allocation r
87c0: 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65  equests for obje
87d0: 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65  cts.** associate
87e0: 64 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75  d with a particu
87f0: 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e  lar database con
8800: 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73  nection.  The us
8810: 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64  e of.** lookasid
8820: 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65  e malloc provide
8830: 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20  s a significant 
8840: 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61  performance enha
8850: 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72  ncement.** (appr
8860: 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f 69 64  ox 10%) by avoid
8870: 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c  ing numerous mal
8880: 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73 74  loc/free request
8890: 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a  s while parsing.
88a0: 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ** SQL statement
88b0: 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f  s..**.** The Loo
88c0: 6b 61 73 69 64 65 20 73 74 72 75 63 74 75 72 65  kaside structure
88d0: 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61   holds configura
88e0: 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tion information
88f0: 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f   about the.** lo
8900: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73  okaside malloc s
8910: 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20  ubsystem.  Each 
8920: 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79  available memory
8930: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a   allocation in.*
8940: 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20  * the lookaside 
8950: 73 75 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f  subsystem is sto
8960: 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20  red on a linked 
8970: 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64  list of Lookasid
8980: 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73  eSlot.** objects
8990: 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64  ..**.** Lookasid
89a0: 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72  e allocations ar
89b0: 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66  e only allowed f
89c0: 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20  or objects that 
89d0: 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a  are associated.*
89e0: 2a 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75  * with a particu
89f0: 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e  lar database con
8a00: 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c  nection.  Hence,
8a10: 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   schema informat
8a20: 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65  ion cannot.** be
8a30: 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61   stored in looka
8a40: 73 69 64 65 20 62 65 63 61 75 73 65 20 69 6e 20  side because in 
8a50: 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64  shared cache mod
8a60: 65 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66  e the schema inf
8a70: 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73  ormation.** is s
8a80: 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c  hared by multipl
8a90: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
8aa0: 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f  ctions.  Therefo
8ab0: 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e  re, while parsin
8ac0: 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f  g.** schema info
8ad0: 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f  rmation, the Loo
8ae0: 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20  kaside.bEnabled 
8af0: 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64 20  flag is cleared 
8b00: 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61  so that.** looka
8b10: 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  side allocations
8b20: 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f   are not used to
8b30: 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73   construct the s
8b40: 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a  chema objects..*
8b50: 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  /.struct Lookasi
8b60: 64 65 20 7b 0a 20 20 75 31 36 20 73 7a 3b 20 20  de {.  u16 sz;  
8b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8b80: 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 62  * Size of each b
8b90: 75 66 66 65 72 20 69 6e 20 62 79 74 65 73 20 2a  uffer in bytes *
8ba0: 2f 0a 20 20 75 38 20 62 45 6e 61 62 6c 65 64 3b  /.  u8 bEnabled;
8bb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
8bc0: 61 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65 20  alse to disable 
8bd0: 6e 65 77 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c  new lookaside al
8be0: 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75  locations */.  u
8bf0: 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20  8 bMalloced;    
8c00: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
8c10: 66 20 70 53 74 61 72 74 20 6f 62 74 61 69 6e 65  f pStart obtaine
8c20: 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d  d from sqlite3_m
8c30: 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 69 6e 74  alloc() */.  int
8c40: 20 6e 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20   nOut;          
8c50: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
8c60: 66 20 62 75 66 66 65 72 73 20 63 75 72 72 65 6e  f buffers curren
8c70: 74 6c 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20  tly checked out 
8c80: 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f 75 74 3b 20  */.  int mxOut; 
8c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8ca0: 48 69 67 68 77 61 74 65 72 20 6d 61 72 6b 20 66  Highwater mark f
8cb0: 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e 74  or nOut */.  int
8cc0: 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20   anStat[3];     
8cd0: 20 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e       /* 0: hits.
8ce0: 20 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73    1: size misses
8cf0: 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65  .  2: full misse
8d00: 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  s */.  Lookaside
8d10: 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20 2f  Slot *pFree;   /
8d20: 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c 61  * List of availa
8d30: 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 20  ble buffers */. 
8d40: 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20 20   void *pStart;  
8d50: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
8d60: 74 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c 61  t byte of availa
8d70: 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65  ble memory space
8d80: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64   */.  void *pEnd
8d90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
8da0: 20 46 69 72 73 74 20 62 79 74 65 20 70 61 73 74   First byte past
8db0: 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62 6c   end of availabl
8dc0: 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74  e space */.};.st
8dd0: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  ruct LookasideSl
8de0: 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  ot {.  Lookaside
8df0: 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  Slot *pNext;    
8e00: 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20 69  /* Next buffer i
8e10: 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66 72  n the list of fr
8e20: 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b  ee buffers */.};
8e30: 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74  ../*.** A hash t
8e40: 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f  able for functio
8e50: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 0a 2a  n definitions..*
8e60: 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46  *.** Hash each F
8e70: 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65  uncDef structure
8e80: 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65   into one of the
8e90: 20 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d   FuncDefHash.a[]
8ea0: 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69   slots..** Colli
8eb0: 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65  sions are on the
8ec0: 20 46 75 6e 63 44 65 66 2e 70 48 61 73 68 20 63   FuncDef.pHash c
8ed0: 68 61 69 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  hain..*/.struct 
8ee0: 46 75 6e 63 44 65 66 48 61 73 68 20 7b 0a 20 20  FuncDefHash {.  
8ef0: 46 75 6e 63 44 65 66 20 2a 61 5b 32 33 5d 3b 20  FuncDef *a[23]; 
8f00: 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61        /* Hash ta
8f10: 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e  ble for function
8f20: 73 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66 20  s */.};..#ifdef 
8f30: 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48  SQLITE_USER_AUTH
8f40: 45 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a  ENTICATION./*.**
8f50: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65 6c   Information hel
8f60: 64 20 69 6e 20 74 68 65 20 22 73 71 6c 69 74 65  d in the "sqlite
8f70: 33 22 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  3" database conn
8f80: 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e  ection object an
8f90: 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e  d used.** to man
8fa0: 61 67 65 20 75 73 65 72 20 61 75 74 68 65 6e 74  age user authent
8fb0: 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65  ication..*/.type
8fc0: 64 65 66 20 73 74 72 75 63 74 20 73 71 6c 69 74  def struct sqlit
8fd0: 65 33 5f 75 73 65 72 61 75 74 68 20 73 71 6c 69  e3_userauth sqli
8fe0: 74 65 33 5f 75 73 65 72 61 75 74 68 3b 0a 73 74  te3_userauth;.st
8ff0: 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65  ruct sqlite3_use
9000: 72 61 75 74 68 20 7b 0a 20 20 75 38 20 61 75 74  rauth {.  u8 aut
9010: 68 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20  hLevel;         
9020: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
9030: 6e 74 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f  nt authenticatio
9040: 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74  n level */.  int
9050: 20 6e 41 75 74 68 50 57 3b 20 20 20 20 20 20 20   nAuthPW;       
9060: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
9070: 7a 65 20 6f 66 20 74 68 65 20 7a 41 75 74 68 50  ze of the zAuthP
9080: 57 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  W in bytes */.  
9090: 63 68 61 72 20 2a 7a 41 75 74 68 50 57 3b 20 20  char *zAuthPW;  
90a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
90b0: 20 50 61 73 73 77 6f 72 64 20 75 73 65 64 20 74   Password used t
90c0: 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a  o authenticate *
90d0: 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68 55  /.  char *zAuthU
90e0: 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ser;            
90f0: 20 20 2f 2a 20 55 73 65 72 20 6e 61 6d 65 20 75    /* User name u
9100: 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63  sed to authentic
9110: 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c  ate */.};../* Al
9120: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
9130: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
9140: 68 2e 61 75 74 68 4c 65 76 65 6c 20 2a 2f 0a 23  h.authLevel */.#
9150: 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 6e 6b  define UAUTH_Unk
9160: 6e 6f 77 6e 20 20 20 20 20 30 20 20 20 20 20 2f  nown     0     /
9170: 2a 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  * Authentication
9180: 20 6e 6f 74 20 79 65 74 20 63 68 65 63 6b 65 64   not yet checked
9190: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54   */.#define UAUT
91a0: 48 5f 46 61 69 6c 20 20 20 20 20 20 20 20 31 20  H_Fail        1 
91b0: 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68      /* User auth
91c0: 65 6e 74 69 63 61 74 69 6f 6e 20 66 61 69 6c 65  entication faile
91d0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  d */.#define UAU
91e0: 54 48 5f 55 73 65 72 20 20 20 20 20 20 20 20 32  TH_User        2
91f0: 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69       /* Authenti
9200: 63 61 74 65 64 20 61 73 20 61 20 6e 6f 72 6d 61  cated as a norma
9210: 6c 20 75 73 65 72 20 2a 2f 0a 23 64 65 66 69 6e  l user */.#defin
9220: 65 20 55 41 55 54 48 5f 41 64 6d 69 6e 20 20 20  e UAUTH_Admin   
9230: 20 20 20 20 33 20 20 20 20 20 2f 2a 20 41 75 74      3     /* Aut
9240: 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61 6e  henticated as an
9250: 20 61 64 6d 69 6e 69 73 74 72 61 74 6f 72 20 2a   administrator *
9260: 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20  /../* Functions 
9270: 75 73 65 64 20 6f 6e 6c 79 20 62 79 20 75 73 65  used only by use
9280: 72 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20  r authorization 
9290: 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74 20 73 71 6c  logic */.int sql
92a0: 69 74 65 33 55 73 65 72 41 75 74 68 54 61 62 6c  ite3UserAuthTabl
92b0: 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  e(const char*);.
92c0: 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72 41  int sqlite3UserA
92d0: 75 74 68 43 68 65 63 6b 4c 6f 67 69 6e 28 73 71  uthCheckLogin(sq
92e0: 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
92f0: 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71  r*,u8*);.void sq
9300: 6c 69 74 65 33 55 73 65 72 41 75 74 68 49 6e 69  lite3UserAuthIni
9310: 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  t(sqlite3*);.voi
9320: 64 20 73 71 6c 69 74 65 33 43 72 79 70 74 46 75  d sqlite3CryptFu
9330: 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  nc(sqlite3_conte
9340: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
9350: 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69  value**);..#endi
9360: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 52  f /* SQLITE_USER
9370: 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 20  _AUTHENTICATION 
9380: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64 65  */../*.** typede
9390: 66 20 66 6f 72 20 74 68 65 20 61 75 74 68 6f 72  f for the author
93a0: 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b  ization callback
93b0: 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69   function..*/.#i
93c0: 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52  fdef SQLITE_USER
93d0: 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a  _AUTHENTICATION.
93e0: 20 20 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a    typedef int (*
93f0: 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76  sqlite3_xauth)(v
9400: 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
9410: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
9420: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20  ,const char*,.  
9430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9440: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
9450: 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
9460: 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  char*);.#else.  
9470: 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71  typedef int (*sq
9480: 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69  lite3_xauth)(voi
9490: 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  d*,int,const cha
94a0: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  r*,const char*,c
94b0: 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20  onst char*,.    
94c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94d0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74             const
94e0: 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
94f0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
9500: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
9510: 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
9520: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
9530: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
9540: 74 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a  truct sqlite3 {.
9550: 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70    sqlite3_vfs *p
9560: 56 66 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  Vfs;            
9570: 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20  /* OS Interface 
9580: 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62 65  */.  struct Vdbe
9590: 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20   *pVdbe;        
95a0: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63     /* List of ac
95b0: 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63  tive virtual mac
95c0: 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53  hines */.  CollS
95d0: 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20  eq *pDfltColl;  
95e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
95f0: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e  default collatin
9600: 67 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41  g sequence (BINA
9610: 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  RY) */.  sqlite3
9620: 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20  _mutex *mutex;  
9630: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63         /* Connec
9640: 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20  tion mutex */.  
9650: 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20  Db *aDb;        
9660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9670: 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f   All backends */
9680: 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20  .  int nDb;     
9690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
96a0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61   /* Number of ba
96b0: 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79  ckends currently
96c0: 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74   in use */.  int
96d0: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20   flags;         
96e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69             /* Mi
96f0: 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67  scellaneous flag
9700: 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a  s. See below */.
9710: 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b    i64 lastRowid;
9720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9730: 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74  /* ROWID of most
9740: 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28   recent insert (
9750: 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20  see above) */.  
9760: 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20  i64 szMmap;     
9770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9780: 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69   Default mmap_si
9790: 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20  ze setting */.  
97a0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65  unsigned int ope
97b0: 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a  nFlags;       /*
97c0: 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f   Flags passed to
97d0: 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70   sqlite3_vfs.xOp
97e0: 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72  en() */.  int er
97f0: 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  rCode;          
9800: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20          /* Most 
9810: 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64  recent error cod
9820: 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a  e (SQLITE_*) */.
9830: 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20    int errMask;  
9840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9850: 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65  /* & result code
9860: 73 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f  s with this befo
9870: 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a  re returning */.
9880: 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73    u16 dbOptFlags
9890: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
98a0: 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62  /* Flags to enab
98b0: 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d  le/disable optim
98c0: 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38  izations */.  u8
98d0: 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
98e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
98f0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a  ext encoding */.
9900: 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b    u8 autoCommit;
9910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9920: 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d  /* The auto-comm
9930: 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38  it flag. */.  u8
9940: 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20   temp_store;    
9950: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
9960: 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79  : file 2: memory
9970: 20 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20   0: default */. 
9980: 20 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64   u8 mallocFailed
9990: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
99a0: 2a 20 54 72 75 65 20 69 66 20 77 65 20 68 61 76  * True if we hav
99b0: 65 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20  e seen a malloc 
99c0: 66 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20  failure */.  u8 
99d0: 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20  dfltLockMode;   
99e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
99f0: 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f  fault locking-mo
9a00: 64 65 20 66 6f 72 20 61 74 74 61 63 68 65 64 20  de for attached 
9a10: 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20  dbs */.  signed 
9a20: 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63  char nextAutovac
9a30: 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61  ;      /* Autova
9a40: 63 20 73 65 74 74 69 6e 67 20 61 66 74 65 72 20  c setting after 
9a50: 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f  VACUUM if >=0 */
9a60: 0a 20 20 75 38 20 73 75 70 70 72 65 73 73 45 72  .  u8 suppressEr
9a70: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
9a80: 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65   /* Do not issue
9a90: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
9aa0: 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20  if true */.  u8 
9ab0: 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20  vtabOnConflict; 
9ac0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
9ad0: 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f  lue to return fo
9ae0: 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e  r s3_vtab_on_con
9af0: 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20  flict() */.  u8 
9b00: 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
9b10: 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72  epoint;    /* Tr
9b20: 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d  ue if the outerm
9b30: 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73  ost savepoint is
9b40: 20 61 20 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e   a TS */.  int n
9b50: 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20  extPagesize;    
9b60: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65           /* Page
9b70: 73 69 7a 65 20 61 66 74 65 72 20 56 41 43 55 55  size after VACUU
9b80: 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32  M if >0 */.  u32
9b90: 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20 20   magic;         
9ba0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
9bb0: 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64  gic number for d
9bc0: 65 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69  etect library mi
9bd0: 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43  suse */.  int nC
9be0: 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20  hange;          
9bf0: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
9c00: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
9c10: 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a  ite3_changes() *
9c20: 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68  /.  int nTotalCh
9c30: 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  ange;           
9c40: 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72    /* Value retur
9c50: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74  ned by sqlite3_t
9c60: 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a  otal_changes() *
9c70: 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53  /.  int aLimit[S
9c80: 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20  QLITE_N_LIMIT]; 
9c90: 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20    /* Limits */. 
9ca0: 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d   int nMaxSorterM
9cb0: 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f  map;           /
9cc0: 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f  * Maximum size o
9cd0: 66 20 72 65 67 69 6f 6e 73 20 6d 61 70 70 65 64  f regions mapped
9ce0: 20 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20   by sorter */.  
9cf0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e  struct sqlite3In
9d00: 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a  itInfo {      /*
9d10: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65   Information use
9d20: 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c  d during initial
9d30: 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69  ization */.    i
9d40: 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20  nt newTnum;     
9d50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f             /* Ro
9d60: 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20  otpage of table 
9d70: 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
9d80: 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b  d */.    u8 iDb;
9d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9da0: 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62       /* Which db
9db0: 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69   file is being i
9dc0: 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
9dd0: 20 20 75 38 20 62 75 73 79 3b 20 20 20 20 20 20    u8 busy;      
9de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9df0: 20 54 52 55 45 20 69 66 20 63 75 72 72 65 6e 74   TRUE if current
9e00: 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20  ly initializing 
9e10: 2a 2f 0a 20 20 20 20 75 38 20 6f 72 70 68 61 6e  */.    u8 orphan
9e20: 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 20 20  Trigger;        
9e30: 20 20 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65     /* Last state
9e40: 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64  ment is orphaned
9e50: 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f   TEMP trigger */
9e60: 0a 20 20 20 20 75 38 20 69 6d 70 6f 73 74 65 72  .    u8 imposter
9e70: 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
9e80: 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e 20   /* Building an 
9e90: 69 6d 70 6f 73 74 65 72 20 74 61 62 6c 65 20 2a  imposter table *
9ea0: 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e  /.  } init;.  in
9eb0: 74 20 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20  t nVdbeActive;  
9ec0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
9ed0: 75 6d 62 65 72 20 6f 66 20 56 44 42 45 73 20 63  umber of VDBEs c
9ee0: 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67  urrently running
9ef0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52   */.  int nVdbeR
9f00: 65 61 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  ead;            
9f10: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
9f20: 20 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68   active VDBEs th
9f30: 61 74 20 72 65 61 64 20 6f 72 20 77 72 69 74 65  at read or write
9f40: 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57   */.  int nVdbeW
9f50: 72 69 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  rite;           
9f60: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
9f70: 20 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68   active VDBEs th
9f80: 61 74 20 72 65 61 64 20 61 6e 64 20 77 72 69 74  at read and writ
9f90: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65  e */.  int nVdbe
9fa0: 45 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20  Exec;           
9fb0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
9fc0: 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74  f nested calls t
9fd0: 6f 20 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a  o VdbeExec() */.
9fe0: 20 20 69 6e 74 20 6e 56 44 65 73 74 72 6f 79 3b    int nVDestroy;
9ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a000: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
a010: 69 76 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 20  ive OP_VDestroy 
a020: 6f 70 65 72 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  operations */.  
a030: 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20  int nExtension; 
a040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a050: 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65   Number of loade
a060: 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a  d extensions */.
a070: 20 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73    void **aExtens
a080: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ion;            
a090: 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61 72  /* Array of shar
a0a0: 65 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c  ed library handl
a0b0: 65 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  es */.  void (*x
a0c0: 54 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  Trace)(void*,con
a0d0: 73 74 20 63 68 61 72 2a 29 3b 20 20 20 20 20 20  st char*);      
a0e0: 20 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74    /* Trace funct
a0f0: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
a100: 54 72 61 63 65 41 72 67 3b 20 20 20 20 20 20 20  TraceArg;       
a110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a120: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
a130: 6f 20 74 68 65 20 74 72 61 63 65 20 66 75 6e 63  o the trace func
a140: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tion */.  void (
a150: 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a  *xProfile)(void*
a160: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34  ,const char*,u64
a170: 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67  );  /* Profiling
a180: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
a190: 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67  oid *pProfileArg
a1a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a1b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
a1c0: 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20  ment to profile 
a1d0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
a1e0: 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20  id *pCommitArg; 
a1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a200: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
a210: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29  CommitCallback()
a220: 20 2a 2f 20 20 20 0a 20 20 69 6e 74 20 28 2a 78   */   .  int (*x
a230: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28  CommitCallback)(
a240: 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e  void*);    /* In
a250: 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63  voked at every c
a260: 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64  ommit. */.  void
a270: 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20   *pRollbackArg; 
a280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a290: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f   Argument to xRo
a2a0: 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29  llbackCallback()
a2b0: 20 2a 2f 20 20 20 0a 20 20 76 6f 69 64 20 28 2a   */   .  void (*
a2c0: 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63  xRollbackCallbac
a2d0: 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e  k)(void*); /* In
a2e0: 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63  voked at every c
a2f0: 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64  ommit. */.  void
a300: 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20   *pUpdateArg;.  
a310: 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43 61  void (*xUpdateCa
a320: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e  llback)(void*,in
a330: 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  t, const char*,c
a340: 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74  onst char*,sqlit
a350: 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64 65 66  e_int64);.#ifdef
a360: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50   SQLITE_ENABLE_P
a370: 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20  REUPDATE_HOOK.  
a380: 76 6f 69 64 20 2a 70 50 72 65 55 70 64 61 74 65  void *pPreUpdate
a390: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Arg;          /*
a3a0: 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   First argument 
a3b0: 74 6f 20 78 50 72 65 55 70 64 61 74 65 43 61 6c  to xPreUpdateCal
a3c0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
a3d0: 28 2a 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c  (*xPreUpdateCall
a3e0: 62 61 63 6b 29 28 20 20 20 2f 2a 20 52 65 67 69  back)(   /* Regi
a3f0: 73 74 65 72 65 64 20 75 73 69 6e 67 20 73 71 6c  stered using sql
a400: 69 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f 68  ite3_preupdate_h
a410: 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69  ook() */.    voi
a420: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  d*,sqlite3*,int,
a430: 63 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72  char const*,char
a440: 20 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f   const*,sqlite3_
a450: 69 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e  int64,sqlite3_in
a460: 74 36 34 0a 20 20 29 3b 0a 20 20 50 72 65 55 70  t64.  );.  PreUp
a470: 64 61 74 65 20 2a 70 50 72 65 55 70 64 61 74 65  date *pPreUpdate
a480: 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74  ;        /* Cont
a490: 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 70  ext for active p
a4a0: 72 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61  re-update callba
a4b0: 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20  ck */.#endif /* 
a4c0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52  SQLITE_ENABLE_PR
a4d0: 45 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a  EUPDATE_HOOK */.
a4e0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
a4f0: 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a  MIT_WAL.  int (*
a500: 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f  xWalCallback)(vo
a510: 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c  id *, sqlite3 *,
a520: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
a530: 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61  nt);.  void *pWa
a540: 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76  lArg;.#endif.  v
a550: 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64  oid(*xCollNeeded
a560: 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
a570: 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f  ,int eTextRep,co
a580: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
a590: 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31  id(*xCollNeeded1
a5a0: 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  6)(void*,sqlite3
a5b0: 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63  *,int eTextRep,c
a5c0: 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76  onst void*);.  v
a5d0: 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64  oid *pCollNeeded
a5e0: 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  Arg;.  sqlite3_v
a5f0: 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20  alue *pErr;     
a600: 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63       /* Most rec
a610: 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67  ent error messag
a620: 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  e */.  union {. 
a630: 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20     volatile int 
a640: 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f  isInterrupted; /
a650: 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69 74 65  * True if sqlite
a660: 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73 20  3_interrupt has 
a670: 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20  been called */. 
a680: 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65     double notUse
a690: 64 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  d1;            /
a6a0: 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20  * Spacer */.  } 
a6b0: 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20  u1;.  Lookaside 
a6c0: 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20  lookaside;      
a6d0: 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65      /* Lookaside
a6e0: 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72   malloc configur
a6f0: 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66  ation */.#ifndef
a700: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
a710: 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c  HORIZATION.  sql
a720: 69 74 65 33 5f 78 61 75 74 68 20 78 41 75 74 68  ite3_xauth xAuth
a730: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63  ;          /* Ac
a740: 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69  cess authorizati
a750: 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  on function */. 
a760: 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b   void *pAuthArg;
a770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a780: 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74  * 1st argument t
a790: 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74  o the access aut
a7a0: 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65  h function */.#e
a7b0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
a7c0: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
a7d0: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74  S_CALLBACK.  int
a7e0: 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f   (*xProgress)(vo
a7f0: 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68  id *);     /* Th
a800: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
a810: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
a820: 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20  ProgressArg;    
a830: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
a840: 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65  nt to the progre
a850: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ss callback */. 
a860: 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72   unsigned nProgr
a870: 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f  essOps;        /
a880: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f  * Number of opco
a890: 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73  des for progress
a8a0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e   callback */.#en
a8b0: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
a8c0: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
a8d0: 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61  ABLE.  int nVTra
a8e0: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
a8f0: 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65       /* Allocate
a900: 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e  d size of aVTran
a910: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64  s */.  Hash aMod
a920: 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ule;            
a930: 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65       /* populate
a940: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65  d by sqlite3_cre
a950: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
a960: 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62    VtabCtx *pVtab
a970: 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ctx;            
a980: 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61  /* Context for a
a990: 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65  ctive vtab conne
a9a0: 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56  ct/create */.  V
a9b0: 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b  Table **aVTrans;
a9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a9d0: 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77  Virtual tables w
a9e0: 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63  ith open transac
a9f0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c  tions */.  VTabl
aa00: 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20  e *pDisconnect; 
aa10: 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74     /* Disconnect
aa20: 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73   these in next s
aa30: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
aa40: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e   */.#endif.  Fun
aa50: 63 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b 20  cDefHash aFunc; 
aa60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61             /* Ha
aa70: 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e  sh table of conn
aa80: 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  ection functions
aa90: 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c   */.  Hash aColl
aaa0: 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Seq;            
aab0: 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61      /* All colla
aac0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a  ting sequences *
aad0: 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20  /.  BusyHandler 
aae0: 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20  busyHandler;    
aaf0: 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61    /* Busy callba
ab00: 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74  ck */.  Db aDbSt
ab10: 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20  atic[2];        
ab20: 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20        /* Static 
ab30: 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20  space for the 2 
ab40: 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73  default backends
ab50: 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
ab60: 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20  *pSavepoint;    
ab70: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
ab80: 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73  ctive savepoints
ab90: 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69   */.  int busyTi
aba0: 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20  meout;          
abb0: 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64      /* Busy hand
abc0: 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20  ler timeout, in 
abd0: 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  msec */.  int nS
abe0: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
abf0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
ac00: 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63  r of non-transac
ac10: 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  tion savepoints 
ac20: 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d  */.  int nStatem
ac30: 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ent;            
ac40: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
ac50: 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74  nested statement
ac60: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a  -transactions  *
ac70: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
ac80: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
ac90: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
aca0: 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68  d constraints th
acb0: 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  is transaction. 
acc0: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
acd0: 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
ace0: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
acf0: 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e  ed immediate con
ad00: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  straints */.  in
ad10: 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b  t *pnBytesFreed;
ad20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
ad30: 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72  f not NULL, incr
ad40: 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62  ement this in Db
ad50: 46 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65 66  Free() */.#ifdef
ad60: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
ad70: 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f  NLOCK_NOTIFY.  /
ad80: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
ad90: 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c  variables are al
ada0: 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 74  l protected by t
adb0: 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52  he STATIC_MASTER
adc0: 20 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f   .  ** mutex, no
add0: 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74  t by sqlite3.mut
ade0: 65 78 2e 20 54 68 65 79 20 61 72 65 20 75 73 65  ex. They are use
adf0: 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74  d by code in not
ae00: 69 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20 20 2a  ify.c. .  **.  *
ae10: 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b  * When X.pUnlock
ae20: 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74  Connection==Y, t
ae30: 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58  hat means that X
ae40: 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20   is waiting for 
ae50: 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b  Y to.  ** unlock
ae60: 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20   so that it can 
ae70: 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20  proceed..  **.  
ae80: 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b  ** When X.pBlock
ae90: 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59  ingConnection==Y
aea0: 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
aeb0: 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74  t something that
aec0: 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72   X tried.  ** tr
aed0: 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74  ied to do recent
aee0: 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68 20 61  ly failed with a
aef0: 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  n SQLITE_LOCKED 
af00: 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63  error due to loc
af10: 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20  ks.  ** held by 
af20: 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  Y..  */.  sqlite
af30: 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e  3 *pBlockingConn
af40: 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65  ection; /* Conne
af50: 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65  ction that cause
af60: 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  d SQLITE_LOCKED 
af70: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55  */.  sqlite3 *pU
af80: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b  nlockConnection;
af90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
afa0: 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63  nnection to watc
afb0: 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a  h for unlock */.
afc0: 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41    void *pUnlockA
afd0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
afe0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
aff0: 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f  ent to xUnlockNo
b000: 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tify */.  void (
b010: 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28  *xUnlockNotify)(
b020: 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20  void **, int);  
b030: 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79  /* Unlock notify
b040: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73   callback */.  s
b050: 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f  qlite3 *pNextBlo
b060: 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  cked;        /* 
b070: 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20  Next in list of 
b080: 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e  all blocked conn
b090: 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69  ections */.#endi
b0a0: 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
b0b0: 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54  USER_AUTHENTICAT
b0c0: 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 75 73  ION.  sqlite3_us
b0d0: 65 72 61 75 74 68 20 61 75 74 68 3b 20 20 20 20  erauth auth;    
b0e0: 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68      /* User auth
b0f0: 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72  entication infor
b100: 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66  mation */.#endif
b110: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63  .};../*.** A mac
b120: 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74  ro to discover t
b130: 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61  he encoding of a
b140: 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64   database..*/.#d
b150: 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43  efine SCHEMA_ENC
b160: 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b  (db) ((db)->aDb[
b170: 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29  0].pSchema->enc)
b180: 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29  .#define ENC(db)
b190: 20 20 20 20 20 20 20 20 28 28 64 62 29 2d 3e 65          ((db)->e
b1a0: 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  nc)../*.** Possi
b1b0: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74  ble values for t
b1c0: 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73  he sqlite3.flags
b1d0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
b1e0: 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 20 20  ITE_VdbeTrace   
b1f0: 20 20 20 30 78 30 30 30 30 30 30 30 31 20 20 2f     0x00000001  /
b200: 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63 65 20  * True to trace 
b210: 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a  VDBE execution *
b220: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b230: 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20  _InternChanges  
b240: 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20 55  0x00000002  /* U
b250: 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20  ncommitted Hash 
b260: 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f  table changes */
b270: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b280: 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30  FullFSync      0
b290: 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20 55 73  x00000004  /* Us
b2a0: 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20  e full fsync on 
b2b0: 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23  the backend */.#
b2c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b  define SQLITE_Ck
b2d0: 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30  ptFullFSync  0x0
b2e0: 30 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20  0000008  /* Use 
b2f0: 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63  full fsync for c
b300: 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65  heckpoint */.#de
b310: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68  fine SQLITE_Cach
b320: 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30  eSpill     0x000
b330: 30 30 30 31 30 20 20 2f 2a 20 4f 4b 20 74 6f 20  00010  /* OK to 
b340: 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68  spill pager cach
b350: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
b360: 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73  ITE_FullColNames
b370: 20 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f     0x00000020  /
b380: 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75  * Show full colu
b390: 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45  mn names on SELE
b3a0: 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  CT */.#define SQ
b3b0: 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d  LITE_ShortColNam
b3c0: 65 73 20 20 30 78 30 30 30 30 30 30 34 30 20 20  es  0x00000040  
b3d0: 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f  /* Show short co
b3e0: 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23  lumns names */.#
b3f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
b400: 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78 30  untRows      0x0
b410: 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e  0000080  /* Coun
b420: 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62  t rows changed b
b430: 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20  y INSERT, */.   
b440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b460: 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45         /*   DELE
b470: 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e  TE, or UPDATE an
b480: 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20  d return */.    
b490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4b0: 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63        /*   the c
b4c0: 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c  ount using a cal
b4d0: 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e  lback. */.#defin
b4e0: 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c  e SQLITE_NullCal
b4f0: 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30 30 31  lback   0x000001
b500: 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  00  /* Invoke th
b510: 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20  e callback once 
b520: 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20  if the */.      
b530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b550: 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20      /*   result 
b560: 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a  set is empty */.
b570: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
b580: 71 6c 54 72 61 63 65 20 20 20 20 20 20 20 30 78  qlTrace       0x
b590: 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44 65 62  00000200  /* Deb
b5a0: 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20  ug print SQL as 
b5b0: 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23  it executes */.#
b5c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
b5d0: 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30 78 30  beListing    0x0
b5e0: 30 30 30 30 34 30 30 20 20 2f 2a 20 44 65 62 75  0000400  /* Debu
b5f0: 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44  g listings of VD
b600: 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23  BE programs */.#
b610: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72  define SQLITE_Wr
b620: 69 74 65 53 63 68 65 6d 61 20 20 20 20 30 78 30  iteSchema    0x0
b630: 30 30 30 30 38 30 30 20 20 2f 2a 20 4f 4b 20 74  0000800  /* OK t
b640: 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f  o update SQLITE_
b650: 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e  MASTER */.#defin
b660: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64  e SQLITE_VdbeAdd
b670: 6f 70 54 72 61 63 65 20 30 78 30 30 30 30 31 30  opTrace 0x000010
b680: 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c  00  /* Trace sql
b690: 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 29 20  ite3VdbeAddOp() 
b6a0: 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65  calls */.#define
b6b0: 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68   SQLITE_IgnoreCh
b6c0: 65 63 6b 73 20 20 20 30 78 30 30 30 30 32 30 30  ecks   0x0000200
b6d0: 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66  0  /* Do not enf
b6e0: 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74  orce check const
b6f0: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
b700: 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63  e SQLITE_ReadUnc
b710: 6f 6d 6d 69 74 74 65 64 20 30 78 30 30 30 34 30  ommitted 0x00040
b720: 30 30 20 20 2f 2a 20 46 6f 72 20 73 68 61 72 65  00  /* For share
b730: 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a  d-cache mode */.
b740: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
b750: 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78  egacyFileFmt  0x
b760: 30 30 30 30 38 30 30 30 20 20 2f 2a 20 43 72 65  00008000  /* Cre
b770: 61 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65  ate new database
b780: 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f  s in format 1 */
b790: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b7a0: 52 65 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30  RecoveryMode   0
b7b0: 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20 49 67  x00010000  /* Ig
b7c0: 6e 6f 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f  nore schema erro
b7d0: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
b7e0: 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65  LITE_ReverseOrde
b7f0: 72 20 20 20 30 78 30 30 30 32 30 30 30 30 20 20  r   0x00020000  
b800: 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64  /* Reverse unord
b810: 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a  ered SELECTs */.
b820: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
b830: 65 63 54 72 69 67 67 65 72 73 20 20 20 20 30 78  ecTriggers    0x
b840: 30 30 30 34 30 30 30 30 20 20 2f 2a 20 45 6e 61  00040000  /* Ena
b850: 62 6c 65 20 72 65 63 75 72 73 69 76 65 20 74 72  ble recursive tr
b860: 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e  iggers */.#defin
b870: 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e  e SQLITE_Foreign
b880: 4b 65 79 73 20 20 20 20 30 78 30 30 30 38 30 30  Keys    0x000800
b890: 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66  00  /* Enforce f
b8a0: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
b8b0: 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69  raints  */.#defi
b8c0: 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e  ne SQLITE_AutoIn
b8d0: 64 65 78 20 20 20 20 20 20 30 78 30 30 31 30 30  dex      0x00100
b8e0: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61  000  /* Enable a
b8f0: 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73  utomatic indexes
b900: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b910: 54 45 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e  TE_PreferBuiltin
b920: 20 20 30 78 30 30 32 30 30 30 30 30 20 20 2f 2a    0x00200000  /*
b930: 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62   Preference to b
b940: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f  uilt-in funcs */
b950: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b960: 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30  LoadExtension  0
b970: 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e  x00400000  /* En
b980: 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  able load_extens
b990: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
b9a0: 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67  QLITE_EnableTrig
b9b0: 67 65 72 20 20 30 78 30 30 38 30 30 30 30 30 20  ger  0x00800000 
b9c0: 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
b9d0: 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  le triggers */.#
b9e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65  define SQLITE_De
b9f0: 66 65 72 46 4b 73 20 20 20 20 20 20 20 30 78 30  ferFKs       0x0
ba00: 31 30 30 30 30 30 30 20 20 2f 2a 20 44 65 66 65  1000000  /* Defe
ba10: 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61  r all FK constra
ba20: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
ba30: 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79  SQLITE_QueryOnly
ba40: 20 20 20 20 20 20 30 78 30 32 30 30 30 30 30 30        0x02000000
ba50: 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74    /* Disable dat
ba60: 61 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f  abase changes */
ba70: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ba80: 56 64 62 65 45 51 50 20 20 20 20 20 20 20 20 30  VdbeEQP        0
ba90: 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20 44 65  x04000000  /* De
baa0: 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55 45 52  bug EXPLAIN QUER
bab0: 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e  Y PLAN */.#defin
bac0: 65 20 53 51 4c 49 54 45 5f 56 61 63 75 75 6d 20  e SQLITE_Vacuum 
bad0: 20 20 20 20 20 20 20 20 30 78 30 38 30 30 30 30          0x080000
bae0: 30 30 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79  00  /* Currently
baf0: 20 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a   in a VACUUM */.
bb00: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
bb10: 65 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20 30 78  ellSizeCk     0x
bb20: 31 30 30 30 30 30 30 30 20 20 2f 2a 20 43 68 65  10000000  /* Che
bb30: 63 6b 20 62 74 72 65 65 20 63 65 6c 6c 20 73 69  ck btree cell si
bb40: 7a 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 0a  zes on load */..
bb50: 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74  ./*.** Bits of t
bb60: 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70 74  he sqlite3.dbOpt
bb70: 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61 74  Flags field that
bb80: 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68 65   are used by the
bb90: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74  .** sqlite3_test
bba0: 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f  _control(SQLITE_
bbb0: 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a  TESTCTRL_OPTIMIZ
bbc0: 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65  ATIONS,...) inte
bbd0: 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65  rface to.** sele
bbe0: 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65 20  ctively disable 
bbf0: 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61  various optimiza
bc00: 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tions..*/.#defin
bc10: 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46 6c  e SQLITE_QueryFl
bc20: 61 74 74 65 6e 65 72 20 30 78 30 30 30 31 20 20  attener 0x0001  
bc30: 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74 65   /* Query flatte
bc40: 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ning */.#define 
bc50: 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63  SQLITE_ColumnCac
bc60: 68 65 20 20 20 20 30 78 30 30 30 32 20 20 20 2f  he    0x0002   /
bc70: 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a  * Column cache *
bc80: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
bc90: 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20 20  _GroupByOrder   
bca0: 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f 55  0x0004   /* GROU
bcb0: 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52 44  PBY cover of ORD
bcc0: 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ERBY */.#define 
bcd0: 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75 74  SQLITE_FactorOut
bce0: 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20 2f  Const 0x0008   /
bcf0: 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f  * Constant facto
bd00: 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20 20 20  ring */./*      
bd10: 20 20 20 20 20 20 20 20 20 20 6e 6f 74 20 75 73            not us
bd20: 65 64 20 20 20 20 30 78 30 30 31 30 20 20 20 2f  ed    0x0010   /
bd30: 2f 20 57 61 73 3a 20 53 51 4c 49 54 45 5f 49 64  / Was: SQLITE_Id
bd40: 78 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a 23 64  xRealAsInt */.#d
bd50: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73  efine SQLITE_Dis
bd60: 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30  tinctOpt    0x00
bd70: 32 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54  20   /* DISTINCT
bd80: 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a   using indexes *
bd90: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
bda0: 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20  _CoverIdxScan   
bdb0: 30 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76 65  0x0040   /* Cove
bdc0: 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73  ring index scans
bdd0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
bde0: 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69  TE_OrderByIdxJoi
bdf0: 6e 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f 52  n 0x0080   /* OR
be00: 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20  DER BY of joins 
be10: 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  via index */.#de
be20: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62 71  fine SQLITE_Subq
be30: 43 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31 30  Coroutine  0x010
be40: 30 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65 20  0   /* Evaluate 
be50: 73 75 62 71 75 65 72 69 65 73 20 61 73 20 63 6f  subqueries as co
be60: 72 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66  routines */.#def
be70: 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73  ine SQLITE_Trans
be80: 69 74 69 76 65 20 20 20 20 20 30 78 30 32 30 30  itive     0x0200
be90: 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65     /* Transitive
bea0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
beb0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f  #define SQLITE_O
bec0: 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78  mitNoopJoin   0x
bed0: 30 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75  0400   /* Omit u
bee0: 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e 20  nused tables in 
bef0: 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  joins */.#define
bf00: 20 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20 20   SQLITE_Stat34  
bf10: 20 20 20 20 20 20 20 30 78 30 38 30 30 20 20 20         0x0800   
bf20: 2f 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72 20  /* Use STAT3 or 
bf30: 53 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 23 64  STAT4 data */.#d
bf40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c  efine SQLITE_All
bf50: 4f 70 74 73 20 20 20 20 20 20 20 20 30 78 66 66  Opts        0xff
bf60: 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69  ff   /* All opti
bf70: 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a  mizations */../*
bf80: 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20 74  .** Macros for t
bf90: 65 73 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f  esting whether o
bfa0: 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69  r not optimizati
bfb0: 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20  ons are enabled 
bfc0: 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a  or disabled..*/.
bfd0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
bfe0: 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
bff0: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
c000: 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62  ationDisabled(db
c010: 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62 29 2d  , mask)  (((db)-
c020: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
c030: 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  k))!=0).#define 
c040: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62  OptimizationEnab
c050: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20  led(db, mask)   
c060: 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61  (((db)->dbOptFla
c070: 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 23  gs&(mask))==0).#
c080: 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f 70 74  else.#define Opt
c090: 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65  imizationDisable
c0a0: 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 30 0a 23  d(db, mask)  0.#
c0b0: 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74  define Optimizat
c0c0: 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d  ionEnabled(db, m
c0d0: 61 73 6b 29 20 20 20 31 0a 23 65 6e 64 69 66 0a  ask)   1.#endif.
c0e0: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72  ./*.** Return tr
c0f0: 75 65 20 69 66 20 69 74 20 4f 4b 20 74 6f 20 66  ue if it OK to f
c100: 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65  actor constant e
c110: 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20  xpressions into 
c120: 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  the initializati
c130: 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20  on.** code. The 
c140: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 61  argument is a Pa
c150: 72 73 65 20 6f 62 6a 65 63 74 20 66 6f 72 20 74  rse object for t
c160: 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
c170: 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f  r..*/.#define Co
c180: 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50 29 20 28  nstFactorOk(P) (
c190: 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74  (P)->okConstFact
c1a0: 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  or)../*.** Possi
c1b0: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74  ble values for t
c1c0: 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20  he sqlite.magic 
c1d0: 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75  field..** The nu
c1e0: 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e  mbers are obtain
c1f0: 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64  ed at random and
c200: 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c   have no special
c210: 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a   meaning, other.
c220: 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69  ** than being di
c230: 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20  stinct from one 
c240: 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66  another..*/.#def
c250: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
c260: 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32 39  _OPEN     0xa029
c270: 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73  a697  /* Databas
c280: 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65  e is open */.#de
c290: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
c2a0: 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33  C_CLOSED   0x9f3
c2b0: 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61  c2d33  /* Databa
c2c0: 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a  se is closed */.
c2d0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
c2e0: 41 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78  AGIC_SICK     0x
c2f0: 34 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72  4b771290  /* Err
c300: 6f 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20  or and awaiting 
c310: 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  close */.#define
c320: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55   SQLITE_MAGIC_BU
c330: 53 59 20 20 20 20 20 30 78 66 30 33 62 37 39 30  SY     0xf03b790
c340: 36 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63  6  /* Database c
c350: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20  urrently in use 
c360: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c370: 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20  E_MAGIC_ERROR   
c380: 20 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20   0xb5357930  /* 
c390: 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  An SQLITE_MISUSE
c3a0: 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20   error occurred 
c3b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c3c0: 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20  E_MAGIC_ZOMBIE  
c3d0: 20 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20   0x64cffc7f  /* 
c3e0: 43 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20  Close with last 
c3f0: 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20  statement close 
c400: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  */../*.** Each S
c410: 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64  QL function is d
c420: 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73  efined by an ins
c430: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
c440: 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74  lowing.** struct
c450: 75 72 65 2e 20 20 41 20 70 6f 69 6e 74 65 72 20  ure.  A pointer 
c460: 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
c470: 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74  e is stored in t
c480: 68 65 20 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a  he sqlite.aFunc.
c490: 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20  ** hash table.  
c4a0: 57 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75  When multiple fu
c4b0: 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 74 68 65  nctions have the
c4c0: 20 73 61 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20   same name, the 
c4d0: 68 61 73 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f  hash table.** po
c4e0: 69 6e 74 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64  ints to a linked
c4f0: 20 6c 69 73 74 20 6f 66 20 74 68 65 73 65 20 73   list of these s
c500: 74 72 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74  tructures..*/.st
c510: 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20  ruct FuncDef {. 
c520: 20 69 31 36 20 6e 41 72 67 3b 20 20 20 20 20 20   i16 nArg;      
c530: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c540: 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d  of arguments.  -
c550: 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65  1 means unlimite
c560: 64 20 2a 2f 0a 20 20 75 31 36 20 66 75 6e 63 46  d */.  u16 funcF
c570: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53  lags;       /* S
c580: 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  ome combination 
c590: 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a  of SQLITE_FUNC_*
c5a0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
c5b0: 72 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73  rData;     /* Us
c5c0: 65 72 20 64 61 74 61 20 70 61 72 61 6d 65 74 65  er data paramete
c5d0: 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a  r */.  FuncDef *
c5e0: 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e  pNext;      /* N
c5f0: 65 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ext function wit
c600: 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20  h same name */. 
c610: 20 76 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73   void (*xFunc)(s
c620: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
c630: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
c640: 65 2a 2a 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72  e**); /* Regular
c650: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
c660: 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c  oid (*xStep)(sql
c670: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
c680: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
c690: 2a 29 3b 20 2f 2a 20 41 67 67 72 65 67 61 74 65  *); /* Aggregate
c6a0: 20 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20   step */.  void 
c6b0: 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c  (*xFinalize)(sql
c6c0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20  ite3_context*); 
c6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c6e0: 2a 20 41 67 67 72 65 67 61 74 65 20 66 69 6e 61  * Aggregate fina
c6f0: 6c 69 7a 65 72 20 2a 2f 0a 20 20 63 68 61 72 20  lizer */.  char 
c700: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
c710: 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74  /* SQL name of t
c720: 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a  he function. */.
c730: 20 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68    FuncDef *pHash
c740: 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77  ;      /* Next w
c750: 69 74 68 20 61 20 64 69 66 66 65 72 65 6e 74 20  ith a different 
c760: 6e 61 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d  name but the sam
c770: 65 20 68 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63  e hash */.  Func
c780: 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73  Destructor *pDes
c790: 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65  tructor;   /* Re
c7a0: 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20  ference counted 
c7b0: 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
c7c0: 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ion */.};../*.**
c7d0: 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
c7e0: 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75  encapsulates a u
c7f0: 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73  ser-function des
c800: 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b  tructor callback
c810: 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72   (as.** configur
c820: 65 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f  ed using create_
c830: 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61  function_v2()) a
c840: 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63  nd a reference c
c850: 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20  ounter. When.** 
c860: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
c870: 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74  v2() is called t
c880: 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74  o create a funct
c890: 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72  ion with a destr
c8a0: 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67  uctor,.** a sing
c8b0: 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69  le object of thi
c8c0: 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61  s type is alloca
c8d0: 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63  ted. FuncDestruc
c8e0: 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20  tor.nRef is set 
c8f0: 74 6f 20 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65  to .** the numbe
c900: 72 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a  r of FuncDef obj
c910: 65 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69  ects created (ei
c920: 74 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70  ther 1 or 3, dep
c930: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
c940: 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20  r.** or not the 
c950: 73 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69  specified encodi
c960: 6e 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59  ng is SQLITE_ANY
c970: 29 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70  ). The FuncDef.p
c980: 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65  Destructor.** me
c990: 6d 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20  mber of each of 
c9a0: 74 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20  the new FuncDef 
c9b0: 6f 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74  objects is set t
c9c0: 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61  o point to the a
c9d0: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63  llocated.** Func
c9e0: 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a  Destructor..**.*
c9f0: 2a 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68  * Thereafter, wh
ca00: 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75  en one of the Fu
ca10: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73  ncDef objects is
ca20: 20 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65   deleted, the re
ca30: 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74  ference.** count
ca40: 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20   on this object 
ca50: 69 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20  is decremented. 
ca60: 57 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20  When it reaches 
ca70: 30 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f  0, the destructo
ca80: 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20  r.** is invoked 
ca90: 61 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74  and the FuncDest
caa0: 72 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65  ructor structure
cab0: 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63   freed..*/.struc
cac0: 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  t FuncDestructor
cad0: 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20   {.  int nRef;. 
cae0: 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
caf0: 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69  )(void *);.  voi
cb00: 64 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b  d *pUserData;.};
cb10: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
cb20: 20 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63   values for Func
cb30: 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65  Def.flags.  Note
cb40: 20 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54   that the _LENGT
cb50: 48 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a  H and _TYPEOF.**
cb60: 20 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72   values must cor
cb70: 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41  respond to OPFLA
cb80: 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20  G_LENGTHARG and 
cb90: 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
cba0: 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20  .  There.** are 
cbb0: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
cbc0: 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20  nts in the code 
cbd0: 74 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a  to verify this..
cbe0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
cbf0: 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20  E_FUNC_ENCMASK  
cc00: 30 78 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f  0x003 /* SQLITE_
cc10: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46  UTF8, SQLITE_UTF
cc20: 31 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20  16BE or UTF16LE 
cc30: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
cc40: 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20  E_FUNC_LIKE     
cc50: 30 78 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61  0x004 /* Candida
cc60: 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20  te for the LIKE 
cc70: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a  optimization */.
cc80: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
cc90: 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78 30  UNC_CASE     0x0
cca0: 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69  08 /* Case-sensi
ccb0: 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66  tive LIKE-type f
ccc0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
ccd0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45  ne SQLITE_FUNC_E
cce0: 50 48 45 4d 20 20 20 20 30 78 30 31 30 20 2f 2a  PHEM    0x010 /*
ccf0: 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c   Ephemeral.  Del
cd00: 65 74 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f  ete with VDBE */
cd10: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
cd20: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78  FUNC_NEEDCOLL 0x
cd30: 30 32 30 20 2f 2a 20 73 71 6c 69 74 65 33 47 65  020 /* sqlite3Ge
cd40: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d  tFuncCollSeq() m
cd50: 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64 20 2a  ight be called *
cd60: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
cd70: 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30  _FUNC_LENGTH   0
cd80: 78 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  x040 /* Built-in
cd90: 20 6c 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69   length() functi
cda0: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
cdb0: 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46  LITE_FUNC_TYPEOF
cdc0: 20 20 20 30 78 30 38 30 20 2f 2a 20 42 75 69 6c     0x080 /* Buil
cdd0: 74 2d 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75  t-in typeof() fu
cde0: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
cdf0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
ce00: 55 4e 54 20 20 20 20 30 78 31 30 30 20 2f 2a 20  UNT    0x100 /* 
ce10: 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a  Built-in count(*
ce20: 29 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23  ) aggregate */.#
ce30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
ce40: 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 32 30  NC_COALESCE 0x20
ce50: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f  0 /* Built-in co
ce60: 61 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75  alesce() or ifnu
ce70: 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ll() */.#define 
ce80: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49  SQLITE_FUNC_UNLI
ce90: 4b 45 4c 59 20 30 78 34 30 30 20 2f 2a 20 42 75  KELY 0x400 /* Bu
cea0: 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28  ilt-in unlikely(
ceb0: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
cec0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
ced0: 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 38 30 30  C_CONSTANT 0x800
cee0: 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70   /* Constant inp
cef0: 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74  uts give a const
cf00: 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64  ant output */.#d
cf10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
cf20: 43 5f 4d 49 4e 4d 41 58 20 20 30 78 31 30 30 30  C_MINMAX  0x1000
cf30: 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69 6e   /* True for min
cf40: 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67 67  () and max() agg
cf50: 72 65 67 61 74 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a  regates */../*.*
cf60: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
cf70: 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55  three macros, FU
cf80: 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55  NCTION(), LIKEFU
cf90: 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41  NC() and AGGREGA
cfa0: 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64  TE() are.** used
cfb0: 20 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69   to create the i
cfc0: 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20  nitializers for 
cfd0: 74 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75  the FuncDef stru
cfe0: 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20  ctures..**.**   
cff0: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
d000: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
d010: 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55   xFunc).**     U
d020: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
d030: 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  scalar function 
d040: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
d050: 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a  function zName .
d060: 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74  **     implement
d070: 65 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e  ed by C function
d080: 20 78 46 75 6e 63 20 74 68 61 74 20 61 63 63 65   xFunc that acce
d090: 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e  pts nArg argumen
d0a0: 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76  ts. The.**     v
d0b0: 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 69  alue passed as i
d0c0: 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
d0d0: 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64   (void*) and mad
d0e0: 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20  e available.**  
d0f0: 20 20 20 61 73 20 74 68 65 20 75 73 65 72 2d 64     as the user-d
d100: 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65  ata (sqlite3_use
d110: 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74 68  r_data()) for th
d120: 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a  e function. If .
d130: 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20  **     argument 
d140: 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65  bNC is true, the
d150: 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  n the SQLITE_FUN
d160: 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20  C_NEEDCOLL flag 
d170: 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  is set..**.**   
d180: 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  VFUNCTION(zName,
d190: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
d1a0: 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
d1b0: 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78  Like FUNCTION ex
d1c0: 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68  cept it omits th
d1d0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
d1e0: 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a  NSTANT flag..**.
d1f0: 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45 28 7a  **   AGGREGATE(z
d200: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
d210: 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46  , bNC, xStep, xF
d220: 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65  inal).**     Use
d230: 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61  d to create an a
d240: 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
d250: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70  n definition imp
d260: 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20  lemented by.**  
d270: 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f     the C functio
d280: 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69  ns xStep and xFi
d290: 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66  nal. The first f
d2a0: 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a  our parameters.*
d2b0: 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70  *     are interp
d2c0: 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d  reted in the sam
d2d0: 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72  e way as the fir
d2e0: 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20  st 4 parameters 
d2f0: 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49  to.**     FUNCTI
d300: 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49  ON()..**.**   LI
d310: 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41  KEFUNC(zName, nA
d320: 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29  rg, pArg, flags)
d330: 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
d340: 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20  create a scalar 
d350: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
d360: 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ion of a functio
d370: 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20  n zName .**     
d380: 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72  that accepts nAr
d390: 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20  g arguments and 
d3a0: 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  is implemented b
d3b0: 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a  y a call to C .*
d3c0: 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c  *     function l
d3d0: 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e  ikeFunc. Argumen
d3e0: 74 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74  t pArg is cast t
d3f0: 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64  o a (void *) and
d400: 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61   made.**     ava
d410: 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75  ilable as the fu
d420: 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61  nction user-data
d430: 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64   (sqlite3_user_d
d440: 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20  ata()). The.**  
d450: 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73     FuncDef.flags
d460: 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
d470: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61   to the value pa
d480: 73 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67  ssed as the flag
d490: 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74  s.**     paramet
d4a0: 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46  er..*/.#define F
d4b0: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
d4c0: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
d4d0: 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
d4e0: 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  , SQLITE_FUNC_CO
d4f0: 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
d500: 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
d510: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
d520: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
d530: 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
d540: 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e  xFunc, 0, 0, #zN
d550: 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69  ame, 0, 0}.#defi
d560: 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ne VFUNCTION(zNa
d570: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
d580: 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
d590: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
d5a0: 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
d5b0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
d5c0: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
d5d0: 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
d5e0: 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e  xFunc, 0, 0, #zN
d5f0: 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69  ame, 0, 0}.#defi
d600: 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61  ne FUNCTION2(zNa
d610: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
d620: 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72  bNC, xFunc, extr
d630: 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72  aFlags) \.  {nAr
d640: 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  g,SQLITE_FUNC_CO
d650: 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
d660: 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
d670: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78  UNC_NEEDCOLL)|ex
d680: 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51  traFlags,\.   SQ
d690: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
d6a0: 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
d6b0: 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30   0, 0, #zName, 0
d6c0: 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 53 54 52  , 0}.#define STR
d6d0: 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  _FUNCTION(zName,
d6e0: 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43   nArg, pArg, bNC
d6f0: 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
d700: 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
d710: 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
d720: 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
d730: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
d740: 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78   \.   pArg, 0, x
d750: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
d760: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
d770: 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65  e LIKEFUNC(zName
d780: 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61  , nArg, arg, fla
d790: 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  gs) \.  {nArg, S
d7a0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
d7b0: 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
d7c0: 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69  flags, \.   (voi
d7d0: 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65  d *)arg, 0, like
d7e0: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
d7f0: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
d800: 65 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d  e AGGREGATE(zNam
d810: 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63  e, nArg, arg, nc
d820: 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29  , xStep, xFinal)
d830: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
d840: 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49  TE_UTF8|(nc*SQLI
d850: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
d860: 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  ), \.   SQLITE_I
d870: 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20  NT_TO_PTR(arg), 
d880: 30 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e  0, 0, xStep,xFin
d890: 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 23  al,#zName,0,0}.#
d8a0: 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45  define AGGREGATE
d8b0: 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  2(zName, nArg, a
d8c0: 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78  rg, nc, xStep, x
d8d0: 46 69 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61 67  Final, extraFlag
d8e0: 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  s) \.  {nArg, SQ
d8f0: 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51  LITE_UTF8|(nc*SQ
d900: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
d910: 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20  LL)|extraFlags, 
d920: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
d930: 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
d940: 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c  0, xStep,xFinal,
d950: 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a  #zName,0,0}../*.
d960: 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73  ** All current s
d970: 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74  avepoints are st
d980: 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64  ored in a linked
d990: 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61   list starting a
d9a0: 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61  t.** sqlite3.pSa
d9b0: 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72  vepoint. The fir
d9c0: 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68  st element in th
d9d0: 65 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f  e list is the mo
d9e0: 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f  st recently.** o
d9f0: 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e  pened savepoint.
da00: 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20   Savepoints are 
da10: 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73  added to the lis
da20: 74 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a  t by the vdbe.**
da30: 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e   OP_Savepoint in
da40: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  struction..*/.st
da50: 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b  ruct Savepoint {
da60: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
da70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da80: 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f         /* Savepo
da90: 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65  int name (nul-te
daa0: 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69  rminated) */.  i
dab0: 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  64 nDeferredCons
dac0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
dad0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
dae0: 64 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c  deferred fk viol
daf0: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20  ations */.  i64 
db00: 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
db10: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
db20: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66  /* Number of def
db30: 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f  erred imm fk. */
db40: 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e  .  Savepoint *pN
db50: 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
db60: 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74         /* Parent
db70: 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61   savepoint (if a
db80: 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ny) */.};../*.**
db90: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   The following a
dba0: 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20 73  re used as the s
dbb0: 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20  econd parameter 
dbc0: 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f  to sqlite3Savepo
dbd0: 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73  int(),.** and as
dbe0: 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74   the P1 argument
dbf0: 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70   to the OP_Savep
dc00: 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  oint instruction
dc10: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56  ..*/.#define SAV
dc20: 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20  EPOINT_BEGIN    
dc30: 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45    0.#define SAVE
dc40: 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20  POINT_RELEASE   
dc50: 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50   1.#define SAVEP
dc60: 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20  OINT_ROLLBACK   
dc70: 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  2.../*.** Each S
dc80: 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69  QLite module (vi
dc90: 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69  rtual table defi
dca0: 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e  nition) is defin
dcb0: 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74  ed by an.** inst
dcc0: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
dcd0: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c  owing structure,
dce0: 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73   stored in the s
dcf0: 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a  qlite3.aModule.*
dd00: 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f  * hash table..*/
dd10: 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b  .struct Module {
dd20: 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
dd30: 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
dd40: 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62  ;       /* Callb
dd50: 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a  ack pointers */.
dd60: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
dd70: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
dd80: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70         /* Name p
dd90: 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f  assed to create_
dda0: 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f  module() */.  vo
ddb0: 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20  id *pAux;       
ddc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddd0: 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65     /* pAux passe
dde0: 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75  d to create_modu
ddf0: 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28  le() */.  void (
de00: 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20  *xDestroy)(void 
de10: 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  *);            /
de20: 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63  * Module destruc
de30: 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  tor function */.
de40: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d  };../*.** inform
de50: 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68  ation about each
de60: 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51   column of an SQ
de70: 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20  L table is held 
de80: 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  in an instance.*
de90: 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
dea0: 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43  ure..*/.struct C
deb0: 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a  olumn {.  char *
dec0: 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61  zName;     /* Na
ded0: 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  me of this colum
dee0: 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66  n */.  Expr *pDf
def0: 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75  lt;     /* Defau
df00: 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  lt value of this
df10: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61   column */.  cha
df20: 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20 20 2f 2a  r *zDflt;     /*
df30: 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f   Original text o
df40: 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  f the default va
df50: 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  lue */.  char *z
df60: 54 79 70 65 3b 20 20 20 20 20 2f 2a 20 44 61 74  Type;     /* Dat
df70: 61 20 74 79 70 65 20 66 6f 72 20 74 68 69 73 20  a type for this 
df80: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72  column */.  char
df90: 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20   *zColl;     /* 
dfa0: 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  Collating sequen
dfb0: 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73  ce.  If NULL, us
dfc0: 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f  e the default */
dfd0: 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20  .  u8 notNull;  
dfe0: 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f      /* An OE_ co
dff0: 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20  de for handling 
e000: 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  a NOT NULL const
e010: 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20  raint */.  char 
e020: 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f  affinity;   /* O
e030: 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45  ne of the SQLITE
e040: 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20  _AFF_... values 
e050: 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b 20 20  */.  u8 szEst;  
e060: 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74        /* Estimat
e070: 65 64 20 73 69 7a 65 20 6f 66 20 74 68 69 73 20  ed size of this 
e080: 63 6f 6c 75 6d 6e 2e 20 20 49 4e 54 3d 3d 31 20  column.  INT==1 
e090: 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67 73  */.  u8 colFlags
e0a0: 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e  ;     /* Boolean
e0b0: 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20 53 65   properties.  Se
e0c0: 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e  e COLFLAG_ defin
e0d0: 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a  es below */.};..
e0e0: 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  /* Allowed value
e0f0: 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c  s for Column.col
e100: 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e  Flags:.*/.#defin
e110: 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45  e COLFLAG_PRIMKE
e120: 59 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20  Y  0x0001    /* 
e130: 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f  Column is part o
e140: 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  f the primary ke
e150: 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c  y */.#define COL
e160: 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20 30 78  FLAG_HIDDEN   0x
e170: 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68 69 64  0002    /* A hid
e180: 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20  den column in a 
e190: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f  virtual table */
e1a0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61  ../*.** A "Colla
e1b0: 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69  ting Sequence" i
e1c0: 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20  s defined by an 
e1d0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
e1e0: 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72  following.** str
e1f0: 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75  ucture. Conceptu
e200: 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e  ally, a collatin
e210: 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69  g sequence consi
e220: 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e  sts of a name an
e230: 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f  d.** a compariso
e240: 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64  n routine that d
e250: 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72  efines the order
e260: 20 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e 63   of that sequenc
e270: 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c  e..**.** If Coll
e280: 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c  Seq.xCmp is NULL
e290: 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  , it means that 
e2a0: 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67  the.** collating
e2b0: 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64   sequence is und
e2c0: 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73  efined.  Indices
e2d0: 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64   built on an und
e2e0: 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74  efined.** collat
e2f0: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79  ing sequence may
e300: 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20   not be read or 
e310: 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75  written..*/.stru
e320: 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63  ct CollSeq {.  c
e330: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
e340: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
e350: 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  the collating se
e360: 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e  quence, UTF-8 en
e370: 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e  coded */.  u8 en
e380: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
e390: 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
e3a0: 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d  g handled by xCm
e3b0: 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  p() */.  void *p
e3c0: 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  User;          /
e3d0: 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
e3e0: 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20   to xCmp() */.  
e3f0: 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69 64  int (*xCmp)(void
e400: 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  *,int, const voi
e410: 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76  d*, int, const v
e420: 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a  oid*);.  void (*
e430: 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f  xDel)(void*);  /
e440: 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72  * Destructor for
e450: 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   pUser */.};../*
e460: 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65 72  .** A sort order
e470: 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 41   can be either A
e480: 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23  SC or DESC..*/.#
e490: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
e4a0: 5f 41 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a  _ASC       0  /*
e4b0: 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69   Sort in ascendi
e4c0: 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66  ng order */.#def
e4d0: 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45  ine SQLITE_SO_DE
e4e0: 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f  SC      1  /* So
e4f0: 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  rt in ascending 
e500: 6f 72 64 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  order */../*.** 
e510: 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  Column affinity 
e520: 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  types..**.** The
e530: 73 65 20 75 73 65 64 20 74 6f 20 68 61 76 65 20  se used to have 
e540: 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69  mnemonic name li
e550: 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54  ke 'i' for SQLIT
e560: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e  E_AFF_INTEGER an
e570: 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c  d.** 't' for SQL
e580: 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42  ITE_AFF_TEXT.  B
e590: 75 74 20 77 65 20 63 61 6e 20 73 61 76 65 20 61  ut we can save a
e5a0: 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e   little space an
e5b0: 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65  d improve.** the
e5c0: 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20   speed a little 
e5d0: 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65  by numbering the
e5e0: 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74   values consecut
e5f0: 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42  ively.  .**.** B
e600: 75 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 73  ut rather than s
e610: 74 61 72 74 20 77 69 74 68 20 30 20 6f 72 20 31  tart with 0 or 1
e620: 2c 20 77 65 20 62 65 67 69 6e 20 77 69 74 68 20  , we begin with 
e630: 27 41 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a  'A'.  That way,.
e640: 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65  ** when multiple
e650: 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 20   affinity types 
e660: 61 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64  are concatenated
e670: 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61   into a string a
e680: 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68  nd.** used as th
e690: 65 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68  e P4 operand, th
e6a0: 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20  ey will be more 
e6b0: 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  readable..**.** 
e6c0: 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74  Note also that t
e6d0: 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73  he numeric types
e6e0: 20 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67   are grouped tog
e6f0: 65 74 68 65 72 20 73 6f 20 74 68 61 74 20 74 65  ether so that te
e700: 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e  sting.** for a n
e710: 75 6d 65 72 69 63 20 74 79 70 65 20 69 73 20 61  umeric type is a
e720: 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73   single comparis
e730: 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20 42 4c 4f  on.  And the BLO
e740: 42 20 74 79 70 65 20 69 73 20 66 69 72 73 74 2e  B type is first.
e750: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
e760: 54 45 5f 41 46 46 5f 42 4c 4f 42 20 20 20 20 20  TE_AFF_BLOB     
e770: 27 41 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'A'.#define SQLI
e780: 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20  TE_AFF_TEXT     
e790: 27 42 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'B'.#define SQLI
e7a0: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20  TE_AFF_NUMERIC  
e7b0: 27 43 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'C'.#define SQLI
e7c0: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20  TE_AFF_INTEGER  
e7d0: 27 44 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'D'.#define SQLI
e7e0: 54 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20  TE_AFF_REAL     
e7f0: 27 45 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c  'E'..#define sql
e800: 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66  ite3IsNumericAff
e810: 69 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d  inity(X)  ((X)>=
e820: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
e830: 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  IC)../*.** The S
e840: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76  QLITE_AFF_MASK v
e850: 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20  alues masks off 
e860: 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20  the significant 
e870: 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66  bits of an.** af
e880: 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a  finity value. .*
e890: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e8a0: 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78  _AFF_MASK     0x
e8b0: 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69  47../*.** Additi
e8c0: 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20  onal bit values 
e8d0: 74 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64  that can be ORed
e8e0: 20 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74   with an affinit
e8f0: 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61  y without.** cha
e900: 6e 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  nging the affini
e910: 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51  ty..**.** The SQ
e920: 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61  LITE_NOTNULL fla
e930: 67 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69  g is a combinati
e940: 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64  on of NULLEQ and
e950: 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20   JUMPIFNULL..** 
e960: 49 74 20 63 61 75 73 65 73 20 61 6e 20 61 73 73  It causes an ass
e970: 65 72 74 28 29 20 74 6f 20 66 69 72 65 20 69 66  ert() to fire if
e980: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
e990: 74 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a  to a comparison.
e9a0: 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e  ** operator is N
e9b0: 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65  ULL.  It is adde
e9c0: 64 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d  d to certain com
e9d0: 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72  parison operator
e9e0: 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68  s to.** prove th
e9f0: 61 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20  at the operands 
ea00: 61 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e  are always NOT N
ea10: 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ULL..*/.#define 
ea20: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
ea30: 4c 20 20 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d  L   0x10  /* jum
ea40: 70 73 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  ps if either ope
ea50: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a  rand is NULL */.
ea60: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
ea70: 54 4f 52 45 50 32 20 20 20 20 20 20 30 78 32 30  TOREP2      0x20
ea80: 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
ea90: 74 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74  t in reg[P2] rat
eaa0: 68 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f  her than jump */
eab0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
eac0: 4e 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38  NULLEQ       0x8
ead0: 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20  0  /* NULL=NULL 
eae0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
eaf0: 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30  E_NOTNULL      0
eb00: 78 39 30 20 20 2f 2a 20 41 73 73 65 72 74 20 74  x90  /* Assert t
eb10: 68 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65  hat operands are
eb20: 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a   never NULL */..
eb30: 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20  /*.** An object 
eb40: 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
eb50: 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68  created for each
eb60: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70   virtual table p
eb70: 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65  resent in.** the
eb80: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
eb90: 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  . .**.** If the 
eba0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
ebb0: 69 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20  is shared, then 
ebc0: 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73  there is one ins
ebd0: 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a  tance of this.**
ebe0: 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 65   structure for e
ebf0: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
ec00: 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33  nection (sqlite3
ec10: 2a 29 20 74 68 61 74 20 75 73 65 73 20 74 68 65  *) that uses the
ec20: 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d   shared.** schem
ec30: 61 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75  a. This is becau
ec40: 73 65 20 65 61 63 68 20 64 61 74 61 62 61 73 65  se each database
ec50: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75   connection requ
ec60: 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69  ires its own uni
ec70: 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20  que.** instance 
ec80: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  of the sqlite3_v
ec90: 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64  tab* handle used
eca0: 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76   to access the v
ecb0: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a  irtual table .**
ecc0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
ecd0: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
ece0: 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62  andles can not b
ecf0: 65 20 73 68 61 72 65 64 20 62 65 74 77 65 65 6e  e shared between
ed00: 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f   .** database co
ed10: 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20  nnections, even 
ed20: 77 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66  when the rest of
ed30: 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64   the in-memory d
ed40: 61 74 61 62 61 73 65 20 0a 2a 2a 20 73 63 68 65  atabase .** sche
ed50: 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73  ma is shared, as
ed60: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
ed70: 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73  ion often stores
ed80: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
ed90: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
eda0: 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20  le passed to it 
edb0: 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74  via the xConnect
edc0: 28 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20  () or xCreate() 
edd0: 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67  method.** during
ede0: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
edf0: 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73  internally. This
ee00: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
ee10: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a  tion handle may.
ee20: 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20  ** then be used 
ee30: 62 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  by the virtual t
ee40: 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  able implementat
ee50: 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65  ion to access re
ee60: 61 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69  al tables .** wi
ee70: 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  thin the databas
ee80: 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20  e. So that they 
ee90: 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f  appear as part o
eea0: 66 20 74 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a  f the callers .*
eeb0: 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  * transaction, t
eec0: 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65  hese accesses ne
eed0: 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69  ed to be made vi
eee0: 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  a the same datab
eef0: 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  ase .** connecti
ef00: 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20  on as that used 
ef10: 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f  to execute SQL o
ef20: 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65  perations on the
ef30: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a   virtual table..
ef40: 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65  **.** All VTable
ef50: 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f   objects that co
ef60: 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69  rrespond to a si
ef70: 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20  ngle table in a 
ef80: 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61  shared.** databa
ef90: 73 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e  se schema are in
efa0: 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69  itially stored i
efb0: 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20  n a linked-list 
efc0: 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a  pointed to by.**
efd0: 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62   the Table.pVTab
efe0: 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62  le member variab
eff0: 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73  le of the corres
f000: 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62  ponding Table ob
f010: 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e  ject..** When an
f020: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
f030: 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  () operation is 
f040: 72 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65  required to acce
f050: 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a  ss the virtual.*
f060: 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72  * table, it sear
f070: 63 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f  ches the list fo
f080: 72 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61  r the VTable tha
f090: 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
f0a0: 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
f0b0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e   connection doin
f0c0: 67 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20  g the preparing 
f0d0: 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65  so as to use the
f0e0: 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69   correct.** sqli
f0f0: 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
f100: 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64   in the compiled
f110: 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68   query..**.** Wh
f120: 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20  en an in-memory 
f130: 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20  Table object is 
f140: 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61  deleted (for exa
f150: 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a  mple when the.**
f160: 20 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67   schema is being
f170: 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f   reloaded for so
f180: 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20  me reason), the 
f190: 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61  VTable objects a
f1a0: 72 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74  re not .** delet
f1b0: 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74  ed and the sqlit
f1c0: 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73  e3_vtab* handles
f1d0: 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e   are not xDiscon
f1e0: 6e 65 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d  nect()ed .** imm
f1f0: 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61  ediately. Instea
f200: 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65  d, they are move
f210: 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65  d from the Table
f220: 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f  .pVTable list to
f230: 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b  .** another link
f240: 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 62  ed list headed b
f250: 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44  y the sqlite3.pD
f260: 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72  isconnect member
f270: 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65   of the.** corre
f280: 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
f290: 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 79   structure. They
f2a0: 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65   are then delete
f2b0: 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 20  d/xDisconnected 
f2c0: 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20  .** next time a 
f2d0: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65  statement is pre
f2e0: 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64  pared using said
f2f0: 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20   sqlite3*. This 
f300: 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76  is done.** to av
f310: 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73  oid deadlock iss
f320: 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75  ues involving mu
f330: 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d  ltiple sqlite3.m
f340: 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a  utex mutexes..**
f350: 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e   Refer to commen
f360: 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f  ts above functio
f370: 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  n sqlite3VtabUnl
f380: 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e  ockList() for an
f390: 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20  .** explanation 
f3a0: 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20  as to why it is 
f3b0: 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65  safe to add an e
f3c0: 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74  ntry to an sqlit
f3d0: 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a  e3.pDisconnect.*
f3e0: 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68  * list without h
f3f0: 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65  olding the corre
f400: 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
f410: 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a  .mutex mutex..**
f420: 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66  .** The memory f
f430: 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68  or objects of th
f440: 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79  is type is alway
f450: 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a  s allocated by .
f460: 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  ** sqlite3DbMall
f470: 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20  oc(), using the 
f480: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
f490: 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62  e stored in VTab
f4a0: 6c 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68 65  le.db as .** the
f4b0: 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e   first argument.
f4c0: 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c  .*/.struct VTabl
f4d0: 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e {.  sqlite3 *d
f4e0: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
f4f0: 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e  /* Database conn
f500: 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65  ection associate
f510: 64 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c  d with this tabl
f520: 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70  e */.  Module *p
f530: 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mod;            
f540: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d   /* Pointer to m
f550: 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
f560: 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  tion */.  sqlite
f570: 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20  3_vtab *pVtab;  
f580: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
f590: 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20  o vtab instance 
f5a0: 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20  */.  int nRef;  
f5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f5c0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e  * Number of poin
f5d0: 74 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72  ters to this str
f5e0: 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62  ucture */.  u8 b
f5f0: 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20  Constraint;     
f600: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
f610: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65   constraints are
f620: 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20   supported */.  
f630: 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20  int iSavepoint; 
f640: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70            /* Dep
f650: 74 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f  th of the SAVEPO
f660: 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56  INT stack */.  V
f670: 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20  Table *pNext;   
f680: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
f690: 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20   in linked list 
f6a0: 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d  (see above) */.}
f6b0: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68  ;../*.** The sch
f6c0: 65 6d 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c  ema for each SQL
f6d0: 20 74 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20   table and view 
f6e0: 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
f6f0: 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61  n memory.** by a
f700: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
f710: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
f720: 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
f730: 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20   Table {.  char 
f740: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
f750: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74  /* Name of the t
f760: 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a  able or view */.
f770: 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20    Column *aCol; 
f780: 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d         /* Inform
f790: 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68  ation about each
f7a0: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64   column */.  Ind
f7b0: 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20  ex *pIndex;     
f7c0: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c    /* List of SQL
f7d0: 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73   indexes on this
f7e0: 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c   table. */.  Sel
f7f0: 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
f800: 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61    /* NULL for ta
f810: 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f  bles.  Points to
f820: 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61   definition if a
f830: 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79   view. */.  FKey
f840: 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20   *pFKey;        
f850: 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20   /* Linked list 
f860: 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b  of all foreign k
f870: 65 79 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  eys in this tabl
f880: 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  e */.  char *zCo
f890: 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53  lAff;       /* S
f8a0: 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74  tring defining t
f8b0: 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65  he affinity of e
f8c0: 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 69  ach column */.#i
f8d0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
f8e0: 54 5f 43 48 45 43 4b 0a 20 20 45 78 70 72 4c 69  T_CHECK.  ExprLi
f8f0: 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f  st *pCheck;    /
f900: 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73  * All CHECK cons
f910: 74 72 61 69 6e 74 73 20 2a 2f 0a 23 65 6e 64 69  traints */.#endi
f920: 66 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20  f.  int tnum;   
f930: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74           /* Root
f940: 20 42 54 72 65 65 20 70 61 67 65 20 66 6f 72 20   BTree page for 
f950: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
f960: 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20 20  i16 iPKey;      
f970: 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e       /* If not n
f980: 65 67 61 74 69 76 65 2c 20 75 73 65 20 61 43 6f  egative, use aCo
f990: 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65 20  l[iPKey] as the 
f9a0: 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36 20 6e  rowid */.  i16 n
f9b0: 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
f9c0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
f9d0: 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62  umns in this tab
f9e0: 6c 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66  le */.  u16 nRef
f9f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
fa00: 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
fa10: 72 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65  rs to this Table
fa20: 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f   */.  LogEst nRo
fa30: 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45 73  wLogEst;   /* Es
fa40: 74 69 6d 61 74 65 64 20 72 6f 77 73 20 69 6e 20  timated rows in 
fa50: 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c  table - from sql
fa60: 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20  ite_stat1 table 
fa70: 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54 61  */.  LogEst szTa
fa80: 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74  bRow;     /* Est
fa90: 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 65  imated size of e
faa0: 61 63 68 20 74 61 62 6c 65 20 72 6f 77 20 69 6e  ach table row in
fab0: 20 62 79 74 65 73 20 2a 2f 0a 23 69 66 64 65 66   bytes */.#ifdef
fac0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43   SQLITE_ENABLE_C
fad0: 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74  OSTMULT.  LogEst
fae0: 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f   costMult;     /
faf0: 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65  * Cost multiplie
fb00: 72 20 66 6f 72 20 75 73 69 6e 67 20 74 68 69 73  r for using this
fb10: 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66   table */.#endif
fb20: 0a 20 20 75 38 20 74 61 62 46 6c 61 67 73 3b 20  .  u8 tabFlags; 
fb30: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
fb40: 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a  of TF_* values *
fb50: 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20  /.  u8 keyConf; 
fb60: 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74           /* What
fb70: 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f   to do in case o
fb80: 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e  f uniqueness con
fb90: 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a  flict on iPKey *
fba0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
fbb0: 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45  _OMIT_ALTERTABLE
fbc0: 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66  .  int addColOff
fbd0: 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65  set;    /* Offse
fbe0: 74 20 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c  t in CREATE TABL
fbf0: 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20  E stmt to add a 
fc00: 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65  new column */.#e
fc10: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
fc20: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
fc30: 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64  TABLE.  int nMod
fc40: 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20  uleArg;      /* 
fc50: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
fc60: 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c  nts to the modul
fc70: 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a  e */.  char **az
fc80: 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54  ModuleArg;  /* T
fc90: 65 78 74 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c  ext of all modul
fca0: 65 20 61 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d  e args. [0] is m
fcb0: 6f 64 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  odule name */.  
fcc0: 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b  VTable *pVTable;
fcd0: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
fce0: 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20  VTable objects. 
fcf0: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67  */.#endif.  Trig
fd00: 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20  ger *pTrigger;  
fd10: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67   /* List of trig
fd20: 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70  gers stored in p
fd30: 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65  Schema */.  Sche
fd40: 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
fd50: 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20   /* Schema that 
fd60: 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61  contains this ta
fd70: 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ble */.  Table *
fd80: 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a  pNextZombie;  /*
fd90: 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72   Next on the Par
fda0: 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69  se.pZombieTab li
fdb0: 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
fdc0: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
fdd0: 6f 72 20 54 61 62 6c 65 2e 74 61 62 46 6c 61 67  or Table.tabFlag
fde0: 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48  s..**.** TF_OOOH
fdf0: 69 64 64 65 6e 20 61 70 70 6c 69 65 73 20 74 6f  idden applies to
fe00: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
fe10: 74 68 61 74 20 68 61 76 65 20 68 69 64 64 65 6e  that have hidden
fe20: 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72   columns that ar
fe30: 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20 62 79  e.** followed by
fe40: 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75   non-hidden colu
fe50: 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20  mns.  Example:  
fe60: 22 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20  "CREATE VIRTUAL 
fe70: 54 41 42 4c 45 20 78 20 55 53 49 4e 47 0a 2a 2a  TABLE x USING.**
fe80: 20 76 74 61 62 31 28 61 20 48 49 44 44 45 4e 2c   vtab1(a HIDDEN,
fe90: 20 62 29 3b 22 2e 20 20 53 69 6e 63 65 20 22 62   b);".  Since "b
fea0: 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69 64 64 65  " is a non-hidde
feb0: 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20 22 61 22  n column but "a"
fec0: 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a 2a 20 74   is hidden,.** t
fed0: 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20  he TF_OOOHidden 
fee0: 61 74 74 72 69 62 75 74 65 20 77 6f 75 6c 64 20  attribute would 
fef0: 61 70 70 6c 79 20 69 6e 20 74 68 69 73 20 63 61  apply in this ca
ff00: 73 65 2e 20 20 53 75 63 68 20 74 61 62 6c 65 73  se.  Such tables
ff10: 20 72 65 71 75 69 72 65 0a 2a 2a 20 73 70 65 63   require.** spec
ff20: 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 64 75 72  ial handling dur
ff30: 69 6e 67 20 49 4e 53 45 52 54 20 70 72 6f 63 65  ing INSERT proce
ff40: 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ssing..*/.#defin
ff50: 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20  e TF_Readonly   
ff60: 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
ff70: 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d  Read-only system
ff80: 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
ff90: 65 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20  e TF_Ephemeral  
ffa0: 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20       0x02    /* 
ffb0: 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  An ephemeral tab
ffc0: 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  le */.#define TF
ffd0: 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 20  _HasPrimaryKey  
ffe0: 20 30 78 30 34 20 20 20 20 2f 2a 20 54 61 62 6c   0x04    /* Tabl
fff0: 65 20 68 61 73 20 61 20 70 72 69 6d 61 72 79 20  e has a primary 
10000 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  key */.#define T
10010 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  F_Autoincrement 
10020 20 20 30 78 30 38 20 20 20 20 2f 2a 20 49 6e 74    0x08    /* Int
10030 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
10040 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e   is autoincremen
10050 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  t */.#define TF_
10060 56 69 72 74 75 61 6c 20 20 20 20 20 20 20 20 20  Virtual         
10070 30 78 31 30 20 20 20 20 2f 2a 20 49 73 20 61 20  0x10    /* Is a 
10080 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f  virtual table */
10090 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68  .#define TF_With
100a0 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78 32 30  outRowid    0x20
100b0 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e      /* No rowid.
100c0 20 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73    PRIMARY KEY is
100d0 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66   the key */.#def
100e0 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65  ine TF_NoVisible
100f0 52 6f 77 69 64 20 20 30 78 34 30 20 20 20 20 2f  Rowid  0x40    /
10100 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73 69 62 6c  * No user-visibl
10110 65 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e  e "rowid" column
10120 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f   */.#define TF_O
10130 4f 4f 48 69 64 64 65 6e 20 20 20 20 20 20 20 30  OOHidden       0
10140 78 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66  x80    /* Out-of
10150 2d 4f 72 64 65 72 20 68 69 64 64 65 6e 20 63 6f  -Order hidden co
10160 6c 75 6d 6e 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  lumns */.../*.**
10170 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65   Test to see whe
10180 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61  ther or not a ta
10190 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c  ble is a virtual
101a0 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73   table.  This is
101b0 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61  .** done as a ma
101c0 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77  cro so that it w
101d0 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64  ill be optimized
101e0 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61   out when virtua
101f0 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f  l.** table suppo
10200 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  rt is omitted fr
10210 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f  om the build..*/
10220 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
10230 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
10240 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  E.#  define IsVi
10250 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28  rtual(X)      ((
10260 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20  (X)->tabFlags & 
10270 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29 0a  TF_Virtual)!=0).
10280 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64  #  define IsHidd
10290 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58  enColumn(X) (((X
102a0 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  )->colFlags & CO
102b0 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30  LFLAG_HIDDEN)!=0
102c0 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  ).#else.#  defin
102d0 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20  e IsVirtual(X)  
102e0 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20      0.#  define 
102f0 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  IsHiddenColumn(X
10300 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44  ) 0.#endif../* D
10310 6f 65 73 20 74 68 65 20 74 61 62 6c 65 20 68 61  oes the table ha
10320 76 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64  ve a rowid */.#d
10330 65 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58  efine HasRowid(X
10340 29 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62  )     (((X)->tab
10350 46 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f  Flags & TF_Witho
10360 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a 23 64 65  utRowid)==0).#de
10370 66 69 6e 65 20 56 69 73 69 62 6c 65 52 6f 77 69  fine VisibleRowi
10380 64 28 58 29 20 28 28 28 58 29 2d 3e 74 61 62 46  d(X) (((X)->tabF
10390 6c 61 67 73 20 26 20 54 46 5f 4e 6f 56 69 73 69  lags & TF_NoVisi
103a0 62 6c 65 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f  bleRowid)==0)../
103b0 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67  *.** Each foreig
103c0 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
103d0 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
103e0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
103f0 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
10400 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  * A foreign key 
10410 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  is associated wi
10420 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20  th two tables.  
10430 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65  The "from" table
10440 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65   is.** the table
10450 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
10460 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
10470 61 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65  ause that create
10480 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a  s the foreign.**
10490 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20   key.  The "to" 
104a0 74 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62  table is the tab
104b0 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64  le that is named
104c0 20 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43   in the REFERENC
104d0 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f  ES clause..** Co
104e0 6e 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d  nsider this exam
104f0 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43  ple:.**.**     C
10500 52 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28  REATE TABLE ex1(
10510 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45  .**       a INTE
10520 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
10530 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45  .**       b INTE
10540 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66  GER CONSTRAINT f
10550 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78  k1 REFERENCES ex
10560 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a  2(x).**     );.*
10570 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e  *.** For foreign
10580 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20   key "fk1", the 
10590 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65  from-table is "e
105a0 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74  x1" and the to-t
105b0 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a  able is "ex2"..*
105c0 2a 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d  * Equivalent nam
105d0 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72  es:.**.**     fr
105e0 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c  om-table == chil
105f0 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20  d-table.**      
10600 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72   to-table == par
10610 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20  ent-table.**.** 
10620 45 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20  Each REFERENCES 
10630 63 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73  clause generates
10640 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
10650 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
10660 72 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68  ructure.** which
10670 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20   is attached to 
10680 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20  the from-table. 
10690 20 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65   The to-table ne
106a0 65 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65  ed not exist whe
106b0 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61  n.** the from-ta
106c0 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20  ble is created. 
106d0 20 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f   The existence o
106e0 66 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69  f the to-table i
106f0 73 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a  s not checked..*
10700 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66  *.** The list of
10710 20 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72   all parents for
10720 20 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69   child Table X i
10730 73 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65  s held at X.pFKe
10740 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20  y..**.** A list 
10750 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20  of all children 
10760 66 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65  for a table name
10770 64 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74  d Z (which might
10780 20 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29   not even exist)
10790 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53  .** is held in S
107a0 63 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77  chema.fkeyHash w
107b0 69 74 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f  ith a hash key o
107c0 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  f Z..*/.struct F
107d0 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70  Key {.  Table *p
107e0 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62  From;     /* Tab
107f0 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
10800 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
10810 75 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29  use (aka: Child)
10820 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78   */.  FKey *pNex
10830 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20  tFrom;  /* Next 
10840 46 4b 65 79 20 77 69 74 68 20 74 68 65 20 73 61  FKey with the sa
10850 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78  me in pFrom. Nex
10860 74 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f  t parent of pFro
10870 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f  m */.  char *zTo
10880 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  ;        /* Name
10890 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74   of table that t
108a0 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f  he key points to
108b0 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a   (aka: Parent) *
108c0 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54  /.  FKey *pNextT
108d0 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69  o;    /* Next wi
108e0 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e  th the same zTo.
108f0 20 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a   Next child of z
10900 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  To. */.  FKey *p
10910 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72  PrevTo;    /* Pr
10920 65 76 69 6f 75 73 20 77 69 74 68 20 74 68 65 20  evious with the 
10930 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e  same zTo */.  in
10940 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  t nCol;         
10950 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
10960 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79  umns in this key
10970 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33   */.  /* EV: R-3
10980 30 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20  0323-21917 */.  
10990 75 38 20 69 73 44 65 66 65 72 72 65 64 3b 20 20  u8 isDeferred;  
109a0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
109b0 63 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b  constraint check
109c0 69 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20  ing is deferred 
109d0 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20  till COMMIT */. 
109e0 20 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20   u8 aAction[2]; 
109f0 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c         /* ON DEL
10a00 45 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54  ETE and ON UPDAT
10a10 45 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65  E actions, respe
10a20 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69  ctively */.  Tri
10a30 67 67 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b  gger *apTrigger[
10a40 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66  2];/* Triggers f
10a50 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74  or aAction[] act
10a60 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  ions */.  struct
10a70 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20   sColMap {      
10a80 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f  /* Mapping of co
10a90 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74  lumns in pFrom t
10aa0 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f  o columns in zTo
10ab0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f   */.    int iFro
10ac0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
10ad0 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e   Index of column
10ae0 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20   in pFrom */.   
10af0 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20   char *zCol;    
10b00 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
10b10 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e  f column in zTo.
10b20 20 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52    If NULL use PR
10b30 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d  IMARY KEY */.  }
10b40 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20   aCol[1];       
10b50 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72       /* One entr
10b60 79 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43  y for each of nC
10b70 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b  ol columns */.};
10b80 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73  ../*.** SQLite s
10b90 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66  upports many dif
10ba0 66 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72  ferent ways to r
10bb0 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61  esolve a constra
10bc0 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52  int.** error.  R
10bd0 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69  OLLBACK processi
10be0 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20  ng means that a 
10bf0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
10c00 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74  tion.** causes t
10c10 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
10c20 70 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20  process to fail 
10c30 61 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72 72  and for the curr
10c40 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
10c50 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  ** to be rolled 
10c60 62 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f  back.  ABORT pro
10c70 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
10c80 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
10c90 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20  rocess.** fails 
10ca0 61 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68  and any prior ch
10cb0 61 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20  anges from that 
10cc0 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  one operation ar
10cd0 65 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a  e backed out,.**
10ce0 20 62 75 74 20 74 68 65 20 74 72 61 6e 73 61 63   but the transac
10cf0 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c  tion is not roll
10d00 65 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70  ed back.  FAIL p
10d10 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
10d20 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72  that.** the oper
10d30 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73  ation in progres
10d40 73 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75  s stops and retu
10d50 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64  rns an error cod
10d60 65 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a  e.  But prior.**
10d70 20 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20   changes due to 
10d80 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69  the same operati
10d90 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65  on are not backe
10da0 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c  d out and no rol
10db0 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e  lback.** occurs.
10dc0 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74    IGNORE means t
10dd0 68 61 74 20 74 68 65 20 70 61 72 74 69 63 75 6c  hat the particul
10de0 61 72 20 72 6f 77 20 74 68 61 74 20 63 61 75 73  ar row that caus
10df0 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ed the constrain
10e00 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f  t.** error is no
10e10 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70  t inserted or up
10e20 64 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69  dated.  Processi
10e30 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64  ng continues and
10e40 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20   no error.** is 
10e50 72 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41  returned.  REPLA
10e60 43 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72  CE means that pr
10e70 65 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61  eexisting databa
10e80 73 65 20 72 6f 77 73 20 74 68 61 74 20 63 61 75  se rows that cau
10e90 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20  sed.** a UNIQUE 
10ea0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
10eb0 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64  tion are removed
10ec0 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77   so that the new
10ed0 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70   insert or.** up
10ee0 64 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64  date can proceed
10ef0 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
10f00 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
10f10 72 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64  rror is reported
10f20 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54  ..**.** RESTRICT
10f30 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43  , SETNULL, and C
10f40 41 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61  ASCADE actions a
10f50 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72  pply only to for
10f60 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45  eign keys..** RE
10f70 53 54 52 49 43 54 20 69 73 20 74 68 65 20 73 61  STRICT is the sa
10f80 6d 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20  me as ABORT for 
10f90 49 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67  IMMEDIATE foreig
10fa0 6e 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a  n keys and the.*
10fb0 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41  * same as ROLLBA
10fc0 43 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20  CK for DEFERRED 
10fd0 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d  keys.  SETNULL m
10fe0 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f  eans that the fo
10ff0 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20  reign.** key is 
11000 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41  set to NULL.  CA
11010 53 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74  SCADE means that
11020 20 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44   a DELETE or UPD
11030 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65  ATE of the.** re
11040 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72  ferenced table r
11050 6f 77 20 69 73 20 70 72 6f 70 61 67 61 74 65 64  ow is propagated
11060 20 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68   into the row th
11070 61 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20  at holds the.** 
11080 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20  foreign key..** 
11090 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
110a0 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65  g symbolic value
110b0 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 72 65  s are used to re
110c0 63 6f 72 64 20 77 68 69 63 68 20 74 79 70 65 0a  cord which type.
110d0 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20  ** of action to 
110e0 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  take..*/.#define
110f0 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20   OE_None     0  
11100 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20   /* There is no 
11110 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68  constraint to ch
11120 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  eck */.#define O
11130 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f  E_Rollback 1   /
11140 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61  * Fail the opera
11150 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63  tion and rollbac
11160 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  k the transactio
11170 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  n */.#define OE_
11180 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20  Abort    2   /* 
11190 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73  Back out changes
111a0 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62   but do no rollb
111b0 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ack transaction 
111c0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61  */.#define OE_Fa
111d0 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74  il     3   /* St
111e0 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  op the operation
111f0 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70   but leave all p
11200 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a  rior changes */.
11210 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72  #define OE_Ignor
11220 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72  e   4   /* Ignor
11230 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20  e the error. Do 
11240 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52  not do the INSER
11250 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23  T or UPDATE */.#
11260 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63  define OE_Replac
11270 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65  e  5   /* Delete
11280 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64   existing record
11290 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54  , then do INSERT
112a0 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23   or UPDATE */..#
112b0 64 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69  define OE_Restri
112c0 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f  ct 6   /* OE_Abo
112d0 72 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  rt for IMMEDIATE
112e0 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f  , OE_Rollback fo
112f0 72 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64  r DEFERRED */.#d
11300 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c  efine OE_SetNull
11310 20 20 37 20 20 20 2f 2a 20 53 65 74 20 74 68 65    7   /* Set the
11320 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c   foreign key val
11330 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64  ue to NULL */.#d
11340 65 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74  efine OE_SetDflt
11350 20 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65    8   /* Set the
11360 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c   foreign key val
11370 75 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c  ue to its defaul
11380 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  t */.#define OE_
11390 43 61 73 63 61 64 65 20 20 39 20 20 20 2f 2a 20  Cascade  9   /* 
113a0 43 61 73 63 61 64 65 20 74 68 65 20 63 68 61 6e  Cascade the chan
113b0 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  ges */..#define 
113c0 4f 45 5f 44 65 66 61 75 6c 74 20 20 31 30 20 20  OE_Default  10  
113d0 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72 20 74  /* Do whatever t
113e0 68 65 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f  he default actio
113f0 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  n is */.../*.** 
11400 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
11410 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
11420 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64  ucture is passed
11430 20 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   as the first.**
11440 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c   argument to sql
11450 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61  ite3VdbeKeyCompa
11460 72 65 20 61 6e 64 20 69 73 20 75 73 65 64 20 74  re and is used t
11470 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a  o control the .*
11480 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20  * comparison of 
11490 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b 65  the two index ke
114a0 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74  ys..**.** Note t
114b0 68 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d  hat aSortOrder[]
114c0 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76   and aColl[] hav
114d0 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73  e nField+1 slots
114e0 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20  .  There.** are 
114f0 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72  nField slots for
11500 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   the columns of 
11510 61 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e  an index then on
11520 65 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20  e extra slot.** 
11530 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61 74  for the rowid at
11540 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72   the end..*/.str
11550 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20  uct KeyInfo {.  
11560 75 33 32 20 6e 52 65 66 3b 20 20 20 20 20 20 20  u32 nRef;       
11570 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11580 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 74   references to t
11590 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65  his KeyInfo obje
115a0 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  ct */.  u8 enc; 
115b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
115c0 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f  ext encoding - o
115d0 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45  ne of the SQLITE
115e0 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a  _UTF* values */.
115f0 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20    u16 nField;   
11600 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
11610 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69  of key columns i
11620 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  n the index */. 
11630 20 75 31 36 20 6e 58 46 69 65 6c 64 3b 20 20 20   u16 nXField;   
11640 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
11650 66 20 63 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e 64  f columns beyond
11660 20 74 68 65 20 6b 65 79 20 63 6f 6c 75 6d 6e 73   the key columns
11670 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   */.  sqlite3 *d
11680 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  b;        /* The
11690 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
116a0 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53  tion */.  u8 *aS
116b0 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a  ortOrder;     /*
116c0 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20   Sort order for 
116d0 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a  each column. */.
116e0 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c    CollSeq *aColl
116f0 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  [1];  /* Collati
11700 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20  ng sequence for 
11710 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65  each term of the
11720 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a   key */.};../*.*
11730 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
11740 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
11750 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69  tructure holds i
11760 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
11770 20 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69 6e 64   a.** single ind
11780 65 78 20 72 65 63 6f 72 64 20 74 68 61 74 20 68  ex record that h
11790 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20  as already been 
117a0 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20  parsed out into 
117b0 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 76 61  individual.** va
117c0 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65  lues..**.** A re
117d0 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63  cord is an objec
117e0 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  t that contains 
117f0 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c  one or more fiel
11800 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52  ds of data..** R
11810 65 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20  ecords are used 
11820 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e  to store the con
11830 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20  tent of a table 
11840 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65  row and to store
11850 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61  .** the key of a
11860 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62  n index.  A blob
11870 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72   encoding of a r
11880 65 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64  ecord is created
11890 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61   by.** the OP_Ma
118a0 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20  keRecord opcode 
118b0 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20  of the VDBE and 
118c0 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20  is disassembled 
118d0 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c  by the.** OP_Col
118e0 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  umn opcode..**.*
118f0 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
11900 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20   holds a record 
11910 74 68 61 74 20 68 61 73 20 61 6c 72 65 61 64 79  that has already
11920 20 62 65 65 6e 20 64 69 73 61 73 73 65 6d 62 6c   been disassembl
11930 65 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73 20 63  ed.** into its c
11940 6f 6e 73 74 69 74 75 65 6e 74 20 66 69 65 6c 64  onstituent field
11950 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20  s..**.** The r1 
11960 61 6e 64 20 72 32 20 6d 65 6d 62 65 72 20 76 61  and r2 member va
11970 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79  riables are only
11980 20 75 73 65 64 20 62 79 20 74 68 65 20 6f 70 74   used by the opt
11990 69 6d 69 7a 65 64 20 63 6f 6d 70 61 72 69 73 6f  imized compariso
119a0 6e 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 76  n.** functions v
119b0 64 62 65 52 65 63 6f 72 64 43 6f 6d 70 61 72 65  dbeRecordCompare
119c0 49 6e 74 28 29 20 61 6e 64 20 76 64 62 65 52 65  Int() and vdbeRe
119d0 63 6f 72 64 43 6f 6d 70 61 72 65 53 74 72 69 6e  cordCompareStrin
119e0 67 28 29 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55  g()..*/.struct U
119f0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a  npackedRecord {.
11a00 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
11a10 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  nfo;  /* Collati
11a20 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65  on and sort-orde
11a30 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f  r information */
11a40 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20  .  u16 nField;  
11a50 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
11a60 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61   of entries in a
11a70 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64  pMem[] */.  i8 d
11a80 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20  efault_rc;      
11a90 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65  /* Comparison re
11aa0 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65  sult if keys are
11ab0 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65   equal */.  u8 e
11ac0 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20  rrCode;         
11ad0 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74 65  /* Error detecte
11ae0 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70  d by xRecordComp
11af0 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72 20  are (CORRUPT or 
11b00 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 4d 65 6d 20  NOMEM) */.  Mem 
11b10 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *aMem;          
11b20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20 69  /* Values */.  i
11b30 6e 74 20 72 31 3b 20 20 20 20 20 20 20 20 20 20  nt r1;          
11b40 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
11b50 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20  eturn if (lhs > 
11b60 72 68 73 29 20 2a 2f 0a 20 20 69 6e 74 20 72 32  rhs) */.  int r2
11b70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
11b80 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
11b90 20 69 66 20 28 72 68 73 20 3c 20 6c 68 73 29 20   if (rhs < lhs) 
11ba0 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  */.};.../*.** Ea
11bb0 63 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20  ch SQL index is 
11bc0 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
11bd0 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69  emory by an.** i
11be0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
11bf0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
11c00 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  re..**.** The co
11c10 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62  lumns of the tab
11c20 6c 65 20 74 68 61 74 20 61 72 65 20 74 6f 20 62  le that are to b
11c30 65 20 69 6e 64 65 78 65 64 20 61 72 65 20 64 65  e indexed are de
11c40 73 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68  scribed.** by th
11c50 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65  e aiColumn[] fie
11c60 6c 64 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ld of this struc
11c70 74 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  ture.  For examp
11c80 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77  le, suppose.** w
11c90 65 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f  e have the follo
11ca0 77 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69  wing table and i
11cb0 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ndex:.**.**     
11cc0 43 52 45 41 54 45 20 54 41 42 4c 45 20 45 78 31  CREATE TABLE Ex1
11cd0 28 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c  (c1 int, c2 int,
11ce0 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20   c3 text);.**   
11cf0 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 45    CREATE INDEX E
11d00 78 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29  x2 ON Ex1(c3,c1)
11d10 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54  ;.**.** In the T
11d20 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 64  able structure d
11d30 65 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e  escribing Ex1, n
11d40 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74  Col==3 because t
11d50 68 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65  here are.** thre
11d60 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  e columns in the
11d70 20 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20   table.  In the 
11d80 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20  Index structure 
11d90 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78  describing.** Ex
11da0 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69  2, nColumn==2 si
11db0 6e 63 65 20 32 20 6f 66 20 74 68 65 20 33 20 63  nce 2 of the 3 c
11dc0 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72  olumns of Ex1 ar
11dd0 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68  e indexed..** Th
11de0 65 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c  e value of aiCol
11df0 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20  umn is {2, 0}.  
11e00 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62  aiColumn[0]==2 b
11e10 65 63 61 75 73 65 20 74 68 65 20 0a 2a 2a 20 66  ecause the .** f
11e20 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  irst column to b
11e30 65 20 69 6e 64 65 78 65 64 20 28 63 33 29 20 68  e indexed (c3) h
11e40 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32  as an index of 2
11e50 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a   in Ex1.aCol[]..
11e60 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f  ** The second co
11e70 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78  lumn to be index
11e80 65 64 20 28 63 31 29 20 68 61 73 20 61 6e 20 69  ed (c1) has an i
11e90 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20  ndex of 0 in.** 
11ea0 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63  Ex1.aCol[], henc
11eb0 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31  e Ex2.aiColumn[1
11ec0 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ]==0..**.** The 
11ed0 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69  Index.onError fi
11ee0 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77  eld determines w
11ef0 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
11f00 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  e indexed column
11f10 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69  s.** must be uni
11f20 71 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20  que and what to 
11f30 64 6f 20 69 66 20 74 68 65 79 20 61 72 65 20 6e  do if they are n
11f40 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e  ot.  When Index.
11f50 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c  onError=OE_None,
11f60 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69  .** it means thi
11f70 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75  s is not a uniqu
11f80 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77  e index.  Otherw
11f90 69 73 65 20 69 74 20 69 73 20 61 20 75 6e 69 71  ise it is a uniq
11fa0 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20  ue index.** and 
11fb0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64  the value of Ind
11fc0 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63  ex.onError indic
11fd0 61 74 65 20 74 68 65 20 77 68 69 63 68 20 63 6f  ate the which co
11fe0 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
11ff0 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20  n .** algorithm 
12000 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76  to employ whenev
12010 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73  er an attempt is
12020 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20   made to insert 
12030 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20  a non-unique.** 
12040 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57  element..**.** W
12050 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 20 43  hile parsing a C
12060 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72 20 43  REATE TABLE or C
12070 52 45 41 54 45 20 49 4e 44 45 58 20 73 74 61 74  REATE INDEX stat
12080 65 6d 65 6e 74 20 69 6e 20 6f 72 64 65 72 20 74  ement in order t
12090 6f 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 56 44  o.** generate VD
120a0 42 45 20 63 6f 64 65 20 28 61 73 20 6f 70 70 6f  BE code (as oppo
120b0 73 65 64 20 74 6f 20 70 61 72 73 69 6e 67 20 6f  sed to parsing o
120c0 6e 65 20 72 65 61 64 20 66 72 6f 6d 20 61 6e 20  ne read from an 
120d0 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 2a 2a  sqlite_master.**
120e0 20 74 61 62 6c 65 20 61 73 20 70 61 72 74 20 6f   table as part o
120f0 66 20 70 61 72 73 69 6e 67 20 61 6e 20 65 78 69  f parsing an exi
12100 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 73  sting database s
12110 63 68 65 6d 61 29 2c 20 74 72 61 6e 73 69 65 6e  chema), transien
12120 74 20 69 6e 73 74 61 6e 63 65 73 0a 2a 2a 20 6f  t instances.** o
12130 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
12140 20 6d 61 79 20 62 65 20 63 72 65 61 74 65 64 2e   may be created.
12150 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68   In this case th
12160 65 20 49 6e 64 65 78 2e 74 6e 75 6d 20 76 61 72  e Index.tnum var
12170 69 61 62 6c 65 20 69 73 0a 2a 2a 20 75 73 65 64  iable is.** used
12180 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 61 64   to store the ad
12190 64 72 65 73 73 20 6f 66 20 61 20 56 44 42 45 20  dress of a VDBE 
121a0 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 6e 6f 74  instruction, not
121b0 20 61 20 64 61 74 61 62 61 73 65 20 70 61 67 65   a database page
121c0 0a 2a 2a 20 6e 75 6d 62 65 72 20 28 69 74 20 63  .** number (it c
121d0 61 6e 6e 6f 74 20 2d 20 74 68 65 20 64 61 74 61  annot - the data
121e0 62 61 73 65 20 70 61 67 65 20 69 73 20 6e 6f 74  base page is not
121f0 20 61 6c 6c 6f 63 61 74 65 64 20 75 6e 74 69 6c   allocated until
12200 20 74 68 65 20 56 44 42 45 0a 2a 2a 20 70 72 6f   the VDBE.** pro
12210 67 72 61 6d 20 69 73 20 65 78 65 63 75 74 65 64  gram is executed
12220 29 2e 20 53 65 65 20 63 6f 6e 76 65 72 74 54 6f  ). See convertTo
12230 57 69 74 68 6f 75 74 52 6f 77 69 64 54 61 62 6c  WithoutRowidTabl
12240 65 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  e() for details.
12250 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78  .*/.struct Index
12260 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
12270 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
12280 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69 6e   Name of this in
12290 64 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61 69  dex */.  i16 *ai
122a0 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
122b0 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d    /* Which colum
122c0 6e 73 20 61 72 65 20 75 73 65 64 20 62 79 20 74  ns are used by t
122d0 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74 20  his index.  1st 
122e0 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  is 0 */.  LogEst
122f0 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b 20 20   *aiRowLogEst;  
12300 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59     /* From ANALY
12310 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73 65  ZE: Est. rows se
12320 6c 65 63 74 65 64 20 62 79 20 65 61 63 68 20 63  lected by each c
12330 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65  olumn */.  Table
12340 20 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20 20   *pTable;       
12350 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74      /* The SQL t
12360 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65 78  able being index
12370 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43  ed */.  char *zC
12380 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20 20  olAff;          
12390 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e   /* String defin
123a0 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79  ing the affinity
123b0 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
123c0 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 78  */.  Index *pNex
123d0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
123e0 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78 20   The next index 
123f0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
12400 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 2a  the same table *
12410 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
12420 65 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ema;         /* 
12430 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e  Schema containin
12440 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  g this index */.
12450 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72    u8 *aSortOrder
12460 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6f  ;          /* fo
12470 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54  r each column: T
12480 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65  rue==DESC, False
12490 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 68 61 72 20  ==ASC */.  char 
124a0 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 20 20  **azColl;       
124b0 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20      /* Array of 
124c0 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
124d0 63 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64  ce names for ind
124e0 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50  ex */.  Expr *pP
124f0 61 72 74 49 64 78 57 68 65 72 65 3b 20 20 20 20  artIdxWhere;    
12500 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65   /* WHERE clause
12510 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64   for partial ind
12520 69 63 65 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e  ices */.  int tn
12530 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  um;             
12540 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63 6f     /* DB Page co
12550 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66  ntaining root of
12560 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
12570 20 4c 6f 67 45 73 74 20 73 7a 49 64 78 52 6f 77   LogEst szIdxRow
12580 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74  ;         /* Est
12590 69 6d 61 74 65 64 20 61 76 65 72 61 67 65 20 72  imated average r
125a0 6f 77 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73  ow size in bytes
125b0 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f   */.  u16 nKeyCo
125c0 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  l;             /
125d0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
125e0 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68 65 20  mns forming the 
125f0 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f  key */.  u16 nCo
12600 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
12610 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
12620 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e  olumns stored in
12630 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20   the index */.  
12640 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20  u8 onError;     
12650 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41           /* OE_A
12660 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c  bort, OE_Ignore,
12670 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20   OE_Replace, or 
12680 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73  OE_None */.  uns
12690 69 67 6e 65 64 20 69 64 78 54 79 70 65 3a 32 3b  igned idxType:2;
126a0 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51        /* 1==UNIQ
126b0 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b  UE, 2==PRIMARY K
126c0 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20 49 4e  EY, 0==CREATE IN
126d0 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  DEX */.  unsigne
126e0 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20  d bUnordered:1; 
126f0 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69 6e    /* Use this in
12700 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e  dex for == or IN
12710 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f   queries only */
12720 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e 69 71  .  unsigned uniq
12730 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54  NotNull:1;  /* T
12740 72 75 65 20 69 66 20 55 4e 49 51 55 45 20 61 6e  rue if UNIQUE an
12750 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61  d NOT NULL for a
12760 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  ll columns */.  
12770 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73 69 7a  unsigned isResiz
12780 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65  ed:1;    /* True
12790 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65 78 4f   if resizeIndexO
127a0 62 6a 65 63 74 28 29 20 68 61 73 20 62 65 65 6e  bject() has been
127b0 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73   called */.  uns
127c0 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69 6e 67  igned isCovering
127d0 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66  :1;   /* True if
127e0 20 74 68 69 73 20 69 73 20 61 20 63 6f 76 65 72   this is a cover
127f0 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  ing index */.  u
12800 6e 73 69 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63  nsigned noSkipSc
12810 61 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f  an:1;   /* Do no
12820 74 20 74 72 79 20 74 6f 20 75 73 65 20 73 6b 69  t try to use ski
12830 70 2d 73 63 61 6e 20 69 66 20 74 72 75 65 20 2a  p-scan if true *
12840 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
12850 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
12860 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d  STAT4.  int nSam
12870 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ple;            
12880 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c   /* Number of el
12890 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c  ements in aSampl
128a0 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61  e[] */.  int nSa
128b0 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20 20  mpleCol;        
128c0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64    /* Size of Ind
128d0 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20  exSample.anEq[] 
128e0 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74  and so on */.  t
128f0 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71 3b 20  Rowcnt *aAvgEq; 
12900 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72 61          /* Avera
12910 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20 66 6f  ge nEq values fo
12920 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61 53  r keys not in aS
12930 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78  ample */.  Index
12940 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b  Sample *aSample;
12950 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f      /* Samples o
12960 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  f the left-most 
12970 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  key */.  tRowcnt
12980 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20 20 20   *aiRowEst;     
12990 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74    /* Non-logarit
129a0 68 6d 69 63 20 73 74 61 74 31 20 64 61 74 61 20  hmic stat1 data 
129b0 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78 20 2a  for this index *
129c0 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77  /.  tRowcnt nRow
129d0 45 73 74 30 3b 20 20 20 20 20 20 20 20 2f 2a 20  Est0;        /* 
129e0 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20  Non-logarithmic 
129f0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
12a00 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23  n the index */.#
12a10 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
12a20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
12a30 6f 72 20 49 6e 64 65 78 2e 69 64 78 54 79 70 65  or Index.idxType
12a40 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
12a50 54 45 5f 49 44 58 54 59 50 45 5f 41 50 50 44 45  TE_IDXTYPE_APPDE
12a60 46 20 20 20 20 20 20 30 20 20 20 2f 2a 20 43 72  F      0   /* Cr
12a70 65 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41  eated using CREA
12a80 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66  TE INDEX */.#def
12a90 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
12aa0 50 45 5f 55 4e 49 51 55 45 20 20 20 20 20 20 31  PE_UNIQUE      1
12ab0 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73     /* Implements
12ac0 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
12ad0 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aint */.#define 
12ae0 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50  SQLITE_IDXTYPE_P
12af0 52 49 4d 41 52 59 4b 45 59 20 20 32 20 20 20 2f  RIMARYKEY  2   /
12b00 2a 20 49 73 20 74 68 65 20 50 52 49 4d 41 52 59  * Is the PRIMARY
12b10 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61 62   KEY for the tab
12b20 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e  le */../* Return
12b30 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58   true if index X
12b40 20 69 73 20 61 20 50 52 49 4d 41 52 59 20 4b 45   is a PRIMARY KE
12b50 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  Y index */.#defi
12b60 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65 79 49  ne IsPrimaryKeyI
12b70 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d 3e 69  ndex(X)  ((X)->i
12b80 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49  dxType==SQLITE_I
12b90 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45  DXTYPE_PRIMARYKE
12ba0 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72  Y)../* Return tr
12bb0 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73  ue if index X is
12bc0 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78 20   a UNIQUE index 
12bd0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55 6e 69  */.#define IsUni
12be0 71 75 65 49 6e 64 65 78 28 58 29 20 20 20 20 20  queIndex(X)     
12bf0 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d   ((X)->onError!=
12c00 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 0a 2a 2a 20  OE_None)../*.** 
12c10 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72  Each sample stor
12c20 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ed in the sqlite
12c30 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20  _stat3 table is 
12c40 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
12c50 65 6d 6f 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20  emory .** using 
12c60 61 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74  a structure of t
12c70 68 69 73 20 74 79 70 65 2e 20 20 53 65 65 20 64  his type.  See d
12c80 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20  ocumentation at 
12c90 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a  the top of the.*
12ca0 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72  * analyze.c sour
12cb0 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69  ce file for addi
12cc0 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
12cd0 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e  on..*/.struct In
12ce0 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f  dexSample {.  vo
12cf0 69 64 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20  id *p;          
12d00 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61  /* Pointer to sa
12d10 6d 70 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a  mpled record */.
12d20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
12d30 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72      /* Size of r
12d40 65 63 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a  ecord in bytes *
12d50 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45  /.  tRowcnt *anE
12d60 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75  q;    /* Est. nu
12d70 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65  mber of rows whe
12d80 72 65 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c  re the key equal
12d90 73 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  s this sample */
12da0 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74  .  tRowcnt *anLt
12db0 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  ;    /* Est. num
12dc0 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72  ber of rows wher
12dd0 65 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68  e key is less th
12de0 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a  an this sample *
12df0 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44  /.  tRowcnt *anD
12e00 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75  Lt;   /* Est. nu
12e10 6d 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74  mber of distinct
12e20 20 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20   keys less than 
12e30 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d  this sample */.}
12e40 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f  ;../*.** Each to
12e50 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f  ken coming out o
12e60 66 20 74 68 65 20 6c 65 78 65 72 20 69 73 20 61  f the lexer is a
12e70 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a  n instance of.**
12e80 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
12e90 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73    Tokens are als
12ea0 6f 20 75 73 65 64 20 61 73 20 70 61 72 74 20 6f  o used as part o
12eb0 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e  f an expression.
12ec0 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54  .**.** Note if T
12ed0 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54  oken.z==0 then T
12ee0 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b  oken.dyn and Tok
12ef0 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66 69 6e  en.n are undefin
12f00 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f  ed and.** may co
12f10 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c  ntain random val
12f20 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b  ues.  Do not mak
12f30 65 20 61 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e  e any assumption
12f40 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79  s about Token.dy
12f50 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e  n.** and Token.n
12f60 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30   when Token.z==0
12f70 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65  ..*/.struct Toke
12f80 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  n {.  const char
12f90 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74   *z;     /* Text
12fa0 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20   of the token.  
12fb0 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61  Not NULL-termina
12fc0 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  ted! */.  unsign
12fd0 65 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20  ed int n;    /* 
12fe0 4e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63  Number of charac
12ff0 74 65 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b  ters in this tok
13000 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  en */.};../*.** 
13010 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
13020 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63 6f  his structure co
13030 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69  ntains informati
13040 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e  on needed to gen
13050 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f  erate.** code fo
13060 72 20 61 20 53 45 4c 45 43 54 20 74 68 61 74 20  r a SELECT that 
13070 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61  contains aggrega
13080 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  te functions..**
13090 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d  .** If Expr.op==
130a0 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72  TK_AGG_COLUMN or
130b0 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e   TK_AGG_FUNCTION
130c0 20 74 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49   then Expr.pAggI
130d0 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e  nfo is a.** poin
130e0 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
130f0 63 74 75 72 65 2e 20 20 54 68 65 20 45 78 70 72  cture.  The Expr
13100 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69  .iColumn field i
13110 73 20 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a  s the index in.*
13120 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d  * AggInfo.aCol[]
13130 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e   or AggInfo.aFun
13140 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69  c[] of informati
13150 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e  on needed to gen
13160 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f  erate.** code fo
13170 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a  r that node..**.
13180 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75  ** AggInfo.pGrou
13190 70 42 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e  pBy and AggInfo.
131a0 61 46 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e  aFunc.pExpr poin
131b0 74 20 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68  t to fields with
131c0 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e  in the.** origin
131d0 61 6c 20 53 65 6c 65 63 74 20 73 74 72 75 63 74  al Select struct
131e0 75 72 65 20 74 68 61 74 20 64 65 73 63 72 69 62  ure that describ
131f0 65 73 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  es the SELECT st
13200 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a  atement.  These.
13210 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74  ** fields do not
13220 20 6e 65 65 64 20 74 6f 20 62 65 20 66 72 65 65   need to be free
13230 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74  d when deallocat
13240 69 6e 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20  ing the AggInfo 
13250 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
13260 72 75 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20  ruct AggInfo {. 
13270 20 75 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20   u8 directMode; 
13280 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65           /* Dire
13290 63 74 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64  ct rendering mod
132a0 65 20 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74  e means take dat
132b0 61 20 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20  a directly.     
132c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132d0 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75       ** from sou
132e0 72 63 65 20 74 61 62 6c 65 73 20 72 61 74 68 65  rce tables rathe
132f0 72 20 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75  r than from accu
13300 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38  mulators */.  u8
13310 20 75 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20   useSortingIdx; 
13320 20 20 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65        /* In dire
13330 63 74 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e  ct mode, referen
13340 63 65 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  ce the sorting i
13350 6e 64 65 78 20 72 61 74 68 65 72 0a 20 20 20 20  ndex rather.    
13360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13370 20 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68        ** than th
13380 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  e source table *
13390 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49  /.  int sortingI
133a0 64 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  dx;         /* C
133b0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
133c0 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
133d0 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69  x */.  int sorti
133e0 6e 67 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f  ngIdxPTab;     /
133f0 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
13400 6f 66 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20  of pseudo-table 
13410 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e  */.  int nSortin
13420 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20  gColumn;     /* 
13430 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
13440 73 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67  s in the sorting
13450 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
13460 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b 20 20 20  mnReg, mxReg;   
13470 20 20 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20      /* Range of 
13480 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61  registers alloca
13490 74 65 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64  ted for aCol and
134a0 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72   aFunc */.  Expr
134b0 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20  List *pGroupBy; 
134c0 20 20 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70      /* The group
134d0 20 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   by clause */.  
134e0 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63  struct AggInfo_c
134f0 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65  ol {    /* For e
13500 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20  ach column used 
13510 69 6e 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73  in source tables
13520 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
13530 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  Tab;            
13540 20 2f 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65   /* Source table
13550 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62   */.    int iTab
13560 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
13570 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65   /* Cursor numbe
13580 72 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20  r of the source 
13590 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
135a0 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   iColumn;       
135b0 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
135c0 6e 75 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68  number within th
135d0 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  e source table *
135e0 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65  /.    int iSorte
135f0 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f  rColumn;       /
13600 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  * Column number 
13610 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  in the sorting i
13620 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ndex */.    int 
13630 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  iMem;           
13640 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c       /* Memory l
13650 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74  ocation that act
13660 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72  s as accumulator
13670 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45   */.    Expr *pE
13680 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
13690 20 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c   /* The original
136a0 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
136b0 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20   } *aCol;.  int 
136c0 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  nColumn;        
136d0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
136e0 20 75 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e   used entries in
136f0 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74   aCol[] */.  int
13700 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20   nAccumulator;  
13710 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13720 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73  f columns that s
13730 68 6f 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74  how through to t
13740 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20  he output..     
13750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13760 20 20 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e       ** Addition
13770 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75  al columns are u
13780 73 65 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61  sed only as para
13790 6d 65 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20  meters to.      
137a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137b0 20 20 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65      ** aggregate
137c0 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20   functions */.  
137d0 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66  struct AggInfo_f
137e0 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65  unc {   /* For e
137f0 61 63 68 20 61 67 67 72 65 67 61 74 65 20 66 75  ach aggregate fu
13800 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78  nction */.    Ex
13810 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
13820 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73         /* Expres
13830 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68  sion encoding th
13840 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
13850 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63    FuncDef *pFunc
13860 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
13870 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
13880 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tion implementat
13890 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ion */.    int i
138a0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
138b0 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f      /* Memory lo
138c0 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73  cation that acts
138d0 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20   as accumulator 
138e0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74  */.    int iDist
138f0 69 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  inct;           
13900 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62  /* Ephemeral tab
13910 6c 65 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72  le used to enfor
13920 63 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20  ce DISTINCT */. 
13930 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74   } *aFunc;.  int
13940 20 6e 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20   nFunc;         
13950 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13960 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75  f entries in aFu
13970 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  nc[] */.};../*.*
13980 2a 20 54 68 65 20 64 61 74 61 74 79 70 65 20 79  * The datatype y
13990 6e 56 61 72 20 69 73 20 61 20 73 69 67 6e 65 64  nVar is a signed
139a0 20 69 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72   integer, either
139b0 20 31 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69   16-bit or 32-bi
139c0 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74  t..** Usually it
139d0 20 69 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75   is 16-bits.  Bu
139e0 74 20 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  t if SQLITE_MAX_
139f0 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20  VARIABLE_NUMBER 
13a00 69 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68  is greater.** th
13a10 61 6e 20 33 32 37 36 37 20 77 65 20 68 61 76 65  an 32767 we have
13a20 20 74 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62   to make it 32-b
13a30 69 74 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70  it.  16-bit is p
13a40 72 65 66 65 72 72 65 64 20 62 65 63 61 75 73 65  referred because
13a50 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73  .** it uses less
13a60 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45   memory in the E
13a70 78 70 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63  xpr object, whic
13a80 68 20 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72  h is a big memor
13a90 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73  y user.** in sys
13aa0 74 65 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f  tems with lots o
13ab0 66 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  f prepared state
13ac0 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20  ments.  And few 
13ad0 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20  applications.** 
13ae0 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61  need more than a
13af0 62 6f 75 74 20 31 30 20 6f 72 20 32 30 20 76 61  bout 10 or 20 va
13b00 72 69 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f  riables.  But so
13b10 6d 65 20 65 78 74 72 65 6d 65 20 75 73 65 72 73  me extreme users
13b20 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65   want.** to have
13b30 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
13b40 65 6e 74 73 20 77 69 74 68 20 6f 76 65 72 20 33  ents with over 3
13b50 32 37 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20  2767 variables, 
13b60 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20  and for them.** 
13b70 74 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76  the option is av
13b80 61 69 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70  ailable (at comp
13b90 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69  ile-time)..*/.#i
13ba0 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  f SQLITE_MAX_VAR
13bb0 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32  IABLE_NUMBER<=32
13bc0 37 36 37 0a 74 79 70 65 64 65 66 20 69 31 36 20  767.typedef i16 
13bd0 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70  ynVar;.#else.typ
13be0 65 64 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a  edef int ynVar;.
13bf0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61  #endif../*.** Ea
13c00 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78  ch node of an ex
13c10 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
13c20 70 61 72 73 65 20 74 72 65 65 20 69 73 20 61 6e  parse tree is an
13c30 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20   instance.** of 
13c40 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a  this structure..
13c50 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73  **.** Expr.op is
13c60 20 74 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65   the opcode. The
13c70 20 69 6e 74 65 67 65 72 20 70 61 72 73 65 72 20   integer parser 
13c80 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20  token codes are 
13c90 72 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63  reused.** as opc
13ca0 6f 64 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65  odes here. For e
13cb0 78 61 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73  xample, the pars
13cc0 65 72 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45  er defines TK_GE
13cd0 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
13ce0 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73  r.** code repres
13cf0 65 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20  enting the ">=" 
13d00 6f 70 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73  operator. This s
13d10 61 6d 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65  ame integer code
13d20 20 69 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f   is reused.** to
13d30 20 72 65 70 72 65 73 65 6e 74 20 74 68 65 20 67   represent the g
13d40 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65  reater-than-or-e
13d50 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72  qual-to operator
13d60 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69   in the expressi
13d70 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a  on.** tree..**.*
13d80 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73  * If the express
13d90 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69  ion is an SQL li
13da0 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45  teral (TK_INTEGE
13db0 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f  R, TK_FLOAT, TK_
13dc0 42 4c 4f 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f  BLOB, .** or TK_
13dd0 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20 45 78  STRING), then Ex
13de0 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e  pr.token contain
13df0 73 20 74 68 65 20 74 65 78 74 20 6f 66 20 74 68  s the text of th
13e00 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49  e SQL literal. I
13e10 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73  f.** the express
13e20 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61 62 6c  ion is a variabl
13e30 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c  e (TK_VARIABLE),
13e40 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e   then Expr.token
13e50 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a   contains the .*
13e60 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e  * variable name.
13e70 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65   Finally, if the
13e80 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
13e90 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28  n SQL function (
13ea0 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a  TK_FUNCTION),.**
13eb0 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e   then Expr.token
13ec0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61   contains the na
13ed0 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
13ee0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70  on..**.** Expr.p
13ef0 52 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e 70  Right and Expr.p
13f00 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c 65 66  Left are the lef
13f10 74 20 61 6e 64 20 72 69 67 68 74 20 73 75 62 65  t and right sube
13f20 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a  xpressions of a.
13f30 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74  ** binary operat
13f40 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62 6f  or. Either or bo
13f50 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a  th may be NULL..
13f60 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69  **.** Expr.x.pLi
13f70 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20  st is a list of 
13f80 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68 65  arguments if the
13f90 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
13fa0 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a  n SQL function,.
13fb0 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72 65 73  ** a CASE expres
13fc0 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78  sion or an IN ex
13fd0 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20  pression of the 
13fe0 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28  form "<lhs> IN (
13ff0 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a  <y>, <z>...)"..*
14000 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  * Expr.x.pSelect
14010 20 69 73 20 75 73 65 64 20 69 66 20 74 68 65 20   is used if the 
14020 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
14030 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e  sub-select or an
14040 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a   expression of.*
14050 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73  * the form "<lhs
14060 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e  > IN (SELECT ...
14070 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78 49  )". If the EP_xI
14080 73 53 65 6c 65 63 74 20 62 69 74 20 69 73 20 73  sSelect bit is s
14090 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70  et in the.** Exp
140a0 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  r.flags mask, th
140b0 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  en Expr.x.pSelec
140c0 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68 65  t is valid. Othe
140d0 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c  rwise, Expr.x.pL
140e0 69 73 74 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64  ist is .** valid
140f0 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65  ..**.** An expre
14100 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
14110 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65  m ID or ID.ID re
14120 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  fers to a column
14130 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20   in a table..** 
14140 46 6f 72 20 73 75 63 68 20 65 78 70 72 65 73 73  For such express
14150 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73  ions, Expr.op is
14160 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d   set to TK_COLUM
14170 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c  N and Expr.iTabl
14180 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65  e is.** the inte
14190 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ger cursor numbe
141a0 72 20 6f 66 20 61 20 56 44 42 45 20 63 75 72 73  r of a VDBE curs
141b0 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  or pointing to t
141c0 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a  hat table and.**
141d0 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73   Expr.iColumn is
141e0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62   the column numb
141f0 65 72 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  er for the speci
14200 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20  fic column.  If 
14210 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  the.** expressio
14220 6e 20 69 73 20 75 73 65 64 20 61 73 20 61 20 72  n is used as a r
14230 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72  esult in an aggr
14240 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68  egate SELECT, th
14250 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  en the.** value 
14260 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69  is also stored i
14270 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67 67 20  n the Expr.iAgg 
14280 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67  column in the ag
14290 67 72 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a  gregate so that.
142a0 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63 63  ** it can be acc
142b0 65 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20  essed after all 
142c0 61 67 67 72 65 67 61 74 65 73 20 61 72 65 20 63  aggregates are c
142d0 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  omputed..**.** I
142e0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
142f0 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76   is an unbound v
14300 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28  ariable marker (
14310 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20  a question mark 
14320 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f  .** character '?
14330 27 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61  ' in the origina
14340 6c 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20  l SQL) then the 
14350 45 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64  Expr.iTable hold
14360 73 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  s the index .** 
14370 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20  number for that 
14380 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  variable..**.** 
14390 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
143a0 6e 20 69 73 20 61 20 73 75 62 71 75 65 72 79 20  n is a subquery 
143b0 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d  then Expr.iColum
143c0 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67  n holds an integ
143d0 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e  er.** register n
143e0 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67  umber containing
143f0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
14400 68 65 20 73 75 62 71 75 65 72 79 2e 20 20 49 66  he subquery.  If
14410 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79   the.** subquery
14420 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e   gives a constan
14430 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69  t result, then i
14440 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66  Table is -1.  If
14450 20 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a   the subquery.**
14460 20 67 69 76 65 73 20 61 20 64 69 66 66 65 72 65   gives a differe
14470 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64 69 66  nt answer at dif
14480 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72  ferent times dur
14490 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72  ing statement pr
144a0 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e  ocessing.** then
144b0 20 69 54 61 62 6c 65 20 69 73 20 74 68 65 20 61   iTable is the a
144c0 64 64 72 65 73 73 20 6f 66 20 61 20 73 75 62 72  ddress of a subr
144d0 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70  outine that comp
144e0 75 74 65 73 20 74 68 65 20 73 75 62 71 75 65 72  utes the subquer
144f0 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  y..**.** If the 
14500 45 78 70 72 20 69 73 20 6f 66 20 74 79 70 65 20  Expr is of type 
14510 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74  OP_Column, and t
14520 68 65 20 74 61 62 6c 65 20 69 74 20 69 73 20 73  he table it is s
14530 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a  electing from.**
14540 20 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65   is a disk table
14550 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20   or the "old.*" 
14560 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68  pseudo-table, th
14570 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74  en pTab points t
14580 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70  o the.** corresp
14590 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66  onding table def
145a0 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41  inition..**.** A
145b0 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a  LLOCATION NOTES:
145c0 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65  .**.** Expr obje
145d0 63 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f  cts can use a lo
145e0 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63  t of memory spac
145f0 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 73 63  e in database sc
14600 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c  hema.  To.** hel
14610 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20  p reduce memory 
14620 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f  requirements, so
14630 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20  metimes an Expr 
14640 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a  object will be.*
14650 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e  * truncated.  An
14660 64 20 74 6f 20 72 65 64 75 63 65 20 74 68 65 20  d to reduce the 
14670 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  number of memory
14680 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f   allocations, so
14690 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f  metimes.** two o
146a0 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65  r more Expr obje
146b0 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72  cts will be stor
146c0 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d  ed in a single m
146d0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
146e0 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69  ,.** together wi
146f0 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73  th Expr.zToken s
14700 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  trings..**.** If
14710 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
14720 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  and EP_TokenOnly
14730 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 77   flags are set w
14740 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f  hen.** an Expr o
14750 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61 74  bject is truncat
14760 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64  ed.  When EP_Red
14770 75 63 65 64 20 69 73 20 73 65 74 2c 20 74 68 65  uced is set, the
14780 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69  n all.** the chi
14790 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  ld Expr objects 
147a0 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66  in the Expr.pLef
147b0 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68  t and Expr.pRigh
147c0 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72  t subtrees.** ar
147d0 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68  e contained with
147e0 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f  in the same memo
147f0 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20  ry allocation.  
14800 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74  Note, however, t
14810 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72  hat.** the subtr
14820 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c  ees in Expr.x.pL
14830 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53  ist or Expr.x.pS
14840 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79 73  elect are always
14850 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61   separately.** a
14860 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64  llocated, regard
14870 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20  less of whether 
14880 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65  or not EP_Reduce
14890 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72  d is set..*/.str
148a0 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20  uct Expr {.  u8 
148b0 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
148c0 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e      /* Operation
148d0 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68   performed by th
148e0 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61  is node */.  cha
148f0 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20  r affinity;     
14900 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e      /* The affin
14910 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ity of the colum
14920 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20  n or 0 if not a 
14930 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20  column */.  u32 
14940 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
14950 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c     /* Various fl
14960 61 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62  ags.  EP_* See b
14970 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  elow */.  union 
14980 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b  {.    char *zTok
14990 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  en;          /* 
149a0 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72  Token value. Zer
149b0 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64  o terminated and
149c0 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20   dequoted */.   
149d0 20 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20   int iValue;    
149e0 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e          /* Non-n
149f0 65 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 20  egative integer 
14a00 76 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56  value if EP_IntV
14a10 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a  alue */.  } u;..
14a20 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54    /* If the EP_T
14a30 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73  okenOnly flag is
14a40 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72   set in the Expr
14a50 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
14a60 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20  n no.  ** space 
14a70 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  is allocated for
14a80 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f   the fields belo
14a90 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e  w this point. An
14aa0 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a   attempt to.  **
14ab0 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c   access them wil
14ac0 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65  l result in a se
14ad0 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e  gfault or malfun
14ae0 63 74 69 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a  ction. .  ******
14af0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14b00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14b10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14b20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
14b30 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74 3b  ..  Expr *pLeft;
14b40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65             /* Le
14b50 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20  ft subnode */.  
14b60 45 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20 20  Expr *pRight;   
14b70 20 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74 20         /* Right 
14b80 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69  subnode */.  uni
14b90 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73  on {.    ExprLis
14ba0 74 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a  t *pList;     /*
14bb0 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53   op = IN, EXISTS
14bc0 2c 20 53 45 4c 45 43 54 2c 20 43 41 53 45 2c 20  , SELECT, CASE, 
14bd0 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45 45  FUNCTION, BETWEE
14be0 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20  N */.    Select 
14bf0 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
14c00 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 61 6e   EP_xIsSelect an
14c10 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54  d op = IN, EXIST
14c20 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d  S, SELECT */.  }
14c30 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   x;..  /* If the
14c40 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67   EP_Reduced flag
14c50 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45   is set in the E
14c60 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  xpr.flags mask, 
14c70 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61  then no.  ** spa
14c80 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  ce is allocated 
14c90 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62  for the fields b
14ca0 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e  elow this point.
14cb0 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20   An attempt to. 
14cc0 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20   ** access them 
14cd0 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61  will result in a
14ce0 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c   segfault or mal
14cf0 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a  function..  ****
14d00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14d10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14d20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14d30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14d40 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  */..#if SQLITE_M
14d50 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a  AX_EXPR_DEPTH>0.
14d60 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20    int nHeight;  
14d70 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67           /* Heig
14d80 68 74 20 6f 66 20 74 68 65 20 74 72 65 65 20 68  ht of the tree h
14d90 65 61 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f  eaded by this no
14da0 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  de */.#endif.  i
14db0 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
14dc0 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55        /* TK_COLU
14dd0 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  MN: cursor numbe
14de0 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69  r of table holdi
14df0 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20  ng column.      
14e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e10 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45     ** TK_REGISTE
14e20 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62  R: register numb
14e30 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  er.             
14e40 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
14e50 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20  K_TRIGGER: 1 -> 
14e60 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20  new, 0 -> old.  
14e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e80 20 20 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c         ** EP_Unl
14e90 69 6b 65 6c 79 3a 20 20 31 33 34 32 31 37 37 32  ikely:  13421772
14ea0 38 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f  8 times likeliho
14eb0 6f 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43  od */.  ynVar iC
14ec0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f  olumn;         /
14ed0 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c  * TK_COLUMN: col
14ee0 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66  umn index.  -1 f
14ef0 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20  or rowid..      
14f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f10 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c     ** TK_VARIABL
14f20 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62  E: variable numb
14f30 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29  er (always >= 1)
14f40 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b  . */.  i16 iAgg;
14f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14f60 20 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20   Which entry in 
14f70 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d  pAggInfo->aCol[]
14f80 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f   or ->aFunc[] */
14f90 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69  .  i16 iRightJoi
14fa0 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20  nTable;   /* If 
14fb0 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65  EP_FromJoin, the
14fc0 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20   right table of 
14fd0 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38  the join */.  u8
14fe0 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20 20   op2;           
14ff0 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53       /* TK_REGIS
15000 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61  TER: original va
15010 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20  lue of Expr.op. 
15020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15030 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f          ** TK_CO
15040 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20  LUMN: the value 
15050 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c  of p5 for OP_Col
15060 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  umn.            
15070 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
15080 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a  TK_AGG_FUNCTION:
15090 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a   nesting depth *
150a0 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67  /.  AggInfo *pAg
150b0 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73  gInfo;     /* Us
150c0 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c  ed by TK_AGG_COL
150d0 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46  UMN and TK_AGG_F
150e0 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62  UNCTION */.  Tab
150f0 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
15100 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72      /* Table for
15110 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65   TK_COLUMN expre
15120 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f  ssions. */.};../
15130 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
15140 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69  ng are the meani
15150 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74  ngs of bits in t
15160 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  he Expr.flags fi
15170 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
15180 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30  EP_FromJoin  0x0
15190 30 30 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61  00001 /* Origina
151a0 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20  tes in ON/USING 
151b0 63 6c 61 75 73 65 20 6f 66 20 6f 75 74 65 72 20  clause of outer 
151c0 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
151d0 45 50 5f 41 67 67 20 20 20 20 20 20 20 30 78 30  EP_Agg       0x0
151e0 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e  00002 /* Contain
151f0 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  s one or more ag
15200 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
15210 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
15220 52 65 73 6f 6c 76 65 64 20 20 30 78 30 30 30 30  Resolved  0x0000
15230 30 34 20 2f 2a 20 49 44 73 20 68 61 76 65 20 62  04 /* IDs have b
15240 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 74 6f 20  een resolved to 
15250 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69  COLUMNs */.#defi
15260 6e 65 20 45 50 5f 45 72 72 6f 72 20 20 20 20 20  ne EP_Error     
15270 30 78 30 30 30 30 30 38 20 2f 2a 20 45 78 70 72  0x000008 /* Expr
15280 65 73 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20  ession contains 
15290 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f  one or more erro
152a0 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  rs */.#define EP
152b0 5f 44 69 73 74 69 6e 63 74 20 20 30 78 30 30 30  _Distinct  0x000
152c0 30 31 30 20 2f 2a 20 41 67 67 72 65 67 61 74 65  010 /* Aggregate
152d0 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44   function with D
152e0 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20  ISTINCT keyword 
152f0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61  */.#define EP_Va
15300 72 53 65 6c 65 63 74 20 30 78 30 30 30 30 32 30  rSelect 0x000020
15310 20 2f 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63   /* pSelect is c
15320 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63  orrelated, not c
15330 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69  onstant */.#defi
15340 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20  ne EP_DblQuoted 
15350 30 78 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65  0x000040 /* toke
15360 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c  n.z was original
15370 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23  ly in "..." */.#
15380 64 65 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46  define EP_InfixF
15390 75 6e 63 20 30 78 30 30 30 30 38 30 20 2f 2a 20  unc 0x000080 /* 
153a0 54 72 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69  True for an infi
153b0 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45  x function: LIKE
153c0 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23  , GLOB, etc */.#
153d0 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74  define EP_Collat
153e0 65 20 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20  e   0x000100 /* 
153f0 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20  Tree contains a 
15400 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61  TK_COLLATE opera
15410 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  tor */.#define E
15420 50 5f 47 65 6e 65 72 69 63 20 20 20 30 78 30 30  P_Generic   0x00
15430 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43  0200 /* Ignore C
15440 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66 69 6e 69  OLLATE or affini
15450 74 79 20 6f 6e 20 74 68 69 73 20 74 72 65 65 20  ty on this tree 
15460 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e  */.#define EP_In
15470 74 56 61 6c 75 65 20 20 30 78 30 30 30 34 30 30  tValue  0x000400
15480 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
15490 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75  e contained in u
154a0 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69  .iValue */.#defi
154b0 6e 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20  ne EP_xIsSelect 
154c0 30 78 30 30 30 38 30 30 20 2f 2a 20 78 2e 70 53  0x000800 /* x.pS
154d0 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 20 28  elect is valid (
154e0 6f 74 68 65 72 77 69 73 65 20 78 2e 70 4c 69 73  otherwise x.pLis
154f0 74 20 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65  t is) */.#define
15500 20 45 50 5f 53 6b 69 70 20 20 20 20 20 20 30 78   EP_Skip      0x
15510 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54  001000 /* COLLAT
15520 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45  E, AS, or UNLIKE
15530 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  LY */.#define EP
15540 5f 52 65 64 75 63 65 64 20 20 20 30 78 30 30 32  _Reduced   0x002
15550 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75  000 /* Expr stru
15560 63 74 20 45 58 50 52 5f 52 45 44 55 43 45 44 53  ct EXPR_REDUCEDS
15570 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a  IZE bytes only *
15580 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b  /.#define EP_Tok
15590 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30 30 20  enOnly 0x004000 
155a0 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45  /* Expr struct E
155b0 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a  XPR_TOKENONLYSIZ
155c0 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a  E bytes only */.
155d0 23 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69  #define EP_Stati
155e0 63 20 20 20 20 30 78 30 30 38 30 30 30 20 2f 2a  c    0x008000 /*
155f0 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20   Held in memory 
15600 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  not obtained fro
15610 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64  m malloc() */.#d
15620 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65  efine EP_MemToke
15630 6e 20 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e  n  0x010000 /* N
15640 65 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62  eed to sqlite3Db
15650 46 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b  Free() Expr.zTok
15660 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  en */.#define EP
15670 5f 4e 6f 52 65 64 75 63 65 20 20 30 78 30 32 30  _NoReduce  0x020
15680 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58  000 /* Cannot EX
15690 50 52 44 55 50 5f 52 45 44 55 43 45 20 74 68 69  PRDUP_REDUCE thi
156a0 73 20 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e  s Expr */.#defin
156b0 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30  e EP_Unlikely  0
156c0 78 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b  x040000 /* unlik
156d0 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68  ely() or likelih
156e0 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  ood() function *
156f0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e  /.#define EP_Con
15700 73 74 46 75 6e 63 20 30 78 30 38 30 30 30 30 20  stFunc 0x080000 
15710 2f 2a 20 4e 6f 64 65 20 69 73 20 61 20 53 51 4c  /* Node is a SQL
15720 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
15730 54 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  T function */.#d
15740 65 66 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75  efine EP_CanBeNu
15750 6c 6c 20 30 78 31 30 30 30 30 30 20 2f 2a 20 43  ll 0x100000 /* C
15760 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73 70 69  an be null despi
15770 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73  te NOT NULL cons
15780 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
15790 65 20 45 50 5f 53 75 62 71 75 65 72 79 20 20 30  e EP_Subquery  0
157a0 78 32 30 30 30 30 30 20 2f 2a 20 54 72 65 65 20  x200000 /* Tree 
157b0 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53 45  contains a TK_SE
157c0 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f  LECT operator */
157d0 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 62 69 6e 61 74  ../*.** Combinat
157e0 69 6f 6e 73 20 6f 66 20 74 77 6f 20 6f 72 20 6d  ions of two or m
157f0 6f 72 65 20 45 50 5f 2a 20 66 6c 61 67 73 0a 2a  ore EP_* flags.*
15800 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 50 72 6f  /.#define EP_Pro
15810 70 61 67 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61  pagate (EP_Colla
15820 74 65 7c 45 50 5f 53 75 62 71 75 65 72 79 29 20  te|EP_Subquery) 
15830 2f 2a 20 50 72 6f 70 61 67 61 74 65 20 74 68 65  /* Propagate the
15840 73 65 20 62 69 74 73 20 75 70 20 74 72 65 65 20  se bits up tree 
15850 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20  */../*.** These 
15860 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73  macros can be us
15870 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c  ed to test, set,
15880 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69   or clear bits i
15890 6e 20 74 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66  n the .** Expr.f
158a0 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
158b0 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 50 72  define ExprHasPr
158c0 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20  operty(E,P)     
158d0 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
158e0 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78  )!=0).#define Ex
158f0 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79  prHasAllProperty
15900 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c  (E,P)  (((E)->fl
15910 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23  ags&(P))==(P)).#
15920 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 50 72  define ExprSetPr
15930 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20  operty(E,P)     
15940 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a  (E)->flags|=(P).
15950 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61  #define ExprClea
15960 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  rProperty(E,P)  
15970 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50   (E)->flags&=~(P
15980 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65  )../* The ExprSe
15990 74 56 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d  tVVAProperty() m
159a0 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72  acro is used for
159b0 20 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56   Verification, V
159c0 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e  alidation,.** an
159d0 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20  d Accreditation 
159e0 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20  only.  It works 
159f0 6c 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70  like ExprSetProp
15a00 65 72 74 79 28 29 20 64 75 72 69 6e 67 20 56 56  erty() during VV
15a10 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62  A.** processes b
15a20 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f  ut is a no-op fo
15a30 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23  r delivery..*/.#
15a40 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
15a50 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72  UG.# define Expr
15a60 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45  SetVVAProperty(E
15a70 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c  ,P)  (E)->flags|
15a80 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  =(P).#else.# def
15a90 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72  ine ExprSetVVAPr
15aa0 6f 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64  operty(E,P).#end
15ab0 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  if../*.** Macros
15ac0 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
15ad0 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
15ae0 73 20 72 65 71 75 69 72 65 64 20 62 79 20 61 20  s required by a 
15af0 6e 6f 72 6d 61 6c 20 45 78 70 72 20 0a 2a 2a 20  normal Expr .** 
15b00 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20  struct, an Expr 
15b10 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20  struct with the 
15b20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20  EP_Reduced flag 
15b30 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67  set in Expr.flag
15b40 73 20 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70  s .** and an Exp
15b50 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
15b60 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
15b70 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66  lag set..*/.#def
15b80 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a  ine EXPR_FULLSIZ
15b90 45 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65  E           size
15ba0 6f 66 28 45 78 70 72 29 20 20 20 20 20 20 20 20  of(Expr)        
15bb0 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20     /* Full size 
15bc0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
15bd0 52 45 44 55 43 45 44 53 49 5a 45 20 20 20 20 20  REDUCEDSIZE     
15be0 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72     offsetof(Expr
15bf0 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d  ,iTable)  /* Com
15c00 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a  mon features */.
15c10 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b  #define EXPR_TOK
15c20 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20  ENONLYSIZE      
15c30 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c  offsetof(Expr,pL
15c40 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20  eft)   /* Fewer 
15c50 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a  features */../*.
15c60 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20  ** Flags passed 
15c70 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45 78  to the sqlite3Ex
15c80 70 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e  prDup() function
15c90 2e 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72  . See the header
15ca0 20 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f   comment .** abo
15cb0 76 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75  ve sqlite3ExprDu
15cc0 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  p() for details.
15cd0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52  .*/.#define EXPR
15ce0 44 55 50 5f 52 45 44 55 43 45 20 20 20 20 20 20  DUP_REDUCE      
15cf0 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73     0x0001  /* Us
15d00 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20  ed reduced-size 
15d10 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f  Expr nodes */../
15d20 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65  *.** A list of e
15d30 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63  xpressions.  Eac
15d40 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79  h expression may
15d50 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65   optionally have
15d60 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20   a.** name.  An 
15d70 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e  expr/name combin
15d80 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65  ation can be use
15d90 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79  d in several way
15da0 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68  s, such.** as th
15db0 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20  e list of "expr 
15dc0 41 53 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f  AS ID" fields fo
15dd0 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43  llowing a "SELEC
15de0 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20  T" or in the.** 
15df0 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78  list of "ID = ex
15e00 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20  pr" items in an 
15e10 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20  UPDATE.  A list 
15e20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63  of expressions c
15e30 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73  an.** also be us
15e40 65 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65  ed as the argume
15e50 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e  nt to a function
15e60 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20  , in which case 
15e70 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66  the a.zName.** f
15e80 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64  ield is not used
15e90 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75  ..**.** By defau
15ea0 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61  lt the Expr.zSpa
15eb0 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20  n field holds a 
15ec0 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64  human-readable d
15ed0 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a  escription of.**
15ee0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
15ef0 74 68 61 74 20 69 73 20 75 73 65 64 20 69 6e 20  that is used in 
15f00 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  the generation o
15f10 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  f error messages
15f20 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c   and.** column l
15f30 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20  abels.  In this 
15f40 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e  case, Expr.zSpan
15f50 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68   is typically th
15f60 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63  e text of a.** c
15f70 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e  olumn expression
15f80 20 61 73 20 69 74 20 65 78 69 73 74 73 20 69 6e   as it exists in
15f90 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
15fa0 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69  ent.  However, i
15fb0 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73  f.** the bSpanIs
15fc0 54 61 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c  Tab flag is set,
15fd0 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f   then zSpan is o
15fe0 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61  verloaded to mea
15ff0 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66  n the name.** of
16000 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75   the result colu
16010 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20  mn in the form: 
16020 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43  DATABASE.TABLE.C
16030 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74  OLUMN.  This lat
16040 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73  er.** form is us
16050 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f  ed for name reso
16060 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74  lution with nest
16070 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e  ed FROM clauses.
16080 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c  .*/.struct ExprL
16090 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70  ist {.  int nExp
160a0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
160b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72  * Number of expr
160c0 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c  essions on the l
160d0 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ist */.  struct 
160e0 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20  ExprList_item { 
160f0 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70 72  /* For each expr
16100 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69  ession in the li
16110 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  st */.    Expr *
16120 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
16130 20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f 66    /* The list of
16140 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
16150 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
16160 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
16170 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20  oken associated 
16180 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65 73  with this expres
16190 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72  sion */.    char
161a0 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20   *zSpan;        
161b0 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20      /* Original 
161c0 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70 72  text of the expr
161d0 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38  ession */.    u8
161e0 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20   sortOrder;     
161f0 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44        /* 1 for D
16200 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43  ESC or 0 for ASC
16210 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
16220 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20   done :1;       
16230 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64  /* A flag to ind
16240 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65  icate when proce
16250 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65  ssing is finishe
16260 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  d */.    unsigne
16270 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b  d bSpanIsTab :1;
16280 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20   /* zSpan holds 
16290 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20  DB.TABLE.COLUMN 
162a0 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
162b0 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f  reusable :1;   /
162c0 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  * Constant expre
162d0 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c  ssion is reusabl
162e0 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b  e */.    union {
162f0 0a 20 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a  .      struct {.
16300 20 20 20 20 20 20 20 20 75 31 36 20 69 4f 72 64          u16 iOrd
16310 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a  erByCol;      /*
16320 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63   For ORDER BY, c
16330 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
16340 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20  result set */.  
16350 20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61 73        u16 iAlias
16360 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
16370 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e  ndex into Parse.
16380 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61  aAlias[] for zNa
16390 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b  me */.      } x;
163a0 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73  .      int iCons
163b0 74 45 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f  tExprReg;      /
163c0 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20 77 68  * Register in wh
163d0 69 63 68 20 45 78 70 72 20 76 61 6c 75 65 20 69  ich Expr value i
163e0 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20  s cached */.    
163f0 7d 20 75 3b 0a 20 20 7d 20 2a 61 3b 20 20 20 20  } u;.  } *a;    
16400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
16410 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f   Alloc a power o
16420 66 20 74 77 6f 20 67 72 65 61 74 65 72 20 6f 72  f two greater or
16430 20 65 71 75 61 6c 20 74 6f 20 6e 45 78 70 72 20   equal to nExpr 
16440 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
16450 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
16460 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
16470 65 64 20 62 79 20 74 68 65 20 70 61 72 73 65 72  ed by the parser
16480 20 74 6f 20 72 65 63 6f 72 64 20 62 6f 74 68 0a   to record both.
16490 2a 2a 20 74 68 65 20 70 61 72 73 65 20 74 72 65  ** the parse tre
164a0 65 20 66 6f 72 20 61 6e 20 65 78 70 72 65 73 73  e for an express
164b0 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 70 61 6e  ion and the span
164c0 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 66   of input text f
164d0 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73  or an.** express
164e0 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  ion..*/.struct E
164f0 78 70 72 53 70 61 6e 20 7b 0a 20 20 45 78 70 72  xprSpan {.  Expr
16500 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
16510 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65 73 73    /* The express
16520 69 6f 6e 20 70 61 72 73 65 20 74 72 65 65 20 2a  ion parse tree *
16530 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
16540 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20 46 69 72  zStart;   /* Fir
16550 73 74 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  st character of 
16560 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 20 20  input text */.  
16570 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e 64  const char *zEnd
16580 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61  ;     /* One cha
16590 72 61 63 74 65 72 20 70 61 73 74 20 74 68 65 20  racter past the 
165a0 65 6e 64 20 6f 66 20 69 6e 70 75 74 20 74 65 78  end of input tex
165b0 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  t */.};../*.** A
165c0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
165d0 69 73 20 73 74 72 75 63 74 75 72 65 20 63 61 6e  is structure can
165e0 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c   hold a simple l
165f0 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66 69 65  ist of identifie
16600 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20 74  rs,.** such as t
16610 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63 22 20  he list "a,b,c" 
16620 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  in the following
16630 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a   statements:.**.
16640 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  **      INSERT I
16650 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56 41 4c  NTO t(a,b,c) VAL
16660 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20  UES ...;.**     
16670 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 64   CREATE INDEX id
16680 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a  x ON t(a,b,c);.*
16690 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 52  *      CREATE TR
166a0 49 47 47 45 52 20 74 72 69 67 20 42 45 46 4f 52  IGGER trig BEFOR
166b0 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28 61 2c  E UPDATE ON t(a,
166c0 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20  b,c) ...;.**.** 
166d0 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69 64 78  The IdList.a.idx
166e0 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 77   field is used w
166f0 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74 20 72  hen the IdList r
16700 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c 69  epresents the li
16710 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20  st of.** column 
16720 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20 74 61  names after a ta
16730 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49  ble name in an I
16740 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 2e  NSERT statement.
16750 20 20 49 6e 20 74 68 65 20 73 74 61 74 65 6d 65    In the stateme
16760 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53  nt.**.**     INS
16770 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63  ERT INTO t(a,b,c
16780 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22  ) ....**.** If "
16790 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68 20 63  a" is the k-th c
167a0 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22  olumn of table "
167b0 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73 74 2e  t", then IdList.
167c0 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a  a[0].idx==k..*/.
167d0 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 7b 0a  struct IdList {.
167e0 20 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 5f    struct IdList_
167f0 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20  item {.    char 
16800 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  *zName;      /* 
16810 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64 65 6e  Name of the iden
16820 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e  tifier */.    in
16830 74 20 69 64 78 3b 20 20 20 20 20 20 20 20 20 20  t idx;          
16840 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65  /* Index in some
16850 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66   Table.aCol[] of
16860 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20   a column named 
16870 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b  zName */.  } *a;
16880 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20 20 20  .  int nId;     
16890 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
168a0 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 20   identifiers on 
168b0 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  the list */.};..
168c0 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61 73  /*.** The bitmas
168d0 6b 20 64 61 74 61 74 79 70 65 20 64 65 66 69 6e  k datatype defin
168e0 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65 64  ed below is used
168f0 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70 74   for various opt
16900 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a  imizations..**.*
16910 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73 20  * Changing this 
16920 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74 6f  from a 64-bit to
16930 20 61 20 33 32 2d 62 69 74 20 74 79 70 65 20 6c   a 32-bit type l
16940 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65 72  imits the number
16950 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e   of.** tables in
16960 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e   a join to 32 in
16970 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42 75  stead of 64.  Bu
16980 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63 65  t it also reduce
16990 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66  s the size.** of
169a0 20 74 68 65 20 6c 69 62 72 61 72 79 20 62 79 20   the library by 
169b0 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78 38  738 bytes on ix8
169c0 36 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 75 36  6..*/.typedef u6
169d0 34 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a  4 Bitmask;../*.*
169e0 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * The number of 
169f0 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73  bits in a Bitmas
16a00 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20  k.  "BMS" means 
16a10 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a  "BitMask Size"..
16a20 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20  */.#define BMS  
16a30 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69  ((int)(sizeof(Bi
16a40 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a  tmask)*8))../*.*
16a50 2a 20 41 20 62 69 74 20 69 6e 20 61 20 42 69 74  * A bit in a Bit
16a60 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  mask.*/.#define 
16a70 4d 41 53 4b 42 49 54 28 6e 29 20 20 20 28 28 28  MASKBIT(n)   (((
16a80 42 69 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29  Bitmask)1)<<(n))
16a90 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54  .#define MASKBIT
16aa0 33 32 28 6e 29 20 28 28 28 75 6e 73 69 67 6e 65  32(n) (((unsigne
16ab0 64 20 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 0a  d int)1)<<(n))..
16ac0 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
16ad0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 64 65  ing structure de
16ae0 73 63 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d  scribes the FROM
16af0 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
16b00 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
16b10 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20  * Each table or 
16b20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20  subquery in the 
16b30 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61  FROM clause is a
16b40 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e   separate elemen
16b50 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c  t of.** the SrcL
16b60 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a  ist.a[] array..*
16b70 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64  *.** With the ad
16b80 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70  dition of multip
16b90 6c 65 20 64 61 74 61 62 61 73 65 20 73 75 70 70  le database supp
16ba0 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ort, the followi
16bb0 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  ng structure.** 
16bc0 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64  can also be used
16bd0 20 74 6f 20 64 65 73 63 72 69 62 65 20 61 20 70   to describe a p
16be0 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20  articular table 
16bf0 73 75 63 68 20 61 73 20 74 68 65 20 74 61 62 6c  such as the tabl
16c00 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64  e that.** is mod
16c10 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45  ified by an INSE
16c20 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55  RT, DELETE, or U
16c30 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e  PDATE statement.
16c40 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51    In standard SQ
16c50 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62  L,.** such a tab
16c60 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d  le must be a sim
16c70 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42  ple name: ID.  B
16c80 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68  ut in SQLite, th
16c90 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e  e table can.** n
16ca0 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69 65 64  ow be identified
16cb0 20 62 79 20 61 20 64 61 74 61 62 61 73 65 20 6e   by a database n
16cc0 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e  ame, a dot, then
16cd0 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a   the table name:
16ce0 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68   ID.ID..**.** Th
16cf0 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74  e jointype start
16d00 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68  s out showing th
16d10 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77  e join type betw
16d20 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20  een the current 
16d30 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65  table.** and the
16d40 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74   next table on t
16d50 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61  he list.  The pa
16d60 72 73 65 72 20 62 75 69 6c 64 73 20 74 68 65 20  rser builds the 
16d70 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a  list this way..*
16d80 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53 72 63  * But sqlite3Src
16d90 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70  ListShiftJoinTyp
16da0 65 28 29 20 6c 61 74 65 72 20 73 68 69 66 74 73  e() later shifts
16db0 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73   the jointypes s
16dc0 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a  o that each.** j
16dd0 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73 73 65  ointype expresse
16de0 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65  s the join betwe
16df0 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64  en the table and
16e00 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 61   the previous ta
16e10 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  ble..**.** In th
16e20 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c  e colUsed field,
16e30 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20   the high-order 
16e40 62 69 74 20 28 62 69 74 20 36 33 29 20 69 73 20  bit (bit 63) is 
16e50 73 65 74 20 69 66 20 74 68 65 20 74 61 62 6c 65  set if the table
16e60 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72  .** contains mor
16e70 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e  e than 63 column
16e80 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20  s and the 64-th 
16e90 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20  or later column 
16ea0 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75  is used..*/.stru
16eb0 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69  ct SrcList {.  i
16ec0 6e 74 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20  nt nSrc;        
16ed0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62  /* Number of tab
16ee0 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65  les or subquerie
16ef0 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  s in the FROM cl
16f00 61 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41  ause */.  u32 nA
16f10 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75  lloc;      /* Nu
16f20 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
16f30 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d  allocated in a[]
16f40 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75   below */.  stru
16f50 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20  ct SrcList_item 
16f60 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53  {.    Schema *pS
16f70 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d  chema;  /* Schem
16f80 61 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20  a to which this 
16f90 69 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a 2f  item is fixed */
16fa0 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61  .    char *zData
16fb0 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f  base;  /* Name o
16fc0 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69  f database holdi
16fd0 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ng this table */
16fe0 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
16ff0 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  ;      /* Name o
17000 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  f the table */. 
17010 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b     char *zAlias;
17020 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20       /* The "B" 
17030 70 61 72 74 20 6f 66 20 61 20 22 41 20 41 53 20  part of a "A AS 
17040 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d  B" phrase.  zNam
17050 65 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a  e is the "A" */.
17060 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
17070 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20        /* An SQL 
17080 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64  table correspond
17090 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a  ing to zName */.
170a0 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
170b0 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43  ect;  /* A SELEC
170c0 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64  T statement used
170d0 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74   in place of a t
170e0 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20  able name */.   
170f0 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62   int addrFillSub
17100 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66  ;  /* Address of
17110 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d   subroutine to m
17120 61 6e 69 66 65 73 74 20 61 20 73 75 62 71 75 65  anifest a subque
17130 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65  ry */.    int re
17140 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52  gReturn;    /* R
17150 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
17160 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f  return address o
17170 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f  f addrFillSub */
17180 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 73 75  .    int regResu
17190 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74  lt;    /* Regist
171a0 65 72 73 20 68 6f 6c 64 69 6e 67 20 72 65 73 75  ers holding resu
171b0 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74  lts of a co-rout
171c0 69 6e 65 20 2a 2f 0a 20 20 20 20 75 38 20 6a 6f  ine */.    u8 jo
171d0 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20  intype;      /* 
171e0 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74  Type of join bet
171f0 77 65 65 6e 20 74 68 69 73 20 61 62 6c 65 20 61  ween this able a
17200 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  nd the previous 
17210 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
17220 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20  notIndexed :1;  
17230 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
17240 72 65 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45  re is a NOT INDE
17250 58 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  XED clause */.  
17260 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72    unsigned isCor
17270 72 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20  related :1;  /* 
17280 54 72 75 65 20 69 66 20 73 75 62 2d 71 75 65 72  True if sub-quer
17290 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20  y is correlated 
172a0 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
172b0 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b  viaCoroutine :1;
172c0 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64    /* Implemented
172d0 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65   as a co-routine
172e0 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
172f0 20 69 73 52 65 63 75 72 73 69 76 65 20 3a 31 3b   isRecursive :1;
17300 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 72     /* True for r
17310 65 63 75 72 73 69 76 65 20 72 65 66 65 72 65 6e  ecursive referen
17320 63 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a 23 69  ce in WITH */.#i
17330 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
17340 54 5f 45 58 50 4c 41 49 4e 0a 20 20 20 20 75 38  T_EXPLAIN.    u8
17350 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20   iSelectId;     
17360 2f 2a 20 49 66 20 70 53 65 6c 65 63 74 21 3d 30  /* If pSelect!=0
17370 2c 20 74 68 65 20 69 64 20 6f 66 20 74 68 65 20  , the id of the 
17380 73 75 62 2d 73 65 6c 65 63 74 20 69 6e 20 45 51  sub-select in EQ
17390 50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20  P */.#endif.    
173a0 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20  int iCursor;    
173b0 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75    /* The VDBE cu
173c0 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64  rsor number used
173d0 20 74 6f 20 61 63 63 65 73 73 20 74 68 69 73 20   to access this 
173e0 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70  table */.    Exp
173f0 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f  r *pOn;        /
17400 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20  * The ON clause 
17410 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20  of a join */.   
17420 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b   IdList *pUsing;
17430 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20     /* The USING 
17440 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
17450 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20   */.    Bitmask 
17460 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74  colUsed;  /* Bit
17470 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66   N (1<<N) set if
17480 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61   column N of pTa
17490 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20  b is used */.   
174a0 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 65 64 42   char *zIndexedB
174b0 79 3b 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72  y; /* Identifier
174c0 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42   from "INDEXED B
174d0 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75  Y <zIndex>" clau
174e0 73 65 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20  se */.    Index 
174f0 2a 70 49 6e 64 65 78 3b 20 20 20 20 2f 2a 20 49  *pIndex;    /* I
17500 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 63  ndex structure c
17510 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
17520 7a 49 6e 64 65 78 2c 20 69 66 20 61 6e 79 20 2a  zIndex, if any *
17530 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20  /.  } a[1];     
17540 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65          /* One e
17550 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 69 64  ntry for each id
17560 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20  entifier on the 
17570 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
17580 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75  * Permitted valu
17590 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73  es of the SrcLis
175a0 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65  t.a.jointype fie
175b0 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  ld.*/.#define JT
175c0 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30  _INNER     0x000
175d0 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64  1    /* Any kind
175e0 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f   of inner or cro
175f0 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  ss join */.#defi
17600 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20  ne JT_CROSS     
17610 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70  0x0002    /* Exp
17620 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74 68 65  licit use of the
17630 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a   CROSS keyword *
17640 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54  /.#define JT_NAT
17650 55 52 41 4c 20 20 20 30 78 30 30 30 34 20 20 20  URAL   0x0004   
17660 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22   /* True for a "
17670 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f  natural" join */
17680 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54  .#define JT_LEFT
17690 20 20 20 20 20 20 30 78 30 30 30 38 20 20 20 20        0x0008    
176a0 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f  /* Left outer jo
176b0 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
176c0 5f 52 49 47 48 54 20 20 20 20 20 30 78 30 30 31  _RIGHT     0x001
176d0 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75  0    /* Right ou
176e0 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
176f0 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20  ine JT_OUTER    
17700 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68   0x0020    /* Th
17710 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72  e "OUTER" keywor
17720 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a  d is present */.
17730 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52  #define JT_ERROR
17740 20 20 20 20 20 30 78 30 30 34 30 20 20 20 20 2f       0x0040    /
17750 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73  * unknown or uns
17760 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79  upported join ty
17770 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c  pe */.../*.** Fl
17780 61 67 73 20 61 70 70 72 6f 70 72 69 61 74 65 20  ags appropriate 
17790 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61  for the wctrlFla
177a0 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20  gs parameter of 
177b0 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69  sqlite3WhereBegi
177c0 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57  n().** and the W
177d0 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c  hereInfo.wctrlFl
177e0 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23  ags member..*/.#
177f0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
17800 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78  ERBY_NORMAL   0x
17810 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f  0000 /* No-op */
17820 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
17830 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20  RDERBY_MIN      
17840 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20  0x0001 /* ORDER 
17850 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f  BY processing fo
17860 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a  r min() func */.
17870 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
17880 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30  DERBY_MAX      0
17890 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42  x0002 /* ORDER B
178a0 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72  Y processing for
178b0 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23   max() func */.#
178c0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45  define WHERE_ONE
178d0 50 41 53 53 5f 44 45 53 49 52 45 44 20 20 30 78  PASS_DESIRED  0x
178e0 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20  0004 /* Want to 
178f0 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41  do one-pass UPDA
17900 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65  TE/DELETE */.#de
17910 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49  fine WHERE_DUPLI
17920 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30  CATES_OK    0x00
17930 30 38 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75  08 /* Ok to retu
17940 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68  rn a row more th
17950 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69  an once */.#defi
17960 6e 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f 4f 50  ne WHERE_OMIT_OP
17970 45 4e 5f 43 4c 4f 53 45 20 20 30 78 30 30 31 30  EN_CLOSE  0x0010
17980 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72   /* Table cursor
17990 73 20 61 72 65 20 61 6c 72 65 61 64 79 20 6f 70  s are already op
179a0 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  en */.#define WH
179b0 45 52 45 5f 46 4f 52 43 45 5f 54 41 42 4c 45 20  ERE_FORCE_TABLE 
179c0 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20 44       0x0020 /* D
179d0 6f 20 6e 6f 74 20 75 73 65 20 61 6e 20 69 6e 64  o not use an ind
179e0 65 78 2d 6f 6e 6c 79 20 73 65 61 72 63 68 20 2a  ex-only search *
179f0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
17a00 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59 20 20 20  ONETABLE_ONLY   
17a10 20 30 78 30 30 34 30 20 2f 2a 20 4f 6e 6c 79 20   0x0040 /* Only 
17a20 63 6f 64 65 20 74 68 65 20 31 73 74 20 74 61 62  code the 1st tab
17a30 6c 65 20 69 6e 20 70 54 61 62 4c 69 73 74 20 2a  le in pTabList *
17a40 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
17a50 4e 4f 5f 41 55 54 4f 49 4e 44 45 58 20 20 20 20  NO_AUTOINDEX    
17a60 20 30 78 30 30 38 30 20 2f 2a 20 44 69 73 61 6c   0x0080 /* Disal
17a70 6c 6f 77 20 61 75 74 6f 6d 61 74 69 63 20 69 6e  low automatic in
17a80 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
17a90 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20   WHERE_GROUPBY  
17aa0 20 20 20 20 20 20 20 20 30 78 30 31 30 30 20 2f          0x0100 /
17ab0 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20 72 65  * pOrderBy is re
17ac0 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20  ally a GROUP BY 
17ad0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
17ae0 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20 20 20  _DISTINCTBY     
17af0 20 20 30 78 30 32 30 30 20 2f 2a 20 70 4f 72 64    0x0200 /* pOrd
17b00 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61  erby is really a
17b10 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65   DISTINCT clause
17b20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
17b30 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20  E_WANT_DISTINCT 
17b40 20 20 20 30 78 30 34 30 30 20 2f 2a 20 41 6c 6c     0x0400 /* All
17b50 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f   output needs to
17b60 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a   be distinct */.
17b70 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 4f  #define WHERE_SO
17b80 52 54 42 59 47 52 4f 55 50 20 20 20 20 20 20 30  RTBYGROUP      0
17b90 78 30 38 30 30 20 2f 2a 20 53 75 70 70 6f 72 74  x0800 /* Support
17ba0 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53   sqlite3WhereIsS
17bb0 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64 65 66 69  orted() */.#defi
17bc0 6e 65 20 57 48 45 52 45 5f 52 45 4f 50 45 4e 5f  ne WHERE_REOPEN_
17bd0 49 44 58 20 20 20 20 20 20 20 30 78 31 30 30 30  IDX       0x1000
17be0 20 2f 2a 20 54 72 79 20 74 6f 20 75 73 65 20 4f   /* Try to use O
17bf0 50 5f 52 65 6f 70 65 6e 49 64 78 20 2a 2f 0a 0a  P_ReopenIdx */..
17c00 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72  /* Allowed retur
17c10 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71  n values from sq
17c20 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74  lite3WhereIsDist
17c30 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e  inct().*/.#defin
17c40 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
17c50 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a  _NOOP      0  /*
17c60 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
17c70 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64  d not used */.#d
17c80 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
17c90 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31  INCT_UNIQUE    1
17ca0 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74    /* No duplicat
17cb0 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  es */.#define WH
17cc0 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44  ERE_DISTINCT_ORD
17cd0 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c  ERED   2  /* All
17ce0 20 64 75 70 6c 69 63 61 74 65 73 20 61 72 65 20   duplicates are 
17cf0 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66  adjacent */.#def
17d00 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
17d10 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20  CT_UNORDERED 3  
17d20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61 72  /* Duplicates ar
17d30 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a  e scattered */..
17d40 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74  /*.** A NameCont
17d50 65 78 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f  ext defines a co
17d60 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68 20 74  ntext in which t
17d70 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20  o resolve table 
17d80 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61  and column.** na
17d90 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78  mes.  The contex
17da0 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  t consists of a 
17db0 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28  list of tables (
17dc0 74 68 65 20 70 53 72 63 4c 69 73 74 29 20 66 69  the pSrcList) fi
17dd0 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73  eld and.** a lis
17de0 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65  t of named expre
17df0 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20  ssion (pEList). 
17e00 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65   The named expre
17e10 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a  ssion list may.*
17e20 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20  * be NULL.  The 
17e30 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73  pSrc corresponds
17e40 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   to the FROM cla
17e50 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
17e60 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62  or.** to the tab
17e70 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  le being operate
17e80 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20  d on by INSERT, 
17e90 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54  UPDATE, or DELET
17ea0 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73  E.  The.** pELis
17eb0 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
17ec0 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
17ed0 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20  of a SELECT and 
17ee0 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f  is NULL for.** o
17ef0 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e  ther statements.
17f00 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  .**.** NameConte
17f10 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65  xts can be neste
17f20 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69  d.  When resolvi
17f30 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e  ng names, the in
17f40 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e  ner-most .** con
17f50 74 65 78 74 20 69 73 20 73 65 61 72 63 68 65 64  text is searched
17f60 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d   first.  If no m
17f70 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
17f80 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a  he next outer.**
17f90 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63   context is chec
17fa0 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65 20 69  ked.  If there i
17fb0 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68  s still no match
17fc0 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65  , the next conte
17fd0 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64  xt.** is checked
17fe0 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73 73 20  .  This process 
17ff0 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20  continues until 
18000 65 69 74 68 65 72 20 61 20 6d 61 74 63 68 20 69  either a match i
18010 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c  s found.** or al
18020 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63  l contexts are c
18030 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61  heck.  When a ma
18040 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
18050 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66  e nRef member of
18060 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20  .** the context 
18070 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d  containing the m
18080 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e  atch is incremen
18090 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68  ted. .**.** Each
180a0 20 73 75 62 71 75 65 72 79 20 67 65 74 73 20 61   subquery gets a
180b0 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74   new NameContext
180c0 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66 69 65  .  The pNext fie
180d0 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  ld points to the
180e0 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
180f0 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71 75  in the parent qu
18100 65 72 79 2e 20 20 54 68 75 73 20 74 68 65 20 70  ery.  Thus the p
18110 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69  rocess of scanni
18120 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f  ng the.** NameCo
18130 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65  ntext list corre
18140 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68  sponds to search
18150 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63 63  ing through succ
18160 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a  essively outer.*
18170 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f  * subqueries loo
18180 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68  king for a match
18190 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65  ..*/.struct Name
181a0 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73  Context {.  Pars
181b0 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
181c0 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a   /* The parser *
181d0 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
181e0 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20  cList;   /* One 
181f0 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75  or more tables u
18200 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e  sed to resolve n
18210 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ames */.  ExprLi
18220 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f  st *pEList;    /
18230 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20  * Optional list 
18240 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f  of result-set co
18250 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e  lumns */.  AggIn
18260 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20  fo *pAggInfo;   
18270 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
18280 62 6f 75 74 20 61 67 67 72 65 67 61 74 65 73 20  bout aggregates 
18290 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f  at this level */
182a0 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a  .  NameContext *
182b0 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20  pNext;  /* Next 
182c0 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65  outer name conte
182d0 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75  xt.  NULL for ou
182e0 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74  termost */.  int
182f0 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
18300 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
18310 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79  ames resolved by
18320 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f   this context */
18330 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
18340 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
18350 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f  r of errors enco
18360 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72 65  untered while re
18370 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f  solving names */
18380 0a 20 20 75 31 36 20 6e 63 46 6c 61 67 73 3b 20  .  u16 ncFlags; 
18390 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20          /* Zero 
183a0 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61  or more NC_* fla
183b0 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77  gs defined below
183c0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
183d0 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
183e0 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74   the NameContext
183f0 2c 20 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e  , ncFlags field.
18400 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 3a 20 20 4e 43  .**.** Note:  NC
18410 5f 4d 69 6e 4d 61 78 41 67 67 20 6d 75 73 74 20  _MinMaxAgg must 
18420 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 76 61  have the same va
18430 6c 75 65 20 61 73 20 53 46 5f 4d 69 6e 4d 61 78  lue as SF_MinMax
18440 41 67 67 20 61 6e 64 0a 2a 2a 20 53 51 4c 49 54  Agg and.** SQLIT
18450 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 2e 0a 2a  E_FUNC_MINMAX..*
18460 2a 20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  * .*/.#define NC
18470 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 30 30  _AllowAgg  0x000
18480 31 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  1  /* Aggregate 
18490 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c  functions are al
184a0 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64  lowed here */.#d
184b0 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67 67 20  efine NC_HasAgg 
184c0 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 4f 6e     0x0002  /* On
184d0 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67  e or more aggreg
184e0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 65  ate functions se
184f0 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  en */.#define NC
18500 5f 49 73 43 68 65 63 6b 20 20 20 30 78 30 30 30  _IsCheck   0x000
18510 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65  4  /* True if re
18520 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e  solving names in
18530 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61   a CHECK constra
18540 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  int */.#define N
18550 43 5f 49 6e 41 67 67 46 75 6e 63 20 30 78 30 30  C_InAggFunc 0x00
18560 30 38 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61  08  /* True if a
18570 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e  nalyzing argumen
18580 74 73 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e  ts to an agg fun
18590 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  c */.#define NC_
185a0 50 61 72 74 49 64 78 20 20 20 30 78 30 30 31 30  PartIdx   0x0010
185b0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
185c0 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69 61 6c  olving a partial
185d0 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a 2f 0a   index WHERE */.
185e0 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61  #define NC_MinMa
185f0 78 41 67 67 20 30 78 31 30 30 30 20 20 2f 2a 20  xAgg 0x1000  /* 
18600 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65 67 61 74  min/max aggregat
18610 65 73 20 73 65 65 6e 2e 20 20 53 65 65 20 6e 6f  es seen.  See no
18620 74 65 20 61 62 6f 76 65 20 2a 2f 0a 0a 2f 2a 0a  te above */../*.
18630 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
18640 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
18650 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
18660 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69  ns all informati
18670 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20  on.** needed to 
18680 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f  generate code fo
18690 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43  r a single SELEC
186a0 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a  T statement..**.
186b0 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65 74  ** nLimit is set
186c0 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65 20   to -1 if there 
186d0 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75  is no LIMIT clau
186e0 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73 20  se.  nOffset is 
186f0 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20  set to 0..** If 
18700 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49 54  there is a LIMIT
18710 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61 72   clause, the par
18720 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74 20  ser sets nLimit 
18730 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
18740 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64  the.** limit and
18750 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20   nOffset to the 
18760 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66 66  value of the off
18770 73 65 74 20 28 6f 72 20 30 20 69 66 20 74 68 65  set (or 0 if the
18780 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66  re is not.** off
18790 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65 72  set).  But later
187a0 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20   on, nLimit and 
187b0 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20 74  nOffset become t
187c0 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  he memory locati
187d0 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44  ons.** in the VD
187e0 42 45 20 74 68 61 74 20 72 65 63 6f 72 64 20 74  BE that record t
187f0 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66  he limit and off
18800 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a  set counters..**
18810 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  .** addrOpenEphm
18820 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61  [] entries conta
18830 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  in the address o
18840 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  f OP_OpenEphemer
18850 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54  al opcodes..** T
18860 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20 6d  hese addresses m
18870 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f  ust be stored so
18880 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20   that we can go 
18890 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e  back and fill in
188a0 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e  .** the P4_KEYIN
188b0 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65  FO and P2 parame
188c0 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69  ters later.  Nei
188d0 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f  ther the KeyInfo
188e0 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62   nor.** the numb
188f0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
18900 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75   P2 can be compu
18910 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20  ted at the same 
18920 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f  time.** as the O
18930 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72  P_OpenEphm instr
18940 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20  uction is coded 
18950 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65  because not.** e
18960 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f  nough informatio
18970 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70  n about the comp
18980 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e  ound query is kn
18990 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e  own at that poin
189a0 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66  t..** The KeyInf
189b0 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72  o for addrOpenTr
189c0 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f  an[0] and [1] co
189d0 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67  ntains collating
189e0 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f   sequences.** fo
189f0 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  r the result set
18a00 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  .  The KeyInfo f
18a10 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  or addrOpenEphm[
18a20 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  2] contains coll
18a30 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63  ating.** sequenc
18a40 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52  es for the ORDER
18a50 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73   BY clause..*/.s
18a60 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20  truct Select {. 
18a70 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
18a80 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66  t;      /* The f
18a90 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73  ields of the res
18aa0 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ult */.  u8 op; 
18ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ac0 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e  /* One of: TK_UN
18ad0 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e  ION TK_ALL TK_IN
18ae0 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50  TERSECT TK_EXCEP
18af0 54 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c 46 6c  T */.  u16 selFl
18b00 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ags;          /*
18b10 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61   Various SF_* va
18b20 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c  lues */.  int iL
18b30 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20  imit, iOffset;  
18b40 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73   /* Memory regis
18b50 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d  ters holding LIM
18b60 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e  IT & OFFSET coun
18b70 74 65 72 73 20 2a 2f 0a 23 69 66 20 53 45 4c 45  ters */.#if SELE
18b80 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a  CTTRACE_ENABLED.
18b90 20 20 63 68 61 72 20 7a 53 65 6c 4e 61 6d 65 5b    char zSelName[
18ba0 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53 79 6d 62  12];     /* Symb
18bb0 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20 74 68 69  olic name of thi
18bc0 73 20 53 45 4c 45 43 54 20 75 73 65 20 66 6f 72  s SELECT use for
18bd0 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 65   debugging */.#e
18be0 6e 64 69 66 0a 20 20 69 6e 74 20 61 64 64 72 4f  ndif.  int addrO
18bf0 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a  penEphm[2];   /*
18c00 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70   OP_OpenEphem op
18c10 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f  codes related to
18c20 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a   this select */.
18c30 20 20 75 36 34 20 6e 53 65 6c 65 63 74 52 6f 77    u64 nSelectRow
18c40 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69  ;        /* Esti
18c50 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20  mated number of 
18c60 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20  result rows */. 
18c70 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b 20   SrcList *pSrc; 
18c80 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46          /* The F
18c90 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
18ca0 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20  Expr *pWhere;   
18cb0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
18cc0 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ERE clause */.  
18cd0 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70  ExprList *pGroup
18ce0 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47 52  By;    /* The GR
18cf0 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  OUP BY clause */
18d00 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e 67  .  Expr *pHaving
18d10 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
18d20 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 2a   HAVING clause *
18d30 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f  /.  ExprList *pO
18d40 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54 68  rderBy;    /* Th
18d50 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
18d60 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  e */.  Select *p
18d70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a  Prior;        /*
18d80 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69 6e   Prior select in
18d90 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65   a compound sele
18da0 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a  ct statement */.
18db0 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b    Select *pNext;
18dc0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
18dd0 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20 6c   select to the l
18de0 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  eft in a compoun
18df0 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69  d */.  Expr *pLi
18e00 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  mit;          /*
18e10 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f   LIMIT expressio
18e20 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f  n. NULL means no
18e30 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78 70  t used. */.  Exp
18e40 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20 20 20  r *pOffset;     
18e50 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20 65 78      /* OFFSET ex
18e60 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d  pression. NULL m
18e70 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a  eans not used. *
18e80 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b  /.  With *pWith;
18e90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 49             /* WI
18ea0 54 48 20 63 6c 61 75 73 65 20 61 74 74 61 63 68  TH clause attach
18eb0 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63  ed to this selec
18ec0 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d  t. Or NULL. */.}
18ed0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
18ee0 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c 65   values for Sele
18ef0 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54 68  ct.selFlags.  Th
18f00 65 20 22 53 46 22 20 70 72 65 66 69 78 20 73 74  e "SF" prefix st
18f10 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c  ands for.** "Sel
18f20 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2f 0a 23 64  ect Flag"..*/.#d
18f30 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69 6e 63  efine SF_Distinc
18f40 74 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20  t        0x0001 
18f50 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f 75 6c   /* Output shoul
18f60 64 20 62 65 20 44 49 53 54 49 4e 43 54 20 2a 2f  d be DISTINCT */
18f70 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20  .#define SF_All 
18f80 20 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30              0x00
18f90 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20  02  /* Includes 
18fa0 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20  the ALL keyword 
18fb0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65  */.#define SF_Re
18fc0 73 6f 6c 76 65 64 20 20 20 20 20 20 20 20 30 78  solved        0x
18fd0 30 30 30 34 20 20 2f 2a 20 49 64 65 6e 74 69 66  0004  /* Identif
18fe0 69 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 72  iers have been r
18ff0 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69  esolved */.#defi
19000 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74 65 20  ne SF_Aggregate 
19010 20 20 20 20 20 20 30 78 30 30 30 38 20 20 2f 2a        0x0008  /*
19020 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67   Contains aggreg
19030 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
19040 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73  .#define SF_Uses
19050 45 70 68 65 6d 65 72 61 6c 20 20 20 30 78 30 30  Ephemeral   0x00
19060 31 30 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20  10  /* Uses the 
19070 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70  OpenEphemeral op
19080 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  code */.#define 
19090 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20  SF_Expanded     
190a0 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20 73 71     0x0020  /* sq
190b0 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e  lite3SelectExpan
190c0 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68  d() called on th
190d0 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  is */.#define SF
190e0 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20  _HasTypeInfo    
190f0 20 30 78 30 30 34 30 20 20 2f 2a 20 46 52 4f 4d   0x0040  /* FROM
19100 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76 65   subqueries have
19110 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20   Table metadata 
19120 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f  */.#define SF_Co
19130 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 20 30 78  mpound        0x
19140 30 30 38 30 20 20 2f 2a 20 50 61 72 74 20 6f 66  0080  /* Part of
19150 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72   a compound quer
19160 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  y */.#define SF_
19170 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20 20  Values          
19180 30 78 30 31 30 30 20 20 2f 2a 20 53 79 6e 74 68  0x0100  /* Synth
19190 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55  esized from VALU
191a0 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65  ES clause */.#de
191b0 66 69 6e 65 20 53 46 5f 4d 75 6c 74 69 56 61 6c  fine SF_MultiVal
191c0 75 65 20 20 20 20 20 20 30 78 30 32 30 30 20 20  ue      0x0200  
191d0 2f 2a 20 53 69 6e 67 6c 65 20 56 41 4c 55 45 53  /* Single VALUES
191e0 20 74 65 72 6d 20 77 69 74 68 20 6d 75 6c 74 69   term with multi
191f0 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66  ple rows */.#def
19200 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f  ine SF_NestedFro
19210 6d 20 20 20 20 20 20 30 78 30 34 30 30 20 20 2f  m      0x0400  /
19220 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61 72 65  * Part of a pare
19230 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63  nthesized FROM c
19240 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
19250 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74   SF_MaybeConvert
19260 20 20 20 20 30 78 30 38 30 30 20 20 2f 2a 20 4e      0x0800  /* N
19270 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f  eed convertCompo
19280 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
19290 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ery() */.#define
192a0 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20   SF_MinMaxAgg   
192b0 20 20 20 20 30 78 31 30 30 30 20 20 2f 2a 20 41      0x1000  /* A
192c0 67 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69 6e  ggregate contain
192d0 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78  ing min() or max
192e0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  () */.#define SF
192f0 5f 52 65 63 75 72 73 69 76 65 20 20 20 20 20 20  _Recursive      
19300 20 30 78 32 30 30 30 20 20 2f 2a 20 54 68 65 20   0x2000  /* The 
19310 72 65 63 75 72 73 69 76 65 20 70 61 72 74 20 6f  recursive part o
19320 66 20 61 20 72 65 63 75 72 73 69 76 65 20 43 54  f a recursive CT
19330 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  E */.#define SF_
19340 43 6f 6e 76 65 72 74 65 64 20 20 20 20 20 20 20  Converted       
19350 30 78 34 30 30 30 20 20 2f 2a 20 42 79 20 63 6f  0x4000  /* By co
19360 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c  nvertCompoundSel
19370 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20  ectToSubquery() 
19380 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72  */.../*.** The r
19390 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45  esults of a SELE
193a0 43 54 20 63 61 6e 20 62 65 20 64 69 73 74 72 69  CT can be distri
193b0 62 75 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c  buted in several
193c0 20 77 61 79 73 2c 20 61 73 20 64 65 66 69 6e 65   ways, as define
193d0 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74  d.** by one of t
193e0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
193f0 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54 22 20  ros.  The "SRT" 
19400 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45  prefix means "SE
19410 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54  LECT Result.** T
19420 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ype"..**.**     
19430 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20  SRT_Union       
19440 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73  Store results as
19450 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65 6d 70   a key in a temp
19460 6f 72 61 72 79 20 69 6e 64 65 78 20 0a 2a 2a 20  orary index .** 
19470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19480 20 20 20 20 69 64 65 6e 74 69 66 69 65 64 20 62      identified b
19490 79 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  y pDest->iSDParm
194a0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
194b0 45 78 63 65 70 74 20 20 20 20 20 20 52 65 6d 6f  Except      Remo
194c0 76 65 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20  ve results from 
194d0 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e  the temporary in
194e0 64 65 78 20 70 44 65 73 74 2d 3e 69 53 44 50 61  dex pDest->iSDPa
194f0 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  rm..**.**     SR
19500 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 53 74  T_Exists      St
19510 6f 72 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72  ore a 1 in memor
19520 79 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53  y cell pDest->iS
19530 44 50 61 72 6d 20 69 66 20 74 68 65 20 72 65 73  DParm if the res
19540 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ult.**          
19550 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 69             set i
19560 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a  s not empty..**.
19570 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 63 61  **     SRT_Disca
19580 72 64 20 20 20 20 20 54 68 72 6f 77 20 74 68 65  rd     Throw the
19590 20 72 65 73 75 6c 74 73 20 61 77 61 79 2e 20 20   results away.  
195a0 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
195b0 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20 20  SELECT.**       
195c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
195d0 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
195e0 74 72 69 67 67 65 72 73 20 77 68 6f 73 65 20 6f  triggers whose o
195f0 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73 0a 2a  nly purpose is.*
19600 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19610 20 20 20 20 20 20 74 68 65 20 73 69 64 65 2d 65        the side-e
19620 66 66 65 63 74 73 20 6f 66 20 66 75 6e 63 74 69  ffects of functi
19630 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f  ons..**.** All o
19640 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20  f the above are 
19650 66 72 65 65 20 74 6f 20 69 67 6e 6f 72 65 20 74  free to ignore t
19660 68 65 69 72 20 4f 52 44 45 52 20 42 59 20 63 6c  heir ORDER BY cl
19670 61 75 73 65 2e 20 54 68 6f 73 65 20 74 68 61 74  ause. Those that
19680 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20  .** follow must 
19690 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45 52 20  honor the ORDER 
196a0 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a  BY clause..**.**
196b0 20 20 20 20 20 53 52 54 5f 4f 75 74 70 75 74 20       SRT_Output 
196c0 20 20 20 20 20 47 65 6e 65 72 61 74 65 20 61 20       Generate a 
196d0 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 20 28 75  row of output (u
196e0 73 69 6e 67 20 74 68 65 20 4f 50 5f 52 65 73 75  sing the OP_Resu
196f0 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20  ltRow.**        
19700 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 63               opc
19710 6f 64 65 29 20 66 6f 72 20 65 61 63 68 20 72 6f  ode) for each ro
19720 77 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20  w in the result 
19730 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  set..**.**     S
19740 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 4f  RT_Mem         O
19750 6e 6c 79 20 76 61 6c 69 64 20 69 66 20 74 68 65  nly valid if the
19760 20 72 65 73 75 6c 74 20 69 73 20 61 20 73 69 6e   result is a sin
19770 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20  gle column..**  
19780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19790 20 20 20 53 74 6f 72 65 20 74 68 65 20 66 69 72     Store the fir
197a0 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  st column of the
197b0 20 66 69 72 73 74 20 72 65 73 75 6c 74 20 72 6f   first result ro
197c0 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  w.**            
197d0 20 20 20 20 20 20 20 20 20 69 6e 20 72 65 67 69           in regi
197e0 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50  ster pDest->iSDP
197f0 61 72 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e  arm then abandon
19800 20 74 68 65 20 72 65 73 74 0a 2a 2a 20 20 20 20   the rest.**    
19810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19820 20 6f 66 20 74 68 65 20 71 75 65 72 79 2e 20 20   of the query.  
19830 54 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e  This destination
19840 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54 20   implies "LIMIT 
19850 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  1"..**.**     SR
19860 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 54 68  T_Set         Th
19870 65 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65  e result must be
19880 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
19890 2e 20 20 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a  .  Store each.**
198a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198b0 20 20 20 20 20 72 6f 77 20 6f 66 20 72 65 73 75       row of resu
198c0 6c 74 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e  lt as the key in
198d0 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
198e0 44 50 61 72 6d 2e 20 0a 2a 2a 20 20 20 20 20 20  DParm. .**      
198f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
19900 70 70 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74  pply the affinit
19910 79 20 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74  y pDest->affSdst
19920 20 62 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a   before storing.
19930 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19940 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20         results. 
19950 20 55 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   Used to impleme
19960 6e 74 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e  nt "IN (SELECT .
19970 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ..)"..**.**     
19980 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20  SRT_EphemTab    
19990 43 72 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72  Create an tempor
199a0 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
199b0 3e 69 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f  >iSDParm and sto
199c0 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  re.**           
199d0 20 20 20 20 20 20 20 20 20 20 74 68 65 20 72 65            the re
199e0 73 75 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20  sult there. The 
199f0 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f  cursor is left o
19a00 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20  pen after.**    
19a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a20 20 72 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69   returning.  Thi
19a30 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61  s is like SRT_Ta
19a40 62 6c 65 20 65 78 63 65 70 74 20 74 68 61 74 0a  ble except that.
19a50 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19a60 20 20 20 20 20 20 20 74 68 69 73 20 64 65 73 74         this dest
19a70 69 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f  ination uses OP_
19a80 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f  OpenEphemeral to
19a90 20 63 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20   create.**      
19aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
19ab0 68 65 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a  he table first..
19ac0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f  **.**     SRT_Co
19ad0 72 6f 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61  routine   Genera
19ae0 74 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20  te a co-routine 
19af0 74 68 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e  that returns a n
19b00 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20  ew row of.**    
19b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b20 20 72 65 73 75 6c 74 73 20 65 61 63 68 20 74 69   results each ti
19b30 6d 65 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64  me it is invoked
19b40 2e 20 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69  .  The entry poi
19b50 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  nt.**           
19b60 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65            of the
19b70 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73   co-routine is s
19b80 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
19b90 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  r pDest->iSDParm
19ba0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19bb0 20 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20          and the 
19bc0 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74  result row is st
19bd0 6f 72 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e  ored in pDest->n
19be0 44 65 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a  Dest registers.*
19bf0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19c00 20 20 20 20 20 20 73 74 61 72 74 69 6e 67 20 77        starting w
19c10 69 74 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74  ith pDest->iSdst
19c20 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
19c30 54 61 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72  Table       Stor
19c40 65 20 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d  e results in tem
19c50 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
19c60 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
19c70 20 20 20 20 53 52 54 5f 46 69 66 6f 20 20 20 20      SRT_Fifo    
19c80 20 20 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65      This is like
19c90 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78   SRT_EphemTab ex
19ca0 63 65 70 74 20 74 68 61 74 20 74 68 65 20 74 61  cept that the ta
19cb0 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ble.**          
19cc0 20 20 20 20 20 20 20 20 20 20 20 69 73 20 61 73             is as
19cd0 73 75 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79  sumed to already
19ce0 20 62 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46   be open.  SRT_F
19cf0 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20 20  ifo has.**      
19d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
19d10 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 72  he additional pr
19d20 6f 70 65 72 74 79 20 6f 66 20 62 65 69 6e 67 20  operty of being 
19d30 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a  able to ignore.*
19d40 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19d50 20 20 20 20 20 20 74 68 65 20 4f 52 44 45 52 20        the ORDER 
19d60 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a  BY clause..**.**
19d70 20 20 20 20 20 53 52 54 5f 44 69 73 74 46 69 66       SRT_DistFif
19d80 6f 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c  o    Store resul
19d90 74 73 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72  ts in a temporar
19da0 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
19db0 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20  SDParm..**      
19dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
19dd0 75 74 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70  ut also use temp
19de0 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
19df0 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a  t->iSDParm+1 as.
19e00 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19e10 20 20 20 20 20 20 20 61 20 72 65 63 6f 72 64 20         a record 
19e20 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73  of all prior res
19e30 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20  ults and ignore 
19e40 61 6e 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a  any duplicate.**
19e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e60 20 20 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65       rows.  Name
19e70 20 6d 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e   means:  "Distin
19e80 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20  ct Fifo"..**.** 
19e90 20 20 20 20 53 52 54 5f 51 75 65 75 65 20 20 20      SRT_Queue   
19ea0 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
19eb0 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75  s in priority qu
19ec0 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  eue pDest->iSDPa
19ed0 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20  rm (really.**   
19ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ef0 20 20 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70    an index).  Ap
19f00 70 65 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20  pend a sequence 
19f10 6e 75 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61  number so that a
19f20 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20  ll entries.**   
19f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f40 20 20 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a    are distinct..
19f50 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
19f60 73 74 51 75 65 75 65 20 20 20 53 74 6f 72 65 20  stQueue   Store 
19f70 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72  results in prior
19f80 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d  ity queue pDest-
19f90 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66  >iSDParm only if
19fa0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19fb0 20 20 20 20 20 20 20 20 74 68 65 20 73 61 6d 65          the same
19fc0 20 72 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65   record has neve
19fd0 72 20 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65  r been stored be
19fe0 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20  fore.  The.**   
19ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a000 20 20 69 6e 64 65 78 20 61 74 20 70 44 65 73 74    index at pDest
1a010 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64  ->iSDParm+1 hold
1a020 20 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65   all prior store
1a030 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  s..*/.#define SR
1a040 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31  T_Union        1
1a050 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1a060 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20  t as keys in an 
1a070 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
1a080 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20   SRT_Except     
1a090 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72    2  /* Remove r
1a0a0 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49  esult from a UNI
1a0b0 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ON index */.#def
1a0c0 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20 20  ine SRT_Exists  
1a0d0 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65       3  /* Store
1a0e0 20 31 20 69 66 20 74 68 65 20 72 65 73 75 6c 74   1 if the result
1a0f0 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f   is not empty */
1a100 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
1a110 63 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20  card      4  /* 
1a120 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20  Do not save the 
1a130 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65  results anywhere
1a140 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1a150 46 69 66 6f 20 20 20 20 20 20 20 20 20 35 20 20  Fifo         5  
1a160 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1a170 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20  as data with an 
1a180 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20  automatic rowid 
1a190 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44  */.#define SRT_D
1a1a0 69 73 74 46 69 66 6f 20 20 20 20 20 36 20 20 2f  istFifo     6  /
1a1b0 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c  * Like SRT_Fifo,
1a1c0 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75   but unique resu
1a1d0 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  lts only */.#def
1a1e0 69 6e 65 20 53 52 54 5f 51 75 65 75 65 20 20 20  ine SRT_Queue   
1a1f0 20 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65       7  /* Store
1a200 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 71 75   result in an qu
1a210 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  eue */.#define S
1a220 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 20  RT_DistQueue    
1a230 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51  8  /* Like SRT_Q
1a240 75 65 75 65 2c 20 62 75 74 20 75 6e 69 71 75 65  ueue, but unique
1a250 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f   results only */
1a260 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42  ../* The ORDER B
1a270 59 20 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f  Y clause is igno
1a280 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74  red for all of t
1a290 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66  he above */.#def
1a2a0 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64  ine IgnorableOrd
1a2b0 65 72 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65  erby(X) ((X->eDe
1a2c0 73 74 29 3c 3d 53 52 54 5f 44 69 73 74 51 75 65  st)<=SRT_DistQue
1a2d0 75 65 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54  ue)..#define SRT
1a2e0 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20 39 20  _Output       9 
1a2f0 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20   /* Output each 
1a300 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f  row of result */
1a310 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d  .#define SRT_Mem
1a320 20 20 20 20 20 20 20 20 20 31 30 20 20 2f 2a 20           10  /* 
1a330 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
1a340 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f  a memory cell */
1a350 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74  .#define SRT_Set
1a360 20 20 20 20 20 20 20 20 20 31 31 20 20 2f 2a 20           11  /* 
1a370 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73  Store results as
1a380 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65   keys in an inde
1a390 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
1a3a0 5f 45 70 68 65 6d 54 61 62 20 20 20 20 31 32 20  _EphemTab    12 
1a3b0 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73   /* Create trans
1a3c0 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f  ient tab and sto
1a3d0 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c  re like SRT_Tabl
1a3e0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
1a3f0 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 33 20  _Coroutine   13 
1a400 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73   /* Generate a s
1a410 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73  ingle row of res
1a420 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ult */.#define S
1a430 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31  RT_Table       1
1a440 34 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  4  /* Store resu
1a450 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20  lt as data with 
1a460 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77  an automatic row
1a470 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  id */../*.** An 
1a480 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
1a490 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62 65   object describe
1a4a0 73 20 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f  s where to put o
1a4b0 66 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  f the results of
1a4c0 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61  .** a SELECT sta
1a4d0 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  tement..*/.struc
1a4e0 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20  t SelectDest {. 
1a4f0 20 75 38 20 65 44 65 73 74 3b 20 20 20 20 20 20   u8 eDest;      
1a500 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20        /* How to 
1a510 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72  dispose of the r
1a520 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53  esults.  On of S
1a530 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20  RT_* above. */. 
1a540 20 63 68 61 72 20 61 66 66 53 64 73 74 3b 20 20   char affSdst;  
1a550 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74        /* Affinit
1a560 79 20 75 73 65 64 20 77 68 65 6e 20 65 44 65 73  y used when eDes
1a570 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20  t==SRT_Set */.  
1a580 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20  int iSDParm;    
1a590 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65       /* A parame
1a5a0 74 65 72 20 75 73 65 64 20 62 79 20 74 68 65 20  ter used by the 
1a5b0 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d  eDest disposal m
1a5c0 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69  ethod */.  int i
1a5d0 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Sdst;           
1a5e0 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72  /* Base register
1a5f0 20 77 68 65 72 65 20 72 65 73 75 6c 74 73 20 61   where results a
1a600 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20  re written */.  
1a610 69 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20  int nSdst;      
1a620 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1a630 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f  f registers allo
1a640 63 61 74 65 64 20 2a 2f 0a 20 20 45 78 70 72 4c  cated */.  ExprL
1a650 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20  ist *pOrderBy;  
1a660 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66  /* Key columns f
1a670 6f 72 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64  or SRT_Queue and
1a680 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a   SRT_DistQueue *
1a690 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69  /.};../*.** Duri
1a6a0 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69  ng code generati
1a6b0 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73  on of statements
1a6c0 20 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73   that do inserts
1a6d0 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d   into AUTOINCREM
1a6e0 45 4e 54 20 0a 2a 2a 20 74 61 62 6c 65 73 2c 20  ENT .** tables, 
1a6f0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
1a700 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74  formation is att
1a710 61 63 68 65 64 20 74 6f 20 74 68 65 20 54 61 62  ached to the Tab
1a720 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a  le.u.autoInc.p.*
1a730 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63  * pointer of eac
1a740 68 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  h autoincrement 
1a750 74 61 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20  table to record 
1a760 73 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d  some side inform
1a770 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68  ation that.** th
1a780 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
1a790 20 6e 65 65 64 73 2e 20 20 57 65 20 68 61 76 65   needs.  We have
1a7a0 20 74 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62   to keep per-tab
1a7b0 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  le autoincrement
1a7c0 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** information 
1a7d0 69 6e 20 63 61 73 65 20 69 6e 73 65 72 74 73 20  in case inserts 
1a7e0 61 72 65 20 64 6f 77 6e 20 77 69 74 68 69 6e 20  are down within 
1a7f0 74 72 69 67 67 65 72 73 2e 20 20 54 72 69 67 67  triggers.  Trigg
1a800 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f  ers do not.** no
1a810 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74  rmally coordinat
1a820 65 20 74 68 65 69 72 20 61 63 74 69 76 69 74 69  e their activiti
1a830 65 73 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65  es, but we do ne
1a840 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65  ed to coordinate
1a850 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20   the.** loading 
1a860 61 6e 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75  and saving of au
1a870 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f  toincrement info
1a880 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
1a890 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b  ct AutoincInfo {
1a8a0 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a  .  AutoincInfo *
1a8b0 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74  pNext;   /* Next
1a8c0 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61   info block in a
1a8d0 20 6c 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c   list of them al
1a8e0 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  l */.  Table *pT
1a8f0 61 62 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ab;          /* 
1a900 54 61 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20  Table this info 
1a910 62 6c 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20  block refers to 
1a920 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20  */.  int iDb;   
1a930 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
1a940 64 65 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61  dex in sqlite3.a
1a950 44 62 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65  Db[] of database
1a960 20 68 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f   holding pTab */
1a970 0a 20 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20  .  int regCtr;  
1a980 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
1a990 72 79 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64  ry register hold
1a9a0 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f  ing the rowid co
1a9b0 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  unter */.};../*.
1a9c0 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 63  ** Size of the c
1a9d0 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23  olumn cache.*/.#
1a9e0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f  ifndef SQLITE_N_
1a9f0 43 4f 4c 43 41 43 48 45 0a 23 20 64 65 66 69 6e  COLCACHE.# defin
1aa00 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41  e SQLITE_N_COLCA
1aa10 43 48 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f  CHE 10.#endif../
1aa20 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e  *.** At least on
1aa30 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  e instance of th
1aa40 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
1aa50 63 74 75 72 65 20 69 73 20 63 72 65 61 74 65 64  cture is created
1aa60 20 66 6f 72 20 65 61 63 68 20 0a 2a 2a 20 74 72   for each .** tr
1aa70 69 67 67 65 72 20 74 68 61 74 20 6d 61 79 20 62  igger that may b
1aa80 65 20 66 69 72 65 64 20 77 68 69 6c 65 20 70 61  e fired while pa
1aa90 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c  rsing an INSERT,
1aaa0 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54   UPDATE or DELET
1aab0 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20  E.** statement. 
1aac0 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73  All such objects
1aad0 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74   are stored in t
1aae0 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68  he linked list h
1aaf0 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73  eaded at.** Pars
1ab00 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 61 6e  e.pTriggerPrg an
1ab10 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73  d deleted once s
1ab20 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61  tatement compila
1ab30 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a  tion has been.**
1ab40 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a   completed..**.*
1ab50 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f  * A Vdbe sub-pro
1ab60 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d  gram that implem
1ab70 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e  ents the body an
1ab80 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66  d WHEN clause of
1ab90 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67   trigger.** Trig
1aba0 67 65 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c  gerPrg.pTrigger,
1abb0 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61   assuming a defa
1abc0 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ult ON CONFLICT 
1abd0 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69  clause of.** Tri
1abe0 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20  ggerPrg.orconf, 
1abf0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
1ac00 20 54 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f   TriggerPrg.pPro
1ac10 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a  gram variable..*
1ac20 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54 72 69  * The Parse.pTri
1ac30 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76  ggerPrg list nev
1ac40 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20  er contains two 
1ac50 65 6e 74 72 69 65 73 20 77 69 74 68 20 74 68 65  entries with the
1ac60 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20   same.** values 
1ac70 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67 67 65  for both pTrigge
1ac80 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a  r and orconf..**
1ac90 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65 72 50  .** The TriggerP
1aca0 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76  rg.aColmask[0] v
1acb0 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
1acc0 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e  o a mask of old.
1acd0 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63  * columns.** acc
1ace0 65 73 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f  essed (or set to
1acf0 20 30 20 66 6f 72 20 74 72 69 67 67 65 72 73 20   0 for triggers 
1ad00 66 69 72 65 64 20 61 73 20 61 20 72 65 73 75 6c  fired as a resul
1ad10 74 20 6f 66 20 49 4e 53 45 52 54 20 0a 2a 2a 20  t of INSERT .** 
1ad20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d  statements). Sim
1ad30 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67  ilarly, the Trig
1ad40 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b  gerPrg.aColmask[
1ad50 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  1] variable is s
1ad60 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20  et to.** a mask 
1ad70 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73  of new.* columns
1ad80 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f   used by the pro
1ad90 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  gram..*/.struct 
1ada0 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54  TriggerPrg {.  T
1adb0 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72  rigger *pTrigger
1adc0 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65  ;      /* Trigge
1add0 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77  r this program w
1ade0 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f  as coded from */
1adf0 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70  .  TriggerPrg *p
1ae00 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Next;      /* Ne
1ae10 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73  xt entry in Pars
1ae20 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69  e.pTriggerPrg li
1ae30 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72  st */.  SubProgr
1ae40 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20  am *pProgram;   
1ae50 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65  /* Program imple
1ae60 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72  menting pTrigger
1ae70 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74  /orconf */.  int
1ae80 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20   orconf;        
1ae90 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
1aea0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69  ON CONFLICT poli
1aeb0 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c  cy */.  u32 aCol
1aec0 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20  mask[2];        
1aed0 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e  /* Masks of old.
1aee0 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73  *, new.* columns
1aef0 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a   accessed */.};.
1af00 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61  ./*.** The yDbMa
1af10 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f 72 20  sk datatype for 
1af20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61  the bitmask of a
1af30 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
1af40 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51  bases..*/.#if SQ
1af50 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
1af60 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66 20 75  D>30.  typedef u
1af70 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79 44 62  nsigned char yDb
1af80 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41 58  Mask[(SQLITE_MAX
1af90 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38 5d 3b  _ATTACHED+9)/8];
1afa0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1afb0 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28  Test(M,I)    (((
1afc0 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28 28  M)[(I)/8]&(1<<((
1afd0 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20 64 65  I)&7)))!=0).# de
1afe0 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28  fine DbMaskZero(
1aff0 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74 28 28  M)      memset((
1b000 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29 0a  M),0,sizeof(M)).
1b010 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53  # define DbMaskS
1b020 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 5b  et(M,I)     (M)[
1b030 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49 29  (I)/8]|=(1<<((I)
1b040 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62  &7)).# define Db
1b050 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20  MaskAllZero(M)  
1b060 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c   sqlite3DbMaskAl
1b070 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66 69 6e  lZero(M).# defin
1b080 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28  e DbMaskNonZero(
1b090 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44 62 4d  M)   (sqlite3DbM
1b0a0 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30  askAllZero(M)==0
1b0b0 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65  ).#else.  typede
1b0c0 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79  f unsigned int y
1b0d0 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e 65  DbMask;.# define
1b0e0 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29   DbMaskTest(M,I)
1b0f0 20 20 20 20 28 28 28 4d 29 26 28 28 28 79 44 62      (((M)&(((yDb
1b100 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29 21 3d  Mask)1)<<(I)))!=
1b110 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  0).# define DbMa
1b120 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 28  skZero(M)      (
1b130 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62  M)=0.# define Db
1b140 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20  MaskSet(M,I)    
1b150 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73 6b   (M)|=(((yDbMask
1b160 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65 66 69  )1)<<(I)).# defi
1b170 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  ne DbMaskAllZero
1b180 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20 64  (M)   (M)==0.# d
1b190 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a  efine DbMaskNonZ
1b1a0 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30 0a  ero(M)   (M)!=0.
1b1b0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
1b1c0 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f 6e 74   SQL parser cont
1b1d0 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f 66 20  ext.  A copy of 
1b1e0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
1b1f0 73 20 70 61 73 73 65 64 20 74 68 72 6f 75 67 68  s passed through
1b200 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72 20 61  .** the parser a
1b210 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c  nd down into all
1b220 20 74 68 65 20 70 61 72 73 65 72 20 61 63 74 69   the parser acti
1b230 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72  on routine in or
1b240 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20  der to.** carry 
1b250 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69  around informati
1b260 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f 62 61  on that is globa
1b270 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20  l to the entire 
1b280 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  parse..**.** The
1b290 20 73 74 72 75 63 74 75 72 65 20 69 73 20 64 69   structure is di
1b2a0 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f 20 70  vided into two p
1b2b0 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68 65 20  arts.  When the 
1b2c0 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64 65 0a  parser and code.
1b2d0 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61 6c 6c  ** generate call
1b2e0 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65 63 75   themselves recu
1b2f0 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66 69 72  rsively, the fir
1b300 73 74 20 70 61 72 74 20 6f 66 20 74 68 65 20 73  st part of the s
1b310 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 63  tructure.** is c
1b320 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68 65 20  onstant but the 
1b330 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73 20 72  second part is r
1b340 65 73 65 74 20 61 74 20 74 68 65 20 62 65 67 69  eset at the begi
1b350 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66  nning and end of
1b360 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69  .** each recursi
1b370 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54  on..**.** The nT
1b380 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61  ableLock and aTa
1b390 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65  bleLock variable
1b3a0 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20  s are only used 
1b3b0 69 66 20 74 68 65 20 73 68 61 72 65 64 2d 63 61  if the shared-ca
1b3c0 63 68 65 20 0a 2a 2a 20 66 65 61 74 75 72 65 20  che .** feature 
1b3d0 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20 73  is enabled (if s
1b3e0 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73 65  qlite3Tsd()->use
1b3f0 53 68 61 72 65 64 44 61 74 61 20 69 73 20 74 72  SharedData is tr
1b400 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a  ue). They are.**
1b410 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1b420 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65 2d  he set of table-
1b430 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20 62  locks required b
1b440 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  y the statement 
1b450 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65  being.** compile
1b460 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69  d. Function sqli
1b470 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69  te3TableLock() i
1b480 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 65 6e  s used to add en
1b490 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20  tries to the.** 
1b4a0 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  list..*/.struct 
1b4b0 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74 65  Parse {.  sqlite
1b4c0 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f  3 *db;         /
1b4d0 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * The main datab
1b4e0 61 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f  ase structure */
1b4f0 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67  .  char *zErrMsg
1b500 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 72  ;       /* An er
1b510 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20  ror message */. 
1b520 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20   Vdbe *pVdbe;   
1b530 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69        /* An engi
1b540 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e 67  ne for executing
1b550 20 64 61 74 61 62 61 73 65 20 62 79 74 65 63 6f   database byteco
1b560 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  de */.  int rc; 
1b570 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b580 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d  Return code from
1b590 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20   execution */.  
1b5a0 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20  u8 colNamesSet; 
1b5b0 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66 74       /* TRUE aft
1b5c0 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65  er OP_ColumnName
1b5d0 20 68 61 73 20 62 65 65 6e 20 69 73 73 75 65 64   has been issued
1b5e0 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20 75   to pVdbe */.  u
1b5f0 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20 20  8 checkSchema;  
1b600 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73 63      /* Causes sc
1b610 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65 63  hema cookie chec
1b620 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  k after an error
1b630 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64 3b   */.  u8 nested;
1b640 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1b650 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63  mber of nested c
1b660 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72 73  alls to the pars
1b670 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  er/code generato
1b680 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52  r */.  u8 nTempR
1b690 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  eg;         /* N
1b6a0 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72 61  umber of tempora
1b6b0 72 79 20 72 65 67 69 73 74 65 72 73 20 69 6e 20  ry registers in 
1b6c0 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20  aTempReg[] */.  
1b6d0 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65 3b  u8 isMultiWrite;
1b6e0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1b6f0 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f  statement may mo
1b700 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74  dify/insert mult
1b710 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75  iple rows */.  u
1b720 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20 20  8 mayAbort;     
1b730 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73      /* True if s
1b740 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68 72  tatement may thr
1b750 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65  ow an ABORT exce
1b760 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61  ption */.  u8 ha
1b770 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20  sCompound;      
1b780 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b  /* Need to invok
1b790 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e  e convertCompoun
1b7a0 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72  dSelectToSubquer
1b7b0 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f  y() */.  u8 okCo
1b7c0 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a  nstFactor;    /*
1b7d0 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f 75   OK to factor ou
1b7e0 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20  t constants */. 
1b7f0 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38 5d   int aTempReg[8]
1b800 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67  ;     /* Holding
1b810 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72   area for tempor
1b820 61 72 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f  ary registers */
1b830 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67  .  int nRangeReg
1b840 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20  ;       /* Size 
1b850 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  of the temporary
1b860 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20   register block 
1b870 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52  */.  int iRangeR
1b880 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72  eg;       /* Fir
1b890 73 74 20 72 65 67 69 73 74 65 72 20 69 6e 20 74  st register in t
1b8a0 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
1b8b0 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74  r block */.  int
1b8c0 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20   nErr;          
1b8d0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
1b8e0 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20  rrors seen */.  
1b8f0 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20  int nTab;       
1b900 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1b910 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c  f previously all
1b920 6f 63 61 74 65 64 20 56 44 42 45 20 63 75 72 73  ocated VDBE curs
1b930 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65  ors */.  int nMe
1b940 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
1b950 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   Number of memor
1b960 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20  y cells used so 
1b970 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65  far */.  int nSe
1b980 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
1b990 20 4e 75 6d 62 65 72 20 6f 66 20 73 65 74 73 20   Number of sets 
1b9a0 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
1b9b0 20 69 6e 74 20 6e 4f 6e 63 65 3b 20 20 20 20 20   int nOnce;     
1b9c0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b9d0 6f 66 20 4f 50 5f 4f 6e 63 65 20 69 6e 73 74 72  of OP_Once instr
1b9e0 75 63 74 69 6f 6e 73 20 73 6f 20 66 61 72 20 2a  uctions so far *
1b9f0 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63  /.  int nOpAlloc
1ba00 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
1ba10 65 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f  er of slots allo
1ba20 63 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61  cated for Vdbe.a
1ba30 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 46  Op[] */.  int iF
1ba40 69 78 65 64 4f 70 3b 20 20 20 20 20 20 20 20 2f  ixedOp;        /
1ba50 2a 20 4e 65 76 65 72 20 62 61 63 6b 20 6f 75 74  * Never back out
1ba60 20 6f 70 63 6f 64 65 73 20 69 46 69 78 65 64 4f   opcodes iFixedO
1ba70 70 2d 31 20 6f 72 20 65 61 72 6c 69 65 72 20 2a  p-1 or earlier *
1ba80 2f 0a 20 20 69 6e 74 20 63 6b 42 61 73 65 3b 20  /.  int ckBase; 
1ba90 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65           /* Base
1baa0 20 72 65 67 69 73 74 65 72 20 6f 66 20 64 61 74   register of dat
1bab0 61 20 64 75 72 69 6e 67 20 63 68 65 63 6b 20 63  a during check c
1bac0 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20  onstraints */.  
1bad0 69 6e 74 20 69 50 61 72 74 49 64 78 54 61 62 3b  int iPartIdxTab;
1bae0 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f       /* Table co
1baf0 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 61  rresponding to a
1bb00 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20 2a   partial index *
1bb10 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65 4c 65  /.  int iCacheLe
1bb20 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43  vel;     /* ColC
1bb30 61 63 68 65 20 76 61 6c 69 64 20 77 68 65 6e 20  ache valid when 
1bb40 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76  aColCache[].iLev
1bb50 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c 20  el<=iCacheLevel 
1bb60 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65 43  */.  int iCacheC
1bb70 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 75  nt;       /* Cou
1bb80 6e 74 65 72 20 75 73 65 64 20 74 6f 20 67 65 6e  nter used to gen
1bb90 65 72 61 74 65 20 61 43 6f 6c 43 61 63 68 65 5b  erate aColCache[
1bba0 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a  ].lru values */.
1bbb0 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20    int nLabel;   
1bbc0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1bbd0 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20   of labels used 
1bbe0 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c  */.  int *aLabel
1bbf0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61  ;         /* Spa
1bc00 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c  ce to hold the l
1bc10 61 62 65 6c 73 20 2a 2f 0a 20 20 73 74 72 75 63  abels */.  struc
1bc20 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20  t yColCache {.  
1bc30 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20    int iTable;   
1bc40 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
1bc50 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a   cursor number *
1bc60 2f 0a 20 20 20 20 69 31 36 20 69 43 6f 6c 75 6d  /.    i16 iColum
1bc70 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  n;          /* T
1bc80 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62  able column numb
1bc90 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d  er */.    u8 tem
1bca0 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20  pReg;           
1bcb0 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74 65 6d  /* iReg is a tem
1bcc0 70 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  p register that 
1bcd0 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72 65 65  needs to be free
1bce0 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65  d */.    int iLe
1bcf0 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  vel;           /
1bd00 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20  * Nesting level 
1bd10 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b  */.    int iReg;
1bd20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1bd30 52 65 67 20 77 69 74 68 20 76 61 6c 75 65 20 6f  Reg with value o
1bd40 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30  f this column. 0
1bd50 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a   means none. */.
1bd60 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20 20 20      int lru;    
1bd70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 61            /* Lea
1bd80 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73 65 64  st recently used
1bd90 20 65 6e 74 72 79 20 68 61 73 20 74 68 65 20 73   entry has the s
1bda0 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f  mallest value */
1bdb0 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53  .  } aColCache[S
1bdc0 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45  QLITE_N_COLCACHE
1bdd0 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65  ];  /* One for e
1bde0 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65  ach column cache
1bdf0 20 65 6e 74 72 79 20 2a 2f 0a 20 20 45 78 70 72   entry */.  Expr
1be00 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78 70 72  List *pConstExpr
1be10 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70  ;/* Constant exp
1be20 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f  ressions */.  To
1be30 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61  ken constraintNa
1be40 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  me;/* Name of th
1be50 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72  e constraint cur
1be60 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72  rently being par
1be70 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b  sed */.  yDbMask
1be80 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a   writeMask;   /*
1be90 20 53 74 61 72 74 20 61 20 77 72 69 74 65 20 74   Start a write t
1bea0 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68  ransaction on th
1beb0 65 73 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f  ese databases */
1bec0 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69  .  yDbMask cooki
1bed0 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61  eMask;  /* Bitma
1bee0 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72  sk of schema ver
1bef0 69 66 69 65 64 20 64 61 74 61 62 61 73 65 73 20  ified databases 
1bf00 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56  */.  int cookieV
1bf10 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f  alue[SQLITE_MAX_
1bf20 41 54 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a  ATTACHED+2];  /*
1bf30 20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69   Values of cooki
1bf40 65 73 20 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a  es to verify */.
1bf50 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20    int regRowid; 
1bf60 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
1bf70 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64  er holding rowid
1bf80 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45   of CREATE TABLE
1bf90 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20   entry */.  int 
1bfa0 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20  regRoot;        
1bfb0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
1bfc0 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e  ding root page n
1bfd0 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62  umber for new ob
1bfe0 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  jects */.  int n
1bff0 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20 20  MaxArg;         
1c000 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73 73  /* Max args pass
1c010 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74  ed to user funct
1c020 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72  ion by sub-progr
1c030 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54  am */.#if SELECT
1c040 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20  TRACE_ENABLED.  
1c050 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20 20 20  int nSelect;    
1c060 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1c070 66 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  f SELECT stateme
1c080 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e  nts seen */.  in
1c090 74 20 6e 53 65 6c 65 63 74 49 6e 64 65 6e 74 3b  t nSelectIndent;
1c0a0 20 20 20 2f 2a 20 48 6f 77 20 66 61 72 20 74 6f     /* How far to
1c0b0 20 69 6e 64 65 6e 74 20 53 45 4c 45 43 54 54 52   indent SELECTTR
1c0c0 41 43 45 28 29 20 6f 75 74 70 75 74 20 2a 2f 0a  ACE() output */.
1c0d0 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
1c0e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
1c0f0 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54  D_CACHE.  int nT
1c100 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20  ableLock;       
1c110 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f   /* Number of lo
1c120 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63  cks in aTableLoc
1c130 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b  k */.  TableLock
1c140 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a   *aTableLock; /*
1c150 20 52 65 71 75 69 72 65 64 20 74 61 62 6c 65 20   Required table 
1c160 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64  locks for shared
1c170 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23  -cache mode */.#
1c180 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49  endif.  AutoincI
1c190 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20  nfo *pAinc;  /* 
1c1a0 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
1c1b0 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  t AUTOINCREMENT 
1c1c0 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20 20 2f  counters */..  /
1c1d0 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  * Information us
1c1e0 65 64 20 77 68 69 6c 65 20 63 6f 64 69 6e 67 20  ed while coding 
1c1f0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73  trigger programs
1c200 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54  . */.  Parse *pT
1c210 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50  oplevel;    /* P
1c220 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20 66  arse structure f
1c230 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20  or main program 
1c240 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54  (or NULL) */.  T
1c250 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61  able *pTriggerTa
1c260 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69  b;  /* Table tri
1c270 67 67 65 72 73 20 61 72 65 20 62 65 69 6e 67 20  ggers are being 
1c280 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69  coded for */.  i
1c290 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20 20 20  nt addrCrTab;   
1c2a0 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f      /* Address o
1c2b0 66 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  f OP_CreateTable
1c2c0 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45 41 54   opcode on CREAT
1c2d0 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75 33 32  E TABLE */.  u32
1c2e0 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20   nQueryLoop;    
1c2f0 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20    /* Est number 
1c300 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66  of iterations of
1c310 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67   a query (10*log
1c320 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f  2(N)) */.  u32 o
1c330 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  ldmask;         
1c340 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a  /* Mask of old.*
1c350 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e   columns referen
1c360 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77  ced */.  u32 new
1c370 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a  mask;         /*
1c380 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63   Mask of new.* c
1c390 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65  olumns reference
1c3a0 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67  d */.  u8 eTrigg
1c3b0 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54  erOp;       /* T
1c3c0 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
1c3d0 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45  ERT or TK_DELETE
1c3e0 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66   */.  u8 eOrconf
1c3f0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65  ;          /* De
1c400 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
1c410 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69  T policy for tri
1c420 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20  gger steps */.  
1c430 75 38 20 64 69 73 61 62 6c 65 54 72 69 67 67 65  u8 disableTrigge
1c440 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  rs;  /* True to 
1c450 64 69 73 61 62 6c 65 20 74 72 69 67 67 65 72 73  disable triggers
1c460 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a   */..  /********
1c470 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c480 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c490 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c4a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c4b0 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20 63  .  ** Above is c
1c4c0 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20  onstant between 
1c4d0 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c  recursions.  Bel
1c4e0 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66 6f  ow is reset befo
1c4f0 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a  re and after.  *
1c500 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e  * each recursion
1c510 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20  .  The boundary 
1c520 62 65 74 77 65 65 6e 20 74 68 65 73 65 20 74 77  between these tw
1c530 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65 74  o regions is det
1c540 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69  ermined.  ** usi
1c550 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  ng offsetof(Pars
1c560 65 2c 6e 56 61 72 29 20 73 6f 20 74 68 65 20 6e  e,nVar) so the n
1c570 56 61 72 20 66 69 65 6c 64 20 6d 75 73 74 20 62  Var field must b
1c580 65 20 74 68 65 20 66 69 72 73 74 20 66 69 65 6c  e the first fiel
1c590 64 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20 72 65  d.  ** in the re
1c5a0 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a  cursive region..
1c5b0 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
1c5c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c5d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c5e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c5f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69  **********/..  i
1c600 6e 74 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20  nt nVar;        
1c610 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1c620 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62  er of '?' variab
1c630 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20  les seen in the 
1c640 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  SQL so far */.  
1c650 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20 20  int nzVar;      
1c660 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1c670 62 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  ber of available
1c680 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b   slots in azVar[
1c690 5d 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72  ] */.  u8 iPkSor
1c6a0 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
1c6b0 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43 20   /* ASC or DESC 
1c6c0 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d  for INTEGER PRIM
1c6d0 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20  ARY KEY */.  u8 
1c6e0 62 46 72 65 65 57 69 74 68 3b 20 20 20 20 20 20  bFreeWith;      
1c6f0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
1c700 66 20 70 57 69 74 68 20 73 68 6f 75 6c 64 20 62  f pWith should b
1c710 65 20 66 72 65 65 64 20 77 69 74 68 20 70 61 72  e freed with par
1c720 73 65 72 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c  ser */.  u8 expl
1c730 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ain;            
1c740 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
1c750 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69  e EXPLAIN flag i
1c760 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71  s found on the q
1c770 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20  uery */.#ifndef 
1c780 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
1c790 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65  UALTABLE.  u8 de
1c7a0 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20  clareVtab;      
1c7b0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1c7c0 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64  inside sqlite3_d
1c7d0 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f  eclare_vtab() */
1c7e0 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b  .  int nVtabLock
1c7f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1c800 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61  Number of virtua
1c810 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b  l tables to lock
1c820 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
1c830 20 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20   nAlias;        
1c840 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1c850 20 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73 75   of aliased resu
1c860 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a  lt set columns *
1c870 2f 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b  /.  int nHeight;
1c880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1c890 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65   Expression tree
1c8a0 20 68 65 69 67 68 74 20 6f 66 20 63 75 72 72 65   height of curre
1c8b0 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f  nt sub-select */
1c8c0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1c8d0 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69  OMIT_EXPLAIN.  i
1c8e0 6e 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20  nt iSelectId;   
1c8f0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f           /* ID o
1c900 66 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74  f current select
1c910 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74   for EXPLAIN out
1c920 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65  put */.  int iNe
1c930 78 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20  xtSelectId;     
1c940 20 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c     /* Next avail
1c950 61 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66  able select ID f
1c960 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75  or EXPLAIN outpu
1c970 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68  t */.#endif.  ch
1c980 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20  ar **azVar;     
1c990 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
1c9a0 65 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20  ers to names of 
1c9b0 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20  parameters */.  
1c9c0 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65  Vdbe *pReprepare
1c9d0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20  ;         /* VM 
1c9e0 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64  being reprepared
1c9f0 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61   (sqlite3Reprepa
1ca00 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74  re()) */.  const
1ca10 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20   char *zTail;   
1ca20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20       /* All SQL 
1ca30 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61  text past the la
1ca40 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72  st semicolon par
1ca50 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  sed */.  Table *
1ca60 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20  pNewTable;      
1ca70 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65     /* A table be
1ca80 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20  ing constructed 
1ca90 62 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  by CREATE TABLE 
1caa0 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e  */.  Trigger *pN
1cab0 65 77 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f  ewTrigger;     /
1cac0 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20  * Trigger under 
1cad0 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20 43  construct by a C
1cae0 52 45 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f  REATE TRIGGER */
1caf0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1cb00 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20  AuthContext; /* 
1cb10 54 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65  The 6th paramete
1cb20 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63  r to db->xAuth c
1cb30 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54 6f  allbacks */.  To
1cb40 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20  ken sNameToken; 
1cb50 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
1cb60 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65   with unqualifie
1cb70 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20  d schema object 
1cb80 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  name */.  Token 
1cb90 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20  sLastToken;     
1cba0 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20      /* The last 
1cbb0 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a  token parsed */.
1cbc0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1cbd0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
1cbe0 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20  .  Token sArg;  
1cbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1cc00 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66  Complete text of
1cc10 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65   a module argume
1cc20 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a  nt */.  Table **
1cc30 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20  apVtabLock;     
1cc40 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
1cc50 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e  virtual tables n
1cc60 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a  eeding locking *
1cc70 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65  /.#endif.  Table
1cc80 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20   *pZombieTab;   
1cc90 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
1cca0 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f  Table objects to
1ccb0 20 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f   delete after co
1ccc0 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67  de gen */.  Trig
1ccd0 67 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72  gerPrg *pTrigger
1cce0 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20  Prg;  /* Linked 
1ccf0 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72  list of coded tr
1cd00 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68  iggers */.  With
1cd10 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20   *pWith;        
1cd20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
1cd30 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
1cd40 20 4e 55 4c 4c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   NULL */.};../*.
1cd50 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  ** Return true i
1cd60 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69  f currently insi
1cd70 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65  de an sqlite3_de
1cd80 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c  clare_vtab() cal
1cd90 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  l..*/.#ifdef SQL
1cda0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
1cdb0 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20  TABLE.  #define 
1cdc0 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20  IN_DECLARE_VTAB 
1cdd0 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  0.#else.  #defin
1cde0 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41  e IN_DECLARE_VTA
1cdf0 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61  B (pParse->decla
1ce00 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a  reVtab).#endif..
1ce10 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1ce20 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1ce30 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e  ng structure can
1ce40 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20   be declared on 
1ce50 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64  a stack and used
1ce60 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20  .** to save the 
1ce70 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65  Parse.zAuthConte
1ce80 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74  xt value so that
1ce90 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f   it can be resto
1cea0 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74  red later..*/.st
1ceb0 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74  ruct AuthContext
1cec0 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
1ced0 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20  *zAuthContext;  
1cee0 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61   /* Put saved Pa
1cef0 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74  rse.zAuthContext
1cf00 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65   here */.  Parse
1cf10 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
1cf20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61         /* The Pa
1cf30 72 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f  rse structure */
1cf40 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69  .};../*.** Bitfi
1cf50 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35  eld flags for P5
1cf60 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75   value in variou
1cf70 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a  s opcodes..**.**
1cf80 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 76   Note that the v
1cf90 61 6c 75 65 73 20 66 6f 72 20 49 53 4e 4f 4f 50  alues for ISNOOP
1cfa0 20 61 6e 64 20 4c 45 4e 47 54 48 41 52 47 20 61   and LENGTHARG a
1cfb0 72 65 20 74 68 65 20 73 61 6d 65 2e 20 20 42 75  re the same.  Bu
1cfc0 74 20 61 73 20 0a 2a 2a 20 74 68 6f 73 65 20 62  t as .** those b
1cfd0 69 74 73 20 61 72 65 20 6e 65 76 65 72 20 75 73  its are never us
1cfe0 65 64 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 6f  ed on the same o
1cff0 70 63 6f 64 65 2c 20 74 68 65 20 6f 76 65 72 6c  pcode, the overl
1d000 61 70 20 69 73 20 68 61 72 6d 6c 65 73 73 2e 0a  ap is harmless..
1d010 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1d020 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20  G_NCHANGE       
1d030 30 78 30 31 20 20 20 20 2f 2a 20 53 65 74 20 74  0x01    /* Set t
1d040 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68  o update db->nCh
1d050 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ange */.#define 
1d060 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20  OPFLAG_EPHEM    
1d070 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
1d080 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d  OP_Column: Ephem
1d090 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f  eral output is o
1d0a0 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  k */.#define OPF
1d0b0 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20  LAG_LASTROWID   
1d0c0 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53 65 74    0x02    /* Set
1d0d0 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c   to update db->l
1d0e0 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66  astRowid */.#def
1d0f0 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  ine OPFLAG_ISUPD
1d100 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20 20  ATE      0x04   
1d110 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65   /* This OP_Inse
1d120 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44  rt is an sql UPD
1d130 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
1d140 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20  PFLAG_APPEND    
1d150 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54      0x08    /* T
1d160 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f  his is likely to
1d170 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f   be an append */
1d180 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1d190 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78  USESEEKRESULT 0x
1d1a0 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20  10    /* Try to 
1d1b0 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20  avoid a seek in 
1d1c0 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f  BtreeInsert() */
1d1d0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1d1e0 49 53 4e 4f 4f 50 20 20 20 20 20 20 20 20 30 78  ISNOOP        0x
1d1f0 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65  40    /* OP_Dele
1d200 74 65 20 64 6f 65 73 20 70 72 65 2d 75 70 64 61  te does pre-upda
1d210 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a  te-hook only */.
1d220 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c  #define OPFLAG_L
1d230 45 4e 47 54 48 41 52 47 20 20 20 20 20 30 78 34  ENGTHARG     0x4
1d240 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  0    /* OP_Colum
1d250 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20  n only used for 
1d260 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66  length() */.#def
1d270 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  ine OPFLAG_TYPEO
1d280 46 41 52 47 20 20 20 20 20 30 78 38 30 20 20 20  FARG     0x80   
1d290 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e   /* OP_Column on
1d2a0 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79 70 65  ly used for type
1d2b0 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  of() */.#define 
1d2c0 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20  OPFLAG_BULKCSR  
1d2d0 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
1d2e0 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74  OP_Open** used t
1d2f0 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73  o open bulk curs
1d300 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  or */.#define OP
1d310 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20  FLAG_SEEKEQ     
1d320 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50     0x02    /* OP
1d330 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75  _Open** cursor u
1d340 73 65 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79  ses EQ seek only
1d350 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1d360 41 47 5f 50 32 49 53 52 45 47 20 20 20 20 20 20  AG_P2ISREG      
1d370 20 30 78 30 34 20 20 20 20 2f 2a 20 50 32 20 74   0x04    /* P2 t
1d380 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61  o OP_Open** is a
1d390 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
1d3a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1d3b0 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20  AG_PERMUTE      
1d3c0 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43   0x01    /* OP_C
1d3d0 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65 20  ompare: use the 
1d3e0 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a  permutation */..
1d3f0 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67  /*. * Each trigg
1d400 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68  er present in th
1d410 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
1d420 61 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61  a is stored as a
1d430 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a  n instance of. *
1d440 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e   struct Trigger.
1d450 20 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73   . *. * Pointers
1d460 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66   to instances of
1d470 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
1d480 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77  are stored in tw
1d490 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e  o ways.. * 1. In
1d4a0 20 74 68 65 20 22 74 72 69 67 48 61 73 68 22 20   the "trigHash" 
1d4b0 68 61 73 68 20 74 61 62 6c 65 20 28 70 61 72 74  hash table (part
1d4c0 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a   of the sqlite3*
1d4d0 20 74 68 61 74 20 72 65 70 72 65 73 65 6e 74 73   that represents
1d4e0 20 74 68 65 20 0a 20 2a 20 20 20 20 64 61 74 61   the . *    data
1d4f0 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f  base). This allo
1d500 77 73 20 54 72 69 67 67 65 72 20 73 74 72 75 63  ws Trigger struc
1d510 74 75 72 65 73 20 74 6f 20 62 65 20 72 65 74 72  tures to be retr
1d520 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20  ieved by name.. 
1d530 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72  * 2. All trigger
1d540 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
1d550 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  h a single table
1d560 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c   form a linked l
1d570 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20  ist, using the. 
1d580 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65  *    pNext membe
1d590 72 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  r of struct Trig
1d5a0 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74  ger. A pointer t
1d5b0 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  o the first elem
1d5c0 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20  ent of the. *   
1d5d0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20   linked list is 
1d5e0 73 74 6f 72 65 64 20 61 73 20 74 68 65 20 22 70  stored as the "p
1d5f0 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20  Trigger" member 
1d600 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  of the associate
1d610 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20 54  d. *    struct T
1d620 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20  able.. *. * The 
1d630 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62  "step_list" memb
1d640 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  er points to the
1d650 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
1d660 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a  f a linked list.
1d670 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68   * containing th
1d680 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  e SQL statements
1d690 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68   specified as th
1d6a0 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
1d6b0 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72  m.. */.struct Tr
1d6c0 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a  igger {.  char *
1d6d0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
1d6e0 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66    /* The name of
1d6f0 20 74 68 65 20 74 72 69 67 67 65 72 20 20 20 20   the trigger    
1d700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d710 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74      */.  char *t
1d720 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
1d730 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72   /* The table or
1d740 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20 74   view to which t
1d750 68 65 20 74 72 69 67 67 65 72 20 61 70 70 6c 69  he trigger appli
1d760 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20  es */.  u8 op;  
1d770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d780 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c  /* One of TK_DEL
1d790 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20  ETE, TK_UPDATE, 
1d7a0 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20  TK_INSERT       
1d7b0 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b    */.  u8 tr_tm;
1d7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d7d0 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52  * One of TRIGGER
1d7e0 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52  _BEFORE, TRIGGER
1d7f0 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72  _AFTER */.  Expr
1d800 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20   *pWhen;        
1d810 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20      /* The WHEN 
1d820 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65 78  clause of the ex
1d830 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65  pression (may be
1d840 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69   NULL) */.  IdLi
1d850 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20  st *pColumns;   
1d860 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
1d870 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c  s an UPDATE OF <
1d880 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69  column-list> tri
1d890 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20  gger,.          
1d8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8b0 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c     the <column-l
1d8c0 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68  ist> is stored h
1d8d0 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ere */.  Schema 
1d8e0 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20  *pSchema;       
1d8f0 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
1d900 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65  ining the trigge
1d910 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  r */.  Schema *p
1d920 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f  TabSchema;     /
1d930 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
1d940 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  ing the table */
1d950 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
1d960 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69  step_list; /* Li
1d970 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67  nk list of trigg
1d980 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73  er program steps
1d990 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a               */.
1d9a0 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74    Trigger *pNext
1d9b0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  ;         /* Nex
1d9c0 74 20 74 72 69 67 67 65 72 20 61 73 73 6f 63 69  t trigger associ
1d9d0 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61  ated with the ta
1d9e0 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ble */.};../*.**
1d9f0 20 41 20 74 72 69 67 67 65 72 20 69 73 20 65 69   A trigger is ei
1da00 74 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72  ther a BEFORE or
1da10 20 61 6e 20 41 46 54 45 52 20 74 72 69 67 67 65   an AFTER trigge
1da20 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  r.  The followin
1da30 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64  g constants.** d
1da40 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 20  etermine which. 
1da50 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20  .**.** If there 
1da60 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69  are multiple tri
1da70 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74  ggers, you might
1da80 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20   of some BEFORE 
1da90 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a  and some AFTER..
1daa0 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65 73  ** In that cases
1dab0 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20  , the constants 
1dac0 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65  below can be ORe
1dad0 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23  d together..*/.#
1dae0 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42  define TRIGGER_B
1daf0 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65  EFORE  1.#define
1db00 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 20   TRIGGER_AFTER  
1db10 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73   2../*. * An ins
1db20 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20  tance of struct 
1db30 54 72 69 67 67 65 72 53 74 65 70 20 69 73 20 75  TriggerStep is u
1db40 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73  sed to store a s
1db50 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d  ingle SQL statem
1db60 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61  ent. * that is a
1db70 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67   part of a trigg
1db80 65 72 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a  er-program. . *.
1db90 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20   * Instances of 
1dba0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
1dbb0 65 70 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ep are stored in
1dbc0 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64   a singly linked
1dbd0 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a   list (linked. *
1dbe0 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78   using the "pNex
1dbf0 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72  t" member) refer
1dc00 65 6e 63 65 64 20 62 79 20 74 68 65 20 22 73 74  enced by the "st
1dc10 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
1dc20 6f 66 20 74 68 65 20 0a 20 2a 20 61 73 73 6f 63  of the . * assoc
1dc30 69 61 74 65 64 20 73 74 72 75 63 74 20 54 72 69  iated struct Tri
1dc40 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54  gger instance. T
1dc50 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
1dc60 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c   of the linked l
1dc70 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69  ist is. * the fi
1dc80 72 73 74 20 73 74 65 70 20 6f 66 20 74 68 65 20  rst step of the 
1dc90 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e  trigger-program.
1dca0 0a 20 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70 22  . * . * The "op"
1dcb0 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65   member indicate
1dcc0 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69  s whether this i
1dcd0 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49  s a "DELETE", "I
1dce0 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45 22  NSERT", "UPDATE"
1dcf0 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20   or. * "SELECT" 
1dd00 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d  statement. The m
1dd10 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f  eanings of the o
1dd20 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20  ther members is 
1dd30 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
1dd40 65 20 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22  e . * value of "
1dd50 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  op" as follows:.
1dd60 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
1dd70 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e  INSERT). * orcon
1dd80 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74  f    -> stores t
1dd90 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61  he ON CONFLICT a
1dda0 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c  lgorithm. * pSel
1ddb0 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73  ect   -> If this
1ddc0 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
1ddd0 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e  TO ... SELECT ..
1dde0 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  . statement, the
1ddf0 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  n. *            
1de00 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 61 20    this stores a 
1de10 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53  pointer to the S
1de20 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
1de30 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
1de40 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e  . * zTarget   ->
1de50 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f   Dequoted name o
1de60 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69  f the table to i
1de70 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70  nsert into.. * p
1de80 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74  ExprList -> If t
1de90 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
1dea0 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53   INTO ... VALUES
1deb0 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20   ... statement, 
1dec0 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20  then. *         
1ded0 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73       this stores
1dee0 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e   values to be in
1def0 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73  serted. Otherwis
1df00 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69  e NULL.. * pIdLi
1df10 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  st   -> If this 
1df20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
1df30 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e  O ... (<column-n
1df40 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e  ames>) VALUES ..
1df50 2e 20 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  . . *           
1df60 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68     statement, th
1df70 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74  en this stores t
1df80 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20  he column-names 
1df90 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20  to be. *        
1dfa0 20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69        inserted i
1dfb0 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  nto.. *. * (op =
1dfc0 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20  = TK_DELETE). * 
1dfd0 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71  zTarget   -> Deq
1dfe0 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
1dff0 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74  e table to delet
1e000 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72  e from.. * pWher
1e010 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52  e    -> The WHER
1e020 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  E clause of the 
1e030 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
1e040 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69   if one is speci
1e050 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20  fied.. *        
1e060 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20        Otherwise 
1e070 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70  NULL.. * . * (op
1e080 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20   == TK_UPDATE). 
1e090 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44  * zTarget   -> D
1e0a0 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20  equoted name of 
1e0b0 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64  the table to upd
1e0c0 61 74 65 2e 0a 20 2a 20 70 57 68 65 72 65 20 20  ate.. * pWhere  
1e0d0 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63    -> The WHERE c
1e0e0 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55 50 44  lause of the UPD
1e0f0 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66  ATE statement if
1e100 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65   one is specifie
1e110 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  d.. *           
1e120 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c     Otherwise NUL
1e130 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20  L.. * pExprList 
1e140 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65  -> A list of the
1e150 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61   columns to upda
1e160 74 65 20 61 6e 64 20 74 68 65 20 65 78 70 72 65  te and the expre
1e170 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65  ssions to update
1e180 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1e190 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71   them to. See sq
1e1a0 6c 69 74 65 33 55 70 64 61 74 65 28 29 20 64 6f  lite3Update() do
1e1b0 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22  cumentation of "
1e1c0 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20  pChanges". *    
1e1d0 20 20 20 20 20 20 20 20 20 20 61 72 67 75 6d 65            argume
1e1e0 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72 75  nt.. * . */.stru
1e1f0 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 7b  ct TriggerStep {
1e200 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
1e210 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
1e220 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f  f TK_DELETE, TK_
1e230 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52  UPDATE, TK_INSER
1e240 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a  T, TK_SELECT */.
1e250 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20    u8 orconf;    
1e260 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c         /* OE_Rol
1e270 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20  lback etc. */.  
1e280 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20  Trigger *pTrig; 
1e290 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67       /* The trig
1e2a0 67 65 72 20 74 68 61 74 20 74 68 69 73 20 73 74  ger that this st
1e2b0 65 70 20 69 73 20 61 20 70 61 72 74 20 6f 66 20  ep is a part of 
1e2c0 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65  */.  Select *pSe
1e2d0 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c  lect;     /* SEL
1e2e0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 72  ECT statement or
1e2f0 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49   RHS of INSERT I
1e300 4e 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a  NTO SELECT ... *
1e310 2f 0a 20 20 63 68 61 72 20 2a 7a 54 61 72 67 65  /.  char *zTarge
1e320 74 3b 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67  t;       /* Targ
1e330 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c  et table for DEL
1e340 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53  ETE, UPDATE, INS
1e350 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ERT */.  Expr *p
1e360 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a  Where;        /*
1e370 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
1e380 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20  e for DELETE or 
1e390 55 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a  UPDATE steps */.
1e3a0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70    ExprList *pExp
1e3b0 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c  rList; /* SET cl
1e3c0 61 75 73 65 20 66 6f 72 20 55 50 44 41 54 45 2e  ause for UPDATE.
1e3d0 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49   */.  IdList *pI
1e3e0 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f  dList;     /* Co
1e3f0 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49  lumn names for I
1e400 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67 67  NSERT */.  Trigg
1e410 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20  erStep *pNext;  
1e420 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c  /* Next in the l
1e430 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72  ink-list */.  Tr
1e440 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74  iggerStep *pLast
1e450 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65  ;  /* Last eleme
1e460 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e  nt in link-list.
1e470 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65   Valid for 1st e
1e480 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a  lem only */.};..
1e490 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
1e4a0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f  ing structure co
1e4b0 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69  ntains informati
1e4c0 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 73  on used by the s
1e4d0 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72  qliteFix....** r
1e4e0 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79 20  outines as they 
1e4f0 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74  walk the parse t
1e500 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61  ree to make data
1e510 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a  base references.
1e520 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a  ** explicit.  .*
1e530 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
1e540 20 44 62 46 69 78 65 72 20 44 62 46 69 78 65 72   DbFixer DbFixer
1e550 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78 65 72  ;.struct DbFixer
1e560 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
1e570 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  se;      /* The 
1e580 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e  parsing context.
1e590 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73    Error messages
1e5a0 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f   written here */
1e5b0 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
1e5c0 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74  ma;    /* Fix it
1e5d0 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68 65  ems to this sche
1e5e0 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72  ma */.  int bVar
1e5f0 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43  Only;       /* C
1e600 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c  heck for variabl
1e610 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c  e references onl
1e620 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  y */.  const cha
1e630 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61  r *zDb;    /* Ma
1e640 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65  ke sure all obje
1e650 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65  cts are containe
1e660 64 20 69 6e 20 74 68 69 73 20 64 61 74 61 62 61  d in this databa
1e670 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  se */.  const ch
1e680 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54  ar *zType;  /* T
1e690 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61  ype of the conta
1e6a0 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20  iner - used for 
1e6b0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a  error messages *
1e6c0 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20  /.  const Token 
1e6d0 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20  *pName; /* Name 
1e6e0 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72  of the container
1e6f0 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f   - used for erro
1e700 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b  r messages */.};
1e710 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63  ../*.** An objec
1e720 74 65 64 20 75 73 65 64 20 74 6f 20 61 63 63 75  ted used to accu
1e730 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78 74 20  mulate the text 
1e740 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68 65 72  of a string wher
1e750 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e  e we.** do not n
1e760 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20  ecessarily know 
1e770 68 6f 77 20 62 69 67 20 74 68 65 20 73 74 72 69  how big the stri
1e780 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68  ng will be in th
1e790 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  e end..*/.struct
1e7a0 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71   StrAccum {.  sq
1e7b0 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
1e7c0 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64     /* Optional d
1e7d0 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b  atabase for look
1e7e0 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e  aside.  Can be N
1e7f0 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ULL */.  char *z
1e800 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Base;         /*
1e810 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74 69   A base allocati
1e820 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61  on.  Not from ma
1e830 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20  lloc. */.  char 
1e840 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20 20  *zText;         
1e850 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f  /* The string co
1e860 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a  llected so far *
1e870 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61 72 3b 20  /.  int  nChar; 
1e880 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
1e890 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  th of the string
1e8a0 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1e8b0 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20    nAlloc;       
1e8c0 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73    /* Amount of s
1e8d0 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69  pace allocated i
1e8e0 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e 74  n zText */.  int
1e8f0 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20    mxAlloc;      
1e900 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c    /* Maximum all
1e910 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  owed allocation.
1e920 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f    0 for no mallo
1e930 63 20 75 73 61 67 65 20 2a 2f 0a 20 20 75 38 20  c usage */.  u8 
1e940 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20    accError;     
1e950 20 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f    /* STRACCUM_NO
1e960 4d 45 4d 20 6f 72 20 53 54 52 41 43 43 55 4d 5f  MEM or STRACCUM_
1e970 54 4f 4f 42 49 47 20 2a 2f 0a 7d 3b 0a 23 64 65  TOOBIG */.};.#de
1e980 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 4e 4f  fine STRACCUM_NO
1e990 4d 45 4d 20 20 20 31 0a 23 64 65 66 69 6e 65 20  MEM   1.#define 
1e9a0 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20  STRACCUM_TOOBIG 
1e9b0 20 32 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e   2../*.** A poin
1e9c0 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
1e9d0 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f  cture is used to
1e9e0 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66   communicate inf
1e9f0 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d  ormation.** from
1ea00 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64   sqlite3Init and
1ea10 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20   OP_ParseSchema 
1ea20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  into the sqlite3
1ea30 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f  InitCallback..*/
1ea40 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
1ea50 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
1ea60 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
1ea70 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e  atabase being in
1ea80 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63  itialized */.  c
1ea90 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20  har **pzErrMsg; 
1eaa0 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73     /* Error mess
1eab0 61 67 65 20 73 74 6f 72 65 64 20 68 65 72 65 20  age stored here 
1eac0 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20  */.  int iDb;   
1ead0 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f           /* 0 fo
1eae0 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e  r main database.
1eaf0 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e    1 for TEMP, 2.
1eb00 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a  . for ATTACHed *
1eb10 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20  /.  int rc;     
1eb20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
1eb30 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65  t code stored he
1eb40 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61  re */.} InitData
1eb50 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75  ;../*.** Structu
1eb60 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c  re containing gl
1eb70 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69  obal configurati
1eb80 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  on data for the 
1eb90 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a  SQLite library..
1eba0 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63  **.** This struc
1ebb0 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69  ture also contai
1ebc0 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e  ns some state in
1ebd0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
1ebe0 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
1ebf0 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73  ig {.  int bMems
1ec00 74 61 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  tat;            
1ec10 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1ec20 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72   to enable memor
1ec30 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e  y status */.  in
1ec40 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20  t bCoreMutex;   
1ec50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec60 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
1ec70 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20  e core mutexing 
1ec80 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75  */.  int bFullMu
1ec90 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
1eca0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
1ecb0 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75  o enable full mu
1ecc0 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  texing */.  int 
1ecd0 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20  bOpenUri;       
1ece0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ecf0 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72   True to interpr
1ed00 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20  et filenames as 
1ed10 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55  URIs */.  int bU
1ed20 73 65 43 69 73 3b 20 20 20 20 20 20 20 20 20 20  seCis;          
1ed30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
1ed40 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69  se covering indi
1ed50 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61  ces for full-sca
1ed60 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74  ns */.  int mxSt
1ed70 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  rlen;           
1ed80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
1ed90 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67  imum string leng
1eda0 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65  th */.  int neve
1edb0 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20  rCorrupt;       
1edc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
1edd0 61 62 61 73 65 20 69 73 20 61 6c 77 61 79 73 20  abase is always 
1ede0 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20  well-formed */. 
1edf0 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65   int szLookaside
1ee00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ee10 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
1ee20 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 73  okaside buffer s
1ee30 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f  ize */.  int nLo
1ee40 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
1ee50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
1ee60 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20  fault lookaside 
1ee70 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a  buffer count */.
1ee80 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65    sqlite3_mem_me
1ee90 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20  thods m;        
1eea0 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c      /* Low-level
1eeb0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
1eec0 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  on interface */.
1eed0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
1eee0 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20  methods mutex;  
1eef0 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c      /* Low-level
1ef00 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63 65   mutex interface
1ef10 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63   */.  sqlite3_pc
1ef20 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63  ache_methods2 pc
1ef30 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c  ache2;  /* Low-l
1ef40 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20  evel page-cache 
1ef50 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76  interface */.  v
1ef60 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20  oid *pHeap;     
1ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef80 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65   /* Heap storage
1ef90 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20   space */.  int 
1efa0 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20  nHeap;          
1efb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1efc0 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d   Size of pHeap[]
1efd0 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c   */.  int mnReq,
1efe0 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20 20   mxReq;         
1eff0 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61          /* Min a
1f000 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65 71 75  nd max heap requ
1f010 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20  ests sizes */.  
1f020 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a  sqlite3_int64 sz
1f030 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
1f040 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63    /* mmap() spac
1f050 65 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20  e per open file 
1f060 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  */.  sqlite3_int
1f070 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20  64 mxMmap;      
1f080 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
1f090 6d 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d  m value for szMm
1f0a0 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53  ap */.  void *pS
1f0b0 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20  cratch;         
1f0c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 72            /* Scr
1f0d0 61 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20  atch memory */. 
1f0e0 20 69 6e 74 20 73 7a 53 63 72 61 74 63 68 3b 20   int szScratch; 
1f0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f100 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61     /* Size of ea
1f110 63 68 20 73 63 72 61 74 63 68 20 62 75 66 66 65  ch scratch buffe
1f120 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61  r */.  int nScra
1f130 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  tch;            
1f140 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1f150 65 72 20 6f 66 20 73 63 72 61 74 63 68 20 62 75  er of scratch bu
1f160 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20  ffers */.  void 
1f170 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20 20 20  *pPage;         
1f180 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f190 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72  Page cache memor
1f1a0 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67  y */.  int szPag
1f1b0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1f1c0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
1f1d0 20 6f 66 20 65 61 63 68 20 70 61 67 65 20 69 6e   of each page in
1f1e0 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e   pPage[] */.  in
1f1f0 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20  t nPage;        
1f200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f210 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67  /* Number of pag
1f220 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f  es in pPage[] */
1f230 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53  .  int mxParserS
1f240 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20  tack;           
1f250 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20       /* maximum 
1f260 64 65 70 74 68 20 6f 66 20 74 68 65 20 70 61 72  depth of the par
1f270 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69  ser stack */.  i
1f280 6e 74 20 73 68 61 72 65 64 43 61 63 68 65 45 6e  nt sharedCacheEn
1f290 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  abled;          
1f2a0 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61 72   /* true if shar
1f2b0 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e  ed-cache mode en
1f2c0 61 62 6c 65 64 20 2a 2f 0a 20 20 75 33 32 20 73  abled */.  u32 s
1f2d0 7a 50 6d 61 3b 20 20 20 20 20 20 20 20 20 20 20  zPma;           
1f2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f2f0 4d 61 78 69 6d 75 6d 20 53 6f 72 74 65 72 20 50  Maximum Sorter P
1f300 4d 41 20 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20  MA size */.  /* 
1f310 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20  The above might 
1f320 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74  be initialized t
1f330 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65  o non-zero.  The
1f340 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20   following need 
1f350 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69  to always.  ** i
1f360 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f  nitially be zero
1f370 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20  , however. */.  
1f380 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20  int isInit;     
1f390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3a0 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
1f3b0 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68  initialization h
1f3c0 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20  as finished */. 
1f3d0 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b   int inProgress;
1f3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3f0 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65     /* True while
1f400 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
1f410 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20  in progress */. 
1f420 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74   int isMutexInit
1f430 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f440 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
1f450 20 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e 69   mutexes are ini
1f460 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
1f470 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20  t isMallocInit; 
1f480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f490 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
1f4a0 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
1f4b0 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50  zed */.  int isP
1f4c0 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20  CacheInit;      
1f4d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1f4e0 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20  ue after malloc 
1f4f0 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  is initialized *
1f500 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74  /.  int nRefInit
1f510 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
1f520 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1f530 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69  of users of pIni
1f540 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69  tMutex */.  sqli
1f550 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74  te3_mutex *pInit
1f560 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a  Mutex;        /*
1f570 20 4d 75 74 65 78 20 75 73 65 64 20 62 79 20 73   Mutex used by s
1f580 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a  qlite3_initializ
1f590 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  e() */.  void (*
1f5a0 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  xLog)(void*,int,
1f5b0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a  const char*); /*
1f5c0 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f   Function for lo
1f5d0 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20  gging */.  void 
1f5e0 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20  *pLogArg;       
1f5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f600 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
1f610 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23  t to xLog() */.#
1f620 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
1f630 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69  BLE_SQLLOG.  voi
1f640 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64  d(*xSqllog)(void
1f650 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  *,sqlite3*,const
1f660 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20   char*, int);.  
1f670 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67  void *pSqllogArg
1f680 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
1f690 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45  SQLITE_VDBE_COVE
1f6a0 52 41 47 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f  RAGE.  /* The fo
1f6b0 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b  llowing callback
1f6c0 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69   (if not NULL) i
1f6d0 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65  s invoked on eve
1f6e0 72 79 20 56 44 42 45 20 62 72 61 6e 63 68 0a 20  ry VDBE branch. 
1f6f0 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20   ** operation.  
1f700 53 65 74 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  Set the callback
1f710 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45   using SQLITE_TE
1f720 53 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45  STCTRL_VDBE_COVE
1f730 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69  RAGE..  */.  voi
1f740 64 20 28 2a 78 56 64 62 65 42 72 61 6e 63 68 29  d (*xVdbeBranch)
1f750 28 76 6f 69 64 2a 2c 69 6e 74 20 69 53 72 63 4c  (void*,int iSrcL
1f760 69 6e 65 2c 75 38 20 65 54 68 69 73 2c 75 38 20  ine,u8 eThis,u8 
1f770 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61  eMx);  /* Callba
1f780 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56  ck */.  void *pV
1f790 64 62 65 42 72 61 6e 63 68 41 72 67 3b 20 20 20  dbeBranchArg;   
1f7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7c0 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e    /* 1st argumen
1f7d0 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  t */.#endif.#ifn
1f7e0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1f7f0 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 69  BUILTIN_TEST.  i
1f800 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c 62 61  nt (*xTestCallba
1f810 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20 20 20  ck)(int);       
1f820 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20 73   /* Invoked by s
1f830 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 29  qlite3FaultSim()
1f840 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
1f850 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74   bLocaltimeFault
1f860 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1f870 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c  * True to fail l
1f880 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73  ocaltime() calls
1f890 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
1f8a0 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  is macro is used
1f8b0 20 69 6e 73 69 64 65 20 6f 66 20 61 73 73 65 72   inside of asser
1f8c0 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74  t() statements t
1f8d0 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 0a  o indicate that.
1f8e0 2a 2a 20 74 68 65 20 61 73 73 65 72 74 20 69 73  ** the assert is
1f8f0 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61   only valid on a
1f900 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74   well-formed dat
1f910 61 62 61 73 65 2e 20 20 49 6e 73 74 65 61 64 20  abase.  Instead 
1f920 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73  of:.**.**     as
1f930 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a  sert( X );.**.**
1f940 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a   One writes:.**.
1f950 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58  **     assert( X
1f960 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29   || CORRUPT_DB )
1f970 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f  ;.**.** CORRUPT_
1f980 44 42 20 69 73 20 74 72 75 65 20 64 75 72 69 6e  DB is true durin
1f990 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69  g normal operati
1f9a0 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44 42 20  on.  CORRUPT_DB 
1f9b0 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63 61 74  does not indicat
1f9c0 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61  e.** that the da
1f9d0 74 61 62 61 73 65 20 69 73 20 64 65 66 69 6e 69  tabase is defini
1f9e0 74 65 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e  tely corrupt, on
1f9f0 6c 79 20 74 68 61 74 20 69 74 20 6d 69 67 68 74  ly that it might
1fa00 20 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20   be corrupt..** 
1fa10 46 6f 72 20 6d 6f 73 74 20 74 65 73 74 20 63 61  For most test ca
1fa20 73 65 73 2c 20 43 4f 52 52 55 50 54 5f 44 42 20  ses, CORRUPT_DB 
1fa30 69 73 20 73 65 74 20 74 6f 20 66 61 6c 73 65 20  is set to false 
1fa40 75 73 69 6e 67 20 61 20 73 70 65 63 69 61 6c 0a  using a special.
1fa50 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  ** sqlite3_test_
1fa60 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69 73  control().  This
1fa70 20 65 6e 61 62 6c 65 73 20 61 73 73 65 72 74 28   enables assert(
1fa80 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20  ) statements to 
1fa90 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20  prove.** things 
1faa0 74 68 61 74 20 61 72 65 20 61 6c 77 61 79 73 20  that are always 
1fab0 74 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f  true for well-fo
1fac0 72 6d 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  rmed databases..
1fad0 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52 52 55  */.#define CORRU
1fae0 50 54 5f 44 42 20 20 28 73 71 6c 69 74 65 33 43  PT_DB  (sqlite3C
1faf0 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72 72 75  onfig.neverCorru
1fb00 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f  pt==0)../*.** Co
1fb10 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61  ntext pointer pa
1fb20 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67  ssed down throug
1fb30 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e  h the tree-walk.
1fb40 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65  .*/.struct Walke
1fb50 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 45 78 70  r {.  int (*xExp
1fb60 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65  rCallback)(Walke
1fb70 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20  r*, Expr*);     
1fb80 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20  /* Callback for 
1fb90 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
1fba0 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61   int (*xSelectCa
1fbb0 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c  llback)(Walker*,
1fbc0 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61  Select*);  /* Ca
1fbd0 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43  llback for SELEC
1fbe0 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  Ts */.  void (*x
1fbf0 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29  SelectCallback2)
1fc00 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a  (Walker*,Select*
1fc10 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c  );/* Second call
1fc20 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73  back for SELECTs
1fc30 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61   */.  Parse *pPa
1fc40 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  rse;            
1fc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc60 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78  /* Parser contex
1fc70 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c  t.  */.  int wal
1fc80 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20 20 20  kerDepth;       
1fc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fca0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1fcb0 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20  subqueries */.  
1fcc0 75 38 20 65 43 6f 64 65 3b 20 20 20 20 20 20 20  u8 eCode;       
1fcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fce0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73            /* A s
1fcf0 6d 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67 20  mall processing 
1fd00 63 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  code */.  union 
1fd10 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
1fd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd30 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74      /* Extra dat
1fd40 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a  a for callback *
1fd50 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78  /.    NameContex
1fd60 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20  t *pNC;         
1fd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd80 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65   /* Naming conte
1fd90 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 3b  xt */.    int n;
1fda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdc0 20 20 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74 65       /* A counte
1fdd0 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 75  r */.    int iCu
1fde0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
1fdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe00 20 20 20 20 2f 2a 20 41 20 63 75 72 73 6f 72 20      /* A cursor 
1fe10 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 53 72  number */.    Sr
1fe20 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b  cList *pSrcList;
1fe30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe40 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d           /* FROM
1fe50 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73   clause */.    s
1fe60 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a  truct SrcCount *
1fe70 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20  pSrcCount;      
1fe80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75            /* Cou
1fe90 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66  nting column ref
1fea0 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 75  erences */.  } u
1feb0 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64  ;.};../* Forward
1fec0 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f   declarations */
1fed0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
1fee0 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78  Expr(Walker*, Ex
1fef0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
1ff00 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61  3WalkExprList(Wa
1ff10 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  lker*, ExprList*
1ff20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
1ff30 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a  lkSelect(Walker*
1ff40 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
1ff50 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
1ff60 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53  tExpr(Walker*, S
1ff70 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
1ff80 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72  ite3WalkSelectFr
1ff90 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  om(Walker*, Sele
1ffa0 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  ct*);../*.** Ret
1ffb0 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68  urn code from th
1ffc0 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c  e parse-tree wal
1ffd0 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20  king primitives 
1ffe0 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c  and their.** cal
1fff0 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69  lbacks..*/.#defi
20000 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20  ne WRC_Continue 
20010 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e     0   /* Contin
20020 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69  ue down into chi
20030 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ldren */.#define
20040 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20   WRC_Prune      
20050 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69   1   /* Omit chi
20060 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e  ldren but contin
20070 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69  ue walking sibli
20080 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ngs */.#define W
20090 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32  RC_Abort       2
200a0 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68     /* Abandon th
200b0 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a  e tree walk */..
200c0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
200d0 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
200e0 75 72 65 20 72 65 70 72 65 73 65 6e 74 73 20 61  ure represents a
200f0 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d   set of one or m
20100 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d  ore CTEs.** (com
20110 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
20120 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62  sions) created b
20130 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20  y a single WITH 
20140 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63  clause..*/.struc
20150 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e  t With {.  int n
20160 43 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cte;            
20170 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
20180 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20  mber of CTEs in 
20190 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20  the WITH clause 
201a0 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65  */.  With *pOute
201b0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
201c0 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69       /* Containi
201d0 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20  ng WITH clause, 
201e0 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72  or NULL */.  str
201f0 75 63 74 20 43 74 65 20 7b 20 20 20 20 20 20 20  uct Cte {       
20200 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20210 46 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e 20  For each CTE in 
20220 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e  the WITH clause.
20230 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ... */.    char 
20240 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
20250 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
20260 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a  me of this CTE *
20270 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  /.    ExprList *
20280 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20  pCols;          
20290 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
202a0 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e   explicit column
202b0 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20   names, or NULL 
202c0 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
202d0 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20  Select;         
202e0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
202f0 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73  finition of this
20300 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73   CTE */.    cons
20310 74 20 63 68 61 72 20 2a 7a 45 72 72 3b 20 20 20  t char *zErr;   
20320 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
20330 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72  rror message for
20340 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72 65   circular refere
20350 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d  nces */.  } a[1]
20360 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  ;.};..#ifdef SQL
20370 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
20380 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
20390 68 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65  he TreeView obje
203a0 63 74 20 69 73 20 75 73 65 64 20 66 6f 72 20 70  ct is used for p
203b0 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74  rinting the cont
203c0 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73  ent of.** data s
203d0 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c  tructures on sql
203e0 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
203f0 29 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c  ) using a tree-l
20400 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72  ike view..*/.str
20410 75 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20  uct TreeView {. 
20420 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20   int iLevel;    
20430 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
20440 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74  h level of the t
20450 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f  ree we are on */
20460 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30  .  u8  bLine[100
20470 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72  ];         /* Dr
20480 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63  aw vertical in c
20490 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65  olumn i if bLine
204a0 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d  [i] is true */.}
204b0 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
204c0 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a  TE_DEBUG */../*.
204d0 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20  ** Assuming zIn 
204e0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
204f0 72 73 74 20 62 79 74 65 20 6f 66 20 61 20 55 54  rst byte of a UT
20500 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a  F-8 character,.*
20510 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f  * advance zIn to
20520 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69   point to the fi
20530 72 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20  rst byte of the 
20540 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61 72 61  next UTF-8 chara
20550 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  cter..*/.#define
20560 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46   SQLITE_SKIP_UTF
20570 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20  8(zIn) {        
20580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20590 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b  \.  if( (*(zIn++
205a0 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20  ))>=0xc0 ){     
205b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205c0 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77           \.    w
205d0 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78  hile( (*zIn & 0x
205e0 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e  c0)==0x80 ){ zIn
205f0 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20  ++; }           
20600 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20    \.  }         
20610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20630 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a             \.}..
20640 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
20650 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61  _*_BKPT macros a
20660 72 65 20 73 75 62 73 74 69 74 75 74 65 73 20 66  re substitutes f
20670 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64  or the error cod
20680 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73  es with.** the s
20690 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74  ame name but wit
206a0 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73  hout the _BKPT s
206b0 75 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61  uffix.  These ma
206c0 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72  cros invoke.** r
206d0 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72 65 70  outines that rep
206e0 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d  ort the line-num
206f0 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ber on which the
20700 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65   error originate
20710 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74  d.** using sqlit
20720 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72  e3_log().  The r
20730 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f  outines also pro
20740 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e  vide a convenien
20750 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65  t place.** to se
20760 74 20 61 20 64 65 62 75 67 67 65 72 20 62 72 65  t a debugger bre
20770 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20  akpoint..*/.int 
20780 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
20790 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
207a0 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
207b0 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
207c0 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
207d0 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51  int);.#define SQ
207e0 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
207f0 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  T sqlite3Corrupt
20800 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
20810 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
20820 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74  ISUSE_BKPT sqlit
20830 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f  e3MisuseError(__
20840 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20  LINE__).#define 
20850 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f  SQLITE_CANTOPEN_
20860 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74  BKPT sqlite3Cant
20870 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  openError(__LINE
20880 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34  __).../*.** FTS4
20890 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65 78   is really an ex
208a0 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53 33  tension for FTS3
208b0 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65 64  .  It is enabled
208c0 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51   using the.** SQ
208d0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
208e0 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f 20   macro.  But to 
208f0 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20  avoid confusion 
20900 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20  we also call.** 
20910 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  the SQLITE_ENABL
20920 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74 6f 20  E_FTS4 macro to 
20930 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c 69 61  serve as an alia
20940 73 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41  s for SQLITE_ENA
20950 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66  BLE_FTS3..*/.#if
20960 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
20970 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26 20  ENABLE_FTS4) && 
20980 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
20990 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20 64  ENABLE_FTS3).# d
209a0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
209b0 42 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e 64 69  BLE_FTS3 1.#endi
209c0 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79  f../*.** The cty
209d0 70 65 2e 68 20 68 65 61 64 65 72 20 69 73 20 6e  pe.h header is n
209e0 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53  eeded for non-AS
209f0 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20 49 74  CII systems.  It
20a00 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64   is also.** need
20a10 65 64 20 62 79 20 46 54 53 33 20 77 68 65 6e 20  ed by FTS3 when 
20a20 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64 65 64  FTS3 is included
20a30 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d 61   in the amalgama
20a40 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  tion..*/.#if !de
20a50 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 53 43  fined(SQLITE_ASC
20a60 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65  II) || \.    (de
20a70 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
20a80 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64 65 66  BLE_FTS3) && def
20a90 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c  ined(SQLITE_AMAL
20aa0 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63  GAMATION)).# inc
20ab0 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23  lude <ctype.h>.#
20ac0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
20ad0 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
20ae0 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74 61 6e  s mimic the stan
20af0 64 61 72 64 20 6c 69 62 72 61 72 79 20 66 75 6e  dard library fun
20b00 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72 28 29  ctions toupper()
20b10 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29 2c 20  ,.** isspace(), 
20b20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67  isalnum(), isdig
20b30 69 74 28 29 20 61 6e 64 20 69 73 78 64 69 67 69  it() and isxdigi
20b40 74 28 29 2c 20 72 65 73 70 65 63 74 69 76 65 6c  t(), respectivel
20b50 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65  y. The.** sqlite
20b60 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77   versions only w
20b70 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20 63 68  ork for ASCII ch
20b80 61 72 61 63 74 65 72 73 2c 20 72 65 67 61 72 64  aracters, regard
20b90 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a  less of locale..
20ba0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
20bb0 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e 65 20  _ASCII.# define 
20bc0 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78  sqlite3Toupper(x
20bd0 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69 74 65  )  ((x)&~(sqlite
20be0 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
20bf0 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
20c00 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  20)).# define sq
20c10 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20  lite3Isspace(x) 
20c20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
20c30 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
20c40 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23 20 64  r)(x)]&0x01).# d
20c50 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
20c60 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c 69 74  lnum(x)   (sqlit
20c70 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
20c80 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
20c90 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x06).# define sq
20ca0 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20  lite3Isalpha(x) 
20cb0 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
20cc0 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
20cd0 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23 20 64  r)(x)]&0x02).# d
20ce0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64  efine sqlite3Isd
20cf0 69 67 69 74 28 78 29 20 20 20 28 73 71 6c 69 74  igit(x)   (sqlit
20d00 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
20d10 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
20d20 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x04).# define sq
20d30 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29  lite3Isxdigit(x)
20d40 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
20d50 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
20d60 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23 20 64  r)(x)]&0x08).# d
20d70 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c  efine sqlite3Tol
20d80 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c 69 74  ower(x)   (sqlit
20d90 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28  e3UpperToLower[(
20da0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
20db0 29 5d 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  )]).#else.# defi
20dc0 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65  ne sqlite3Touppe
20dd0 72 28 78 29 20 20 20 74 6f 75 70 70 65 72 28 28  r(x)   toupper((
20de0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
20df0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
20e00 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20  te3Isspace(x)   
20e10 69 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65  isspace((unsigne
20e20 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
20e30 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
20e40 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d  num(x)   isalnum
20e50 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
20e60 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
20e70 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20  lite3Isalpha(x) 
20e80 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67    isalpha((unsig
20e90 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
20ea0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
20eb0 64 69 67 69 74 28 78 29 20 20 20 69 73 64 69 67  digit(x)   isdig
20ec0 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  it((unsigned cha
20ed0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
20ee0 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28  sqlite3Isxdigit(
20ef0 78 29 20 20 69 73 78 64 69 67 69 74 28 28 75 6e  x)  isxdigit((un
20f00 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
20f10 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20f20 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f  3Tolower(x)   to
20f30 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20  lower((unsigned 
20f40 63 68 61 72 29 28 78 29 29 0a 23 65 6e 64 69 66  char)(x)).#endif
20f50 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 49 64  .int sqlite3IsId
20f60 43 68 61 72 28 75 38 29 3b 0a 0a 2f 2a 0a 2a 2a  Char(u8);../*.**
20f70 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69   Internal functi
20f80 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f  on prototypes.*/
20f90 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
20fa0 53 74 72 49 43 6d 70 20 73 71 6c 69 74 65 33 5f  StrICmp sqlite3_
20fb0 73 74 72 69 63 6d 70 0a 69 6e 74 20 73 71 6c 69  stricmp.int sqli
20fc0 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73  te3Strlen30(cons
20fd0 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e  t char*);.#defin
20fe0 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  e sqlite3StrNICm
20ff0 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63  p sqlite3_strnic
21000 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  mp..int sqlite3M
21010 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b  allocInit(void);
21020 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c  .void sqlite3Mal
21030 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f  locEnd(void);.vo
21040 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
21050 63 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  c(u64);.void *sq
21060 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28  lite3MallocZero(
21070 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
21080 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
21090 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a  sqlite3*, u64);.
210a0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d  void *sqlite3DbM
210b0 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33  allocRaw(sqlite3
210c0 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73  *, u64);.char *s
210d0 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 73  qlite3DbStrDup(s
210e0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
210f0 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ar*);.char *sqli
21100 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c  te3DbStrNDup(sql
21110 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
21120 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
21130 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f  qlite3Realloc(vo
21140 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  id*, u64);.void 
21150 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f  *sqlite3DbReallo
21160 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33 20  cOrFree(sqlite3 
21170 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b  *, void *, u64);
21180 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
21190 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20  Realloc(sqlite3 
211a0 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b  *, void *, u64);
211b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46  .void sqlite3DbF
211c0 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  ree(sqlite3*, vo
211d0 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
211e0 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64  3MallocSize(void
211f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  *);.int sqlite3D
21200 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69  bMallocSize(sqli
21210 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f  te3*, void*);.vo
21220 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61 74  id *sqlite3Scrat
21230 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  chMalloc(int);.v
21240 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72 61 74  oid sqlite3Scrat
21250 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76  chFree(void*);.v
21260 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65  oid *sqlite3Page
21270 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69  Malloc(int);.voi
21280 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72 65  d sqlite3PageFre
21290 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  e(void*);.void s
212a0 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61  qlite3MemSetDefa
212b0 75 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ult(void);.void 
212c0 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c  sqlite3BenignMal
212d0 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a  locHooks(void (*
212e0 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a  )(void), void (*
212f0 29 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20 73 71  )(void));.int sq
21300 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46  lite3HeapNearlyF
21310 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a  ull(void);../*.*
21320 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74  * On systems wit
21330 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70  h ample stack sp
21340 61 63 65 20 61 6e 64 20 74 68 61 74 20 73 75 70  ace and that sup
21350 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d  port alloca(), m
21360 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c  ake.** use of al
21370 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e  loca() to obtain
21380 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65   space for large
21390 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63   automatic objec
213a0 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c  ts.  By default,
213b0 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65  .** obtain space
213c0 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a   from malloc()..
213d0 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61  **.** The alloca
213e0 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72  () routine never
213f0 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20   returns NULL.  
21400 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20  This will cause 
21410 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68  code paths.** th
21420 61 74 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c  at deal with sql
21430 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29  ite3StackAlloc()
21440 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20   failures to be 
21450 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a  unreachable..*/.
21460 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
21470 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e  E_ALLOCA.# defin
21480 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
21490 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c  locRaw(D,N)   al
214a0 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65  loca(N).# define
214b0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
214c0 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d  ocZero(D,N)  mem
214d0 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30  set(alloca(N), 0
214e0 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  , N).# define sq
214f0 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44  lite3StackFree(D
21500 2c 50 29 20 20 20 20 20 20 20 0a 23 65 6c 73 65  ,P)       .#else
21510 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
21520 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44  3StackAllocRaw(D
21530 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d  ,N)   sqlite3DbM
21540 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20  allocRaw(D,N).# 
21550 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
21560 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e  ackAllocZero(D,N
21570 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  )  sqlite3DbMall
21580 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65  ocZero(D,N).# de
21590 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
215a0 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20  kFree(D,P)      
215b0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 44   sqlite3DbFree(D
215c0 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  ,P).#endif..#ifd
215d0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
215e0 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73  _MEMSYS3.const s
215f0 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
21600 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65  ds *sqlite3MemGe
21610 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a  tMemsys3(void);.
21620 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
21630 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
21640 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65  YS5.const sqlite
21650 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73  3_mem_methods *s
21660 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73  qlite3MemGetMems
21670 79 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  ys5(void);.#endi
21680 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  f...#ifndef SQLI
21690 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20  TE_MUTEX_OMIT.  
216a0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
216b0 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c  thods const *sql
216c0 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78  ite3DefaultMutex
216d0 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65  (void);.  sqlite
216e0 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
216f0 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f  const *sqlite3No
21700 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20  opMutex(void);. 
21710 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
21720 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f  sqlite3MutexAllo
21730 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  c(int);.  int sq
21740 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76  lite3MutexInit(v
21750 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  oid);.  int sqli
21760 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64  te3MutexEnd(void
21770 29 3b 0a 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74  );.#endif..sqlit
21780 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33  e3_int64 sqlite3
21790 53 74 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29  StatusValue(int)
217a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
217b0 61 74 75 73 55 70 28 69 6e 74 2c 20 69 6e 74 29  atusUp(int, int)
217c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
217d0 61 74 75 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e  atusDown(int, in
217e0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
217f0 53 74 61 74 75 73 53 65 74 28 69 6e 74 2c 20 69  StatusSet(int, i
21800 6e 74 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20  nt);../* Access 
21810 74 6f 20 6d 75 74 65 78 65 73 20 75 73 65 64 20  to mutexes used 
21820 62 79 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75  by sqlite3_statu
21830 73 28 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d  s() */.sqlite3_m
21840 75 74 65 78 20 2a 73 71 6c 69 74 65 33 50 63 61  utex *sqlite3Pca
21850 63 68 65 31 4d 75 74 65 78 28 76 6f 69 64 29 3b  che1Mutex(void);
21860 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a  .sqlite3_mutex *
21870 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74  sqlite3MallocMut
21880 65 78 28 76 6f 69 64 29 3b 0a 0a 23 69 66 6e 64  ex(void);..#ifnd
21890 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
218a0 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
218b0 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  int sqlite3IsNaN
218c0 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a  (double);.#else.
218d0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
218e0 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64  IsNaN(X)  0.#end
218f0 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  if../*.** An ins
21900 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
21910 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
21920 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69   holds informati
21930 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20  on about SQL.** 
21940 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d 65  functions argume
21950 6e 74 73 20 74 68 61 74 20 61 72 65 20 74 68 65  nts that are the
21960 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20 74   parameters to t
21970 68 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e 63  he printf() func
21980 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
21990 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20  PrintfArguments 
219a0 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20 20  {.  int nArg;   
219b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
219c0 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  Total number of 
219d0 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69  arguments */.  i
219e0 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20 20  nt nUsed;       
219f0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
21a00 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 75  r of arguments u
21a10 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  sed so far */.  
21a20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
21a30 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65 20  apArg;   /* The 
21a40 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73 20  argument values 
21a50 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65 20 53  */.};..#define S
21a60 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54  QLITE_PRINTF_INT
21a70 45 52 4e 41 4c 20 30 78 30 31 0a 23 64 65 66 69  ERNAL 0x01.#defi
21a80 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
21a90 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32 0a 76  _SQLFUNC  0x02.v
21aa0 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50 72 69  oid sqlite3VXPri
21ab0 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 75  ntf(StrAccum*, u
21ac0 33 32 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  32, const char*,
21ad0 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f 69 64 20   va_list);.void 
21ae0 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53  sqlite3XPrintf(S
21af0 74 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c 20 63  trAccum*, u32, c
21b00 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
21b10 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d  ;.char *sqlite3M
21b20 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c  Printf(sqlite3*,
21b30 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
21b40 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
21b50 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  VMPrintf(sqlite3
21b60 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76  *,const char*, v
21b70 61 5f 6c 69 73 74 29 3b 0a 23 69 66 20 64 65 66  a_list);.#if def
21b80 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
21b90 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  G) || defined(SQ
21ba0 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
21bb0 43 45 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  CE).  void sqlit
21bc0 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f  e3DebugPrintf(co
21bd0 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
21be0 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
21bf0 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
21c00 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
21c10 54 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f  TestTextToPtr(co
21c20 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  nst char*);.#end
21c30 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  if..#if defined(
21c40 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20  SQLITE_DEBUG).  
21c50 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
21c60 56 69 65 77 45 78 70 72 28 54 72 65 65 56 69 65  ViewExpr(TreeVie
21c70 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c  w*, const Expr*,
21c80 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c   u8);.  void sql
21c90 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72  ite3TreeViewExpr
21ca0 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20  List(TreeView*, 
21cb0 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c  const ExprList*,
21cc0 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a   u8, const char*
21cd0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
21ce0 33 54 72 65 65 56 69 65 77 53 65 6c 65 63 74 28  3TreeViewSelect(
21cf0 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
21d00 20 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 23   Select*, u8);.#
21d10 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c  endif...void sql
21d20 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 63 68  ite3SetString(ch
21d30 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c  ar **, sqlite3*,
21d40 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
21d50 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
21d60 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  Msg(Parse*, cons
21d70 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69  t char*, ...);.i
21d80 6e 74 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74  nt sqlite3Dequot
21d90 65 28 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  e(char*);.int sq
21da0 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65  lite3KeywordCode
21db0 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
21dc0 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  char*, int);.int
21dd0 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65   sqlite3RunParse
21de0 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  r(Parse*, const 
21df0 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b  char*, char **);
21e00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e  .void sqlite3Fin
21e10 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a  ishCoding(Parse*
21e20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
21e30 74 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29  tTempReg(Parse*)
21e40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
21e50 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50 61 72  leaseTempReg(Par
21e60 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  se*,int);.int sq
21e70 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67  lite3GetTempRang
21e80 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76  e(Parse*,int);.v
21e90 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61  oid sqlite3Relea
21ea0 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73  seTempRange(Pars
21eb0 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69  e*,int,int);.voi
21ec0 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65  d sqlite3ClearTe
21ed0 6d 70 52 65 67 43 61 63 68 65 28 50 61 72 73 65  mpRegCache(Parse
21ee0 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
21ef0 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74  3ExprAlloc(sqlit
21f00 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f  e3*,int,const To
21f10 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20  ken*,int);.Expr 
21f20 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c  *sqlite3Expr(sql
21f30 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
21f40 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
21f50 69 74 65 33 45 78 70 72 41 74 74 61 63 68 53 75  ite3ExprAttachSu
21f60 62 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c  btrees(sqlite3*,
21f70 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72  Expr*,Expr*,Expr
21f80 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
21f90 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69  3PExpr(Parse*, i
21fa0 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  nt, Expr*, Expr*
21fb0 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b  , const Token*);
21fc0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
21fd0 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45  prAnd(sqlite3*,E
21fe0 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78  xpr*, Expr*);.Ex
21ff0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46  pr *sqlite3ExprF
22000 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45  unction(Parse*,E
22010 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  xprList*, Token*
22020 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
22030 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62  xprAssignVarNumb
22040 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  er(Parse*, Expr*
22050 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
22060 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65  xprDelete(sqlite
22070 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72  3*, Expr*);.Expr
22080 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70  List *sqlite3Exp
22090 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73  rListAppend(Pars
220a0 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  e*,ExprList*,Exp
220b0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
220c0 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65  3ExprListSetName
220d0 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
220e0 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76  *,Token*,int);.v
220f0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
22100 69 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65  istSetSpan(Parse
22110 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
22120 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Span*);.void sql
22130 69 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65  ite3ExprListDele
22140 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70  te(sqlite3*, Exp
22150 72 4c 69 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c  rList*);.u32 sql
22160 69 74 65 33 45 78 70 72 4c 69 73 74 46 6c 61 67  ite3ExprListFlag
22170 73 28 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74  s(const ExprList
22180 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
22190 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68  nit(sqlite3*, ch
221a0 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar**);.int sqlit
221b0 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76  e3InitCallback(v
221c0 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a  oid*, int, char*
221d0 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64  *, char**);.void
221e0 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50   sqlite3Pragma(P
221f0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
22200 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  en*,Token*,int);
22210 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
22220 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
22230 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  nnection(sqlite3
22240 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22250 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73  ResetOneSchema(s
22260 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
22270 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70  id sqlite3Collap
22280 73 65 44 61 74 61 62 61 73 65 41 72 72 61 79 28  seDatabaseArray(
22290 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
222a0 73 71 6c 69 74 65 33 42 65 67 69 6e 50 61 72 73  sqlite3BeginPars
222b0 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76  e(Parse*,int);.v
222c0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69  oid sqlite3Commi
222d0 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73  tInternalChanges
222e0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 54 61 62 6c  (sqlite3*);.Tabl
222f0 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74  e *sqlite3Result
22300 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73  SetOfSelect(Pars
22310 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69  e*,Select*);.voi
22320 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73  d sqlite3OpenMas
22330 74 65 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a  terTable(Parse *
22340 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73  , int);.Index *s
22350 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79  qlite3PrimaryKey
22360 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69  Index(Table*);.i
22370 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  16 sqlite3Column
22380 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20  OfIndex(Index*, 
22390 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  i16);.void sqlit
223a0 65 33 53 74 61 72 74 54 61 62 6c 65 28 50 61 72  e3StartTable(Par
223b0 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
223c0 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
223d0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
223e0 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  AddColumn(Parse*
223f0 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73  ,Token*);.void s
22400 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c  qlite3AddNotNull
22410 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
22420 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 50 72  oid sqlite3AddPr
22430 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c  imaryKey(Parse*,
22440 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
22450 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
22460 20 73 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b   sqlite3AddCheck
22470 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
22480 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
22490 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e  sqlite3AddColumn
224a0 54 79 70 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  Type(Parse*,Toke
224b0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
224c0 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65  3AddDefaultValue
224d0 28 50 61 72 73 65 2a 2c 45 78 70 72 53 70 61 6e  (Parse*,ExprSpan
224e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
224f0 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50  AddCollateType(P
22500 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
22510 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54  void sqlite3EndT
22520 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  able(Parse*,Toke
22530 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c  n*,Token*,u8,Sel
22540 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
22550 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74  e3ParseUri(const
22560 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
22570 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a  r*,unsigned int*
22580 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
22590 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66        sqlite3_vf
225a0 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20  s**,char**,char 
225b0 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69  **);.Btree *sqli
225c0 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65  te3DbNameToBtree
225d0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
225e0 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
225f0 74 65 33 43 6f 64 65 4f 6e 63 65 28 50 61 72 73  te3CodeOnce(Pars
22600 65 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  e *);..#ifdef SQ
22610 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
22620 4e 5f 54 45 53 54 0a 23 20 64 65 66 69 6e 65 20  N_TEST.# define 
22630 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28  sqlite3FaultSim(
22640 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c  X) SQLITE_OK.#el
22650 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  se.  int sqlite3
22660 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23  FaultSim(int);.#
22670 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20 2a 73  endif..Bitvec *s
22680 71 6c 69 74 65 33 42 69 74 76 65 63 43 72 65 61  qlite3BitvecCrea
22690 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c  te(u32);.int sql
226a0 69 74 65 33 42 69 74 76 65 63 54 65 73 74 28 42  ite3BitvecTest(B
226b0 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e  itvec*, u32);.in
226c0 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53  t sqlite3BitvecS
226d0 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  et(Bitvec*, u32)
226e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69  ;.void sqlite3Bi
226f0 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65 63  tvecClear(Bitvec
22700 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a  *, u32, void*);.
22710 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76  void sqlite3Bitv
22720 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65 63  ecDestroy(Bitvec
22730 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42  *);.u32 sqlite3B
22740 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65 63  itvecSize(Bitvec
22750 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  *);.int sqlite3B
22760 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74  itvecBuiltinTest
22770 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a 52 6f 77  (int,int*);..Row
22780 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53  Set *sqlite3RowS
22790 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c  etInit(sqlite3*,
227a0 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64   void*, unsigned
227b0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
227c0 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28 52  te3RowSetClear(R
227d0 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71  owSet*);.void sq
227e0 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72  lite3RowSetInser
227f0 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b  t(RowSet*, i64);
22800 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53  .int sqlite3RowS
22810 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20  etTest(RowSet*, 
22820 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34 29  int iBatch, i64)
22830 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
22840 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c  SetNext(RowSet*,
22850 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71   i64*);..void sq
22860 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77 28  lite3CreateView(
22870 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
22880 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65  ken*,Token*,Sele
22890 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23  ct*,int,int);..#
228a0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
228b0 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c  TE_OMIT_VIEW) ||
228c0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
228d0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
228e0 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  LE).  int sqlite
228f0 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61  3ViewGetColumnNa
22900 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  mes(Parse*,Table
22910 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
22920 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77 47 65  ne sqlite3ViewGe
22930 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42  tColumnNames(A,B
22940 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  ) 0.#endif..#if 
22950 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
22960 48 45 44 3e 33 30 0a 20 20 69 6e 74 20 73 71 6c  HED>30.  int sql
22970 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ite3DbMaskAllZer
22980 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e 64  o(yDbMask);.#end
22990 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  if.void sqlite3D
229a0 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
229b0 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20   SrcList*, int, 
229c0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
229d0 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c 65 28  e3CodeDropTable(
229e0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
229f0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
22a00 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61 62  sqlite3DeleteTab
22a10 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62  le(sqlite3*, Tab
22a20 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  le*);.#ifndef SQ
22a30 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
22a40 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73  CREMENT.  void s
22a50 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
22a60 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65 20 2a  entBegin(Parse *
22a70 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69 64 20  pParse);.  void 
22a80 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
22a90 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20 2a 70  mentEnd(Parse *p
22aa0 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20  Parse);.#else.# 
22ab0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
22ac0 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e  toincrementBegin
22ad0 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (X).# define sql
22ae0 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
22af0 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a 76  tEnd(X).#endif.v
22b00 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72  oid sqlite3Inser
22b10 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  t(Parse*, SrcLis
22b20 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c  t*, Select*, IdL
22b30 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ist*, int);.void
22b40 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c   *sqlite3ArrayAl
22b50 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c  locate(sqlite3*,
22b60 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69  void*,int,int*,i
22b70 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71  nt*);.IdList *sq
22b80 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e  lite3IdListAppen
22b90 64 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69  d(sqlite3*, IdLi
22ba0 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  st*, Token*);.in
22bb0 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49  t sqlite3IdListI
22bc0 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e  ndex(IdList*,con
22bd0 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69  st char*);.SrcLi
22be0 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
22bf0 73 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65  stEnlarge(sqlite
22c00 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  3*, SrcList*, in
22c10 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74  t, int);.SrcList
22c20 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
22c30 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c  Append(sqlite3*,
22c40 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
22c50 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c  *, Token*);.SrcL
22c60 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
22c70 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72  istAppendFromTer
22c80 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  m(Parse*, SrcLis
22c90 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  t*, Token*, Toke
22ca0 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n*,.            
22cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cc0 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a            Token*
22cd0 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a  , Select*, Expr*
22ce0 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  , IdList*);.void
22cf0 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49   sqlite3SrcListI
22d00 6e 64 65 78 65 64 42 79 28 50 61 72 73 65 20 2a  ndexedBy(Parse *
22d10 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b  , SrcList *, Tok
22d20 65 6e 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  en *);.int sqlit
22d30 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75  e3IndexedByLooku
22d40 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63  p(Parse *, struc
22d50 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a  t SrcList_item *
22d60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
22d70 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54  rcListShiftJoinT
22d80 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76  ype(SrcList*);.v
22d90 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
22da0 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28  stAssignCursors(
22db0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
22dc0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  );.void sqlite3I
22dd0 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  dListDelete(sqli
22de0 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a  te3*, IdList*);.
22df0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
22e00 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
22e10 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49  3*, SrcList*);.I
22e20 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c  ndex *sqlite3All
22e30 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74  ocateIndexObject
22e40 28 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e  (sqlite3*,i16,in
22e50 74 2c 63 68 61 72 2a 2a 29 3b 0a 49 6e 64 65 78  t,char**);.Index
22e60 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 49   *sqlite3CreateI
22e70 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65  ndex(Parse*,Toke
22e80 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73  n*,Token*,SrcLis
22e90 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  t*,ExprList*,int
22ea0 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20  ,Token*,.       
22eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ec0 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69     Expr*, int, i
22ed0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
22ee0 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65  3DropIndex(Parse
22ef0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
22f00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65  );.int sqlite3Se
22f10 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c  lect(Parse*, Sel
22f20 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74  ect*, SelectDest
22f30 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69  *);.Select *sqli
22f40 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72  te3SelectNew(Par
22f50 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72  se*,ExprList*,Sr
22f60 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
22f70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  rList*,.        
22f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f90 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a   Expr*,ExprList*
22fa0 2c 75 31 36 2c 45 78 70 72 2a 2c 45 78 70 72 2a  ,u16,Expr*,Expr*
22fb0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
22fc0 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69  electDelete(sqli
22fd0 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  te3*, Select*);.
22fe0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72  Table *sqlite3Sr
22ff0 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73  cListLookup(Pars
23000 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69  e*, SrcList*);.i
23010 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64  nt sqlite3IsRead
23020 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62  Only(Parse*, Tab
23030 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  le*, int);.void 
23040 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
23050 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75  (Parse*, int iCu
23060 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c  r, int iDb, Tabl
23070 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65  e*, int);.#if de
23080 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
23090 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54  BLE_UPDATE_DELET
230a0 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66  E_LIMIT) && !def
230b0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
230c0 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20  _SUBQUERY).Expr 
230d0 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65  *sqlite3LimitWhe
230e0 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73  re(Parse*,SrcLis
230f0 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
23100 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63  t*,Expr*,Expr*,c
23110 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  har*);.#endif.vo
23120 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
23130 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63  From(Parse*, Src
23140 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  List*, Expr*);.v
23150 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74  oid sqlite3Updat
23160 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
23170 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45  t*, ExprList*, E
23180 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72  xpr*, int);.Wher
23190 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68  eInfo *sqlite3Wh
231a0 65 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c  ereBegin(Parse*,
231b0 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
231c0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73  xprList*,ExprLis
231d0 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69  t*,u16,int);.voi
231e0 64 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e  d sqlite3WhereEn
231f0 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 75  d(WhereInfo*);.u
23200 36 34 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f  64 sqlite3WhereO
23210 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68  utputRowCount(Wh
23220 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
23230 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73  qlite3WhereIsDis
23240 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a  tinct(WhereInfo*
23250 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
23260 65 72 65 49 73 4f 72 64 65 72 65 64 28 57 68 65  ereIsOrdered(Whe
23270 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
23280 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74  lite3WhereIsSort
23290 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  ed(WhereInfo*);.
232a0 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
232b0 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57 68  ContinueLabel(Wh
232c0 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
232d0 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61 6b  qlite3WhereBreak
232e0 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a  Label(WhereInfo*
232f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
23300 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65  ereOkOnePass(Whe
23310 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a  reInfo*, int*);.
23320 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
23330 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72  odeGetColumn(Par
23340 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
23350 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
23360 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
23370 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66  rCodeGetColumnOf
23380 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62  Table(Vdbe*, Tab
23390 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
233a0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
233b0 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61  3ExprCodeMove(Pa
233c0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
233d0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
233e0 65 33 45 78 70 72 43 61 63 68 65 53 74 6f 72 65  e3ExprCacheStore
233f0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
23400 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
23410 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50 75  lite3ExprCachePu
23420 73 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  sh(Parse*);.void
23430 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
23440 65 50 6f 70 28 50 61 72 73 65 2a 29 3b 0a 76 6f  ePop(Parse*);.vo
23450 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
23460 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73 65 2a  cheRemove(Parse*
23470 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
23480 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
23490 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a 29 3b  heClear(Parse*);
234a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
234b0 72 43 61 63 68 65 41 66 66 69 6e 69 74 79 43 68  rCacheAffinityCh
234c0 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  ange(Parse*, int
234d0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
234e0 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61 72  ite3ExprCode(Par
234f0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
23500 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
23510 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62 6c 65  prCodeFactorable
23520 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
23530 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
23540 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69 74  e3ExprCodeAtInit
23550 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
23560 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
23570 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 65 6d  lite3ExprCodeTem
23580 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  p(Parse*, Expr*,
23590 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
235a0 74 65 33 45 78 70 72 43 6f 64 65 54 61 72 67 65  te3ExprCodeTarge
235b0 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  t(Parse*, Expr*,
235c0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
235d0 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64 43 61  te3ExprCodeAndCa
235e0 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  che(Parse*, Expr
235f0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
23600 69 74 65 33 45 78 70 72 43 6f 64 65 45 78 70 72  ite3ExprCodeExpr
23610 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70  List(Parse*, Exp
23620 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 75 38 29  rList*, int, u8)
23630 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ;.#define SQLITE
23640 5f 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30  _ECEL_DUP      0
23650 78 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f  x01  /* Deep, no
23660 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73  t shallow copies
23670 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
23680 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20  TE_ECEL_FACTOR  
23690 20 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72   0x02  /* Factor
236a0 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65   out constant te
236b0 72 6d 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  rms */.void sqli
236c0 74 65 33 45 78 70 72 49 66 54 72 75 65 28 50 61  te3ExprIfTrue(Pa
236d0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
236e0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
236f0 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 28  ite3ExprIfFalse(
23700 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
23710 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
23720 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73  qlite3ExprIfFals
23730 65 44 75 70 28 50 61 72 73 65 2a 2c 20 45 78 70  eDup(Parse*, Exp
23740 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54  r*, int, int);.T
23750 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e  able *sqlite3Fin
23760 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  dTable(sqlite3*,
23770 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
23780 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65  st char*);.Table
23790 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54   *sqlite3LocateT
237a0 61 62 6c 65 28 50 61 72 73 65 2a 2c 69 6e 74 20  able(Parse*,int 
237b0 69 73 56 69 65 77 2c 63 6f 6e 73 74 20 63 68 61  isView,const cha
237c0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
237d0 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
237e0 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28  LocateTableItem(
237f0 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65  Parse*,int isVie
23800 77 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  w,struct SrcList
23810 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20  _item *);.Index 
23820 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65  *sqlite3FindInde
23830 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  x(sqlite3*,const
23840 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
23850 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
23860 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
23870 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  eTable(sqlite3*,
23880 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
23890 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
238a0 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64  linkAndDeleteInd
238b0 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  ex(sqlite3*,int,
238c0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
238d0 69 64 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d  id sqlite3Vacuum
238e0 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71  (Parse*);.int sq
238f0 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63  lite3RunVacuum(c
23900 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29  har**, sqlite3*)
23910 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e  ;.char *sqlite3N
23920 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c  ameFromToken(sql
23930 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  ite3*, Token*);.
23940 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
23950 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c 20 45 78  ompare(Expr*, Ex
23960 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
23970 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f  qlite3ExprListCo
23980 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c  mpare(ExprList*,
23990 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29   ExprList*, int)
239a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
239b0 72 49 6d 70 6c 69 65 73 45 78 70 72 28 45 78 70  rImpliesExpr(Exp
239c0 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  r*, Expr*, int);
239d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
239e0 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74  rAnalyzeAggregat
239f0 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
23a00 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
23a10 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65  lite3ExprAnalyze
23a20 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74  AggList(NameCont
23a30 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b  ext*,ExprList*);
23a40 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e 63  .int sqlite3Func
23a50 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63 28  tionUsesThisSrc(
23a60 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29  Expr*, SrcList*)
23a70 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47  ;.Vdbe *sqlite3G
23a80 65 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a  etVdbe(Parse*);.
23a90 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67  void sqlite3Prng
23aa0 53 61 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b  SaveState(void);
23ab0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e  .void sqlite3Prn
23ac0 67 52 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f  gRestoreState(vo
23ad0 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
23ae0 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c  3RollbackAll(sql
23af0 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
23b00 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
23b10 66 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c  fySchema(Parse*,
23b20 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
23b30 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d  te3CodeVerifyNam
23b40 65 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c  edSchema(Parse*,
23b50 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
23b60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
23b70 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28  eginTransaction(
23b80 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
23b90 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74  id sqlite3Commit
23ba0 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
23bb0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
23bc0 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61 63  3RollbackTransac
23bd0 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f  tion(Parse*);.vo
23be0 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f  id sqlite3Savepo
23bf0 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
23c00 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
23c10 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70  qlite3CloseSavep
23c20 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29  oints(sqlite3 *)
23c30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c 65  ;.void sqlite3Le
23c40 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65  aveMutexAndClose
23c50 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a 29  Zombie(sqlite3*)
23c60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
23c70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72  rIsConstant(Expr
23c80 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
23c90 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74  xprIsConstantNot
23ca0 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74  Join(Expr*);.int
23cb0 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
23cc0 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e  nstantOrFunction
23cd0 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74  (Expr*, u8);.int
23ce0 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 54 61   sqlite3ExprIsTa
23cf0 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70 72  bleConstant(Expr
23d00 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  *,int);.int sqli
23d10 74 65 33 45 78 70 72 49 73 49 6e 74 65 67 65 72  te3ExprIsInteger
23d20 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69  (Expr*, int*);.i
23d30 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  nt sqlite3ExprCa
23d40 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78  nBeNull(const Ex
23d50 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
23d60 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69  3ExprNeedsNoAffi
23d70 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74  nityChange(const
23d80 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69   Expr*, char);.i
23d90 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69  nt sqlite3IsRowi
23da0 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  d(const char*);.
23db0 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
23dc0 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28 50 61  rateRowDelete(Pa
23dd0 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67  rse*,Table*,Trig
23de0 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ger*,int,int,int
23df0 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 29 3b 0a  ,i16,u8,u8,u8);.
23e00 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
23e10 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65  rateRowIndexDele
23e20 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  te(Parse*, Table
23e30 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
23e40 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
23e50 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28  enerateIndexKey(
23e60 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20  Parse*, Index*, 
23e70 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  int, int, int, i
23e80 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b  nt*,Index*,int);
23e90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
23ea0 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c  olvePartIdxLabel
23eb0 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
23ec0 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
23ed0 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63  teConstraintChec
23ee0 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ks(Parse*,Table*
23ef0 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  ,int*,int,int,in
23f00 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20  t,int,.         
23f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f20 20 20 20 20 20 20 20 20 20 20 20 20 75 38 2c 75              u8,u
23f30 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69  8,int,int*);.voi
23f40 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74  d sqlite3Complet
23f50 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65  eInsertion(Parse
23f60 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74  *,Table*,int,int
23f70 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e  ,int,int*,int,in
23f80 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  t,int);.int sqli
23f90 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49  te3OpenTableAndI
23fa0 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54  ndices(Parse*, T
23fb0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
23fc0 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a   u8*, int*, int*
23fd0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
23fe0 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69  eginWriteOperati
23ff0 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  on(Parse*, int, 
24000 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
24010 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72  e3MultiWrite(Par
24020 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
24030 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65  e3MayAbort(Parse
24040 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
24050 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50  HaltConstraint(P
24060 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
24070 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b   char*, i8, u8);
24080 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69  .void sqlite3Uni
24090 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  queConstraint(Pa
240a0 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78  rse*, int, Index
240b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
240c0 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28  RowidConstraint(
240d0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62  Parse*, int, Tab
240e0 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  le*);.Expr *sqli
240f0 74 65 33 45 78 70 72 44 75 70 28 73 71 6c 69 74  te3ExprDup(sqlit
24100 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a  e3*,Expr*,int);.
24110 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65  ExprList *sqlite
24120 33 45 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c  3ExprListDup(sql
24130 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  ite3*,ExprList*,
24140 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  int);.SrcList *s
24150 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75 70  qlite3SrcListDup
24160 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73  (sqlite3*,SrcLis
24170 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20  t*,int);.IdList 
24180 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75  *sqlite3IdListDu
24190 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73  p(sqlite3*,IdLis
241a0 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c  t*);.Select *sql
241b0 69 74 65 33 53 65 6c 65 63 74 44 75 70 28 73 71  ite3SelectDup(sq
241c0 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69  lite3*,Select*,i
241d0 6e 74 29 3b 0a 23 69 66 20 53 45 4c 45 43 54 54  nt);.#if SELECTT
241e0 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f 69  RACE_ENABLED.voi
241f0 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53  d sqlite3SelectS
24200 65 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c 63  etName(Select*,c
24210 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c  onst char*);.#el
24220 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
24230 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65  te3SelectSetName
24240 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69  (A,B).#endif.voi
24250 64 20 73 71 6c 69 74 65 33 46 75 6e 63 44 65 66  d sqlite3FuncDef
24260 49 6e 73 65 72 74 28 46 75 6e 63 44 65 66 48 61  Insert(FuncDefHa
24270 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a  sh*, FuncDef*);.
24280 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33  FuncDef *sqlite3
24290 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  FindFunction(sql
242a0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
242b0 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38 29  *,int,int,u8,u8)
242c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
242d0 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e  gisterBuiltinFun
242e0 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  ctions(sqlite3*)
242f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
24300 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75  gisterDateTimeFu
24310 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
24320 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
24330 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f  terGlobalFunctio
24340 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71  ns(void);.int sq
24350 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
24360 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  Ok(sqlite3*);.in
24370 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
24380 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c  heckSickOrOk(sql
24390 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
243a0 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65  ite3ChangeCookie
243b0 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a  (Parse*, int);..
243c0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
243d0 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26  ITE_OMIT_VIEW) &
243e0 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
243f0 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
24400 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65  void sqlite3Mate
24410 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73  rializeView(Pars
24420 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
24430 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  *, int);.#endif.
24440 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
24450 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76  OMIT_TRIGGER.  v
24460 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
24470 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
24480 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
24490 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72  t,int,IdList*,Sr
244a0 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  cList*,.        
244b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244c0 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e     Expr*,int, in
244d0 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
244e0 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28  e3FinishTrigger(
244f0 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53  Parse*, TriggerS
24500 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20  tep*, Token*);. 
24510 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f   void sqlite3Dro
24520 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  pTrigger(Parse*,
24530 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b   SrcList*, int);
24540 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
24550 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61  ropTriggerPtr(Pa
24560 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  rse*, Trigger*);
24570 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69  .  Trigger *sqli
24580 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74  te3TriggersExist
24590 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a  (Parse *, Table*
245a0 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
245b0 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20  , int *pMask);. 
245c0 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65   Trigger *sqlite
245d0 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61 72  3TriggerList(Par
245e0 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a  se *, Table *);.
245f0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
24600 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61 72  deRowTrigger(Par
24610 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  se*, Trigger *, 
24620 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  int, ExprList*, 
24630 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20  int, Table *,.  
24640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24650 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69            int, i
24660 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
24670 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
24680 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61 72  riggerDirect(Par
24690 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  se *, Trigger *,
246a0 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69   Table *, int, i
246b0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
246c0 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67   sqliteViewTrigg
246d0 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ers(Parse*, Tabl
246e0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
246f0 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f  ExprList*);.  vo
24700 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
24710 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69  TriggerStep(sqli
24720 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65  te3*, TriggerSte
24730 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  p*);.  TriggerSt
24740 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
24750 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c  erSelectStep(sql
24760 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  ite3*,Select*);.
24770 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
24780 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e 73  qlite3TriggerIns
24790 65 72 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ertStep(sqlite3*
247a0 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a  ,Token*, IdList*
247b0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
247c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247d0 20 20 20 20 20 20 20 20 20 20 53 65 6c 65 63 74            Select
247e0 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72  *,u8);.  Trigger
247f0 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
24800 67 67 65 72 55 70 64 61 74 65 53 74 65 70 28 73  ggerUpdateStep(s
24810 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45  qlite3*,Token*,E
24820 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c  xprList*, Expr*,
24830 20 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53   u8);.  TriggerS
24840 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
24850 67 65 72 44 65 6c 65 74 65 53 74 65 70 28 73 71  gerDeleteStep(sq
24860 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45  lite3*,Token*, E
24870 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  xpr*);.  void sq
24880 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
24890 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69  er(sqlite3*, Tri
248a0 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  gger*);.  void s
248b0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
248c0 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c  eleteTrigger(sql
248d0 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
248e0 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71  char*);.  u32 sq
248f0 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d  lite3TriggerColm
24900 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67  ask(Parse*,Trigg
24910 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  er*,ExprList*,in
24920 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74  t,int,Table*,int
24930 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  );.# define sqli
24940 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c  te3ParseToplevel
24950 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65  (p) ((p)->pTople
24960 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c  vel ? (p)->pTopl
24970 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 65 6c 73  evel : (p)).#els
24980 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
24990 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28  e3TriggersExist(
249a0 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64  B,C,D,E,F) 0.# d
249b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c  efine sqlite3Del
249c0 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a  eteTrigger(A,B).
249d0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
249e0 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 41  DropTriggerPtr(A
249f0 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,B).# define sql
24a00 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
24a10 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43  eteTrigger(A,B,C
24a20 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
24a30 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
24a40 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48  (A,B,C,D,E,F,G,H
24a50 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,I).# define sql
24a60 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
24a70 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44  erDirect(A,B,C,D
24a80 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73  ,E,F).# define s
24a90 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73  qlite3TriggerLis
24aa0 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69  t(X, Y) 0.# defi
24ab0 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54  ne sqlite3ParseT
24ac0 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64  oplevel(p) p.# d
24ad0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
24ae0 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c  ggerColmask(A,B,
24af0 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e  C,D,E,F,G) 0.#en
24b00 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  dif..int sqlite3
24b10 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c  JoinType(Parse*,
24b20 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
24b30 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
24b40 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72 65  qlite3CreateFore
24b50 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45  ignKey(Parse*, E
24b60 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  xprList*, Token*
24b70 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
24b80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
24b90 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50  eferForeignKey(P
24ba0 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66  arse*, int);.#if
24bb0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
24bc0 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20  _AUTHORIZATION. 
24bd0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
24be0 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70  hRead(Parse*,Exp
24bf0 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69  r*,Schema*,SrcLi
24c00 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  st*);.  int sqli
24c10 74 65 33 41 75 74 68 43 68 65 63 6b 28 50 61 72  te3AuthCheck(Par
24c20 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63  se*,int, const c
24c30 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
24c40 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
24c50 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
24c60 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50  uthContextPush(P
24c70 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65  arse*, AuthConte
24c80 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  xt*, const char*
24c90 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
24ca0 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28  3AuthContextPop(
24cb0 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20  AuthContext*);. 
24cc0 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68   int sqlite3Auth
24cd0 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20  ReadCol(Parse*, 
24ce0 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f  const char *, co
24cf0 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29  nst char *, int)
24d00 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
24d10 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
24d20 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69  (a,b,c,d).# defi
24d30 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 68  ne sqlite3AuthCh
24d40 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20  eck(a,b,c,d,e)  
24d50 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65    SQLITE_OK.# de
24d60 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
24d70 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c  ContextPush(a,b,
24d80 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  c).# define sqli
24d90 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f  te3AuthContextPo
24da0 70 28 61 29 20 20 28 28 76 6f 69 64 29 28 61 29  p(a)  ((void)(a)
24db0 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
24dc0 6c 69 74 65 33 41 74 74 61 63 68 28 50 61 72 73  lite3Attach(Pars
24dd0 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  e*, Expr*, Expr*
24de0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
24df0 71 6c 69 74 65 33 44 65 74 61 63 68 28 50 61 72  qlite3Detach(Par
24e00 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
24e10 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74  d sqlite3FixInit
24e20 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65  (DbFixer*, Parse
24e30 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
24e40 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  ar*, const Token
24e50 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
24e60 69 78 53 72 63 4c 69 73 74 28 44 62 46 69 78 65  ixSrcList(DbFixe
24e70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69  r*, SrcList*);.i
24e80 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c  nt sqlite3FixSel
24e90 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65  ect(DbFixer*, Se
24ea0 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
24eb0 74 65 33 46 69 78 45 78 70 72 28 44 62 46 69 78  te3FixExpr(DbFix
24ec0 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  er*, Expr*);.int
24ed0 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c   sqlite3FixExprL
24ee0 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78  ist(DbFixer*, Ex
24ef0 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
24f00 6c 69 74 65 33 46 69 78 54 72 69 67 67 65 72 53  lite3FixTriggerS
24f10 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72  tep(DbFixer*, Tr
24f20 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74  iggerStep*);.int
24f30 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e   sqlite3AtoF(con
24f40 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62  st char *z, doub
24f50 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69  le*, int, u8);.i
24f60 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74  nt sqlite3GetInt
24f70 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  32(const char *,
24f80 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
24f90 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68  te3Atoi(const ch
24fa0 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
24fb0 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63 6f  3Utf16ByteLen(co
24fc0 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61 2c  nst void *pData,
24fd0 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69 6e 74   int nChar);.int
24fe0 20 73 71 6c 69 74 65 33 55 74 66 38 43 68 61 72   sqlite3Utf8Char
24ff0 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  Len(const char *
25000 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65  pData, int nByte
25010 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74  );.u32 sqlite3Ut
25020 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a  f8Read(const u8*
25030 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  *);.LogEst sqlit
25040 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c  e3LogEst(u64);.L
25050 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
25060 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f  EstAdd(LogEst,Lo
25070 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  gEst);.#ifndef S
25080 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
25090 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73  ALTABLE.LogEst s
250a0 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d  qlite3LogEstFrom
250b0 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a  Double(double);.
250c0 23 65 6e 64 69 66 0a 75 36 34 20 73 71 6c 69 74  #endif.u64 sqlit
250d0 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f  e3LogEstToInt(Lo
250e0 67 45 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f  gEst);../*.** Ro
250f0 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61  utines to read a
25100 6e 64 20 77 72 69 74 65 20 76 61 72 69 61 62 6c  nd write variabl
25110 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
25120 73 2e 20 20 54 68 65 73 65 20 75 73 65 64 20 74  s.  These used t
25130 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20  o.** be defined 
25140 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77  locally, but now
25150 20 77 65 20 75 73 65 20 74 68 65 20 76 61 72 69   we use the vari
25160 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74  nt routines in t
25170 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c  he util.c.** fil
25180 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  e..*/.int sqlite
25190 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67  3PutVarint(unsig
251a0 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b  ned char*, u64);
251b0 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61  .u8 sqlite3GetVa
251c0 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67  rint(const unsig
251d0 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20  ned char *, u64 
251e0 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65  *);.u8 sqlite3Ge
251f0 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20  tVarint32(const 
25200 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
25210 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c   u32 *);.int sql
25220 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36  ite3VarintLen(u6
25230 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  4 v);../*.** The
25240 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20   common case is 
25250 66 6f 72 20 61 20 76 61 72 69 6e 74 20 74 6f 20  for a varint to 
25260 62 65 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65  be a single byte
25270 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e  .  They followin
25280 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64  g.** macros hand
25290 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  le the common ca
252a0 73 65 20 77 69 74 68 6f 75 74 20 61 20 70 72 6f  se without a pro
252b0 63 65 64 75 72 65 20 63 61 6c 6c 2c 20 62 75 74  cedure call, but
252c0 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68   then call.** th
252d0 65 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20  e procedure for 
252e0 6c 61 72 67 65 72 20 76 61 72 69 6e 74 73 2e 0a  larger varints..
252f0 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61  */.#define getVa
25300 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20  rint32(A,B)  \. 
25310 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29   (u8)((*(A)<(u8)
25320 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29  0x80)?((B)=(u32)
25330 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47  *(A)),1:sqlite3G
25340 65 74 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28  etVarint32((A),(
25350 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65  u32 *)&(B))).#de
25360 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32  fine putVarint32
25370 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28  (A,B)  \.  (u8)(
25380 28 28 75 33 32 29 28 42 29 3c 28 75 33 32 29 30  ((u32)(B)<(u32)0
25390 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69  x80)?(*(A)=(unsi
253a0 67 6e 65 64 20 63 68 61 72 29 28 42 29 29 2c 31  gned char)(B)),1
253b0 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56  :\.  sqlite3PutV
253c0 61 72 69 6e 74 28 28 41 29 2c 28 42 29 29 29 0a  arint((A),(B))).
253d0 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e  #define getVarin
253e0 74 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 56  t    sqlite3GetV
253f0 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75  arint.#define pu
25400 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74  tVarint    sqlit
25410 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f  e3PutVarint...co
25420 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
25430 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74  3IndexAffinitySt
25440 72 28 56 64 62 65 20 2a 2c 20 49 6e 64 65 78 20  r(Vdbe *, Index 
25450 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25460 54 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56 64  TableAffinity(Vd
25470 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  be*, Table*, int
25480 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43  );.char sqlite3C
25490 6f 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28 45  ompareAffinity(E
254a0 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72  xpr *pExpr, char
254b0 20 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69   aff2);.int sqli
254c0 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79  te3IndexAffinity
254d0 4f 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20  Ok(Expr *pExpr, 
254e0 63 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74  char idx_affinit
254f0 79 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  y);.char sqlite3
25500 45 78 70 72 41 66 66 69 6e 69 74 79 28 45 78 70  ExprAffinity(Exp
25510 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73  r *pExpr);.int s
25520 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e  qlite3Atoi64(con
25530 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20  st char*, i64*, 
25540 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
25550 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49  lite3DecOrHexToI
25560 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  64(const char*, 
25570 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  i64*);.void sqli
25580 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73 67 28  te3ErrorWithMsg(
25590 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
255a0 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
255b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
255c0 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  or(sqlite3*,int)
255d0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48  ;.void *sqlite3H
255e0 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33  exToBlob(sqlite3
255f0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  *, const char *z
25600 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c  , int n);.u8 sql
25610 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74  ite3HexToInt(int
25620 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   h);.int sqlite3
25630 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73  TwoPartName(Pars
25640 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f  e *, Token *, To
25650 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29  ken *, Token **)
25660 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  ;..#if defined(S
25670 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e  QLITE_NEED_ERR_N
25680 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72 20  AME).const char 
25690 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28  *sqlite3ErrName(
256a0 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f  int);.#endif..co
256b0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
256c0 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e  3ErrStr(int);.in
256d0 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  t sqlite3ReadSch
256e0 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72 73  ema(Parse *pPars
256f0 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  e);.CollSeq *sql
25700 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28  ite3FindCollSeq(
25710 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c  sqlite3*,u8 enc,
25720 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74   const char*,int
25730 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
25740 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71  te3LocateCollSeq
25750 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
25760 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65  const char*zName
25770 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
25780 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50  te3ExprCollSeq(P
25790 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
257a0 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72  pr *pExpr);.Expr
257b0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
257c0 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72  CollateToken(Par
257d0 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
257e0 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c  *, const Token*,
257f0 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c   int);.Expr *sql
25800 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61  ite3ExprAddColla
25810 74 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c  teString(Parse*,
25820 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  Expr*,const char
25830 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
25840 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65  3ExprSkipCollate
25850 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
25860 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71  ite3CheckCollSeq
25870 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65  (Parse *, CollSe
25880 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  q *);.int sqlite
25890 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65  3CheckObjectName
258a0 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20  (Parse *, const 
258b0 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71  char *);.void sq
258c0 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
258d0 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69  ges(sqlite3 *, i
258e0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
258f0 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  AddInt64(i64*,i6
25900 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  4);.int sqlite3S
25910 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ubInt64(i64*,i64
25920 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  );.int sqlite3Mu
25930 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  lInt64(i64*,i64)
25940 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73  ;.int sqlite3Abs
25950 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64  Int32(int);.#ifd
25960 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
25970 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20  _8_3_NAMES.void 
25980 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69  sqlite3FileSuffi
25990 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  x3(const char*, 
259a0 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  char*);.#else.# 
259b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69  define sqlite3Fi
259c0 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23  leSuffix3(X,Y).#
259d0 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33  endif.u8 sqlite3
259e0 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74  GetBoolean(const
259f0 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63   char *z,u8);..c
25a00 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74  onst void *sqlit
25a10 65 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69  e3ValueText(sqli
25a20 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b  te3_value*, u8);
25a30 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75  .int sqlite3Valu
25a40 65 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76  eBytes(sqlite3_v
25a50 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64  alue*, u8);.void
25a60 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
25a70 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  Str(sqlite3_valu
25a80 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76  e*, int, const v
25a90 6f 69 64 20 2a 2c 75 38 2c 20 0a 20 20 20 20 20  oid *,u8, .     
25aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ab0 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a     void(*)(void*
25ac0 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ));.void sqlite3
25ad0 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c  ValueSetNull(sql
25ae0 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f  ite3_value*);.vo
25af0 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  id sqlite3ValueF
25b00 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ree(sqlite3_valu
25b10 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c  e*);.sqlite3_val
25b20 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65  ue *sqlite3Value
25b30 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a  New(sqlite3 *);.
25b40 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66  char *sqlite3Utf
25b50 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c  16to8(sqlite3 *,
25b60 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
25b70 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
25b80 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  te3ValueFromExpr
25b90 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72  (sqlite3 *, Expr
25ba0 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69   *, u8, u8, sqli
25bb0 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76  te3_value **);.v
25bc0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
25bd0 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71  ApplyAffinity(sq
25be0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75  lite3_value *, u
25bf0 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20  8, u8);.#ifndef 
25c00 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
25c10 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  ION.extern const
25c20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
25c30 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70  qlite3OpcodeProp
25c40 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  erty[];.extern c
25c50 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
25c60 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54  ar sqlite3UpperT
25c70 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e  oLower[];.extern
25c80 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
25c90 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70  char sqlite3Ctyp
25ca0 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  eMap[];.extern c
25cb0 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74  onst Token sqlit
25cc0 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65  e3IntTokens[];.e
25cd0 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44  xtern SQLITE_WSD
25ce0 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43   struct Sqlite3C
25cf0 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e  onfig sqlite3Con
25d00 66 69 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49  fig;.extern SQLI
25d10 54 45 5f 57 53 44 20 46 75 6e 63 44 65 66 48 61  TE_WSD FuncDefHa
25d20 73 68 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  sh sqlite3Global
25d30 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64  Functions;.#ifnd
25d40 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
25d50 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71  SD.extern int sq
25d60 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65  lite3PendingByte
25d70 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  ;.#endif.#endif.
25d80 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74  void sqlite3Root
25d90 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65  PageMoved(sqlite
25da0 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  3*, int, int, in
25db0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25dc0 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  Reindex(Parse*, 
25dd0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
25de0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
25df0 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  erFunctions(void
25e00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
25e10 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28  lterRenameTable(
25e20 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
25e30 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
25e40 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63  qlite3GetToken(c
25e50 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
25e60 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f  ar *, int *);.vo
25e70 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64  id sqlite3Nested
25e80 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f  Parse(Parse*, co
25e90 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
25ea0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
25eb0 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
25ec0 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b  ments(sqlite3*);
25ed0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65  .int sqlite3Code
25ee0 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65 20  Subselect(Parse 
25ef0 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20  *, Expr *, int, 
25f00 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
25f10 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61 72  e3SelectPrep(Par
25f20 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61  se*, Select*, Na
25f30 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74  meContext*);.int
25f40 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70 61   sqlite3MatchSpa
25f50 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72  nName(const char
25f60 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
25f70 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
25f80 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
25f90 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70  qlite3ResolveExp
25fa0 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65  rNames(NameConte
25fb0 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  xt*, Expr*);.voi
25fc0 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
25fd0 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73  SelectNames(Pars
25fe0 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d  e*, Select*, Nam
25ff0 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64  eContext*);.void
26000 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53   sqlite3ResolveS
26010 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61 72  elfReference(Par
26020 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45  se*,Table*,int,E
26030 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b  xpr*,ExprList*);
26040 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f  .int sqlite3Reso
26050 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28  lveOrderGroupBy(
26060 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
26070 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
26080 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
26090 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61  qlite3ColumnDefa
260a0 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c  ult(Vdbe *, Tabl
260b0 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  e *, int, int);.
260c0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
260d0 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e  rFinishAddColumn
260e0 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20  (Parse *, Token 
260f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26100 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c  AlterBeginAddCol
26110 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63  umn(Parse *, Src
26120 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71  List *);.CollSeq
26130 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c   *sqlite3GetColl
26140 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20  Seq(Parse*, u8, 
26150 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74  CollSeq *, const
26160 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71   char*);.char sq
26170 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54 79 70  lite3AffinityTyp
26180 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75  e(const char*, u
26190 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
261a0 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c  3Analyze(Parse*,
261b0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
261c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76  ;.int sqlite3Inv
261d0 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42  okeBusyHandler(B
261e0 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e  usyHandler*);.in
261f0 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28  t sqlite3FindDb(
26200 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a  sqlite3*, Token*
26210 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
26220 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33  ndDbName(sqlite3
26230 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
26240 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e  );.int sqlite3An
26250 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74  alysisLoad(sqlit
26260 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f  e3*,int iDB);.vo
26270 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
26280 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c  IndexSamples(sql
26290 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76  ite3*,Index*);.v
262a0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 61 75  oid sqlite3Defau
262b0 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29  ltRowEst(Index*)
262c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
262d0 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69  gisterLikeFuncti
262e0 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ons(sqlite3*, in
262f0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  t);.int sqlite3I
26300 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71  sLikeFunction(sq
26310 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74  lite3*,Expr*,int
26320 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  *,char*);.void s
26330 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69 6c  qlite3MinimumFil
26340 65 46 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c 20  eFormat(Parse*, 
26350 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
26360 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65  sqlite3SchemaCle
26370 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65  ar(void *);.Sche
26380 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d  ma *sqlite3Schem
26390 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20  aGet(sqlite3 *, 
263a0 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71  Btree *);.int sq
263b0 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64  lite3SchemaToInd
263c0 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ex(sqlite3 *db, 
263d0 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e  Schema *);.KeyIn
263e0 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
263f0 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a  foAlloc(sqlite3*
26400 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
26410 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e  sqlite3KeyInfoUn
26420 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b  ref(KeyInfo*);.K
26430 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
26440 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66  eyInfoRef(KeyInf
26450 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71  o*);.KeyInfo *sq
26460 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e  lite3KeyInfoOfIn
26470 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65  dex(Parse*, Inde
26480 78 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  x*);.#ifdef SQLI
26490 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c  TE_DEBUG.int sql
264a0 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69  ite3KeyInfoIsWri
264b0 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29  teable(KeyInfo*)
264c0 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
264d0 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 73  ite3CreateFunc(s
264e0 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
264f0 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  char *, int, int
26500 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76 6f 69  , void *, .  voi
26510 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
26520 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
26530 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20  e3_value **),.  
26540 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
26550 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
26560 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
26570 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
26580 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46  3_context*),.  F
26590 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70  uncDestructor *p
265a0 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 69 6e  Destructor.);.in
265b0 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74  t sqlite3ApiExit
265c0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e  (sqlite3 *db, in
265d0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  t);.int sqlite3O
265e0 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28  penTempDatabase(
265f0 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20  Parse *);..void 
26600 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49  sqlite3StrAccumI
26610 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 73  nit(StrAccum*, s
26620 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c 20  qlite3*, char*, 
26630 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
26640 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41  sqlite3StrAccumA
26650 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c  ppend(StrAccum*,
26660 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
26670 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
26680 72 41 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28  rAccumAppendAll(
26690 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20  StrAccum*,const 
266a0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
266b0 69 74 65 33 41 70 70 65 6e 64 43 68 61 72 28 53  ite3AppendChar(S
266c0 74 72 41 63 63 75 6d 2a 2c 69 6e 74 2c 63 68 61  trAccum*,int,cha
266d0 72 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  r);.char *sqlite
266e0 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28  3StrAccumFinish(
266f0 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64  StrAccum*);.void
26700 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
26710 52 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29  Reset(StrAccum*)
26720 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
26730 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c  lectDestInit(Sel
26740 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74  ectDest*,int,int
26750 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
26760 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72  CreateColumnExpr
26770 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c  (sqlite3 *, SrcL
26780 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ist *, int, int)
26790 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  ;..void sqlite3B
267a0 61 63 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c  ackupRestart(sql
267b0 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a  ite3_backup *);.
267c0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b  void sqlite3Back
267d0 75 70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33  upUpdate(sqlite3
267e0 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c  _backup *, Pgno,
267f0 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23   const u8 *);..#
26800 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
26810 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
26820 54 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  T4.void sqlite3A
26830 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28  nalyzeFunctions(
26840 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74  void);.int sqlit
26850 65 33 53 74 61 74 34 50 72 6f 62 65 53 65 74 56  e3Stat4ProbeSetV
26860 61 6c 75 65 28 50 61 72 73 65 2a 2c 49 6e 64 65  alue(Parse*,Inde
26870 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  x*,UnpackedRecor
26880 64 2a 2a 2c 45 78 70 72 2a 2c 75 38 2c 69 6e 74  d**,Expr*,u8,int
26890 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ,int*);.int sqli
268a0 74 65 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f  te3Stat4ValueFro
268b0 6d 45 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78  mExpr(Parse*, Ex
268c0 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33  pr*, u8, sqlite3
268d0 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20  _value**);.void 
268e0 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62  sqlite3Stat4Prob
268f0 65 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65  eFree(UnpackedRe
26900 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  cord*);.int sqli
26910 74 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73  te3Stat4Column(s
26920 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76  qlite3*, const v
26930 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  oid*, int, int, 
26940 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
26950 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
26960 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f  The interface to
26970 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72   the LEMON-gener
26980 61 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76  ated parser.*/.v
26990 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73  oid *sqlite3Pars
269a0 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29  erAlloc(void*(*)
269b0 28 75 36 34 29 29 3b 0a 76 6f 69 64 20 73 71 6c  (u64));.void sql
269c0 69 74 65 33 50 61 72 73 65 72 46 72 65 65 28 76  ite3ParserFree(v
269d0 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f  oid*, void(*)(vo
269e0 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69  id*));.void sqli
269f0 74 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c  te3Parser(void*,
26a00 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72   int, Token, Par
26a10 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 59 59 54  se*);.#ifdef YYT
26a20 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54  RACKMAXSTACKDEPT
26a30 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50  H.  int sqlite3P
26a40 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76  arserStackPeak(v
26a50 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76  oid*);.#endif..v
26a60 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c  oid sqlite3AutoL
26a70 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oadExtensions(sq
26a80 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66  lite3*);.#ifndef
26a90 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41   SQLITE_OMIT_LOA
26aa0 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f  D_EXTENSION.  vo
26ab0 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45  id sqlite3CloseE
26ac0 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65  xtensions(sqlite
26ad0 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  3*);.#else.# def
26ae0 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  ine sqlite3Close
26af0 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65  Extensions(X).#e
26b00 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
26b10 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
26b20 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71  _CACHE.  void sq
26b30 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50  lite3TableLock(P
26b40 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  arse *, int, int
26b50 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72  , u8, const char
26b60 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65   *);.#else.  #de
26b70 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c  fine sqlite3Tabl
26b80 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29  eLock(v,w,x,y,z)
26b90 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
26ba0 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e  SQLITE_TEST.  in
26bb0 74 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38  t sqlite3Utf8To8
26bc0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29  (unsigned char*)
26bd0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
26be0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
26bf0 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66  TUALTABLE.#  def
26c00 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43  ine sqlite3VtabC
26c10 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e  lear(Y).#  defin
26c20 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e  e sqlite3VtabSyn
26c30 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b  c(X,Y) SQLITE_OK
26c40 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
26c50 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58  e3VtabRollback(X
26c60 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
26c70 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29  te3VtabCommit(X)
26c80 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
26c90 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29  e3VtabInSync(db)
26ca0 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c   0.#  define sql
26cb0 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 20  ite3VtabLock(X) 
26cc0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
26cd0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a  e3VtabUnlock(X).
26ce0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
26cf0 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
26d00 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
26d10 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
26d20 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54  t(X, Y, Z) SQLIT
26d30 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
26d40 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28  qlite3GetVTable(
26d50 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29  X,Y)  ((VTable*)
26d60 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64  0).#else.   void
26d70 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
26d80 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54  r(sqlite3 *db, T
26d90 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20  able*);.   void 
26da0 73 71 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f  sqlite3VtabDisco
26db0 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64  nnect(sqlite3 *d
26dc0 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20  b, Table *p);.  
26dd0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
26de0 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62  Sync(sqlite3 *db
26df0 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74  , Vdbe*);.   int
26e00 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c   sqlite3VtabRoll
26e10 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62  back(sqlite3 *db
26e20 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
26e30 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69  3VtabCommit(sqli
26e40 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69  te3 *db);.   voi
26e50 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63  d sqlite3VtabLoc
26e60 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
26e70 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
26e80 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29  Unlock(VTable *)
26e90 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
26ea0 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
26eb0 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e  sqlite3*);.   in
26ec0 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  t sqlite3VtabSav
26ed0 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a  epoint(sqlite3 *
26ee0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20  , int, int);.   
26ef0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
26f00 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56 64 62  ImportErrmsg(Vdb
26f10 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62  e*, sqlite3_vtab
26f20 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a 73  *);.   VTable *s
26f30 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28  qlite3GetVTable(
26f40 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a  sqlite3*, Table*
26f50 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  );.#  define sql
26f60 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64  ite3VtabInSync(d
26f70 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e  b) ((db)->nVTran
26f80 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54  s>0 && (db)->aVT
26f90 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a  rans==0).#endif.
26fa0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
26fb0 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72  MakeWritable(Par
26fc0 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69  se*,Table*);.voi
26fd0 64 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  d sqlite3VtabBeg
26fe0 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  inParse(Parse*, 
26ff0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
27000 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Token*, int);.vo
27010 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 46 69  id sqlite3VtabFi
27020 6e 69 73 68 50 61 72 73 65 28 50 61 72 73 65 2a  nishParse(Parse*
27030 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
27040 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e  sqlite3VtabArgIn
27050 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  it(Parse*);.void
27060 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 45   sqlite3VtabArgE
27070 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f  xtend(Parse*, To
27080 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
27090 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65  e3VtabCallCreate
270a0 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
270b0 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68  const char *, ch
270c0 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ar **);.int sqli
270d0 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65  te3VtabCallConne
270e0 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ct(Parse*, Table
270f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
27100 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73  tabCallDestroy(s
27110 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f  qlite3*, int, co
27120 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74  nst char *);.int
27130 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
27140 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61  n(sqlite3 *, VTa
27150 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20  ble *);.FuncDef 
27160 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72  *sqlite3VtabOver
27170 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  loadFunction(sql
27180 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c  ite3 *,FuncDef*,
27190 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a   int nArg, Expr*
271a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  );.void sqlite3I
271b0 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73  nvalidFunction(s
271c0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
271d0 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
271e0 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e  e**);.sqlite3_in
271f0 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43  t64 sqlite3StmtC
27200 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74  urrentTime(sqlit
27210 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e  e3_context*);.in
27220 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72  t sqlite3VdbePar
27230 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62 65  ameterIndex(Vdbe
27240 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
27250 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
27260 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67  3TransferBinding
27270 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  s(sqlite3_stmt *
27280 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  , sqlite3_stmt *
27290 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
272a0 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73 65  arserReset(Parse
272b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
272c0 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b  eprepare(Vdbe*);
272d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
272e0 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68  rListCheckLength
272f0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
27300 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
27310 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
27320 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43  e3BinaryCompareC
27330 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20  ollSeq(Parse *, 
27340 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b  Expr *, Expr *);
27350 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70  .int sqlite3Temp
27360 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73  InMemory(const s
27370 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20  qlite3*);.const 
27380 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75  char *sqlite3Jou
27390 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74  rnalModename(int
273a0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
273b0 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74  E_OMIT_WAL.  int
273c0 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
273d0 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  nt(sqlite3*, int
273e0 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
273f0 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
27400 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28  3WalDefaultHook(
27410 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
27420 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
27430 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
27440 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a  SQLITE_OMIT_CTE.
27450 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33 57    With *sqlite3W
27460 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57 69  ithAdd(Parse*,Wi
27470 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  th*,Token*,ExprL
27480 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20  ist*,Select*);. 
27490 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74   void sqlite3Wit
274a0 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  hDelete(sqlite3*
274b0 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20  ,With*);.  void 
274c0 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28  sqlite3WithPush(
274d0 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75  Parse*, With*, u
274e0 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  8);.#else.#defin
274f0 65 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73  e sqlite3WithPus
27500 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65  h(x,y,z).#define
27510 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
27520 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a  te(x,y).#endif..
27530 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20  /* Declarations 
27540 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e  for functions in
27550 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20   fkey.c. All of 
27560 74 68 65 73 65 20 61 72 65 20 72 65 70 6c 61 63  these are replac
27570 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d  ed by.** no-op m
27580 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f  acros if OMIT_FO
27590 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66  REIGN_KEY is def
275a0 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ined. In this ca
275b0 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a  se no foreign.**
275c0 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69   key functionali
275d0 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e  ty is available.
275e0 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52   If OMIT_TRIGGER
275f0 20 69 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a   is defined but.
27600 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  ** OMIT_FOREIGN_
27610 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79  KEY is not, only
27620 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   some of the fun
27630 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70  ctions are no-op
27640 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63  ed. In.** this c
27650 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  ase foreign keys
27660 20 61 72 65 20 70 61 72 73 65 64 2c 20 62 75 74   are parsed, but
27670 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69   no other functi
27680 6f 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a 20 70  onality is .** p
27690 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65  rovided (enforce
276a0 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74  ment of FK const
276b0 72 61 69 6e 74 73 20 72 65 71 75 69 72 65 73 20  raints requires 
276c0 74 68 65 20 74 72 69 67 67 65 72 73 20 73 75 62  the triggers sub
276d0 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66  -system)..*/.#if
276e0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
276f0 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
27700 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  Y) && !defined(S
27710 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
27720 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ER).  void sqlit
27730 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a  e3FkCheck(Parse*
27740 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
27750 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  nt, int*, int);.
27760 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
27770 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
27780 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62  , SrcList *, Tab
27790 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  le*);.  void sql
277a0 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61  ite3FkActions(Pa
277b0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
277c0 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
277d0 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20  t*, int);.  int 
277e0 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65  sqlite3FkRequire
277f0 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  d(Parse*, Table*
27800 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  , int*, int);.  
27810 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64  u32 sqlite3FkOld
27820 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  mask(Parse*, Tab
27830 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71  le*);.  FKey *sq
27840 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65  lite3FkReference
27850 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73  s(Table *);.#els
27860 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
27870 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62  te3FkActions(a,b
27880 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66  ,c,d,e,f).  #def
27890 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65  ine sqlite3FkChe
278a0 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a  ck(a,b,c,d,e,f).
278b0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
278c0 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62  3FkDropTable(a,b
278d0 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,c).  #define sq
278e0 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61  lite3FkOldmask(a
278f0 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a 20 20  ,b)         0.  
27900 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
27910 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c  kRequired(a,b,c,
27920 64 29 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23  d)    0.#endif.#
27930 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
27940 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20  IT_FOREIGN_KEY. 
27950 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44   void sqlite3FkD
27960 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c  elete(sqlite3 *,
27970 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20   Table*);.  int 
27980 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
27990 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c  ndex(Parse*,Tabl
279a0 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a  e*,FKey*,Index**
279b0 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20  ,int**);.#else. 
279c0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
279d0 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20  FkDelete(a,b).  
279e0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
279f0 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62  kLocateIndex(a,b
27a00 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a  ,c,d,e).#endif..
27a10 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65  ./*.** Available
27a20 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73   fault injectors
27a30 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d  .  Should be num
27a40 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20  bered beginning 
27a50 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69  with 0..*/.#defi
27a60 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49  ne SQLITE_FAULTI
27a70 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20  NJECTOR_MALLOC  
27a80 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c     0.#define SQL
27a90 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f  ITE_FAULTINJECTO
27aa0 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a  R_COUNT      1..
27ab0 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
27ac0 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20  ace to the code 
27ad0 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20  in fault.c used 
27ae0 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20  for identifying 
27af0 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c  "benign".** mall
27b00 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69  oc failures. Thi
27b10 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e  s is only presen
27b20 74 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  t if SQLITE_OMIT
27b30 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a  _BUILTIN_TEST.**
27b40 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e   is not defined.
27b50 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
27b60 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
27b70 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  TEST.  void sqli
27b80 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
27b90 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f  lloc(void);.  vo
27ba0 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  id sqlite3EndBen
27bb0 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ignMalloc(void);
27bc0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
27bd0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
27be0 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64  ignMalloc().  #d
27bf0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64  efine sqlite3End
27c00 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23  BenignMalloc().#
27c10 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  endif../*.** All
27c20 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75  owed return valu
27c30 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46  es from sqlite3F
27c40 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a  indInIndex().*/.
27c50 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
27c60 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20 31 20  _ROWID        1 
27c70 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20    /* Search the 
27c80 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62  rowid of the tab
27c90 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  le */.#define IN
27ca0 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20  _INDEX_EPH      
27cb0 20 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63      2   /* Searc
27cc0 68 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62  h an ephemeral b
27cd0 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65  -tree */.#define
27ce0 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
27cf0 41 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78  ASC    3   /* Ex
27d00 69 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43  isting index ASC
27d10 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e  ENDING */.#defin
27d20 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
27d30 5f 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45  _DESC   4   /* E
27d40 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45  xisting index DE
27d50 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66  SCENDING */.#def
27d60 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  ine IN_INDEX_NOO
27d70 50 20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a  P         5   /*
27d80 20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61   No table availa
27d90 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69  ble. Use compari
27da0 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c  sons */./*.** Al
27db0 6c 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20  lowed flags for 
27dc0 74 68 65 20 33 72 64 20 70 61 72 61 6d 65 74 65  the 3rd paramete
27dd0 72 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64  r to sqlite3Find
27de0 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64  InIndex()..*/.#d
27df0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e  efine IN_INDEX_N
27e00 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30  OOP_OK     0x000
27e10 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75  1  /* OK to retu
27e20 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  rn IN_INDEX_NOOP
27e30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
27e40 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20  NDEX_MEMBERSHIP 
27e50 20 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f   0x0002  /* IN o
27e60 70 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72  perator used for
27e70 20 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73 74   membership test
27e80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
27e90 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20  NDEX_LOOP       
27ea0 20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f   0x0004  /* IN o
27eb0 70 65 72 61 74 6f 72 20 75 73 65 64 20 61 73 20  perator used as 
27ec0 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71  a loop */.int sq
27ed0 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
27ee0 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a  (Parse *, Expr *
27ef0 2c 20 75 33 32 2c 20 69 6e 74 2a 29 3b 0a 0a 23  , u32, int*);..#
27f00 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
27f10 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  BLE_ATOMIC_WRITE
27f20 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
27f30 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65  urnalOpen(sqlite
27f40 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63  3_vfs *, const c
27f50 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66  har *, sqlite3_f
27f60 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ile *, int, int)
27f70 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  ;.  int sqlite3J
27f80 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74  ournalSize(sqlit
27f90 65 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74  e3_vfs *);.  int
27fa0 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43   sqlite3JournalC
27fb0 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69  reate(sqlite3_fi
27fc0 6c 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  le *);.  int sql
27fd0 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74  ite3JournalExist
27fe0 73 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  s(sqlite3_file *
27ff0 70 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  p);.#else.  #def
28000 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  ine sqlite3Journ
28010 61 6c 53 69 7a 65 28 70 56 66 73 29 20 28 28 70  alSize(pVfs) ((p
28020 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a  Vfs)->szOsFile).
28030 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
28040 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 70  3JournalExists(p
28050 29 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  ) 1.#endif..void
28060 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e   sqlite3MemJourn
28070 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66  alOpen(sqlite3_f
28080 69 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ile *);.int sqli
28090 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a  te3MemJournalSiz
280a0 65 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c  e(void);.int sql
280b0 69 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c  ite3IsMemJournal
280c0 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
280d0 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  ;..void sqlite3E
280e0 78 70 72 53 65 74 48 65 69 67 68 74 41 6e 64 46  xprSetHeightAndF
280f0 6c 61 67 73 28 50 61 72 73 65 20 2a 70 50 61 72  lags(Parse *pPar
28100 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23 69  se, Expr *p);.#i
28110 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50  f SQLITE_MAX_EXP
28120 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20  R_DEPTH>0.  int 
28130 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
28140 72 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a  rHeight(Select *
28150 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
28160 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28  ExprCheckHeight(
28170 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65  Parse*, int);.#e
28180 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
28190 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48  lite3SelectExprH
281a0 65 69 67 68 74 28 78 29 20 30 0a 20 20 23 64 65  eight(x) 0.  #de
281b0 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72  fine sqlite3Expr
281c0 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29  CheckHeight(x,y)
281d0 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c  .#endif..u32 sql
281e0 69 74 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e  ite3Get4byte(con
281f0 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71  st u8*);.void sq
28200 6c 69 74 65 33 50 75 74 34 62 79 74 65 28 75 38  lite3Put4byte(u8
28210 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66  *, u32);..#ifdef
28220 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
28230 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76  NLOCK_NOTIFY.  v
28240 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
28250 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c  ctionBlocked(sql
28260 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20  ite3 *, sqlite3 
28270 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
28280 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f  e3ConnectionUnlo
28290 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62  cked(sqlite3 *db
282a0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
282b0 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
282c0 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  d(sqlite3 *db);.
282d0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
282e0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
282f0 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20  nBlocked(x,y).  
28300 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
28310 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65  onnectionUnlocke
28320 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73  d(x).  #define s
28330 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
28340 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66  Closed(x).#endif
28350 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
28360 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c  DEBUG.  void sql
28370 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28  ite3ParserTrace(
28380 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a  FILE*, char *);.
28390 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
283a0 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
283b0 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73 74  LE IOTRACE exist
283c0 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61  s then the globa
283d0 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71  l variable.** sq
283e0 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73 20  lite3IoTrace is 
283f0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70  a pointer to a p
28400 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69  rintf-like routi
28410 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72  ne used to.** pr
28420 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20  int I/O tracing 
28430 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69  messages. .*/.#i
28440 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
28450 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66  LE_IOTRACE.# def
28460 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20  ine IOTRACE(A)  
28470 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61  if( sqlite3IoTra
28480 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54  ce ){ sqlite3IoT
28490 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64  race A; }.  void
284a0 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
284b0 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53  aceSql(Vdbe*);.S
284c0 51 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54 45  QLITE_API SQLITE
284d0 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53 51  _EXTERN void (SQ
284e0 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69  LITE_CDECL *sqli
284f0 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73  te3IoTrace)(cons
28500 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65  t char*,...);.#e
28510 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54  lse.# define IOT
28520 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65  RACE(A).# define
28530 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
28540 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66  aceSql(X).#endif
28550 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f  ../*.** These ro
28560 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c  utines are avail
28570 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d  able for the mem
28580 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65  2.c debugging me
28590 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a  mory allocator.*
285a0 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72  * only.  They ar
285b0 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79  e used to verify
285c0 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74 20   that different 
285d0 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72  "types" of memor
285e0 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  y.** allocations
285f0 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72   are properly tr
28600 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79 73  acked by the sys
28610 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  tem..**.** sqlit
28620 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
28630 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74 79  e() sets the "ty
28640 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61  pe" of an alloca
28650 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a  tion to one of.*
28660 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20  * the MEMTYPE_* 
28670 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62  macros defined b
28680 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20  elow.  The type 
28690 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61 73  must be a bitmas
286a0 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67  k with.** a sing
286b0 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a  le bit set..**.*
286c0 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
286d0 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75 72  gHasType() retur
286e0 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f  ns true if any o
286f0 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74  f the bits in it
28700 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75  s second.** argu
28710 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74  ment match the t
28720 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70  ype set by the p
28730 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d  revious sqlite3M
28740 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
28750 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  ..** sqlite3Memd
28760 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69 73  ebugHasType() is
28770 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73   intended for us
28780 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74 28  e inside assert(
28790 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  ) statements..**
287a0 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
287b0 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75  bugNoType() retu
287c0 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65  rns true if none
287d0 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20   of the bits in 
287e0 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72  its second.** ar
287f0 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65  gument match the
28800 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65   type set by the
28810 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65   previous sqlite
28820 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
28830 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70  ()..**.** Perhap
28840 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72  s the most impor
28850 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68  tant point is th
28860 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
28870 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41  ween MEMTYPE_HEA
28880 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45  P.** and MEMTYPE
28890 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20  _LOOKASIDE.  If 
288a0 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73  an allocation is
288b0 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
288c0 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a  DE, that means.*
288d0 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65 20  * it might have 
288e0 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62  been allocated b
288f0 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63  y lookaside, exc
28900 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69  ept the allocati
28910 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61  on was.** too la
28920 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65  rge or lookaside
28930 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c   was already ful
28940 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74  l.  It is import
28950 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  ant to verify.**
28960 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e   that allocation
28970 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76  s that might hav
28980 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65 64  e been satisfied
28990 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72   by lookaside ar
289a0 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20  e not.** passed 
289b0 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b  back to non-look
289c0 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75  aside free() rou
289d0 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20  tines.  Asserts 
289e0 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65  such as the.** e
289f0 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65  xample above are
28a00 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e   placed on the n
28a10 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
28a20 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20  e() routines to 
28a30 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63  verify.** this c
28a40 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a  onstraint. .**.*
28a50 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73  * All of this is
28a60 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f   no-op for a pro
28a70 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20  duction build.  
28a80 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e  It only comes in
28a90 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20  to.** play when 
28aa0 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  the SQLITE_MEMDE
28ab0 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  BUG compile-time
28ac0 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e   option is used.
28ad0 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
28ae0 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69  E_MEMDEBUG.  voi
28af0 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  d sqlite3Memdebu
28b00 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75  gSetType(void*,u
28b10 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  8);.  int sqlite
28b20 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
28b30 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e  (void*,u8);.  in
28b40 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  t sqlite3Memdebu
28b50 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  gNoType(void*,u8
28b60 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
28b70 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
28b80 67 53 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f  gSetType(X,Y)  /
28b90 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66  * no-op */.# def
28ba0 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
28bb0 62 75 67 48 61 73 54 79 70 65 28 58 2c 59 29 20  bugHasType(X,Y) 
28bc0 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   1.# define sqli
28bd0 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
28be0 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69  e(X,Y)   1.#endi
28bf0 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  f.#define MEMTYP
28c00 45 5f 48 45 41 50 20 20 20 20 20 20 20 30 78 30  E_HEAP       0x0
28c10 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65  1  /* General he
28c20 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  ap allocations *
28c30 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
28c40 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30  E_LOOKASIDE  0x0
28c50 32 20 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20  2  /* Heap that 
28c60 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
28c70 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65  lookaside */.#de
28c80 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52  fine MEMTYPE_SCR
28c90 41 54 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a  ATCH    0x04  /*
28ca0 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74   Scratch allocat
28cb0 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
28cc0 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20  MEMTYPE_PCACHE  
28cd0 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65     0x08  /* Page
28ce0 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f   cache allocatio
28cf0 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72  ns */../*.** Thr
28d00 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65  eading interface
28d10 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
28d20 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
28d30 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  S>0.int sqlite3T
28d40 68 72 65 61 64 43 72 65 61 74 65 28 53 51 4c 69  hreadCreate(SQLi
28d50 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a  teThread**,void*
28d60 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a  (*)(void*),void*
28d70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68  );.int sqlite3Th
28d80 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54  readJoin(SQLiteT
28d90 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b  hread*, void**);
28da0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66  .#endif..#if def
28db0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
28dc0 4c 45 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20  LE_DBSTAT_VTAB) 
28dd0 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
28de0 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69  E_TEST).int sqli
28df0 74 65 33 44 62 73 74 61 74 52 65 67 69 73 74 65  te3DbstatRegiste
28e00 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e  r(sqlite3*);.#en
28e10 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 5f  dif..#endif /* _
28e20 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f 0a  SQLITEINT_H_ */.