/ Hex Artifact Content
Login

Artifact 88738d94a343000e7a5c0e295d111c4cfccb18b0:


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 69  pedef struct Pri
7640: 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69  ntfArguments Pri
7650: 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79  ntfArguments;.ty
7660: 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77  pedef struct Row
7670: 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65  Set RowSet;.type
7680: 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70  def struct Savep
7690: 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a  oint Savepoint;.
76a0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
76b0: 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79  elect Select;.ty
76c0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 51 4c  pedef struct SQL
76d0: 69 74 65 54 68 72 65 61 64 20 53 51 4c 69 74 65  iteThread SQLite
76e0: 54 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66 20  Thread;.typedef 
76f0: 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
7700: 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79  t SelectDest;.ty
7710: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 72 63  pedef struct Src
7720: 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79  List SrcList;.ty
7730: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 74 72  pedef struct Str
7740: 41 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a  Accum StrAccum;.
7750: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
7760: 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65  able Table;.type
7770: 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65  def struct Table
7780: 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a  Lock TableLock;.
7790: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
77a0: 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65  oken Token;.type
77b0: 64 65 66 20 73 74 72 75 63 74 20 54 72 65 65 56  def struct TreeV
77c0: 69 65 77 20 54 72 65 65 56 69 65 77 3b 0a 74 79  iew TreeView;.ty
77d0: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
77e0: 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74 79  gger Trigger;.ty
77f0: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
7800: 67 67 65 72 50 72 67 20 54 72 69 67 67 65 72 50  ggerPrg TriggerP
7810: 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  rg;.typedef stru
7820: 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 54  ct TriggerStep T
7830: 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70 65  riggerStep;.type
7840: 64 65 66 20 73 74 72 75 63 74 20 55 6e 70 61 63  def struct Unpac
7850: 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63 6b  kedRecord Unpack
7860: 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64 65  edRecord;.typede
7870: 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  f struct VTable 
7880: 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20  VTable;.typedef 
7890: 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20 56  struct VtabCtx V
78a0: 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20  tabCtx;.typedef 
78b0: 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61  struct Walker Wa
78c0: 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74  lker;.typedef st
78d0: 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57  ruct WhereInfo W
78e0: 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65  hereInfo;.typede
78f0: 66 20 73 74 72 75 63 74 20 57 69 74 68 20 57 69  f struct With Wi
7900: 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72  th;../*.** Defer
7910: 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68   sourcing vdbe.h
7920: 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74   and btree.h unt
7930: 69 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38  il after the "u8
7940: 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73 79 48  " and .** "BusyH
7950: 61 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66 73  andler" typedefs
7960: 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72 65  . vdbe.h also re
7970: 71 75 69 72 65 73 20 61 20 66 65 77 20 6f 66 20  quires a few of 
7980: 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f  the opaque.** po
7990: 69 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e 65  inter types (i.e
79a0: 2e 20 46 75 6e 63 44 65 66 29 20 64 65 66 69 6e  . FuncDef) defin
79b0: 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e  ed above..*/.#in
79c0: 63 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22 0a  clude "btree.h".
79d0: 23 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68  #include "vdbe.h
79e0: 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67 65  ".#include "page
79f0: 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  r.h".#include "p
7a00: 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e 63 6c 75  cache.h"..#inclu
7a10: 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75  de "os.h".#inclu
7a20: 64 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a 0a 2f  de "mutex.h".../
7a30: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
7a40: 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63  se file to be ac
7a50: 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73 79  cessed by the sy
7a60: 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61  stem is an insta
7a70: 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f  nce.** of the fo
7a80: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
7a90: 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f  e.  There are no
7aa0: 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68  rmally two of th
7ab0: 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a  ese structures.*
7ac0: 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e  * in the sqlite.
7ad0: 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44  aDb[] array.  aD
7ae0: 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e  b[0] is the main
7af0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
7b00: 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20  nd.** aDb[1] is 
7b10: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
7b20: 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74  e used to hold t
7b30: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
7b40: 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20    Additional.** 
7b50: 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62 65  databases may be
7b60: 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74   attached..*/.st
7b70: 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72  ruct Db {.  char
7b80: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
7b90: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
7ba0: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 42   database */.  B
7bb0: 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20  tree *pBt;      
7bc0: 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65      /* The B*Tre
7bd0: 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  e structure for 
7be0: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 66 69  this database fi
7bf0: 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74  le */.  u8 safet
7c00: 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20  y_level;     /* 
7c10: 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20 61  How aggressive a
7c20: 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74  t syncing data t
7c30: 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63 68 65  o disk */.  Sche
7c40: 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
7c50: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 64   /* Pointer to d
7c60: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28  atabase schema (
7c70: 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64 29  possibly shared)
7c80: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
7c90: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
7ca0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
7cb0: 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64 61  ture stores a da
7cc0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a  tabase schema..*
7cd0: 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61  *.** Most Schema
7ce0: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73 73   objects are ass
7cf0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 42  ociated with a B
7d00: 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65 70  tree.  The excep
7d10: 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53  tion is.** the S
7d20: 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54 45  chema for the TE
7d30: 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71 6c  MP databaes (sql
7d40: 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68 69  ite3.aDb[1]) whi
7d50: 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e 64  ch is free-stand
7d60: 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65  ing..** In share
7d70: 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61 20  d cache mode, a 
7d80: 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f 62  single Schema ob
7d90: 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61 72  ject can be shar
7da0: 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a  ed by multiple.*
7db0: 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72 65  * Btrees that re
7dc0: 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20  fer to the same 
7dd0: 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68 61  underlying BtSha
7de0: 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 0a  red object..** .
7df0: 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  ** Schema object
7e00: 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  s are automatica
7e10: 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20  lly deallocated 
7e20: 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74  when the last Bt
7e30: 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65  ree that.** refe
7e40: 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64  rences them is d
7e50: 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20  estroyed.   The 
7e60: 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d  TEMP Schema is m
7e70: 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79  anually freed by
7e80: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  .** sqlite3_clos
7e90: 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65  e()..*.** A thre
7ea0: 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69  ad must be holdi
7eb0: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
7ec0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
7ed0: 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a  Btree in order.*
7ee0: 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65  * to access Sche
7ef0: 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69  ma content.  Thi
7f00: 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74  s implies that t
7f10: 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61  he thread must a
7f20: 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e  lso be.** holdin
7f30: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
7f40: 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74   sqlite3 connect
7f50: 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74  ion pointer that
7f60: 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e   owns the Btree.
7f70: 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53  .** For a TEMP S
7f80: 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20  chema, only the 
7f90: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78  connection mutex
7fa0: 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f   is required..*/
7fb0: 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b  .struct Schema {
7fc0: 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f  .  int schema_co
7fd0: 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62  okie;   /* Datab
7fe0: 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  ase schema versi
7ff0: 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  on number for th
8000: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74  is file */.  int
8010: 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20   iGeneration;   
8020: 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20    /* Generation 
8030: 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d  counter.  Increm
8040: 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20  ented with each 
8050: 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68  change */.  Hash
8060: 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20   tblHash;       
8070: 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69   /* All tables i
8080: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
8090: 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68  /.  Hash idxHash
80a0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
80b0: 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20  (named) indices 
80c0: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
80d0: 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61  */.  Hash trigHa
80e0: 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  sh;       /* All
80f0: 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65   triggers indexe
8100: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
8110: 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20  ash fkeyHash;   
8120: 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69      /* All forei
8130: 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72  gn keys by refer
8140: 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65  enced table name
8150: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65   */.  Table *pSe
8160: 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68  qTab;      /* Th
8170: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
8180: 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20  e table used by 
8190: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
81a0: 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61  .  u8 file_forma
81b0: 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  t;      /* Schem
81c0: 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e  a format version
81d0: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
81e0: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
81f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
8200: 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62   encoding used b
8210: 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  y this database 
8220: 2a 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46  */.  u16 schemaF
8230: 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61  lags;     /* Fla
8240: 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
8250: 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a  th this schema *
8260: 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69  /.  int cache_si
8270: 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ze;      /* Numb
8280: 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75  er of pages to u
8290: 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20  se in the cache 
82a0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
82b0: 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
82c0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
82d0: 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
82e0: 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44 62 2e  s in the .** Db.
82f0: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66  pSchema->flags f
8300: 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
8310: 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 44   DbHasProperty(D
8320: 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d  ,I,P)     (((D)-
8330: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
8340: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29  >schemaFlags&(P)
8350: 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
8360: 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79  DbHasAnyProperty
8370: 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e  (D,I,P)  (((D)->
8380: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
8390: 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29  schemaFlags&(P))
83a0: 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53  !=0).#define DbS
83b0: 65 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  etProperty(D,I,P
83c0: 29 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49  )     (D)->aDb[I
83d0: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
83e0: 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  aFlags|=(P).#def
83f0: 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65  ine DbClearPrope
8400: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29  rty(D,I,P)   (D)
8410: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
8420: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e  ->schemaFlags&=~
8430: 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  (P)../*.** Allow
8440: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  ed values for th
8450: 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  e DB.pSchema->fl
8460: 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a  ags field..**.**
8470: 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f   The DB_SchemaLo
8480: 61 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74  aded flag is set
8490: 20 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62   after the datab
84a0: 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62  ase schema has b
84b0: 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f  een.** read into
84c0: 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74   internal hash t
84d0: 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f  ables..**.** DB_
84e0: 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61  UnresetViews mea
84f0: 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d  ns that one or m
8500: 6f 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63  ore views have c
8510: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74  olumn names that
8520: 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69  .** have been fi
8530: 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68  lled out.  If th
8540: 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  e schema changes
8550: 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e  , these column n
8560: 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68  ames might.** ch
8570: 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65  anges and so the
8580: 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20   view will need 
8590: 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a  to be reset..*/.
85a0: 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d  #define DB_Schem
85b0: 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30  aLoaded    0x000
85c0: 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61  1  /* The schema
85d0: 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64   has been loaded
85e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55   */.#define DB_U
85f0: 6e 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30  nresetViews    0
8600: 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76  x0002  /* Some v
8610: 69 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65  iews have define
8620: 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a  d column names *
8630: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70  /.#define DB_Emp
8640: 74 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30  ty           0x0
8650: 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65  004  /* The file
8660: 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74   is empty (lengt
8670: 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f  h 0 bytes) */../
8680: 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20  *.** The number 
8690: 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e  of different kin
86a0: 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61  ds of things tha
86b0: 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64  t can be limited
86c0: 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71  .** using the sq
86d0: 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e  lite3_limit() in
86e0: 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66  terface..*/.#def
86f0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d  ine SQLITE_N_LIM
8700: 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54  IT (SQLITE_LIMIT
8710: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2b  _WORKER_THREADS+
8720: 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73  1)../*.** Lookas
8730: 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20  ide malloc is a 
8740: 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a  set of fixed-siz
8750: 65 20 62 75 66 66 65 72 73 20 74 68 61 74 20 63  e buffers that c
8760: 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f  an be used.** to
8770: 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74   satisfy small t
8780: 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20  ransient memory 
8790: 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65  allocation reque
87a0: 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a  sts for objects.
87b0: 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ** associated wi
87c0: 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  th a particular 
87d0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
87e0: 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66  ion.  The use of
87f0: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** lookaside ma
8800: 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20  lloc provides a 
8810: 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66  significant perf
8820: 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d  ormance enhancem
8830: 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31  ent.** (approx 1
8840: 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20  0%) by avoiding 
8850: 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f  numerous malloc/
8860: 66 72 65 65 20 72 65 71 75 65 73 74 73 20 77 68  free requests wh
8870: 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53  ile parsing.** S
8880: 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  QL statements..*
8890: 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69  *.** The Lookasi
88a0: 64 65 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  de structure hol
88b0: 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ds configuration
88c0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
88d0: 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73  ut the.** lookas
88e0: 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79  ide malloc subsy
88f0: 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69  stem.  Each avai
8900: 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  lable memory all
8910: 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68  ocation in.** th
8920: 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73  e lookaside subs
8930: 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20  ystem is stored 
8940: 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  on a linked list
8950: 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f   of LookasideSlo
8960: 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a  t.** objects..**
8970: 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c  .** Lookaside al
8980: 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e  locations are on
8990: 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f  ly allowed for o
89a0: 62 6a 65 63 74 73 20 74 68 61 74 20 61 72 65 20  bjects that are 
89b0: 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69  associated.** wi
89c0: 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  th a particular 
89d0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
89e0: 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68  ion.  Hence, sch
89f0: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ema information 
8a00: 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f  cannot.** be sto
8a10: 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65  red in lookaside
8a20: 20 62 65 63 61 75 73 65 20 69 6e 20 73 68 61 72   because in shar
8a30: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68  ed cache mode th
8a40: 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  e schema informa
8a50: 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65  tion.** is share
8a60: 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61  d by multiple da
8a70: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
8a80: 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20  ns.  Therefore, 
8a90: 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a  while parsing.**
8aa0: 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   schema informat
8ab0: 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69  ion, the Lookasi
8ac0: 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67  de.bEnabled flag
8ad0: 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74   is cleared so t
8ae0: 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65  hat.** lookaside
8af0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
8b00: 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e   not used to con
8b10: 73 74 72 75 63 74 20 74 68 65 20 73 63 68 65 6d  struct the schem
8b20: 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74  a objects..*/.st
8b30: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b  ruct Lookaside {
8b40: 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20  .  u16 sz;      
8b50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
8b60: 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66 66 65  ze of each buffe
8b70: 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  r in bytes */.  
8b80: 75 38 20 62 45 6e 61 62 6c 65 64 3b 20 20 20 20  u8 bEnabled;    
8b90: 20 20 20 20 20 20 20 20 2f 2a 20 46 61 6c 73 65          /* False
8ba0: 20 74 6f 20 64 69 73 61 62 6c 65 20 6e 65 77 20   to disable new 
8bb0: 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  lookaside alloca
8bc0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62 4d  tions */.  u8 bM
8bd0: 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20  alloced;        
8be0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53     /* True if pS
8bf0: 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72  tart obtained fr
8c00: 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  om sqlite3_mallo
8c10: 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75  c() */.  int nOu
8c20: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
8c30: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75   /* Number of bu
8c40: 66 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20  ffers currently 
8c50: 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20  checked out */. 
8c60: 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20   int mxOut;     
8c70: 20 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68           /* High
8c80: 77 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e  water mark for n
8c90: 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53  Out */.  int anS
8ca0: 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20  tat[3];         
8cb0: 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a   /* 0: hits.  1:
8cc0: 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32   size misses.  2
8cd0: 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f  : full misses */
8ce0: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
8cf0: 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69   *pFree;   /* Li
8d00: 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  st of available 
8d10: 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69  buffers */.  voi
8d20: 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20  d *pStart;      
8d30: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79       /* First by
8d40: 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  te of available 
8d50: 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a  memory space */.
8d60: 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20    void *pEnd;   
8d70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
8d80: 73 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64  st byte past end
8d90: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70   of available sp
8da0: 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74  ace */.};.struct
8db0: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b   LookasideSlot {
8dc0: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
8dd0: 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e   *pNext;    /* N
8de0: 65 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68  ext buffer in th
8df0: 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62  e list of free b
8e00: 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  uffers */.};../*
8e10: 0a 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65  .** A hash table
8e20: 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 64 65   for function de
8e30: 66 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  finitions..**.**
8e40: 20 48 61 73 68 20 65 61 63 68 20 46 75 6e 63 44   Hash each FuncD
8e50: 65 66 20 73 74 72 75 63 74 75 72 65 20 69 6e 74  ef structure int
8e60: 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  o one of the Fun
8e70: 63 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f  cDefHash.a[] slo
8e80: 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e  ts..** Collision
8e90: 73 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e  s are on the Fun
8ea0: 63 44 65 66 2e 70 48 61 73 68 20 63 68 61 69 6e  cDef.pHash chain
8eb0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63  ..*/.struct Func
8ec0: 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63  DefHash {.  Func
8ed0: 44 65 66 20 2a 61 5b 32 33 5d 3b 20 20 20 20 20  Def *a[23];     
8ee0: 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20    /* Hash table 
8ef0: 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  for functions */
8f00: 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  .};..#ifdef SQLI
8f10: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
8f20: 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66  CATION./*.** Inf
8f30: 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e  ormation held in
8f40: 20 74 68 65 20 22 73 71 6c 69 74 65 33 22 20 64   the "sqlite3" d
8f50: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
8f60: 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73  on object and us
8f70: 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20  ed.** to manage 
8f80: 75 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74  user authenticat
8f90: 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ion..*/.typedef 
8fa0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75  struct sqlite3_u
8fb0: 73 65 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f  serauth sqlite3_
8fc0: 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74  userauth;.struct
8fd0: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
8fe0: 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76  h {.  u8 authLev
8ff0: 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  el;             
9000: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61      /* Current a
9010: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65  uthentication le
9020: 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75  vel */.  int nAu
9030: 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20  thPW;           
9040: 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
9050: 66 20 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e  f the zAuthPW in
9060: 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72   bytes */.  char
9070: 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20   *zAuthPW;      
9080: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73            /* Pas
9090: 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75  sword used to au
90a0: 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20  thenticate */.  
90b0: 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b  char *zAuthUser;
90c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
90d0: 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20   User name used 
90e0: 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20  to authenticate 
90f0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  */.};../* Allowe
9100: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c  d values for sql
9110: 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75  ite3_userauth.au
9120: 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69  thLevel */.#defi
9130: 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e  ne UAUTH_Unknown
9140: 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75       0     /* Au
9150: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74  thentication not
9160: 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a   yet checked */.
9170: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61  #define UAUTH_Fa
9180: 69 6c 20 20 20 20 20 20 20 20 31 20 20 20 20 20  il        1     
9190: 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69  /* User authenti
91a0: 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f  cation failed */
91b0: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55  .#define UAUTH_U
91c0: 73 65 72 20 20 20 20 20 20 20 20 32 20 20 20 20  ser        2    
91d0: 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65   /* Authenticate
91e0: 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73  d as a normal us
91f0: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  er */.#define UA
9200: 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20  UTH_Admin       
9210: 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  3     /* Authent
9220: 69 63 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d  icated as an adm
9230: 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f  inistrator */../
9240: 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64  * Functions used
9250: 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75   only by user au
9260: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69  thorization logi
9270: 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  c */.int sqlite3
9280: 55 73 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f  UserAuthTable(co
9290: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
92a0: 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 43  sqlite3UserAuthC
92b0: 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65  heckLogin(sqlite
92c0: 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75  3*,const char*,u
92d0: 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
92e0: 33 55 73 65 72 41 75 74 68 49 6e 69 74 28 73 71  3UserAuthInit(sq
92f0: 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
9300: 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63 28 73  lite3CryptFunc(s
9310: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
9320: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
9330: 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a  e**);..#endif /*
9340: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
9350: 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a  HENTICATION */..
9360: 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f  /*.** typedef fo
9370: 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74  r the authorizat
9380: 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e  ion callback fun
9390: 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66  ction..*/.#ifdef
93a0: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
93b0: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79  HENTICATION.  ty
93c0: 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69  pedef int (*sqli
93d0: 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a  te3_xauth)(void*
93e0: 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
93f0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
9400: 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20  st char*,.      
9410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9420: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
9430: 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
9440: 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  *);.#else.  type
9450: 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65  def int (*sqlite
9460: 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69  3_xauth)(void*,i
9470: 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  nt,const char*,c
9480: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
9490: 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20   char*,.        
94a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94b0: 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
94c0: 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  r*);.#endif.../*
94d0: 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73  .** Each databas
94e0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
94f0: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
9500: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
9510: 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
9520: 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71  t sqlite3 {.  sq
9530: 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b  lite3_vfs *pVfs;
9540: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
9550: 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  S Interface */. 
9560: 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70 56   struct Vdbe *pV
9570: 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dbe;           /
9580: 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65  * List of active
9590: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
95a0: 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  s */.  CollSeq *
95b0: 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20  pDfltColl;      
95c0: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61       /* The defa
95d0: 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ult collating se
95e0: 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20  quence (BINARY) 
95f0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
9600: 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20  ex *mutex;      
9610: 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e     /* Connection
9620: 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a   mutex */.  Db *
9630: 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  aDb;            
9640: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
9650: 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69   backends */.  i
9660: 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20  nt nDb;         
9670: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9680: 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e  Number of backen
9690: 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ds currently in 
96a0: 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61  use */.  int fla
96b0: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
96c0: 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c         /* Miscel
96d0: 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20 53  laneous flags. S
96e0: 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36  ee below */.  i6
96f0: 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20  4 lastRowid;    
9700: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
9710: 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63  OWID of most rec
9720: 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65 20  ent insert (see 
9730: 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20  above) */.  i64 
9740: 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  szMmap;         
9750: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
9760: 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73  ault mmap_size s
9770: 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73 69  etting */.  unsi
9780: 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61  gned int openFla
9790: 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61  gs;       /* Fla
97a0: 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c  gs passed to sql
97b0: 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29  ite3_vfs.xOpen()
97c0: 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64   */.  int errCod
97d0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
97e0: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
97f0: 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53  nt error code (S
9800: 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e  QLITE_*) */.  in
9810: 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20  t errMask;      
9820: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26              /* &
9830: 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69   result codes wi
9840: 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20 72  th this before r
9850: 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75 31  eturning */.  u1
9860: 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20  6 dbOptFlags;   
9870: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
9880: 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64  lags to enable/d
9890: 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74  isable optimizat
98a0: 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 65 6e 63  ions */.  u8 enc
98b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
98c0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
98d0: 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 75 38  encoding */.  u8
98e0: 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20   autoCommit;    
98f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
9900: 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66  he auto-commit f
9910: 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d  lag. */.  u8 tem
9920: 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20  p_store;        
9930: 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69          /* 1: fi
9940: 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20  le 2: memory 0: 
9950: 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20  default */.  u8 
9960: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20  mallocFailed;   
9970: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
9980: 75 65 20 69 66 20 77 65 20 68 61 76 65 20 73 65  ue if we have se
9990: 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c  en a malloc fail
99a0: 75 72 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74  ure */.  u8 dflt
99b0: 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20  LockMode;       
99c0: 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
99d0: 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66  t locking-mode f
99e0: 6f 72 20 61 74 74 61 63 68 65 64 20 64 62 73 20  or attached dbs 
99f0: 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72  */.  signed char
9a00: 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20   nextAutovac;   
9a10: 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65     /* Autovac se
9a20: 74 74 69 6e 67 20 61 66 74 65 72 20 56 41 43 55  tting after VACU
9a30: 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75  UM if >=0 */.  u
9a40: 38 20 73 75 70 70 72 65 73 73 45 72 72 3b 20 20  8 suppressErr;  
9a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9a60: 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72  Do not issue err
9a70: 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66 20 74  or messages if t
9a80: 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62  rue */.  u8 vtab
9a90: 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20  OnConflict;     
9aa0: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
9ab0: 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33  to return for s3
9ac0: 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63  _vtab_on_conflic
9ad0: 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72  t() */.  u8 isTr
9ae0: 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
9af0: 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  nt;    /* True i
9b00: 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20  f the outermost 
9b10: 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54  savepoint is a T
9b20: 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50  S */.  int nextP
9b30: 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20  agesize;        
9b40: 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65       /* Pagesize
9b50: 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66   after VACUUM if
9b60: 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67   >0 */.  u32 mag
9b70: 69 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ic;             
9b80: 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20         /* Magic 
9b90: 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63  number for detec
9ba0: 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65  t library misuse
9bb0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67   */.  int nChang
9bc0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
9bd0: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74      /* Value ret
9be0: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
9bf0: 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20  _changes() */.  
9c00: 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65  int nTotalChange
9c10: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
9c20: 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   Value returned 
9c30: 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c  by sqlite3_total
9c40: 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20  _changes() */.  
9c50: 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54  int aLimit[SQLIT
9c60: 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a  E_N_LIMIT];   /*
9c70: 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74   Limits */.  int
9c80: 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b   nMaxSorterMmap;
9c90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
9ca0: 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65  ximum size of re
9cb0: 67 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20  gions mapped by 
9cc0: 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75  sorter */.  stru
9cd0: 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e  ct sqlite3InitIn
9ce0: 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66  fo {      /* Inf
9cf0: 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75  ormation used du
9d00: 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74  ring initializat
9d10: 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e  ion */.    int n
9d20: 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  ewTnum;         
9d30: 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61         /* Rootpa
9d40: 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e  ge of table bein
9d50: 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
9d60: 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20  .    u8 iDb;    
9d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d80: 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c   /* Which db fil
9d90: 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69  e is being initi
9da0: 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38  alized */.    u8
9db0: 20 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20   busy;          
9dc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55            /* TRU
9dd0: 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69  E if currently i
9de0: 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20  nitializing */. 
9df0: 20 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67     u8 orphanTrig
9e00: 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ger;           /
9e10: 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  * Last statement
9e20: 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d   is orphaned TEM
9e30: 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 20  P trigger */.   
9e40: 20 75 38 20 69 6d 70 6f 73 74 65 72 54 61 62 6c   u8 imposterTabl
9e50: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
9e60: 42 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f  Building an impo
9e70: 73 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20  ster table */.  
9e80: 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56  } init;.  int nV
9e90: 64 62 65 41 63 74 69 76 65 3b 20 20 20 20 20 20  dbeActive;      
9ea0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
9eb0: 72 20 6f 66 20 56 44 42 45 73 20 63 75 72 72 65  r of VDBEs curre
9ec0: 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a  ntly running */.
9ed0: 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b    int nVdbeRead;
9ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ef0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
9f00: 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72  ive VDBEs that r
9f10: 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a  ead or write */.
9f20: 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65    int nVdbeWrite
9f30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9f40: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
9f50: 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72  ive VDBEs that r
9f60: 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f  ead and write */
9f70: 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63  .  int nVdbeExec
9f80: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9f90: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
9fa0: 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64  sted calls to Vd
9fb0: 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e  beExec() */.  in
9fc0: 74 20 6e 56 44 65 73 74 72 6f 79 3b 20 20 20 20  t nVDestroy;    
9fd0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
9fe0: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
9ff0: 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f 70 65 72  OP_VDestroy oper
a000: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  ations */.  int 
a010: 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  nExtension;     
a020: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
a030: 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78  ber of loaded ex
a040: 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f  tensions */.  vo
a050: 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b  id **aExtension;
a060: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
a070: 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c  rray of shared l
a080: 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a  ibrary handles *
a090: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63  /.  void (*xTrac
a0a0: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
a0b0: 68 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a  har*);        /*
a0c0: 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   Trace function 
a0d0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63  */.  void *pTrac
a0e0: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
a0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a100: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
a110: 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  e trace function
a120: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72   */.  void (*xPr
a130: 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  ofile)(void*,con
a140: 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20  st char*,u64);  
a150: 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e  /* Profiling fun
a160: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
a170: 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20  *pProfileArg;   
a180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a190: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
a1a0: 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63   to profile func
a1b0: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
a1c0: 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20  pCommitArg;     
a1d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
a1e0: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d  rgument to xComm
a1f0: 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20  itCallback() */ 
a200: 20 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d    .  int (*xComm
a210: 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  itCallback)(void
a220: 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65  *);    /* Invoke
a230: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
a240: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52  t. */.  void *pR
a250: 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20  ollbackArg;     
a260: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
a270: 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61  ument to xRollba
a280: 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20  ckCallback() */ 
a290: 20 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c    .  void (*xRol
a2a0: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76  lbackCallback)(v
a2b0: 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65  oid*); /* Invoke
a2c0: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
a2d0: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  t. */.  void *pU
a2e0: 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64  pdateArg;.  void
a2f0: 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61   (*xUpdateCallba
a300: 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  ck)(void*,int, c
a310: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
a320: 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e   char*,sqlite_in
a330: 74 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  t64);.#ifndef SQ
a340: 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
a350: 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61  int (*xWalCallba
a360: 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69  ck)(void *, sqli
a370: 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
a380: 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  r *, int);.  voi
a390: 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64  d *pWalArg;.#end
a3a0: 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  if.  void(*xColl
a3b0: 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71  Needed)(void*,sq
a3c0: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
a3d0: 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  Rep,const char*)
a3e0: 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  ;.  void(*xCollN
a3f0: 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73  eeded16)(void*,s
a400: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
a410: 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a  tRep,const void*
a420: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c  );.  void *pColl
a430: 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c  NeededArg;.  sql
a440: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72  ite3_value *pErr
a450: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f  ;          /* Mo
a460: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
a470: 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69  message */.  uni
a480: 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c  on {.    volatil
a490: 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70  e int isInterrup
a4a0: 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20  ted; /* True if 
a4b0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
a4c0: 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  t has been calle
a4d0: 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20  d */.    double 
a4e0: 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20  notUsed1;       
a4f0: 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a       /* Spacer *
a500: 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b  /.  } u1;.  Look
a510: 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b  aside lookaside;
a520: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
a530: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f  kaside malloc co
a540: 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23  nfiguration */.#
a550: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
a560: 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
a570: 0a 20 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68  .  sqlite3_xauth
a580: 20 78 41 75 74 68 3b 20 20 20 20 20 20 20 20 20   xAuth;         
a590: 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f   /* Access autho
a5a0: 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f  rization functio
a5b0: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  n */.  void *pAu
a5c0: 74 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  thArg;          
a5d0: 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75       /* 1st argu
a5e0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65  ment to the acce
a5f0: 73 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e  ss auth function
a600: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
a610: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
a620: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
a630: 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65  .  int (*xProgre
a640: 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  ss)(void *);    
a650: 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73   /* The progress
a660: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76   callback */.  v
a670: 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72  oid *pProgressAr
a680: 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
a690: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
a6a0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
a6b0: 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  k */.  unsigned 
a6c0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20  nProgressOps;   
a6d0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
a6e0: 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72  f opcodes for pr
a6f0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
a700: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
a710: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
a720: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
a730: 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20   nVTrans;       
a740: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
a750: 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20  located size of 
a760: 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73  aVTrans */.  Has
a770: 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20  h aModule;      
a780: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f             /* po
a790: 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74  pulated by sqlit
a7a0: 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  e3_create_module
a7b0: 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20  () */.  VtabCtx 
a7c0: 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20  *pVtabCtx;      
a7d0: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74        /* Context
a7e0: 20 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62   for active vtab
a7f0: 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20   connect/create 
a800: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56  */.  VTable **aV
a810: 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20  Trans;          
a820: 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61     /* Virtual ta
a830: 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74  bles with open t
a840: 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  ransactions */. 
a850: 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e   VTable *pDiscon
a860: 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63  nect;    /* Disc
a870: 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20  onnect these in 
a880: 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65  next sqlite3_pre
a890: 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66  pare() */.#endif
a8a0: 0a 20 20 46 75 6e 63 44 65 66 48 61 73 68 20 61  .  FuncDefHash a
a8b0: 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20  Func;           
a8c0: 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f   /* Hash table o
a8d0: 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e  f connection fun
a8e0: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68  ctions */.  Hash
a8f0: 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20   aCollSeq;      
a900: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
a910: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
a920: 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61  nces */.  BusyHa
a930: 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65  ndler busyHandle
a940: 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20  r;      /* Busy 
a950: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62  callback */.  Db
a960: 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20   aDbStatic[2];  
a970: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
a980: 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20  tatic space for 
a990: 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61  the 2 default ba
a9a0: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65  ckends */.  Save
a9b0: 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
a9c0: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  t;        /* Lis
a9d0: 74 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65  t of active save
a9e0: 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  points */.  int 
a9f0: 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20  busyTimeout;    
aa00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73            /* Bus
aa10: 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75  y handler timeou
aa20: 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20  t, in msec */.  
aa30: 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20  int nSavepoint; 
aa40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
aa50: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74   Number of non-t
aa60: 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
aa70: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  oints */.  int n
aa80: 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20  Statement;      
aa90: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
aaa0: 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61  er of nested sta
aab0: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
aac0: 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ons  */.  i64 nD
aad0: 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20  eferredCons;    
aae0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
aaf0: 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
ab00: 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63  nts this transac
ab10: 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e  tion. */.  i64 n
ab20: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
ab30: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20           /* Net 
ab40: 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61  deferred immedia
ab50: 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  te constraints *
ab60: 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73  /.  int *pnBytes
ab70: 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20  Freed;          
ab80: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c    /* If not NULL
ab90: 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73  , increment this
aba0: 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a   in DbFree() */.
abb0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
abc0: 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
abd0: 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  FY.  /* The foll
abe0: 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20  owing variables 
abf0: 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65  are all protecte
ac00: 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f  d by the STATIC_
ac10: 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74  MASTER .  ** mut
ac20: 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74  ex, not by sqlit
ac30: 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61  e3.mutex. They a
ac40: 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20  re used by code 
ac50: 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20  in notify.c. .  
ac60: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
ac70: 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e  UnlockConnection
ac80: 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ==Y, that means 
ac90: 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e  that X is waitin
aca0: 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20  g for Y to.  ** 
acb0: 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69  unlock so that i
acc0: 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20  t can proceed.. 
acd0: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
ace0: 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74  pBlockingConnect
acf0: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
ad00: 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e  ns that somethin
ad10: 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20  g that X tried. 
ad20: 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20   ** tried to do 
ad30: 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20  recently failed 
ad40: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c  with an SQLITE_L
ad50: 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20  OCKED error due 
ad60: 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65  to locks.  ** he
ad70: 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20  ld by Y..  */.  
ad80: 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69  sqlite3 *pBlocki
ad90: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a  ngConnection; /*
ada0: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74   Connection that
adb0: 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c   caused SQLITE_L
adc0: 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74  OCKED */.  sqlit
add0: 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65  e3 *pUnlockConne
ade0: 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  ction;          
adf0: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
ae00: 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f  o watch for unlo
ae10: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  ck */.  void *pU
ae20: 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20  nlockArg;       
ae30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ae40: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e   Argument to xUn
ae50: 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20  lockNotify */.  
ae60: 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f  void (*xUnlockNo
ae70: 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69  tify)(void **, i
ae80: 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20  nt);  /* Unlock 
ae90: 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20  notify callback 
aea0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e  */.  sqlite3 *pN
aeb0: 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20  extBlocked;     
aec0: 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
aed0: 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65  st of all blocke
aee0: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f  d connections */
aef0: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
af00: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
af10: 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69  NTICATION.  sqli
af20: 74 65 33 5f 75 73 65 72 61 75 74 68 20 61 75 74  te3_userauth aut
af30: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65  h;        /* Use
af40: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
af50: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
af60: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
af70: 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63   A macro to disc
af80: 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e  over the encodin
af90: 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e  g of a database.
afa0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45  .*/.#define SCHE
afb0: 4d 41 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29  MA_ENC(db) ((db)
afc0: 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61  ->aDb[0].pSchema
afd0: 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45  ->enc).#define E
afe0: 4e 43 28 64 62 29 20 20 20 20 20 20 20 20 28 28  NC(db)        ((
aff0: 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a  db)->enc)../*.**
b000: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
b010: 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33   for the sqlite3
b020: 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69  .flags..*/.#defi
b030: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72  ne SQLITE_VdbeTr
b040: 61 63 65 20 20 20 20 20 20 30 78 30 30 30 30 30  ace      0x00000
b050: 30 30 31 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  001  /* True to 
b060: 74 72 61 63 65 20 56 44 42 45 20 65 78 65 63 75  trace VDBE execu
b070: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
b080: 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
b090: 6e 67 65 73 20 20 30 78 30 30 30 30 30 30 30 32  nges  0x00000002
b0a0: 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64    /* Uncommitted
b0b0: 20 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e   Hash table chan
b0c0: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ges */.#define S
b0d0: 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20  QLITE_FullFSync 
b0e0: 20 20 20 20 20 30 78 30 30 30 30 30 30 30 34 20       0x00000004 
b0f0: 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79   /* Use full fsy
b100: 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e  nc on the backen
b110: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
b120: 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e  ITE_CkptFullFSyn
b130: 63 20 20 30 78 30 30 30 30 30 30 30 38 20 20 2f  c  0x00000008  /
b140: 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63  * Use full fsync
b150: 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 20   for checkpoint 
b160: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b170: 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20  E_CacheSpill    
b180: 20 30 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20   0x00000010  /* 
b190: 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61 67 65  OK to spill page
b1a0: 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69  r cache */.#defi
b1b0: 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f  ne SQLITE_FullCo
b1c0: 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30 30  lNames   0x00000
b1d0: 30 32 30 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c  020  /* Show ful
b1e0: 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f  l column names o
b1f0: 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66  n SELECT */.#def
b200: 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74  ine SQLITE_Short
b210: 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30  ColNames  0x0000
b220: 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73 68  0040  /* Show sh
b230: 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65  ort columns name
b240: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b250: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20  ITE_CountRows   
b260: 20 20 20 30 78 30 30 30 30 30 30 38 30 20 20 2f     0x00000080  /
b270: 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61  * Count rows cha
b280: 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20  nged by INSERT, 
b290: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
b2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b2c0: 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44    DELETE, or UPD
b2d0: 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a  ATE and return *
b2e0: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
b2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b300: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
b310: 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67   the count using
b320: 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a   a callback. */.
b330: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
b340: 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78  ullCallback   0x
b350: 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e 76  00000100  /* Inv
b360: 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  oke the callback
b370: 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a   once if the */.
b380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72            /*   r
b3b0: 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70  esult set is emp
b3c0: 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ty */.#define SQ
b3d0: 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20  LITE_SqlTrace   
b3e0: 20 20 20 20 30 78 30 30 30 30 30 32 30 30 20 20      0x00000200  
b3f0: 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20 53  /* Debug print S
b400: 51 4c 20 61 73 20 69 74 20 65 78 65 63 75 74 65  QL as it execute
b410: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b420: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20  ITE_VdbeListing 
b430: 20 20 20 30 78 30 30 30 30 30 34 30 30 20 20 2f     0x00000400  /
b440: 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73  * Debug listings
b450: 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61 6d   of VDBE program
b460: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b470: 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20  ITE_WriteSchema 
b480: 20 20 20 30 78 30 30 30 30 30 38 30 30 20 20 2f     0x00000800  /
b490: 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53  * OK to update S
b4a0: 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a  QLITE_MASTER */.
b4b0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
b4c0: 64 62 65 41 64 64 6f 70 54 72 61 63 65 20 30 78  dbeAddopTrace 0x
b4d0: 30 30 30 30 31 30 30 30 20 20 2f 2a 20 54 72 61  00001000  /* Tra
b4e0: 63 65 20 73 71 6c 69 74 65 33 56 64 62 65 41 64  ce sqlite3VdbeAd
b4f0: 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23  dOp() calls */.#
b500: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67  define SQLITE_Ig
b510: 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78 30  noreChecks   0x0
b520: 30 30 30 32 30 30 30 20 20 2f 2a 20 44 6f 20 6e  0002000  /* Do n
b530: 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b  ot enforce check
b540: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
b550: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
b560: 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20 30  eadUncommitted 0
b570: 78 30 30 30 34 30 30 30 20 20 2f 2a 20 46 6f 72  x0004000  /* For
b580: 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
b590: 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  de */.#define SQ
b5a0: 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46  LITE_LegacyFileF
b5b0: 6d 74 20 20 30 78 30 30 30 30 38 30 30 30 20 20  mt  0x00008000  
b5c0: 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64 61  /* Create new da
b5d0: 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61  tabases in forma
b5e0: 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  t 1 */.#define S
b5f0: 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f  QLITE_RecoveryMo
b600: 64 65 20 20 20 30 78 30 30 30 31 30 30 30 30 20  de   0x00010000 
b610: 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65 6d   /* Ignore schem
b620: 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66  a errors */.#def
b630: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72  ine SQLITE_Rever
b640: 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30 32  seOrder   0x0002
b650: 30 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65  0000  /* Reverse
b660: 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43   unordered SELEC
b670: 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  Ts */.#define SQ
b680: 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73  LITE_RecTriggers
b690: 20 20 20 20 30 78 30 30 30 34 30 30 30 30 20 20      0x00040000  
b6a0: 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73  /* Enable recurs
b6b0: 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ive triggers */.
b6c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
b6d0: 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78  oreignKeys    0x
b6e0: 30 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e 66  00080000  /* Enf
b6f0: 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  orce foreign key
b700: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f   constraints  */
b710: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b720: 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30  AutoIndex      0
b730: 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20 45 6e  x00100000  /* En
b740: 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69  able automatic i
b750: 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndexes */.#defin
b760: 65 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72 42  e SQLITE_PreferB
b770: 75 69 6c 74 69 6e 20 20 30 78 30 30 32 30 30 30  uiltin  0x002000
b780: 30 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63  00  /* Preferenc
b790: 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75  e to built-in fu
b7a0: 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ncs */.#define S
b7b0: 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73  QLITE_LoadExtens
b7c0: 69 6f 6e 20 20 30 78 30 30 34 30 30 30 30 30 20  ion  0x00400000 
b7d0: 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f   /* Enable load_
b7e0: 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65  extension */.#de
b7f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62  fine SQLITE_Enab
b800: 6c 65 54 72 69 67 67 65 72 20 20 30 78 30 30 38  leTrigger  0x008
b810: 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74  00000  /* True t
b820: 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72  o enable trigger
b830: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b840: 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20  ITE_DeferFKs    
b850: 20 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f     0x01000000  /
b860: 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b 20 63  * Defer all FK c
b870: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
b880: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65  efine SQLITE_Que
b890: 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78 30 32  ryOnly      0x02
b8a0: 30 30 30 30 30 30 20 20 2f 2a 20 44 69 73 61 62  000000  /* Disab
b8b0: 6c 65 20 64 61 74 61 62 61 73 65 20 63 68 61 6e  le database chan
b8c0: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ges */.#define S
b8d0: 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 20 20  QLITE_VdbeEQP   
b8e0: 20 20 20 20 20 30 78 30 34 30 30 30 30 30 30 20       0x04000000 
b8f0: 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49   /* Debug EXPLAI
b900: 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a  N QUERY PLAN */.
b910: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
b920: 61 63 75 75 6d 20 20 20 20 20 20 20 20 20 30 78  acuum         0x
b930: 30 38 30 30 30 30 30 30 20 20 2f 2a 20 43 75 72  08000000  /* Cur
b940: 72 65 6e 74 6c 79 20 69 6e 20 61 20 56 41 43 55  rently in a VACU
b950: 55 4d 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69  UM */.../*.** Bi
b960: 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ts of the sqlite
b970: 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65  3.dbOptFlags fie
b980: 6c 64 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ld that are used
b990: 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74   by the.** sqlit
b9a0: 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
b9b0: 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
b9c0: 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e  OPTIMIZATIONS,..
b9d0: 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a  .) interface to.
b9e0: 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64  ** selectively d
b9f0: 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f  isable various o
ba00: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f  ptimizations..*/
ba10: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ba20: 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30  QueryFlattener 0
ba30: 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79  x0001   /* Query
ba40: 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23   flattening */.#
ba50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
ba60: 6c 75 6d 6e 43 61 63 68 65 20 20 20 20 30 78 30  lumnCache    0x0
ba70: 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  002   /* Column 
ba80: 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65  cache */.#define
ba90: 20 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f   SQLITE_GroupByO
baa0: 72 64 65 72 20 20 20 30 78 30 30 30 34 20 20 20  rder   0x0004   
bab0: 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72  /* GROUPBY cover
bac0: 20 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23   of ORDERBY */.#
bad0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61  define SQLITE_Fa
bae0: 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30  ctorOutConst 0x0
baf0: 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e  008   /* Constan
bb00: 74 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f  t factoring */./
bb10: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
bb20: 20 6e 6f 74 20 75 73 65 64 20 20 20 20 30 78 30   not used    0x0
bb30: 30 31 30 20 20 20 2f 2f 20 57 61 73 3a 20 53 51  010   // Was: SQ
bb40: 4c 49 54 45 5f 49 64 78 52 65 61 6c 41 73 49 6e  LITE_IdxRealAsIn
bb50: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
bb60: 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20  ITE_DistinctOpt 
bb70: 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44     0x0020   /* D
bb80: 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e  ISTINCT using in
bb90: 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
bba0: 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78   SQLITE_CoverIdx
bbb0: 53 63 61 6e 20 20 20 30 78 30 30 34 30 20 20 20  Scan   0x0040   
bbc0: 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65  /* Covering inde
bbd0: 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69  x scans */.#defi
bbe0: 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42  ne SQLITE_OrderB
bbf0: 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20  yIdxJoin 0x0080 
bc00: 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66    /* ORDER BY of
bc10: 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78   joins via index
bc20: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
bc30: 54 45 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65  TE_SubqCoroutine
bc40: 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76    0x0100   /* Ev
bc50: 61 6c 75 61 74 65 20 73 75 62 71 75 65 72 69 65  aluate subquerie
bc60: 73 20 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20  s as coroutines 
bc70: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bc80: 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20 20  E_Transitive    
bc90: 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61   0x0200   /* Tra
bca0: 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69  nsitive constrai
bcb0: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
bcc0: 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f  QLITE_OmitNoopJo
bcd0: 69 6e 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a  in   0x0400   /*
bce0: 20 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62   Omit unused tab
bcf0: 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a  les in joins */.
bd00: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
bd10: 74 61 74 33 34 20 20 20 20 20 20 20 20 20 30 78  tat34         0x
bd20: 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54  0800   /* Use ST
bd30: 41 54 33 20 6f 72 20 53 54 41 54 34 20 64 61 74  AT3 or STAT4 dat
bd40: 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  a */.#define SQL
bd50: 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20  ITE_AllOpts     
bd60: 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41     0xffff   /* A
bd70: 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ll optimizations
bd80: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f   */../*.** Macro
bd90: 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68  s for testing wh
bda0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74  ether or not opt
bdb0: 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65  imizations are e
bdc0: 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c  nabled or disabl
bdd0: 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ed..*/.#ifndef S
bde0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
bdf0: 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e 65 20  IN_TEST.#define 
be00: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61  OptimizationDisa
be10: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
be20: 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61  (((db)->dbOptFla
be30: 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23  gs&(mask))!=0).#
be40: 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74  define Optimizat
be50: 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d  ionEnabled(db, m
be60: 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64  ask)   (((db)->d
be70: 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29  bOptFlags&(mask)
be80: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64 65 66  )==0).#else.#def
be90: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
bea0: 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  Disabled(db, mas
beb0: 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20 4f 70  k)  0.#define Op
bec0: 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65  timizationEnable
bed0: 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 31 0a  d(db, mask)   1.
bee0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
bef0: 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74 20  turn true if it 
bf00: 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e  OK to factor con
bf10: 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
bf20: 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69  s into the initi
bf30: 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64  alization.** cod
bf40: 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  e. The argument 
bf50: 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63  is a Parse objec
bf60: 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67  t for the code g
bf70: 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65  enerator..*/.#de
bf80: 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72  fine ConstFactor
bf90: 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f  Ok(P) ((P)->okCo
bfa0: 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a  nstFactor)../*.*
bfb0: 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
bfc0: 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  s for the sqlite
bfd0: 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a  .magic field..**
bfe0: 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65   The numbers are
bff0: 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e   obtained at ran
c000: 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20  dom and have no 
c010: 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c  special meaning,
c020: 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62   other.** than b
c030: 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72  eing distinct fr
c040: 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a  om one another..
c050: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c060: 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20  E_MAGIC_OPEN    
c070: 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20   0xa029a697  /* 
c080: 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e  Database is open
c090: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c0a0: 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20  TE_MAGIC_CLOSED 
c0b0: 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a    0x9f3c2d33  /*
c0c0: 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f   Database is clo
c0d0: 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  sed */.#define S
c0e0: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b  QLITE_MAGIC_SICK
c0f0: 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30 20       0x4b771290 
c100: 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77   /* Error and aw
c110: 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a  aiting close */.
c120: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
c130: 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30 78  AGIC_BUSY     0x
c140: 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74  f03b7906  /* Dat
c150: 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20  abase currently 
c160: 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  in use */.#defin
c170: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45  e SQLITE_MAGIC_E
c180: 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37 39  RROR    0xb53579
c190: 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45  30  /* An SQLITE
c1a0: 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63  _MISUSE error oc
c1b0: 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e  curred */.#defin
c1c0: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a  e SQLITE_MAGIC_Z
c1d0: 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66 63  OMBIE   0x64cffc
c1e0: 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74  7f  /* Close wit
c1f0: 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  h last statement
c200: 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   close */../*.**
c210: 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69   Each SQL functi
c220: 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  on is defined by
c230: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
c240: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  the following.**
c250: 20 73 74 72 75 63 74 75 72 65 2e 20 20 41 20 70   structure.  A p
c260: 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
c270: 74 72 75 63 74 75 72 65 20 69 73 20 73 74 6f 72  tructure is stor
c280: 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ed in the sqlite
c290: 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20 74  .aFunc.** hash t
c2a0: 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c 74  able.  When mult
c2b0: 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 68  iple functions h
c2c0: 61 76 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  ave the same nam
c2d0: 65 2c 20 74 68 65 20 68 61 73 68 20 74 61 62 6c  e, the hash tabl
c2e0: 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20 61  e.** points to a
c2f0: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   linked list of 
c300: 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73  these structures
c310: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63  ..*/.struct Func
c320: 44 65 66 20 7b 0a 20 20 69 31 36 20 6e 41 72 67  Def {.  i16 nArg
c330: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
c340: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
c350: 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75  nts.  -1 means u
c360: 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31  nlimited */.  u1
c370: 36 20 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20  6 funcFlags;    
c380: 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69     /* Some combi
c390: 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45  nation of SQLITE
c3a0: 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69  _FUNC_* */.  voi
c3b0: 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20  d *pUserData;   
c3c0: 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70    /* User data p
c3d0: 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75  arameter */.  Fu
c3e0: 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20  ncDef *pNext;   
c3f0: 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74     /* Next funct
c400: 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61  ion with same na
c410: 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  me */.  void (*x
c420: 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f  Func)(sqlite3_co
c430: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
c440: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20  e3_value**); /* 
c450: 52 65 67 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e  Regular function
c460: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 74   */.  void (*xSt
c470: 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ep)(sqlite3_cont
c480: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
c490: 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67  _value**); /* Ag
c4a0: 67 72 65 67 61 74 65 20 73 74 65 70 20 2a 2f 0a  gregate step */.
c4b0: 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69    void (*xFinali
c4c0: 7a 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ze)(sqlite3_cont
c4d0: 65 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20  ext*);          
c4e0: 20 20 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61        /* Aggrega
c4f0: 74 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a  te finalizer */.
c500: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
c510: 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61         /* SQL na
c520: 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
c530: 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66  on. */.  FuncDef
c540: 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a   *pHash;      /*
c550: 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66   Next with a dif
c560: 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20  ferent name but 
c570: 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f  the same hash */
c580: 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  .  FuncDestructo
c590: 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20  r *pDestructor; 
c5a0: 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63    /* Reference c
c5b0: 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f  ounted destructo
c5c0: 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b  r function */.};
c5d0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ../*.** This str
c5e0: 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61  ucture encapsula
c5f0: 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74  tes a user-funct
c600: 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63  ion destructor c
c610: 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63  allback (as.** c
c620: 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67 20  onfigured using 
c630: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
c640: 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66 65  v2()) and a refe
c650: 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57  rence counter. W
c660: 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75  hen.** create_fu
c670: 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63  nction_v2() is c
c680: 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20  alled to create 
c690: 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  a function with 
c6a0: 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a  a destructor,.**
c6b0: 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74   a single object
c6c0: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
c6d0: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63   allocated. Func
c6e0: 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20  Destructor.nRef 
c6f0: 69 73 20 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68  is set to .** th
c700: 65 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63  e number of Func
c710: 44 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61  Def objects crea
c720: 74 65 64 20 28 65 69 74 68 65 72 20 31 20 6f 72  ted (either 1 or
c730: 20 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   3, depending on
c740: 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e   whether.** or n
c750: 6f 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ot the specified
c760: 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c   encoding is SQL
c770: 49 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75  ITE_ANY). The Fu
c780: 6e 63 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f  ncDef.pDestructo
c790: 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65  r.** member of e
c7a0: 61 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46  ach of the new F
c7b0: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69  uncDef objects i
c7c0: 73 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74  s set to point t
c7d0: 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a  o the allocated.
c7e0: 2a 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  ** FuncDestructo
c7f0: 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66  r..**.** Thereaf
c800: 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66  ter, when one of
c810: 20 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a   the FuncDef obj
c820: 65 63 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c  ects is deleted,
c830: 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a   the reference.*
c840: 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20  * count on this 
c850: 6f 62 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d  object is decrem
c860: 65 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72  ented. When it r
c870: 65 61 63 68 65 73 20 30 2c 20 74 68 65 20 64 65  eaches 0, the de
c880: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69  structor.** is i
c890: 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46  nvoked and the F
c8a0: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73 74  uncDestructor st
c8b0: 72 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a  ructure freed..*
c8c0: 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 73  /.struct FuncDes
c8d0: 74 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20  tructor {.  int 
c8e0: 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78  nRef;.  void (*x
c8f0: 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
c900: 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  ;.  void *pUserD
c910: 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  ata;.};../*.** P
c920: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
c930: 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73  or FuncDef.flags
c940: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
c950: 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59   _LENGTH and _TY
c960: 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d  PEOF.** values m
c970: 75 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74  ust correspond t
c980: 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41  o OPFLAG_LENGTHA
c990: 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59  RG and OPFLAG_TY
c9a0: 50 45 4f 46 41 52 47 2e 20 20 54 68 65 72 65 0a  PEOFARG.  There.
c9b0: 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20  ** are assert() 
c9c0: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68  statements in th
c9d0: 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79  e code to verify
c9e0: 20 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e   this..*/.#defin
c9f0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e  e SQLITE_FUNC_EN
ca00: 43 4d 41 53 4b 20 20 30 78 30 30 33 20 2f 2a 20  CMASK  0x003 /* 
ca10: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
ca20: 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55  ITE_UTF16BE or U
ca30: 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e  TF16LE */.#defin
ca40: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49  e SQLITE_FUNC_LI
ca50: 4b 45 20 20 20 20 20 30 78 30 30 34 20 2f 2a 20  KE     0x004 /* 
ca60: 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68  Candidate for th
ca70: 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74  e LIKE optimizat
ca80: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
ca90: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20  QLITE_FUNC_CASE 
caa0: 20 20 20 20 30 78 30 30 38 20 2f 2a 20 43 61 73      0x008 /* Cas
cab0: 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45  e-sensitive LIKE
cac0: 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a  -type function *
cad0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
cae0: 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30  _FUNC_EPHEM    0
caf0: 78 30 31 30 20 2f 2a 20 45 70 68 65 6d 65 72 61  x010 /* Ephemera
cb00: 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68 20  l.  Delete with 
cb10: 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  VDBE */.#define 
cb20: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
cb30: 43 4f 4c 4c 20 30 78 30 32 30 20 2f 2a 20 73 71  COLL 0x020 /* sq
cb40: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
cb50: 53 65 71 28 29 20 6d 69 67 68 74 20 62 65 20 63  Seq() might be c
cb60: 61 6c 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  alled */.#define
cb70: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e   SQLITE_FUNC_LEN
cb80: 47 54 48 20 20 20 30 78 30 34 30 20 2f 2a 20 42  GTH   0x040 /* B
cb90: 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29  uilt-in length()
cba0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
cbb0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
cbc0: 5f 54 59 50 45 4f 46 20 20 20 30 78 30 38 30 20  _TYPEOF   0x080 
cbd0: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70 65  /* Built-in type
cbe0: 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  of() function */
cbf0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
cc00: 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30 78  FUNC_COUNT    0x
cc10: 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  100 /* Built-in 
cc20: 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61  count(*) aggrega
cc30: 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  te */.#define SQ
cc40: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53  LITE_FUNC_COALES
cc50: 43 45 20 30 78 32 30 30 20 2f 2a 20 42 75 69 6c  CE 0x200 /* Buil
cc60: 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20  t-in coalesce() 
cc70: 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23  or ifnull() */.#
cc80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
cc90: 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 34 30  NC_UNLIKELY 0x40
cca0: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e  0 /* Built-in un
ccb0: 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74 69 6f  likely() functio
ccc0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
ccd0: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
cce0: 54 20 30 78 38 30 30 20 2f 2a 20 43 6f 6e 73 74  T 0x800 /* Const
ccf0: 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76 65 20  ant inputs give 
cd00: 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70 75  a constant outpu
cd10: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
cd20: 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20  ITE_FUNC_MINMAX 
cd30: 20 30 78 31 30 30 30 20 2f 2a 20 54 72 75 65 20   0x1000 /* True 
cd40: 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20 6d 61  for min() and ma
cd50: 78 28 29 20 61 67 67 72 65 67 61 74 65 73 20 2a  x() aggregates *
cd60: 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  /../*.** The fol
cd70: 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63  lowing three mac
cd80: 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c  ros, FUNCTION(),
cd90: 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20   LIKEFUNC() and 
cda0: 41 47 47 52 45 47 41 54 45 28 29 20 61 72 65 0a  AGGREGATE() are.
cdb0: 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61 74  ** used to creat
cdc0: 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65  e the initialize
cdd0: 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44  rs for the FuncD
cde0: 65 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a  ef structures..*
cdf0: 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28  *.**   FUNCTION(
ce00: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
ce10: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
ce20: 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
ce30: 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75  eate a scalar fu
ce40: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
ce50: 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  n of a function 
ce60: 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 69 6d  zName .**     im
ce70: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66  plemented by C f
ce80: 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68  unction xFunc th
ce90: 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
cea0: 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a  arguments. The.*
ceb0: 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61 73 73  *     value pass
cec0: 65 64 20 61 73 20 69 41 72 67 20 69 73 20 63 61  ed as iArg is ca
ced0: 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20  st to a (void*) 
cee0: 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62  and made availab
cef0: 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65  le.**     as the
cf00: 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69   user-data (sqli
cf10: 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29  te3_user_data())
cf20: 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f   for the functio
cf30: 6e 2e 20 49 66 20 0a 2a 2a 20 20 20 20 20 61 72  n. If .**     ar
cf40: 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72  gument bNC is tr
cf50: 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c  ue, then the SQL
cf60: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
cf70: 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a  L flag is set..*
cf80: 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e  *.**   VFUNCTION
cf90: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
cfa0: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
cfb0: 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43  **     Like FUNC
cfc0: 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f  TION except it o
cfd0: 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f  mits the SQLITE_
cfe0: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c  FUNC_CONSTANT fl
cff0: 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52  ag..**.**   AGGR
d000: 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  EGATE(zName, nAr
d010: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 53  g, iArg, bNC, xS
d020: 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20  tep, xFinal).** 
d030: 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
d040: 74 65 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  te an aggregate 
d050: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
d060: 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  ion implemented 
d070: 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20  by.**     the C 
d080: 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20  functions xStep 
d090: 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20  and xFinal. The 
d0a0: 66 69 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d  first four param
d0b0: 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65  eters.**     are
d0c0: 20 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20   interpreted in 
d0d0: 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20  the same way as 
d0e0: 74 68 65 20 66 69 72 73 74 20 34 20 70 61 72 61  the first 4 para
d0f0: 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20  meters to.**    
d100: 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a   FUNCTION()..**.
d110: 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e  **   LIKEFUNC(zN
d120: 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c  ame, nArg, pArg,
d130: 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55   flags).**     U
d140: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
d150: 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  scalar function 
d160: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
d170: 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a  function zName .
d180: 2a 2a 20 20 20 20 20 74 68 61 74 20 61 63 63 65  **     that acce
d190: 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e  pts nArg argumen
d1a0: 74 73 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d  ts and is implem
d1b0: 65 6e 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20  ented by a call 
d1c0: 74 6f 20 43 20 0a 2a 2a 20 20 20 20 20 66 75 6e  to C .**     fun
d1d0: 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20  ction likeFunc. 
d1e0: 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20 69 73  Argument pArg is
d1f0: 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64   cast to a (void
d200: 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20   *) and made.** 
d210: 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20 61 73      available as
d220: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 75 73   the function us
d230: 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33  er-data (sqlite3
d240: 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e 20 54  _user_data()). T
d250: 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44 65  he.**     FuncDe
d260: 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62 6c 65  f.flags variable
d270: 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 76   is set to the v
d280: 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 74  alue passed as t
d290: 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20  he flags.**     
d2a0: 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64  parameter..*/.#d
d2b0: 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a  efine FUNCTION(z
d2c0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
d2d0: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
d2e0: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
d2f0: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51  FUNC_CONSTANT|SQ
d300: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
d310: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
d320: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54  OLL), \.   SQLIT
d330: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
d340: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
d350: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
d360: 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e 43 54  }.#define VFUNCT
d370: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
d380: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
d390: 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
d3a0: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
d3b0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
d3c0: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54  OLL), \.   SQLIT
d3d0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
d3e0: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
d3f0: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
d400: 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49  }.#define FUNCTI
d410: 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ON2(zName, nArg,
d420: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
d430: 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c  c, extraFlags) \
d440: 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f  .  {nArg,SQLITE_
d450: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51  FUNC_CONSTANT|SQ
d460: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
d470: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
d480: 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c  OLL)|extraFlags,
d490: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
d4a0: 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
d4b0: 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a   xFunc, 0, 0, #z
d4c0: 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66  Name, 0, 0}.#def
d4d0: 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e  ine STR_FUNCTION
d4e0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
d4f0: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
d500: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
d510: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
d520: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
d530: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
d540: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72  DCOLL), \.   pAr
d550: 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  g, 0, xFunc, 0, 
d560: 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d  0, #zName, 0, 0}
d570: 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e  .#define LIKEFUN
d580: 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  C(zName, nArg, a
d590: 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b  rg, flags) \.  {
d5a0: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
d5b0: 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54  C_CONSTANT|SQLIT
d5c0: 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a  E_UTF8|flags, \.
d5d0: 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20     (void *)arg, 
d5e0: 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20  0, likeFunc, 0, 
d5f0: 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d  0, #zName, 0, 0}
d600: 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41  .#define AGGREGA
d610: 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  TE(zName, nArg, 
d620: 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20  arg, nc, xStep, 
d630: 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72  xFinal) \.  {nAr
d640: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
d650: 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  nc*SQLITE_FUNC_N
d660: 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53  EEDCOLL), \.   S
d670: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
d680: 28 61 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74  (arg), 0, 0, xSt
d690: 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65  ep,xFinal,#zName
d6a0: 2c 30 2c 30 7d 0a 23 64 65 66 69 6e 65 20 41 47  ,0,0}.#define AG
d6b0: 47 52 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20  GREGATE2(zName, 
d6c0: 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
d6d0: 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78  Step, xFinal, ex
d6e0: 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e  traFlags) \.  {n
d6f0: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
d700: 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43  |(nc*SQLITE_FUNC
d710: 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61  _NEEDCOLL)|extra
d720: 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49  Flags, \.   SQLI
d730: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
d740: 67 29 2c 20 30 2c 20 30 2c 20 78 53 74 65 70 2c  g), 0, 0, xStep,
d750: 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c  xFinal,#zName,0,
d760: 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75  0}../*.** All cu
d770: 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73  rrent savepoints
d780: 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
d790: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61   linked list sta
d7a0: 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69  rting at.** sqli
d7b0: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20  te3.pSavepoint. 
d7c0: 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
d7d0: 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73  t in the list is
d7e0: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
d7f0: 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76  ly.** opened sav
d800: 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e  epoint. Savepoin
d810: 74 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20  ts are added to 
d820: 74 68 65 20 6c 69 73 74 20 62 79 20 74 68 65 20  the list by the 
d830: 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70  vdbe.** OP_Savep
d840: 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  oint instruction
d850: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65  ..*/.struct Save
d860: 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a  point {.  char *
d870: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
d880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d890: 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20   Savepoint name 
d8a0: 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29  (nul-terminated)
d8b0: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
d8c0: 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  redCons;        
d8d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
d8e0: 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
d8f0: 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f  fk violations */
d900: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
d910: 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  ImmCons;        
d920: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
d930: 20 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d   of deferred imm
d940: 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f   fk. */.  Savepo
d950: 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  int *pNext;     
d960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d970: 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e   Parent savepoin
d980: 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b  t (if any) */.};
d990: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
d9a0: 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61  owing are used a
d9b0: 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72  s the second par
d9c0: 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
d9d0: 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a  3Savepoint(),.**
d9e0: 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61   and as the P1 a
d9f0: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f  rgument to the O
da00: 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
da10: 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66  ruction..*/.#def
da20: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  ine SAVEPOINT_BE
da30: 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69  GIN      0.#defi
da40: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  ne SAVEPOINT_REL
da50: 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e  EASE    1.#defin
da60: 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  e SAVEPOINT_ROLL
da70: 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a  BACK   2.../*.**
da80: 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64   Each SQLite mod
da90: 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62  ule (virtual tab
daa0: 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69  le definition) i
dab0: 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a  s defined by an.
dac0: 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
dad0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
dae0: 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69  ucture, stored i
daf0: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d  n the sqlite3.aM
db00: 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61  odule.** hash ta
db10: 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d  ble..*/.struct M
db20: 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20  odule {.  const 
db30: 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
db40: 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f  pModule;       /
db50: 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74  * Callback point
db60: 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ers */.  const c
db70: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
db80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
db90: 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20   Name passed to 
dba0: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20  create_module() 
dbb0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b  */.  void *pAux;
dbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75            /* pAu
dbe0: 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  x passed to crea
dbf0: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
dc00: 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
dc10: 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20  )(void *);      
dc20: 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20        /* Module 
dc30: 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
dc40: 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ion */.};../*.**
dc50: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
dc60: 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  ut each column o
dc70: 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69  f an SQL table i
dc80: 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73  s held in an ins
dc90: 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73  tance.** of this
dca0: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
dcb0: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20  truct Column {. 
dcc0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
dcd0: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
dce0: 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78  s column */.  Ex
dcf0: 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f  pr *pDflt;     /
dd00: 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20  * Default value 
dd10: 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  of this column *
dd20: 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c 74 3b  /.  char *zDflt;
dd30: 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
dd40: 20 74 65 78 74 20 6f 66 20 74 68 65 20 64 65 66   text of the def
dd50: 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20  ault value */.  
dd60: 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 20 20  char *zType;    
dd70: 20 2f 2a 20 44 61 74 61 20 74 79 70 65 20 66 6f   /* Data type fo
dd80: 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  r this column */
dd90: 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20  .  char *zColl; 
dda0: 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67      /* Collating
ddb0: 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e   sequence.  If N
ddc0: 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66  ULL, use the def
ddd0: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74  ault */.  u8 not
dde0: 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e  Null;      /* An
ddf0: 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61   OE_ code for ha
de00: 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c  ndling a NOT NUL
de10: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  L constraint */.
de20: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
de30: 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65     /* One of the
de40: 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20   SQLITE_AFF_... 
de50: 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 73  values */.  u8 s
de60: 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  zEst;        /* 
de70: 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f  Estimated size o
de80: 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 20  f this column.  
de90: 49 4e 54 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63  INT==1 */.  u8 c
dea0: 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20  olFlags;     /* 
deb0: 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69  Boolean properti
dec0: 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47  es.  See COLFLAG
ded0: 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20  _ defines below 
dee0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  */.};../* Allowe
def0: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c  d values for Col
df00: 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f  umn.colFlags:.*/
df10: 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
df20: 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31  _PRIMKEY  0x0001
df30: 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73      /* Column is
df40: 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 69   part of the pri
df50: 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66  mary key */.#def
df60: 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44  ine COLFLAG_HIDD
df70: 45 4e 20 20 20 30 78 30 30 30 32 20 20 20 20 2f  EN   0x0002    /
df80: 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  * A hidden colum
df90: 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74  n in a virtual t
dfa0: 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  able */../*.** A
dfb0: 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75   "Collating Sequ
dfc0: 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65 64  ence" is defined
dfd0: 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   by an instance 
dfe0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
dff0: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 43  .** structure. C
e000: 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20 63  onceptually, a c
e010: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
e020: 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  e consists of a 
e030: 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f  name and.** a co
e040: 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65  mparison routine
e050: 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68   that defines th
e060: 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74 20  e order of that 
e070: 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20  sequence..**.** 
e080: 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20  If CollSeq.xCmp 
e090: 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e  is NULL, it mean
e0a0: 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f  s that the.** co
e0b0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
e0c0: 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20   is undefined.  
e0d0: 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e  Indices built on
e0e0: 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a   an undefined.**
e0f0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
e100: 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72  nce may not be r
e110: 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a  ead or written..
e120: 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65  */.struct CollSe
e130: 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  q {.  char *zNam
e140: 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  e;          /* N
e150: 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61  ame of the colla
e160: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55  ting sequence, U
e170: 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a  TF-8 encoded */.
e180: 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
e190: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
e1a0: 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64  encoding handled
e1b0: 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20   by xCmp() */.  
e1c0: 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20  void *pUser;    
e1d0: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
e1e0: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28  rgument to xCmp(
e1f0: 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d  ) */.  int (*xCm
e200: 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  p)(void*,int, co
e210: 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
e220: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20  const void*);.  
e230: 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69  void (*xDel)(voi
e240: 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75 63  d*);  /* Destruc
e250: 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a 2f  tor for pUser */
e260: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72  .};../*.** A sor
e270: 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65  t order can be e
e280: 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45 53  ither ASC or DES
e290: 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  C..*/.#define SQ
e2a0: 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20  LITE_SO_ASC     
e2b0: 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20    0  /* Sort in 
e2c0: 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20  ascending order 
e2d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e2e0: 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31  E_SO_DESC      1
e2f0: 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63    /* Sort in asc
e300: 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a  ending order */.
e310: 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66  ./*.** Column af
e320: 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a  finity types..**
e330: 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20 74  .** These used t
e340: 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20  o have mnemonic 
e350: 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f  name like 'i' fo
e360: 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  r SQLITE_AFF_INT
e370: 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20  EGER and.** 't' 
e380: 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  for SQLITE_AFF_T
e390: 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e  EXT.  But we can
e3a0: 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73   save a little s
e3b0: 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65  pace and improve
e3c0: 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61 20  .** the speed a 
e3d0: 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72  little by number
e3e0: 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 63  ing the values c
e3f0: 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 20 20 0a  onsecutively.  .
e400: 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72  **.** But rather
e410: 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68   than start with
e420: 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69   0 or 1, we begi
e430: 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54 68 61  n with 'A'.  Tha
e440: 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d  t way,.** when m
e450: 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79  ultiple affinity
e460: 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61   types are conca
e470: 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73  tenated into a s
e480: 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65  tring and.** use
e490: 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72  d as the P4 oper
e4a0: 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62  and, they will b
e4b0: 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e  e more readable.
e4c0: 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f  .**.** Note also
e4d0: 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69   that the numeri
e4e0: 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75  c types are grou
e4f0: 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20  ped together so 
e500: 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20  that testing.** 
e510: 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79  for a numeric ty
e520: 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  pe is a single c
e530: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20  omparison.  And 
e540: 74 68 65 20 4e 4f 4e 45 20 74 79 70 65 20 69 73  the NONE type is
e550: 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69   first..*/.#defi
e560: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f  ne SQLITE_AFF_NO
e570: 4e 45 20 20 20 20 20 27 41 27 0a 23 64 65 66 69  NE     'A'.#defi
e580: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ne SQLITE_AFF_TE
e590: 58 54 20 20 20 20 20 27 42 27 0a 23 64 65 66 69  XT     'B'.#defi
e5a0: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ne SQLITE_AFF_NU
e5b0: 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65 66 69  MERIC  'C'.#defi
e5c0: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  ne SQLITE_AFF_IN
e5d0: 54 45 47 45 52 20 20 27 44 27 0a 23 64 65 66 69  TEGER  'D'.#defi
e5e0: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  ne SQLITE_AFF_RE
e5f0: 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64 65 66  AL     'E'..#def
e600: 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d  ine sqlite3IsNum
e610: 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20  ericAffinity(X) 
e620: 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46   ((X)>=SQLITE_AF
e630: 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a  F_NUMERIC)../*.*
e640: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
e650: 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73  _MASK values mas
e660: 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69  ks off the signi
e670: 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61  ficant bits of a
e680: 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61  n.** affinity va
e690: 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69 6e 65  lue. .*/.#define
e6a0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
e6b0: 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a       0x47../*.**
e6c0: 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20   Additional bit 
e6d0: 76 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20  values that can 
e6e0: 62 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20  be ORed with an 
e6f0: 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74  affinity without
e700: 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65  .** changing the
e710: 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a   affinity..**.**
e720: 20 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e   The SQLITE_NOTN
e730: 55 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f  ULL flag is a co
e740: 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c  mbination of NUL
e750: 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55  LEQ and JUMPIFNU
e760: 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73  LL..** It causes
e770: 20 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20   an assert() to 
e780: 66 69 72 65 20 69 66 20 65 69 74 68 65 72 20 6f  fire if either o
e790: 70 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70  perand to a comp
e7a0: 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74  arison.** operat
e7b0: 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20  or is NULL.  It 
e7c0: 69 73 20 61 64 64 65 64 20 74 6f 20 63 65 72 74  is added to cert
e7d0: 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  ain comparison o
e7e0: 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70  perators to.** p
e7f0: 72 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f 70  rove that the op
e800: 65 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79  erands are alway
e810: 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23  s NOT NULL..*/.#
e820: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55  define SQLITE_JU
e830: 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20  MPIFNULL   0x10 
e840: 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74   /* jumps if eit
e850: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
e860: 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ULL */.#define S
e870: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20  QLITE_STOREP2   
e880: 20 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72     0x20  /* Stor
e890: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b  e result in reg[
e8a0: 50 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20  P2] rather than 
e8b0: 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  jump */.#define 
e8c0: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20  SQLITE_NULLEQ   
e8d0: 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c      0x80  /* NUL
e8e0: 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  L=NULL */.#defin
e8f0: 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c  e SQLITE_NOTNULL
e900: 20 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41        0x90  /* A
e910: 73 73 65 72 74 20 74 68 61 74 20 6f 70 65 72 61  ssert that opera
e920: 6e 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55  nds are never NU
e930: 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  LL */../*.** An 
e940: 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74  object of this t
e950: 79 70 65 20 69 73 20 63 72 65 61 74 65 64 20 66  ype is created f
e960: 6f 72 20 65 61 63 68 20 76 69 72 74 75 61 6c 20  or each virtual 
e970: 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e  table present in
e980: 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65  .** the database
e990: 20 73 63 68 65 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20   schema. .**.** 
e9a0: 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
e9b0: 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64  schema is shared
e9c0: 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69 73 20  , then there is 
e9d0: 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  one instance of 
e9e0: 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72  this.** structur
e9f0: 65 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62  e for each datab
ea00: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28  ase connection (
ea10: 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75  sqlite3*) that u
ea20: 73 65 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a  ses the shared.*
ea30: 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69  * schema. This i
ea40: 73 20 62 65 63 61 75 73 65 20 65 61 63 68 20 64  s because each d
ea50: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
ea60: 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74 73 20  on requires its 
ea70: 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e  own unique.** in
ea80: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71  stance of the sq
ea90: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
eaa0: 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  le used to acces
eab0: 73 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  s the virtual ta
eac0: 62 6c 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e  ble .** implemen
ead0: 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f  tation. sqlite3_
eae0: 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 63 61  vtab* handles ca
eaf0: 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65 64 20  n not be shared 
eb00: 62 65 74 77 65 65 6e 20 0a 2a 2a 20 64 61 74 61  between .** data
eb10: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
eb20: 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20  , even when the 
eb30: 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d  rest of the in-m
eb40: 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 20 0a  emory database .
eb50: 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68 61  ** schema is sha
eb60: 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c  red, as the impl
eb70: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e  ementation often
eb80: 20 73 74 6f 72 65 73 20 74 68 65 20 64 61 74 61   stores the data
eb90: 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  base.** connecti
eba0: 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64  on handle passed
ebb0: 20 74 6f 20 69 74 20 76 69 61 20 74 68 65 20 78   to it via the x
ebc0: 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72  Connect() or xCr
ebd0: 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a  eate() method.**
ebe0: 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69   during initiali
ebf0: 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c  zation internall
ec00: 79 2e 20 54 68 69 73 20 64 61 74 61 62 61 73 65  y. This database
ec10: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
ec20: 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62  le may.** then b
ec30: 65 20 75 73 65 64 20 62 79 20 74 68 65 20 76 69  e used by the vi
ec40: 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c  rtual table impl
ec50: 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63  ementation to ac
ec60: 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73  cess real tables
ec70: 20 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20   .** within the 
ec80: 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61  database. So tha
ec90: 74 20 74 68 65 79 20 61 70 70 65 61 72 20 61 73  t they appear as
eca0: 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c   part of the cal
ecb0: 6c 65 72 73 20 0a 2a 2a 20 74 72 61 6e 73 61 63  lers .** transac
ecc0: 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65  tion, these acce
ecd0: 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20  sses need to be 
ece0: 6d 61 64 65 20 76 69 61 20 74 68 65 20 73 61 6d  made via the sam
ecf0: 65 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 63  e database .** c
ed00: 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61  onnection as tha
ed10: 74 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74  t used to execut
ed20: 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73  e SQL operations
ed30: 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   on the virtual 
ed40: 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  table..**.** All
ed50: 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20   VTable objects 
ed60: 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20  that correspond 
ed70: 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  to a single tabl
ed80: 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a  e in a shared.**
ed90: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
eda0: 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73   are initially s
edb0: 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65  tored in a linke
edc0: 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74  d-list pointed t
edd0: 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c  o by.** the Tabl
ede0: 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72  e.pVTable member
edf0: 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65   variable of the
ee00: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54   corresponding T
ee10: 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20  able object..** 
ee20: 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f  When an sqlite3_
ee30: 70 72 65 70 61 72 65 28 29 20 6f 70 65 72 61 74  prepare() operat
ee40: 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64 20  ion is required 
ee50: 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69  to access the vi
ee60: 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20  rtual.** table, 
ee70: 69 74 20 73 65 61 72 63 68 65 73 20 74 68 65 20  it searches the 
ee80: 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56 54 61  list for the VTa
ee90: 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73 70  ble that corresp
eea0: 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64  onds to the.** d
eeb0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
eec0: 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65  on doing the pre
eed0: 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20  paring so as to 
eee0: 75 73 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a  use the correct.
eef0: 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  ** sqlite3_vtab*
ef00: 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63   handle in the c
ef10: 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a  ompiled query..*
ef20: 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d  *.** When an in-
ef30: 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a  memory Table obj
ef40: 65 63 74 20 69 73 20 64 65 6c 65 74 65 64 20 28  ect is deleted (
ef50: 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e  for example when
ef60: 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69   the.** schema i
ef70: 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64  s being reloaded
ef80: 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e   for some reason
ef90: 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62  ), the VTable ob
efa0: 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 20 0a 2a  jects are not .*
efb0: 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68  * deleted and th
efc0: 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  e sqlite3_vtab* 
efd0: 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20  handles are not 
efe0: 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 20  xDisconnect()ed 
eff0: 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  .** immediately.
f000: 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61   Instead, they a
f010: 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68  re moved from th
f020: 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20  e Table.pVTable 
f030: 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68  list to.** anoth
f040: 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68  er linked list h
f050: 65 61 64 65 64 20 62 79 20 74 68 65 20 73 71 6c  eaded by the sql
f060: 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74  ite3.pDisconnect
f070: 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a   member of the.*
f080: 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
f090: 73 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72  sqlite3 structur
f0a0: 65 2e 20 54 68 65 79 20 61 72 65 20 74 68 65 6e  e. They are then
f0b0: 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e   deleted/xDiscon
f0c0: 6e 65 63 74 65 64 20 0a 2a 2a 20 6e 65 78 74 20  nected .** next 
f0d0: 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65 6e 74  time a statement
f0e0: 20 69 73 20 70 72 65 70 61 72 65 64 20 75 73 69   is prepared usi
f0f0: 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65 33 2a  ng said sqlite3*
f100: 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a  . This is done.*
f110: 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c  * to avoid deadl
f120: 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76 6f 6c  ock issues invol
f130: 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73 71  ving multiple sq
f140: 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65  lite3.mutex mute
f150: 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f  xes..** Refer to
f160: 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20   comments above 
f170: 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33  function sqlite3
f180: 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29  VtabUnlockList()
f190: 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61   for an.** expla
f1a0: 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77 68 79  nation as to why
f1b0: 20 69 74 20 69 73 20 73 61 66 65 20 74 6f 20 61   it is safe to a
f1c0: 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 61  dd an entry to a
f1d0: 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f  n sqlite3.pDisco
f1e0: 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69  nnect.** list wi
f1f0: 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74 68  thout holding th
f200: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
f210: 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75  sqlite3.mutex mu
f220: 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d  tex..**.** The m
f230: 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63 74  emory for object
f240: 73 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  s of this type i
f250: 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74  s always allocat
f260: 65 64 20 62 79 20 0a 2a 2a 20 73 71 6c 69 74 65  ed by .** sqlite
f270: 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69  3DbMalloc(), usi
f280: 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ng the connectio
f290: 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65 64 20  n handle stored 
f2a0: 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61 73 20  in VTable.db as 
f2b0: 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61 72  .** the first ar
f2c0: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  gument..*/.struc
f2d0: 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c  t VTable {.  sql
f2e0: 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
f2f0: 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
f300: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73  se connection as
f310: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
f320: 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f  is table */.  Mo
f330: 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20  dule *pMod;     
f340: 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
f350: 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70  er to module imp
f360: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20  lementation */. 
f370: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
f380: 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f  Vtab;      /* Po
f390: 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e  inter to vtab in
f3a0: 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20  stance */.  int 
f3b0: 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
f3c0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
f3d0: 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  of pointers to t
f3e0: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f  his structure */
f3f0: 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69 6e  .  u8 bConstrain
f400: 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
f410: 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69  True if constrai
f420: 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72 74 65  nts are supporte
f430: 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76 65  d */.  int iSave
f440: 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  point;          
f450: 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68 65   /* Depth of the
f460: 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63 6b   SAVEPOINT stack
f470: 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e   */.  VTable *pN
f480: 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
f490: 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65  /* Next in linke
f4a0: 64 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f 76  d list (see abov
f4b0: 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  e) */.};../*.** 
f4c0: 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20 65  The schema for e
f4d0: 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20 61 6e  ach SQL table an
f4e0: 64 20 76 69 65 77 20 69 73 20 72 65 70 72 65 73  d view is repres
f4f0: 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a  ented in memory.
f500: 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ** by an instanc
f510: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
f520: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  ng structure..*/
f530: 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a  .struct Table {.
f540: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
f550: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
f560: 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76  f the table or v
f570: 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20  iew */.  Column 
f580: 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a  *aCol;        /*
f590: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
f5a0: 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  ut each column *
f5b0: 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65  /.  Index *pInde
f5c0: 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  x;       /* List
f5d0: 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20   of SQL indexes 
f5e0: 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a  on this table. *
f5f0: 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
f600: 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c  ect;     /* NULL
f610: 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f   for tables.  Po
f620: 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69  ints to definiti
f630: 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f  on if a view. */
f640: 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20  .  FKey *pFKey; 
f650: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65          /* Linke
f660: 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f  d list of all fo
f670: 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68  reign keys in th
f680: 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68  is table */.  ch
f690: 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20  ar *zColAff;    
f6a0: 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66     /* String def
f6b0: 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  ining the affini
f6c0: 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ty of each colum
f6d0: 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  n */.#ifndef SQL
f6e0: 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20  ITE_OMIT_CHECK. 
f6f0: 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63   ExprList *pChec
f700: 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45  k;    /* All CHE
f710: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  CK constraints *
f720: 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 74  /.#endif.  int t
f730: 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
f740: 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 70 61  /* Root BTree pa
f750: 67 65 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c  ge for this tabl
f760: 65 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79  e */.  i16 iPKey
f770: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
f780: 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20  f not negative, 
f790: 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20  use aCol[iPKey] 
f7a0: 61 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a  as the rowid */.
f7b0: 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20    i16 nCol;     
f7c0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
f7d0: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
f7e0: 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75  his table */.  u
f7f0: 31 36 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  16 nRef;        
f800: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
f810: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69   pointers to thi
f820: 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67  s Table */.  Log
f830: 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20  Est nRowLogEst; 
f840: 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72    /* Estimated r
f850: 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66  ows in table - f
f860: 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31  rom sqlite_stat1
f870: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45   table */.  LogE
f880: 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20  st szTabRow;    
f890: 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69   /* Estimated si
f8a0: 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65  ze of each table
f8b0: 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f   row in bytes */
f8c0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
f8d0: 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20  NABLE_COSTMULT. 
f8e0: 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74   LogEst costMult
f8f0: 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75  ;     /* Cost mu
f900: 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69  ltiplier for usi
f910: 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ng this table */
f920: 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 74 61 62  .#endif.  u8 tab
f930: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f  Flags;         /
f940: 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76  * Mask of TF_* v
f950: 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 6b 65  alues */.  u8 ke
f960: 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  yConf;          
f970: 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e  /* What to do in
f980: 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e   case of uniquen
f990: 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20  ess conflict on 
f9a0: 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66  iPKey */.#ifndef
f9b0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54   SQLITE_OMIT_ALT
f9c0: 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61 64  ERTABLE.  int ad
f9d0: 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f  dColOffset;    /
f9e0: 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41  * Offset in CREA
f9f0: 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74 6f  TE TABLE stmt to
fa00: 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d   add a new colum
fa10: 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  n */.#endif.#ifn
fa20: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
fa30: 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69  VIRTUALTABLE.  i
fa40: 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20  nt nModuleArg;  
fa50: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
fa60: 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68   arguments to th
fa70: 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68  e module */.  ch
fa80: 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67  ar **azModuleArg
fa90: 3b 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 61 6c  ;  /* Text of al
faa0: 6c 20 6d 6f 64 75 6c 65 20 61 72 67 73 2e 20 5b  l module args. [
fab0: 30 5d 20 69 73 20 6d 6f 64 75 6c 65 20 6e 61 6d  0] is module nam
fac0: 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70  e */.  VTable *p
fad0: 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c  VTable;     /* L
fae0: 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62  ist of VTable ob
faf0: 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66  jects. */.#endif
fb00: 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69  .  Trigger *pTri
fb10: 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20  gger;   /* List 
fb20: 6f 66 20 74 72 69 67 67 65 72 73 20 73 74 6f 72  of triggers stor
fb30: 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f  ed in pSchema */
fb40: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
fb50: 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  ma;     /* Schem
fb60: 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  a that contains 
fb70: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
fb80: 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62  Table *pNextZomb
fb90: 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20  ie;  /* Next on 
fba0: 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69  the Parse.pZombi
fbb0: 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a  eTab list */.};.
fbc0: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
fbd0: 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c 65 2e  alues for Table.
fbe0: 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20  tabFlags..**.** 
fbf0: 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 70 70  TF_OOOHidden app
fc00: 6c 69 65 73 20 74 6f 20 76 69 72 74 75 61 6c 20  lies to virtual 
fc10: 74 61 62 6c 65 73 20 74 68 61 74 20 68 61 76 65  tables that have
fc20: 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20   hidden columns 
fc30: 74 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c  that are.** foll
fc40: 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69 64 64  owed by non-hidd
fc50: 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 78 61  en columns.  Exa
fc60: 6d 70 6c 65 3a 20 20 22 43 52 45 41 54 45 20 56  mple:  "CREATE V
fc70: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78 20 55  IRTUAL TABLE x U
fc80: 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28 61 20  SING.** vtab1(a 
fc90: 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20 20 53  HIDDEN, b);".  S
fca0: 69 6e 63 65 20 22 62 22 20 69 73 20 61 20 6e 6f  ince "b" is a no
fcb0: 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20  n-hidden column 
fcc0: 62 75 74 20 22 61 22 20 69 73 20 68 69 64 64 65  but "a" is hidde
fcd0: 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f 4f 4f  n,.** the TF_OOO
fce0: 48 69 64 64 65 6e 20 61 74 74 72 69 62 75 74 65  Hidden attribute
fcf0: 20 77 6f 75 6c 64 20 61 70 70 6c 79 20 69 6e 20   would apply in 
fd00: 74 68 69 73 20 63 61 73 65 2e 20 20 53 75 63 68  this case.  Such
fd10: 20 74 61 62 6c 65 73 20 72 65 71 75 69 72 65 0a   tables require.
fd20: 2a 2a 20 73 70 65 63 69 61 6c 20 68 61 6e 64 6c  ** special handl
fd30: 69 6e 67 20 64 75 72 69 6e 67 20 49 4e 53 45 52  ing during INSER
fd40: 54 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f  T processing..*/
fd50: 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64  .#define TF_Read
fd60: 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30 31  only        0x01
fd70: 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79      /* Read-only
fd80: 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f   system table */
fd90: 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65  .#define TF_Ephe
fda0: 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78 30 32  meral       0x02
fdb0: 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65      /* An epheme
fdc0: 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  ral table */.#de
fdd0: 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61  fine TF_HasPrima
fde0: 72 79 4b 65 79 20 20 20 30 78 30 34 20 20 20 20  ryKey   0x04    
fdf0: 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61 20 70  /* Table has a p
fe00: 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64  rimary key */.#d
fe10: 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63  efine TF_Autoinc
fe20: 72 65 6d 65 6e 74 20 20 20 30 78 30 38 20 20 20  rement   0x08   
fe30: 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72 69 6d   /* Integer prim
fe40: 61 72 79 20 6b 65 79 20 69 73 20 61 75 74 6f 69  ary key is autoi
fe50: 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66  ncrement */.#def
fe60: 69 6e 65 20 54 46 5f 56 69 72 74 75 61 6c 20 20  ine TF_Virtual  
fe70: 20 20 20 20 20 20 20 30 78 31 30 20 20 20 20 2f         0x10    /
fe80: 2a 20 49 73 20 61 20 76 69 72 74 75 61 6c 20 74  * Is a virtual t
fe90: 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
fea0: 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 20  TF_WithoutRowid 
feb0: 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20 4e 6f     0x20    /* No
fec0: 20 72 6f 77 69 64 20 75 73 65 64 2e 20 50 52 49   rowid used. PRI
fed0: 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68 65 20  MARY KEY is the 
fee0: 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  key */.#define T
fef0: 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20 20  F_OOOHidden     
ff00: 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 75 74    0x40    /* Out
ff10: 2d 6f 66 2d 4f 72 64 65 72 20 68 69 64 64 65 6e  -of-Order hidden
ff20: 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 0a 0a 2f 2a   columns */.../*
ff30: 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20  .** Test to see 
ff40: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
ff50: 20 74 61 62 6c 65 20 69 73 20 61 20 76 69 72 74   table is a virt
ff60: 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73  ual table.  This
ff70: 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61   is.** done as a
ff80: 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69   macro so that i
ff90: 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69  t will be optimi
ffa0: 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72  zed out when vir
ffb0: 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75  tual.** table su
ffc0: 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64  pport is omitted
ffd0: 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e   from the build.
ffe0: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
fff0: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
10000 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49  ABLE.#  define I
10010 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
10020 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73   (((X)->tabFlags
10030 20 26 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d   & TF_Virtual)!=
10040 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48  0).#  define IsH
10050 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28  iddenColumn(X) (
10060 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  ((X)->colFlags &
10070 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29   COLFLAG_HIDDEN)
10080 21 3d 30 29 0a 23 65 6c 73 65 0a 23 20 20 64 65  !=0).#else.#  de
10090 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58  fine IsVirtual(X
100a0 29 20 20 20 20 20 20 30 0a 23 20 20 64 65 66 69  )      0.#  defi
100b0 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ne IsHiddenColum
100c0 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  n(X) 0.#endif../
100d0 2a 20 44 6f 65 73 20 74 68 65 20 74 61 62 6c 65  * Does the table
100e0 20 68 61 76 65 20 61 20 72 6f 77 69 64 20 2a 2f   have a rowid */
100f0 0a 23 64 65 66 69 6e 65 20 48 61 73 52 6f 77 69  .#define HasRowi
10100 64 28 58 29 20 20 20 20 20 28 28 28 58 29 2d 3e  d(X)     (((X)->
10110 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 57 69  tabFlags & TF_Wi
10120 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a  thoutRowid)==0).
10130 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65  ./*.** Each fore
10140 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
10150 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  nt is an instanc
10160 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
10170 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
10180 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65  .** A foreign ke
10190 79 20 69 73 20 61 73 73 6f 63 69 61 74 65 64 20  y is associated 
101a0 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e  with two tables.
101b0 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62    The "from" tab
101c0 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62  le is.** the tab
101d0 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  le that contains
101e0 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
101f0 63 6c 61 75 73 65 20 74 68 61 74 20 63 72 65 61  clause that crea
10200 74 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a  tes the foreign.
10210 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f  ** key.  The "to
10220 22 20 74 61 62 6c 65 20 69 73 20 74 68 65 20 74  " table is the t
10230 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d  able that is nam
10240 65 64 20 69 6e 20 74 68 65 20 52 45 46 45 52 45  ed in the REFERE
10250 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20  NCES clause..** 
10260 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65 78  Consider this ex
10270 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ample:.**.**    
10280 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 78   CREATE TABLE ex
10290 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e  1(.**       a IN
102a0 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
102b0 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e  Y,.**       b IN
102c0 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54  TEGER CONSTRAINT
102d0 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20   fk1 REFERENCES 
102e0 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b  ex2(x).**     );
102f0 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69  .**.** For forei
10300 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68  gn key "fk1", th
10310 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20  e from-table is 
10320 22 65 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f  "ex1" and the to
10330 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e  -table is "ex2".
10340 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e 74 20 6e  .** Equivalent n
10350 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ames:.**.**     
10360 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68  from-table == ch
10370 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20  ild-table.**    
10380 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70     to-table == p
10390 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a  arent-table.**.*
103a0 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e 43 45  * Each REFERENCE
103b0 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61 74  S clause generat
103c0 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  es an instance o
103d0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
103e0 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68 69  structure.** whi
103f0 63 68 20 69 73 20 61 74 74 61 63 68 65 64 20 74  ch is attached t
10400 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65  o the from-table
10410 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65 20  .  The to-table 
10420 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20 77  need not exist w
10430 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d  hen.** the from-
10440 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64  table is created
10450 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e 63 65  .  The existence
10460 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c 65   of the to-table
10470 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e   is not checked.
10480 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20  .**.** The list 
10490 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74 73 20 66  of all parents f
104a0 6f 72 20 63 68 69 6c 64 20 54 61 62 6c 65 20 58  or child Table X
104b0 20 69 73 20 68 65 6c 64 20 61 74 20 58 2e 70 46   is held at X.pF
104c0 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73  Key..**.** A lis
104d0 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72 65  t of all childre
104e0 6e 20 66 6f 72 20 61 20 74 61 62 6c 65 20 6e 61  n for a table na
104f0 6d 65 64 20 5a 20 28 77 68 69 63 68 20 6d 69 67  med Z (which mig
10500 68 74 20 6e 6f 74 20 65 76 65 6e 20 65 78 69 73  ht not even exis
10510 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e  t).** is held in
10520 20 53 63 68 65 6d 61 2e 66 6b 65 79 48 61 73 68   Schema.fkeyHash
10530 20 77 69 74 68 20 61 20 68 61 73 68 20 6b 65 79   with a hash key
10540 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74   of Z..*/.struct
10550 20 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65 20   FKey {.  Table 
10560 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54  *pFrom;     /* T
10570 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  able containing 
10580 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
10590 6c 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69 6c  lause (aka: Chil
105a0 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e  d) */.  FKey *pN
105b0 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78  extFrom;  /* Nex
105c0 74 20 46 4b 65 79 20 77 69 74 68 20 74 68 65 20  t FKey with the 
105d0 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e  same in pFrom. N
105e0 65 78 74 20 70 61 72 65 6e 74 20 6f 66 20 70 46  ext parent of pF
105f0 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  rom */.  char *z
10600 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  To;        /* Na
10610 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74  me of table that
10620 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20   the key points 
10630 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29  to (aka: Parent)
10640 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78   */.  FKey *pNex
10650 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20  tTo;    /* Next 
10660 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54  with the same zT
10670 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64 20 6f 66  o. Next child of
10680 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20   zTo. */.  FKey 
10690 2a 70 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20  *pPrevTo;    /* 
106a0 50 72 65 76 69 6f 75 73 20 77 69 74 68 20 74 68  Previous with th
106b0 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20  e same zTo */.  
106c0 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20  int nCol;       
106d0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
106e0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b  olumns in this k
106f0 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52  ey */.  /* EV: R
10700 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a  -30323-21917 */.
10710 20 20 75 38 20 69 73 44 65 66 65 72 72 65 64 3b    u8 isDeferred;
10720 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
10730 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68 65  f constraint che
10740 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72 65  cking is deferre
10750 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f  d till COMMIT */
10760 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d  .  u8 aAction[2]
10770 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44  ;        /* ON D
10780 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55 50 44  ELETE and ON UPD
10790 41 54 45 20 61 63 74 69 6f 6e 73 2c 20 72 65 73  ATE actions, res
107a0 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54  pectively */.  T
107b0 72 69 67 67 65 72 20 2a 61 70 54 72 69 67 67 65  rigger *apTrigge
107c0 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73  r[2];/* Triggers
107d0 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61   for aAction[] a
107e0 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75  ctions */.  stru
107f0 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20  ct sColMap {    
10800 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20    /* Mapping of 
10810 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d  columns in pFrom
10820 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a   to columns in z
10830 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46  To */.    int iF
10840 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  rom;            
10850 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75  /* Index of colu
10860 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20  mn in pFrom */. 
10870 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20     char *zCol;  
10880 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
10890 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54   of column in zT
108a0 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75 73 65 20  o.  If NULL use 
108b0 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20  PRIMARY KEY */. 
108c0 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20   } aCol[1];     
108d0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e         /* One en
108e0 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f 66 20  try for each of 
108f0 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a  nCol columns */.
10900 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65  };../*.** SQLite
10910 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 64   supports many d
10920 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74 6f  ifferent ways to
10930 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74   resolve a const
10940 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20  raint.** error. 
10950 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73   ROLLBACK proces
10960 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 20  sing means that 
10970 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
10980 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73  lation.** causes
10990 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
109a0 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66 61 69  n process to fai
109b0 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20 63 75  l and for the cu
109c0 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  rrent transactio
109d0 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65  n.** to be rolle
109e0 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54 20 70  d back.  ABORT p
109f0 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
10a00 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
10a10 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c   process.** fail
10a20 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f 72 20  s and any prior 
10a30 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74 68 61  changes from tha
10a40 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20  t one operation 
10a50 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a  are backed out,.
10a60 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61 6e 73  ** but the trans
10a70 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f  action is not ro
10a80 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41 49 4c  lled back.  FAIL
10a90 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
10aa0 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70  s that.** the op
10ab0 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72  eration in progr
10ac0 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20 72 65  ess stops and re
10ad0 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63  turns an error c
10ae0 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f 72 0a  ode.  But prior.
10af0 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65 20 74  ** changes due t
10b00 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61  o the same opera
10b10 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61 63  tion are not bac
10b20 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72  ked out and no r
10b30 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72  ollback.** occur
10b40 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73  s.  IGNORE means
10b50 20 74 68 61 74 20 74 68 65 20 70 61 72 74 69 63   that the partic
10b60 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20 63 61  ular row that ca
10b70 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61  used the constra
10b80 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20  int.** error is 
10b90 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20  not inserted or 
10ba0 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63 65 73  updated.  Proces
10bb0 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61  sing continues a
10bc0 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69  nd no error.** i
10bd0 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52 45 50  s returned.  REP
10be0 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61 74 20  LACE means that 
10bf0 70 72 65 65 78 69 73 74 69 6e 67 20 64 61 74 61  preexisting data
10c00 62 61 73 65 20 72 6f 77 73 20 74 68 61 74 20 63  base rows that c
10c10 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55  aused.** a UNIQU
10c20 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  E constraint vio
10c30 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76  lation are remov
10c40 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e  ed so that the n
10c50 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20  ew insert or.** 
10c60 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f 63 65  update can proce
10c70 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20  ed.  Processing 
10c80 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f  continues and no
10c90 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f 72 74   error is report
10ca0 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49  ed..**.** RESTRI
10cb0 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64  CT, SETNULL, and
10cc0 20 43 41 53 43 41 44 45 20 61 63 74 69 6f 6e 73   CASCADE actions
10cd0 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66   apply only to f
10ce0 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20  oreign keys..** 
10cf0 52 45 53 54 52 49 43 54 20 69 73 20 74 68 65 20  RESTRICT is the 
10d00 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20 66 6f  same as ABORT fo
10d10 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f 72 65  r IMMEDIATE fore
10d20 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74 68 65  ign keys and the
10d30 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c  .** same as ROLL
10d40 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52 52 45  BACK for DEFERRE
10d50 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c  D keys.  SETNULL
10d60 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
10d70 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69  foreign.** key i
10d80 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20  s set to NULL.  
10d90 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20 74 68  CASCADE means th
10da0 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72 20 55  at a DELETE or U
10db0 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20  PDATE of the.** 
10dc0 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65  referenced table
10dd0 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67 61 74   row is propagat
10de0 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f 77 20  ed into the row 
10df0 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a  that holds the.*
10e00 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a  * foreign key..*
10e10 2a 20 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  * .** The follow
10e20 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c  ing symbolic val
10e30 75 65 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ues are used to 
10e40 72 65 63 6f 72 64 20 77 68 69 63 68 20 74 79 70  record which typ
10e50 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74  e.** of action t
10e60 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69  o take..*/.#defi
10e70 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30  ne OE_None     0
10e80 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e     /* There is n
10e90 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20  o constraint to 
10ea0 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65  check */.#define
10eb0 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20   OE_Rollback 1  
10ec0 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65   /* Fail the ope
10ed0 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62  ration and rollb
10ee0 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74  ack the transact
10ef0 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
10f00 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f  E_Abort    2   /
10f10 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67  * Back out chang
10f20 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c  es but do no rol
10f30 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f  lback transactio
10f40 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  n */.#define OE_
10f50 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20  Fail     3   /* 
10f60 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69  Stop the operati
10f70 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c  on but leave all
10f80 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a   prior changes *
10f90 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e  /.#define OE_Ign
10fa0 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e  ore   4   /* Ign
10fb0 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44  ore the error. D
10fc0 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53  o not do the INS
10fd0 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f  ERT or UPDATE */
10fe0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c  .#define OE_Repl
10ff0 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65  ace  5   /* Dele
11000 74 65 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f  te existing reco
11010 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45  rd, then do INSE
11020 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a  RT or UPDATE */.
11030 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 73 74  .#define OE_Rest
11040 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41  rict 6   /* OE_A
11050 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44 49 41  bort for IMMEDIA
11060 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20  TE, OE_Rollback 
11070 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a 2f 0a  for DEFERRED */.
11080 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75  #define OE_SetNu
11090 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74 20 74  ll  7   /* Set t
110a0 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76  he foreign key v
110b0 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a  alue to NULL */.
110c0 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 44 66  #define OE_SetDf
110d0 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74 20 74  lt  8   /* Set t
110e0 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76  he foreign key v
110f0 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65 66 61  alue to its defa
11100 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ult */.#define O
11110 45 5f 43 61 73 63 61 64 65 20 20 39 20 20 20 2f  E_Cascade  9   /
11120 2a 20 43 61 73 63 61 64 65 20 74 68 65 20 63 68  * Cascade the ch
11130 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e  anges */..#defin
11140 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20 31 30  e OE_Default  10
11150 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72    /* Do whatever
11160 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63 74   the default act
11170 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  ion is */.../*.*
11180 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
11190 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
111a0 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73  tructure is pass
111b0 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74 0a  ed as the first.
111c0 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73  ** argument to s
111d0 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d  qlite3VdbeKeyCom
111e0 70 61 72 65 20 61 6e 64 20 69 73 20 75 73 65 64  pare and is used
111f0 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20   to control the 
11200 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  .** comparison o
11210 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20  f the two index 
11220 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  keys..**.** Note
11230 20 74 68 61 74 20 61 53 6f 72 74 4f 72 64 65 72   that aSortOrder
11240 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68  [] and aColl[] h
11250 61 76 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f  ave nField+1 slo
11260 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72  ts.  There.** ar
11270 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20 66  e nField slots f
11280 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  or the columns o
11290 66 20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e 20  f an index then 
112a0 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a  one extra slot.*
112b0 2a 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20  * for the rowid 
112c0 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73  at the end..*/.s
112d0 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a  truct KeyInfo {.
112e0 20 20 75 33 32 20 6e 52 65 66 3b 20 20 20 20 20    u32 nRef;     
112f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
11300 6f 66 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f  of references to
11310 20 74 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62   this KeyInfo ob
11320 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63  ject */.  u8 enc
11330 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
11340 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d   Text encoding -
11350 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49   one of the SQLI
11360 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a  TE_UTF* values *
11370 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20  /.  u16 nField; 
11380 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
11390 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73  r of key columns
113a0 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f   in the index */
113b0 0a 20 20 75 31 36 20 6e 58 46 69 65 6c 64 3b 20  .  u16 nXField; 
113c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
113d0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 62 65 79 6f   of columns beyo
113e0 6e 64 20 74 68 65 20 6b 65 79 20 63 6f 6c 75 6d  nd the key colum
113f0 6e 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  ns */.  sqlite3 
11400 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  *db;        /* T
11410 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
11420 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a  ection */.  u8 *
11430 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20  aSortOrder;     
11440 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f  /* Sort order fo
11450 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a  r each column. *
11460 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f  /.  CollSeq *aCo
11470 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61  ll[1];  /* Colla
11480 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f  ting sequence fo
11490 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74  r each term of t
114a0 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  he key */.};../*
114b0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
114c0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
114d0 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
114e0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
114f0 75 74 20 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69  ut a.** single i
11500 6e 64 65 78 20 72 65 63 6f 72 64 20 74 68 61 74  ndex record that
11510 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
11520 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74  n parsed out int
11530 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20  o individual.** 
11540 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20  values..**.** A 
11550 72 65 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a  record is an obj
11560 65 63 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ect that contain
11570 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69  s one or more fi
11580 65 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a  elds of data..**
11590 20 52 65 63 6f 72 64 73 20 61 72 65 20 75 73 65   Records are use
115a0 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63  d to store the c
115b0 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c  ontent of a tabl
115c0 65 20 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f  e row and to sto
115d0 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66  re.** the key of
115e0 20 61 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c   an index.  A bl
115f0 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61  ob encoding of a
11600 20 72 65 63 6f 72 64 20 69 73 20 63 72 65 61 74   record is creat
11610 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f  ed by.** the OP_
11620 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64  MakeRecord opcod
11630 65 20 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e  e of the VDBE an
11640 64 20 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65  d is disassemble
11650 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43  d by the.** OP_C
11660 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a  olumn opcode..**
11670 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75  .** This structu
11680 72 65 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72  re holds a recor
11690 64 20 74 68 61 74 20 68 61 73 20 61 6c 72 65 61  d that has alrea
116a0 64 79 20 62 65 65 6e 20 64 69 73 61 73 73 65 6d  dy been disassem
116b0 62 6c 65 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73  bled.** into its
116c0 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 66 69 65   constituent fie
116d0 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  lds..**.** The r
116e0 31 20 61 6e 64 20 72 32 20 6d 65 6d 62 65 72 20  1 and r2 member 
116f0 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e  variables are on
11700 6c 79 20 75 73 65 64 20 62 79 20 74 68 65 20 6f  ly used by the o
11710 70 74 69 6d 69 7a 65 64 20 63 6f 6d 70 61 72 69  ptimized compari
11720 73 6f 6e 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  son.** functions
11730 20 76 64 62 65 52 65 63 6f 72 64 43 6f 6d 70 61   vdbeRecordCompa
11740 72 65 49 6e 74 28 29 20 61 6e 64 20 76 64 62 65  reInt() and vdbe
11750 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 53 74 72  RecordCompareStr
11760 69 6e 67 28 29 2e 0a 2a 2f 0a 73 74 72 75 63 74  ing()..*/.struct
11770 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
11780 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  {.  KeyInfo *pKe
11790 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61  yInfo;  /* Colla
117a0 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72  tion and sort-or
117b0 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  der information 
117c0 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  */.  u16 nField;
117d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
117e0 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
117f0 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38   apMem[] */.  i8
11800 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20   default_rc;    
11810 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20    /* Comparison 
11820 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61  result if keys a
11830 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38  re equal */.  u8
11840 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20   errCode;       
11850 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63    /* Error detec
11860 74 65 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f  ted by xRecordCo
11870 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f  mpare (CORRUPT o
11880 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 4d 65  r NOMEM) */.  Me
11890 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *aMem;        
118a0 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20    /* Values */. 
118b0 20 69 6e 74 20 72 31 3b 20 20 20 20 20 20 20 20   int r1;        
118c0 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
118d0 20 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20   return if (lhs 
118e0 3e 20 72 68 73 29 20 2a 2f 0a 20 20 69 6e 74 20  > rhs) */.  int 
118f0 72 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r2;             
11900 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
11910 72 6e 20 69 66 20 28 72 68 73 20 3c 20 6c 68 73  rn if (rhs < lhs
11920 29 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20  ) */.};.../*.** 
11930 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78 20 69  Each SQL index i
11940 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
11950 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a   memory by an.**
11960 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
11970 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
11980 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ture..**.** The 
11990 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74  columns of the t
119a0 61 62 6c 65 20 74 68 61 74 20 61 72 65 20 74 6f  able that are to
119b0 20 62 65 20 69 6e 64 65 78 65 64 20 61 72 65 20   be indexed are 
119c0 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79 20  described.** by 
119d0 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66  the aiColumn[] f
119e0 69 65 6c 64 20 6f 66 20 74 68 69 73 20 73 74 72  ield of this str
119f0 75 63 74 75 72 65 2e 20 20 46 6f 72 20 65 78 61  ucture.  For exa
11a00 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a  mple, suppose.**
11a10 20 77 65 20 68 61 76 65 20 74 68 65 20 66 6f 6c   we have the fol
11a20 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 61 6e 64  lowing table and
11a30 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20   index:.**.**   
11a40 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 45    CREATE TABLE E
11a50 78 31 28 63 31 20 69 6e 74 2c 20 63 32 20 69 6e  x1(c1 int, c2 in
11a60 74 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20  t, c3 text);.** 
11a70 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
11a80 20 45 78 32 20 4f 4e 20 45 78 31 28 63 33 2c 63   Ex2 ON Ex1(c3,c
11a90 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  1);.**.** In the
11aa0 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65   Table structure
11ab0 20 64 65 73 63 72 69 62 69 6e 67 20 45 78 31 2c   describing Ex1,
11ac0 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65   nCol==3 because
11ad0 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 74 68   there are.** th
11ae0 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  ree columns in t
11af0 68 65 20 74 61 62 6c 65 2e 20 20 49 6e 20 74 68  he table.  In th
11b00 65 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72  e Index structur
11b10 65 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20  e describing.** 
11b20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20  Ex2, nColumn==2 
11b30 73 69 6e 63 65 20 32 20 6f 66 20 74 68 65 20 33  since 2 of the 3
11b40 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20   columns of Ex1 
11b50 61 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20  are indexed..** 
11b60 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61 69 43  The value of aiC
11b70 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e  olumn is {2, 0}.
11b80 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32    aiColumn[0]==2
11b90 20 62 65 63 61 75 73 65 20 74 68 65 20 0a 2a 2a   because the .**
11ba0 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f   first column to
11bb0 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 33 29   be indexed (c3)
11bc0 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
11bd0 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d   2 in Ex1.aCol[]
11be0 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20  ..** The second 
11bf0 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64  column to be ind
11c00 65 78 65 64 20 28 63 31 29 20 68 61 73 20 61 6e  exed (c1) has an
11c10 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a   index of 0 in.*
11c20 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65  * Ex1.aCol[], he
11c30 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e  nce Ex2.aiColumn
11c40 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68  [1]==0..**.** Th
11c50 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20  e Index.onError 
11c60 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73  field determines
11c70 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
11c80 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75  the indexed colu
11c90 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75  mns.** must be u
11ca0 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74 20 74  nique and what t
11cb0 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61 72 65  o do if they are
11cc0 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65   not.  When Inde
11cd0 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e  x.onError=OE_Non
11ce0 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74  e,.** it means t
11cf0 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69  his is not a uni
11d00 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65  que index.  Othe
11d10 72 77 69 73 65 20 69 74 20 69 73 20 61 20 75 6e  rwise it is a un
11d20 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e  ique index.** an
11d30 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49  d the value of I
11d40 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64  ndex.onError ind
11d50 69 63 61 74 65 20 74 68 65 20 77 68 69 63 68 20  icate the which 
11d60 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
11d70 69 6f 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68  ion .** algorith
11d80 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e  m to employ when
11d90 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20  ever an attempt 
11da0 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72  is made to inser
11db0 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a  t a non-unique.*
11dc0 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74  * element..*/.st
11dd0 72 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63  ruct Index {.  c
11de0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
11df0 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
11e00 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  of this index */
11e10 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e  .  i16 *aiColumn
11e20 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  ;           /* W
11e30 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65  hich columns are
11e40 20 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e   used by this in
11e50 64 65 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a  dex.  1st is 0 *
11e60 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f  /.  LogEst *aiRo
11e70 77 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20  wLogEst;     /* 
11e80 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73  From ANALYZE: Es
11e90 74 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64  t. rows selected
11ea0 20 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   by each column 
11eb0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
11ec0 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le;           /*
11ed0 20 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62   The SQL table b
11ee0 65 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a  eing indexed */.
11ef0 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b    char *zColAff;
11f00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
11f10 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68  ring defining th
11f20 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61  e affinity of ea
11f30 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49  ch column */.  I
11f40 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20  ndex *pNext;    
11f50 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
11f60 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69  ext index associ
11f70 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61  ated with the sa
11f80 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63  me table */.  Sc
11f90 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
11fa0 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61         /* Schema
11fb0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73   containing this
11fc0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a   index */.  u8 *
11fd0 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20  aSortOrder;     
11fe0 20 20 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68       /* for each
11ff0 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44   column: True==D
12000 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20  ESC, False==ASC 
12010 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f  */.  char **azCo
12020 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ll;           /*
12030 20 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74   Array of collat
12040 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d  ion sequence nam
12050 65 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a  es for index */.
12060 20 20 45 78 70 72 20 2a 70 50 61 72 74 49 64 78    Expr *pPartIdx
12070 57 68 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48  Where;     /* WH
12080 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70  ERE clause for p
12090 61 72 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a  artial indices *
120a0 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20  /.  int tnum;   
120b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
120c0 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69  DB Page containi
120d0 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20  ng root of this 
120e0 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73  index */.  LogEs
120f0 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20  t szIdxRow;     
12100 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
12110 20 61 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a   average row siz
12120 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  e in bytes */.  
12130 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20  u16 nKeyCol;    
12140 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
12150 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f  er of columns fo
12160 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f  rming the key */
12170 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20  .  u16 nColumn; 
12180 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
12190 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
121a0 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69   stored in the i
121b0 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45  ndex */.  u8 onE
121c0 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20  rror;           
121d0 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20     /* OE_Abort, 
121e0 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65  OE_Ignore, OE_Re
121f0 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e  place, or OE_Non
12200 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  e */.  unsigned 
12210 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20  idxType:2;      
12220 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d  /* 1==UNIQUE, 2=
12230 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d  =PRIMARY KEY, 0=
12240 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f  =CREATE INDEX */
12250 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f  .  unsigned bUno
12260 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55  rdered:1;   /* U
12270 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f  se this index fo
12280 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69  r == or IN queri
12290 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73  es only */.  uns
122a0 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c  igned uniqNotNul
122b0 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66  l:1;  /* True if
122c0 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20   UNIQUE and NOT 
122d0 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c  NULL for all col
122e0 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  umns */.  unsign
122f0 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20  ed isResized:1; 
12300 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65     /* True if re
12310 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28  sizeIndexObject(
12320 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  ) has been calle
12330 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  d */.  unsigned 
12340 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20  isCovering:1;   
12350 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20  /* True if this 
12360 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e  is a covering in
12370 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  dex */.  unsigne
12380 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20  d noSkipScan:1; 
12390 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20    /* Do not try 
123a0 74 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61 6e  to use skip-scan
123b0 20 69 66 20 74 72 75 65 20 2a 2f 0a 23 69 66 64   if true */.#ifd
123c0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
123d0 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
123e0 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20    int nSample;  
123f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
12400 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73  mber of elements
12410 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f   in aSample[] */
12420 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f  .  int nSampleCo
12430 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53  l;          /* S
12440 69 7a 65 20 6f 66 20 49 6e 64 65 78 53 61 6d 70  ize of IndexSamp
12450 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f  le.anEq[] and so
12460 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74   on */.  tRowcnt
12470 20 2a 61 41 76 67 45 71 3b 20 20 20 20 20 20 20   *aAvgEq;       
12480 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e 45 71    /* Average nEq
12490 20 76 61 6c 75 65 73 20 66 6f 72 20 6b 65 79 73   values for keys
124a0 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20   not in aSample 
124b0 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65  */.  IndexSample
124c0 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a   *aSample;    /*
124d0 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20   Samples of the 
124e0 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f  left-most key */
124f0 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f  .  tRowcnt *aiRo
12500 77 45 73 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e  wEst;       /* N
12510 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 73  on-logarithmic s
12520 74 61 74 31 20 64 61 74 61 20 66 6f 72 20 74 68  tat1 data for th
12530 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52  is index */.  tR
12540 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20  owcnt nRowEst0; 
12550 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f         /* Non-lo
12560 67 61 72 69 74 68 6d 69 63 20 6e 75 6d 62 65 72  garithmic number
12570 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
12580 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a  index */.#endif.
12590 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
125a0 64 20 76 61 6c 75 65 73 20 66 6f 72 20 49 6e 64  d values for Ind
125b0 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64  ex.idxType.*/.#d
125c0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58  efine SQLITE_IDX
125d0 54 59 50 45 5f 41 50 50 44 45 46 20 20 20 20 20  TYPE_APPDEF     
125e0 20 30 20 20 20 2f 2a 20 43 72 65 61 74 65 64 20   0   /* Created 
125f0 75 73 69 6e 67 20 43 52 45 41 54 45 20 49 4e 44  using CREATE IND
12600 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  EX */.#define SQ
12610 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 55 4e 49  LITE_IDXTYPE_UNI
12620 51 55 45 20 20 20 20 20 20 31 20 20 20 2f 2a 20  QUE      1   /* 
12630 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49  Implements a UNI
12640 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  QUE constraint *
12650 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
12660 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59  _IDXTYPE_PRIMARY
12670 4b 45 59 20 20 32 20 20 20 2f 2a 20 49 73 20 74  KEY  2   /* Is t
12680 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66  he PRIMARY KEY f
12690 6f 72 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  or the table */.
126a0 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  ./* Return true 
126b0 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20  if index X is a 
126c0 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e 64 65  PRIMARY KEY inde
126d0 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50  x */.#define IsP
126e0 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 58  rimaryKeyIndex(X
126f0 29 20 20 28 28 58 29 2d 3e 69 64 78 54 79 70 65  )  ((X)->idxType
12700 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  ==SQLITE_IDXTYPE
12710 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a  _PRIMARYKEY)../*
12720 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
12730 69 6e 64 65 78 20 58 20 69 73 20 61 20 55 4e 49  index X is a UNI
12740 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  QUE index */.#de
12750 66 69 6e 65 20 49 73 55 6e 69 71 75 65 49 6e 64  fine IsUniqueInd
12760 65 78 28 58 29 20 20 20 20 20 20 28 28 58 29 2d  ex(X)      ((X)-
12770 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e  >onError!=OE_Non
12780 65 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73  e)../*.** Each s
12790 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20  ample stored in 
127a0 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33  the sqlite_stat3
127b0 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73   table is repres
127c0 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20  ented in memory 
127d0 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75  .** using a stru
127e0 63 74 75 72 65 20 6f 66 20 74 68 69 73 20 74 79  cture of this ty
127f0 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e  pe.  See documen
12800 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f  tation at the to
12810 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c  p of the.** anal
12820 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c  yze.c source fil
12830 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
12840 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
12850 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d  .struct IndexSam
12860 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b  ple {.  void *p;
12870 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
12880 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20  nter to sampled 
12890 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
128a0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
128b0 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20   Size of record 
128c0 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52  in bytes */.  tR
128d0 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20  owcnt *anEq;    
128e0 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
128f0 66 20 72 6f 77 73 20 77 68 65 72 65 20 74 68 65  f rows where the
12900 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69 73   key equals this
12910 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f   sample */.  tRo
12920 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f  wcnt *anLt;    /
12930 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66  * Est. number of
12940 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20   rows where key 
12950 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  is less than thi
12960 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52  s sample */.  tR
12970 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20  owcnt *anDLt;   
12980 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
12990 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20  f distinct keys 
129a0 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73  less than this s
129b0 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ample */.};../*.
129c0 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f  ** Each token co
129d0 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65 20  ming out of the 
129e0 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73 74  lexer is an inst
129f0 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20  ance of.** this 
12a00 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b 65  structure.  Toke
12a10 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65 64  ns are also used
12a20 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 65   as part of an e
12a30 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  xpression..**.**
12a40 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a   Note if Token.z
12a50 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64  ==0 then Token.d
12a60 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61  yn and Token.n a
12a70 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61 6e 64  re undefined and
12a80 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20  .** may contain 
12a90 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20  random values.  
12aa0 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20  Do not make any 
12ab0 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75  assumptions abou
12ac0 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61  t Token.dyn.** a
12ad0 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20  nd Token.n when 
12ae0 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73  Token.z==0..*/.s
12af0 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20  truct Token {.  
12b00 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20 20  const char *z;  
12b10 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68     /* Text of th
12b20 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55  e token.  Not NU
12b30 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a  LL-terminated! *
12b40 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  /.  unsigned int
12b50 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72   n;    /* Number
12b60 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69   of characters i
12b70 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a  n this token */.
12b80 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
12b90 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
12ba0 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
12bb0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65   information nee
12bc0 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a  ded to generate.
12bd0 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45  ** code for a SE
12be0 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69  LECT that contai
12bf0 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ns aggregate fun
12c00 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  ctions..**.** If
12c10 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47   Expr.op==TK_AGG
12c20 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47  _COLUMN or TK_AG
12c30 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20  G_FUNCTION then 
12c40 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73  Expr.pAggInfo is
12c50 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f   a.** pointer to
12c60 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
12c70 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75    The Expr.iColu
12c80 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65 20  mn field is the 
12c90 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49  index in.** AggI
12ca0 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67  nfo.aCol[] or Ag
12cb0 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66  gInfo.aFunc[] of
12cc0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65   information nee
12cd0 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a  ded to generate.
12ce0 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74  ** code for that
12cf0 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67   node..**.** Agg
12d00 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e  Info.pGroupBy an
12d10 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e  d AggInfo.aFunc.
12d20 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66  pExpr point to f
12d30 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65  ields within the
12d40 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c  .** original Sel
12d50 65 63 74 20 73 74 72 75 63 74 75 72 65 20 74 68  ect structure th
12d60 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65  at describes the
12d70 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
12d80 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65  t.  These.** fie
12d90 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20  lds do not need 
12da0 74 6f 20 62 65 20 66 72 65 65 64 20 77 68 65 6e  to be freed when
12db0 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
12dc0 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74  e AggInfo struct
12dd0 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ure..*/.struct A
12de0 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69  ggInfo {.  u8 di
12df0 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20  rectMode;       
12e00 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e     /* Direct ren
12e10 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e  dering mode mean
12e20 73 20 74 61 6b 65 20 64 61 74 61 20 64 69 72 65  s take data dire
12e30 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20  ctly.           
12e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
12e50 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61  * from source ta
12e60 62 6c 65 73 20 72 61 74 68 65 72 20 74 68 61 6e  bles rather than
12e70 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f   from accumulato
12e80 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f  rs */.  u8 useSo
12e90 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20  rtingIdx;       
12ea0 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64  /* In direct mod
12eb0 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68 65  e, reference the
12ec0 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72   sorting index r
12ed0 61 74 68 65 72 0a 20 20 20 20 20 20 20 20 20 20  ather.          
12ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ef0 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72  ** than the sour
12f00 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e  ce table */.  in
12f10 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20  t sortingIdx;   
12f20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20        /* Cursor 
12f30 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f  number of the so
12f40 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
12f50 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 50   int sortingIdxP
12f60 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72 73  Tab;     /* Curs
12f70 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65  or number of pse
12f80 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69  udo-table */.  i
12f90 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d  nt nSortingColum
12fa0 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  n;     /* Number
12fb0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
12fc0 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
12fd0 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c   */.  int mnReg,
12fe0 20 6d 78 52 65 67 3b 20 20 20 20 20 20 20 2f 2a   mxReg;       /*
12ff0 20 52 61 6e 67 65 20 6f 66 20 72 65 67 69 73 74   Range of regist
13000 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f  ers allocated fo
13010 72 20 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63  r aCol and aFunc
13020 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
13030 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a  pGroupBy;     /*
13040 20 54 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c   The group by cl
13050 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74  ause */.  struct
13060 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20   AggInfo_col {  
13070 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f    /* For each co
13080 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75  lumn used in sou
13090 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20  rce tables */.  
130a0 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
130b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f             /* So
130c0 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
130d0 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20    int iTable;   
130e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
130f0 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
13100 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
13110 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75  */.    int iColu
13120 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  mn;             
13130 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* Column number
13140 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72   within the sour
13150 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
13160 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d  int iSorterColum
13170 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75  n;       /* Colu
13180 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65  mn number in the
13190 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
131a0 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20  /.    int iMem; 
131b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
131c0 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  * Memory locatio
131d0 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61  n that acts as a
131e0 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20  ccumulator */.  
131f0 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
13200 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
13210 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65  e original expre
13220 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43  ssion */.  } *aC
13230 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d  ol;.  int nColum
13240 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
13250 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20   Number of used 
13260 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b  entries in aCol[
13270 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75  ] */.  int nAccu
13280 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f  mulator;       /
13290 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
132a0 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74 68  mns that show th
132b0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74  rough to the out
132c0 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20  put..           
132d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
132e0 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c  * Additional col
132f0 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e  umns are used on
13300 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65 72 73  ly as parameters
13310 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20   to.            
13320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
13330 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
13340 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  ions */.  struct
13350 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20   AggInfo_func { 
13360 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67    /* For each ag
13370 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
13380 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45   */.    Expr *pE
13390 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
133a0 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65   /* Expression e
133b0 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63  ncoding the func
133c0 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63  tion */.    Func
133d0 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20  Def *pFunc;     
133e0 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72       /* The aggr
133f0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69  egate function i
13400 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f  mplementation */
13410 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20  .    int iMem;  
13420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
13430 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   Memory location
13440 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63   that acts as ac
13450 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20  cumulator */.   
13460 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20   int iDistinct; 
13470 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68            /* Eph
13480 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65  emeral table use
13490 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53  d to enforce DIS
134a0 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46  TINCT */.  } *aF
134b0 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63  unc;.  int nFunc
134c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
134d0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
134e0 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a  ies in aFunc[] *
134f0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
13500 64 61 74 61 74 79 70 65 20 79 6e 56 61 72 20 69  datatype ynVar i
13510 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67  s a signed integ
13520 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69  er, either 16-bi
13530 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20  t or 32-bit..** 
13540 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36  Usually it is 16
13550 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66 20 53  -bits.  But if S
13560 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
13570 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65  LE_NUMBER is gre
13580 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37  ater.** than 327
13590 36 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61  67 we have to ma
135a0 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31  ke it 32-bit.  1
135b0 36 2d 62 69 74 20 69 73 20 70 72 65 66 65 72 72  6-bit is preferr
135c0 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74  ed because.** it
135d0 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72   uses less memor
135e0 79 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62  y in the Expr ob
135f0 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 20 61  ject, which is a
13600 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72   big memory user
13610 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77  .** in systems w
13620 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70  ith lots of prep
13630 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e  ared statements.
13640 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63    And few applic
13650 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d  ations.** need m
13660 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31  ore than about 1
13670 30 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65  0 or 20 variable
13680 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74  s.  But some ext
13690 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a  reme users want.
136a0 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70 61  ** to have prepa
136b0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77  red statements w
136c0 69 74 68 20 6f 76 65 72 20 33 32 37 36 37 20 76  ith over 32767 v
136d0 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f  ariables, and fo
136e0 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70  r them.** the op
136f0 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c  tion is availabl
13700 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  e (at compile-ti
13710 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  me)..*/.#if SQLI
13720 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
13730 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79  NUMBER<=32767.ty
13740 70 65 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b  pedef i16 ynVar;
13750 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69  .#else.typedef i
13760 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66  nt ynVar;.#endif
13770 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64  ../*.** Each nod
13780 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69  e of an expressi
13790 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65 20  on in the parse 
137a0 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61  tree is an insta
137b0 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  nce.** of this s
137c0 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
137d0 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f  Expr.op is the o
137e0 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67  pcode. The integ
137f0 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20  er parser token 
13800 63 6f 64 65 73 20 61 72 65 20 72 65 75 73 65 64  codes are reused
13810 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68  .** as opcodes h
13820 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65  ere. For example
13830 2c 20 74 68 65 20 70 61 72 73 65 72 20 64 65 66  , the parser def
13840 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65  ines TK_GE to be
13850 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63   an integer.** c
13860 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67  ode representing
13870 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74   the ">=" operat
13880 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e  or. This same in
13890 74 65 67 65 72 20 63 6f 64 65 20 69 73 20 72 65  teger code is re
138a0 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65  used.** to repre
138b0 73 65 6e 74 20 74 68 65 20 67 72 65 61 74 65 72  sent the greater
138c0 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74  -than-or-equal-t
138d0 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68  o operator in th
138e0 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20  e expression.** 
138f0 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tree..**.** If t
13900 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
13910 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20   an SQL literal 
13920 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f  (TK_INTEGER, TK_
13930 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20  FLOAT, TK_BLOB, 
13940 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47  .** or TK_STRING
13950 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ), then Expr.tok
13960 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  en contains the 
13970 74 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20  text of the SQL 
13980 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74  literal. If.** t
13990 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
139a0 20 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f   a variable (TK_
139b0 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20  VARIABLE), then 
139c0 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
139d0 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76 61 72 69  ins the .** vari
139e0 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c  able name. Final
139f0 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70 72 65  ly, if the expre
13a00 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20  ssion is an SQL 
13a10 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e  function (TK_FUN
13a20 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20  CTION),.** then 
13a30 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
13a40 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  ins the name of 
13a50 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a  the function..**
13a60 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20  .** Expr.pRight 
13a70 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61  and Expr.pLeft a
13a80 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20  re the left and 
13a90 72 69 67 68 74 20 73 75 62 65 78 70 72 65 73 73  right subexpress
13aa0 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e  ions of a.** bin
13ab0 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69  ary operator. Ei
13ac0 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79  ther or both may
13ad0 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   be NULL..**.** 
13ae0 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20  Expr.x.pList is 
13af0 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65  a list of argume
13b00 6e 74 73 20 69 66 20 74 68 65 20 65 78 70 72 65  nts if the expre
13b10 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20  ssion is an SQL 
13b20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43  function,.** a C
13b30 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f  ASE expression o
13b40 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69  r an IN expressi
13b50 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22  on of the form "
13b60 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c  <lhs> IN (<y>, <
13b70 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72  z>...)"..** Expr
13b80 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73  .x.pSelect is us
13b90 65 64 20 69 66 20 74 68 65 20 65 78 70 72 65 73  ed if the expres
13ba0 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65  sion is a sub-se
13bb0 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65  lect or an expre
13bc0 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ssion of.** the 
13bd0 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28  form "<lhs> IN (
13be0 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66  SELECT ...)". If
13bf0 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63   the EP_xIsSelec
13c00 74 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20  t bit is set in 
13c10 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67  the.** Expr.flag
13c20 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70  s mask, then Exp
13c30 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76  r.x.pSelect is v
13c40 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  alid. Otherwise,
13c50 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73   Expr.x.pList is
13c60 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a   .** valid..**.*
13c70 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  * An expression 
13c80 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f  of the form ID o
13c90 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20 74  r ID.ID refers t
13ca0 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20  o a column in a 
13cb0 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75  table..** For su
13cc0 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20  ch expressions, 
13cd0 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74  Expr.op is set t
13ce0 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20  o TK_COLUMN and 
13cf0 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a  Expr.iTable is.*
13d00 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63 75  * the integer cu
13d10 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61  rsor number of a
13d20 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69   VDBE cursor poi
13d30 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61  nting to that ta
13d40 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e  ble and.** Expr.
13d50 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63  iColumn is the c
13d60 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72  olumn number for
13d70 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63 6f   the specific co
13d80 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a  lumn.  If the.**
13d90 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75   expression is u
13da0 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  sed as a result 
13db0 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  in an aggregate 
13dc0 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65  SELECT, then the
13dd0 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73  .** value is als
13de0 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  o stored in the 
13df0 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e  Expr.iAgg column
13e00 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61 74   in the aggregat
13e10 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20  e so that.** it 
13e20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20  can be accessed 
13e30 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67  after all aggreg
13e40 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65  ates are compute
13e50 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
13e60 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
13e70 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c   unbound variabl
13e80 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73  e marker (a ques
13e90 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63 68  tion mark .** ch
13ea0 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74  aracter '?' in t
13eb0 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29  he original SQL)
13ec0 20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69   then the Expr.i
13ed0 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20  Table holds the 
13ee0 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d 62 65 72  index .** number
13ef0 20 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62   for that variab
13f00 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  le..**.** If the
13f10 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
13f20 20 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45   subquery then E
13f30 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64  xpr.iColumn hold
13f40 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  s an integer.** 
13f50 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20  register number 
13f60 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72  containing the r
13f70 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62  esult of the sub
13f80 71 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a  query.  If the.*
13f90 2a 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73  * subquery gives
13fa0 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75   a constant resu
13fb0 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20  lt, then iTable 
13fc0 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73  is -1.  If the s
13fd0 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73  ubquery.** gives
13fe0 20 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73   a different ans
13ff0 77 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74  wer at different
14000 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74   times during st
14010 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69  atement processi
14020 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c  ng.** then iTabl
14030 65 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73  e is the address
14040 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65   of a subroutine
14050 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74   that computes t
14060 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a  he subquery..**.
14070 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72 20 69  ** If the Expr i
14080 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c  s of type OP_Col
14090 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62  umn, and the tab
140a0 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63 74 69  le it is selecti
140b0 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20  ng from.** is a 
140c0 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68  disk table or th
140d0 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f  e "old.*" pseudo
140e0 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61  -table, then pTa
140f0 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a  b points to the.
14100 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ** corresponding
14110 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f   table definitio
14120 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54  n..**.** ALLOCAT
14130 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a  ION NOTES:.**.**
14140 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61   Expr objects ca
14150 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d  n use a lot of m
14160 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64  emory space in d
14170 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20  atabase schema. 
14180 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75   To.** help redu
14190 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  ce memory requir
141a0 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65  ements, sometime
141b0 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74  s an Expr object
141c0 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e   will be.** trun
141d0 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72  cated.  And to r
141e0 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72  educe the number
141f0 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   of memory alloc
14200 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65  ations, sometime
14210 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65  s.** two or more
14220 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69   Expr objects wi
14230 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  ll be stored in 
14240 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20  a single memory 
14250 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74  allocation,.** t
14260 6f 67 65 74 68 65 72 20 77 69 74 68 20 45 78 70  ogether with Exp
14270 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73  r.zToken strings
14280 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45  ..**.** If the E
14290 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45 50  P_Reduced and EP
142a0 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73  _TokenOnly flags
142b0 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a   are set when.**
142c0 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20   an Expr object 
142d0 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57  is truncated.  W
142e0 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69  hen EP_Reduced i
142f0 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a  s set, then all.
14300 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78 70  ** the child Exp
14310 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65  r objects in the
14320 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20   Expr.pLeft and 
14330 45 78 70 72 2e 70 52 69 67 68 74 20 73 75 62 74  Expr.pRight subt
14340 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74  rees.** are cont
14350 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65  ained within the
14360 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c   same memory all
14370 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20  ocation.  Note, 
14380 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a  however, that.**
14390 20 74 68 65 20 73 75 62 74 72 65 65 73 20 69 6e   the subtrees in
143a0 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72   Expr.x.pList or
143b0 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20   Expr.x.pSelect 
143c0 61 72 65 20 61 6c 77 61 79 73 20 73 65 70 61 72  are always separ
143d0 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74  ately.** allocat
143e0 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  ed, regardless o
143f0 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  f whether or not
14400 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73   EP_Reduced is s
14410 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78  et..*/.struct Ex
14420 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20  pr {.  u8 op;   
14430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14440 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f   Operation perfo
14450 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64  rmed by this nod
14460 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  e */.  char affi
14470 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a  nity;         /*
14480 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   The affinity of
14490 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30   the column or 0
144a0 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e   if not a column
144b0 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b   */.  u32 flags;
144c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
144d0 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20  Various flags.  
144e0 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a  EP_* See below *
144f0 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
14500 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20  char *zToken;   
14510 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
14520 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d  value. Zero term
14530 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f  inated and dequo
14540 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ted */.    int i
14550 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20  Value;          
14560 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76    /* Non-negativ
14570 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
14580 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a  if EP_IntValue *
14590 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49  /.  } u;..  /* I
145a0 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  f the EP_TokenOn
145b0 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ly flag is set i
145c0 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
145d0 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20   mask, then no. 
145e0 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c   ** space is all
145f0 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66  ocated for the f
14600 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73  ields below this
14610 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d   point. An attem
14620 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73  pt to.  ** acces
14630 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75  s them will resu
14640 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74  lt in a segfault
14650 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e   or malfunction.
14660 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   .  ************
14670 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14680 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14690 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
146a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78  *********/..  Ex
146b0 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20  pr *pLeft;      
146c0 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62       /* Left sub
146d0 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  node */.  Expr *
146e0 70 52 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  pRight;         
146f0 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64   /* Right subnod
14700 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  e */.  union {. 
14710 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69     ExprList *pLi
14720 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20  st;     /* op = 
14730 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45  IN, EXISTS, SELE
14740 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49  CT, CASE, FUNCTI
14750 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20  ON, BETWEEN */. 
14760 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65     Select *pSele
14770 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49  ct;     /* EP_xI
14780 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d  sSelect and op =
14790 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c   IN, EXISTS, SEL
147a0 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20  ECT */.  } x;.. 
147b0 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65   /* If the EP_Re
147c0 64 75 63 65 64 20 66 6c 61 67 20 69 73 20 73 65  duced flag is se
147d0 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  t in the Expr.fl
147e0 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e  ags mask, then n
147f0 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20  o.  ** space is 
14800 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68  allocated for th
14810 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74  e fields below t
14820 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74  his point. An at
14830 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63  tempt to.  ** ac
14840 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72  cess them will r
14850 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61  esult in a segfa
14860 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69  ult or malfuncti
14870 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  on..  **********
14880 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14890 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
148a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
148b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69  ***********/..#i
148c0 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50  f SQLITE_MAX_EXP
148d0 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20  R_DEPTH>0.  int 
148e0 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20  nHeight;        
148f0 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20     /* Height of 
14900 74 68 65 20 74 72 65 65 20 68 65 61 64 65 64 20  the tree headed 
14910 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a  by this node */.
14920 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61  #endif.  int iTa
14930 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
14940 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75  /* TK_COLUMN: cu
14950 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
14960 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c  able holding col
14970 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  umn.            
14980 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
14990 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67  TK_REGISTER: reg
149a0 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20  ister number.   
149b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149c0 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47        ** TK_TRIG
149d0 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30  GER: 1 -> new, 0
149e0 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20   -> old.        
149f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a00 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a   ** EP_Unlikely:
14a10 20 20 31 33 34 32 31 37 37 32 38 20 74 69 6d 65    134217728 time
14a20 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 20 2a 2f 0a  s likelihood */.
14a30 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b    ynVar iColumn;
14a40 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43           /* TK_C
14a50 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e  OLUMN: column in
14a60 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77  dex.  -1 for row
14a70 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  id..            
14a80 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
14a90 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72  TK_VARIABLE: var
14aa0 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c  iable number (al
14ab0 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20  ways >= 1). */. 
14ac0 20 69 31 36 20 69 41 67 67 3b 20 20 20 20 20 20   i16 iAgg;      
14ad0 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
14ae0 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e   entry in pAggIn
14af0 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e  fo->aCol[] or ->
14b00 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36  aFunc[] */.  i16
14b10 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65   iRightJoinTable
14b20 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f  ;   /* If EP_Fro
14b30 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74  mJoin, the right
14b40 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f   table of the jo
14b50 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20  in */.  u8 op2; 
14b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14b70 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f  * TK_REGISTER: o
14b80 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66  riginal value of
14b90 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20 20 20   Expr.op.       
14ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bb0 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    ** TK_COLUMN: 
14bc0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70 35 20  the value of p5 
14bd0 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20  for OP_Column.  
14be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bf0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47         ** TK_AGG
14c00 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69  _FUNCTION: nesti
14c10 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67  ng depth */.  Ag
14c20 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b  gInfo *pAggInfo;
14c30 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20       /* Used by 
14c40 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e  TK_AGG_COLUMN an
14c50 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  d TK_AGG_FUNCTIO
14c60 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  N */.  Table *pT
14c70 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ab;           /*
14c80 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f   Table for TK_CO
14c90 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e 73  LUMN expressions
14ca0 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  . */.};../*.** T
14cb0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
14cc0 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   the meanings of
14cd0 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70   bits in the Exp
14ce0 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
14cf0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f  /.#define EP_Fro
14d00 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20  mJoin  0x000001 
14d10 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73 20 69 6e  /* Originates in
14d20 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73 65   ON/USING clause
14d30 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a   of outer join *
14d40 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67  /.#define EP_Agg
14d50 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32 20         0x000002 
14d60 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  /* Contains one 
14d70 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
14d80 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23  e functions */.#
14d90 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76  define EP_Resolv
14da0 65 64 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20  ed  0x000004 /* 
14db0 49 44 73 20 68 61 76 65 20 62 65 65 6e 20 72 65  IDs have been re
14dc0 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e  solved to COLUMN
14dd0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
14de0 45 72 72 6f 72 20 20 20 20 20 30 78 30 30 30 30  Error     0x0000
14df0 30 38 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e  08 /* Expression
14e00 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   contains one or
14e10 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a   more errors */.
14e20 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69  #define EP_Disti
14e30 6e 63 74 20 20 30 78 30 30 30 30 31 30 20 2f 2a  nct  0x000010 /*
14e40 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   Aggregate funct
14e50 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43  ion with DISTINC
14e60 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  T keyword */.#de
14e70 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63  fine EP_VarSelec
14e80 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53  t 0x000020 /* pS
14e90 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61  elect is correla
14ea0 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e  ted, not constan
14eb0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
14ec0 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30  DblQuoted 0x0000
14ed0 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61  40 /* token.z wa
14ee0 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20  s originally in 
14ef0 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65  "..." */.#define
14f00 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78   EP_InfixFunc 0x
14f10 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66  000080 /* True f
14f20 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63  or an infix func
14f30 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42  tion: LIKE, GLOB
14f40 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65  , etc */.#define
14f50 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78   EP_Collate   0x
14f60 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63  000100 /* Tree c
14f70 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c  ontains a TK_COL
14f80 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f  LATE operator */
14f90 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65 6e 65  .#define EP_Gene
14fa0 72 69 63 20 20 20 30 78 30 30 30 32 30 30 20 2f  ric   0x000200 /
14fb0 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45  * Ignore COLLATE
14fc0 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f 6e 20   or affinity on 
14fd0 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23 64 65  this tree */.#de
14fe0 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65  fine EP_IntValue
14ff0 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e    0x000400 /* In
15000 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74  teger value cont
15010 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75  ained in u.iValu
15020 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
15030 78 49 73 53 65 6c 65 63 74 20 30 78 30 30 30 38  xIsSelect 0x0008
15040 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20  00 /* x.pSelect 
15050 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77  is valid (otherw
15060 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20  ise x.pList is) 
15070 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b  */.#define EP_Sk
15080 69 70 20 20 20 20 20 20 30 78 30 30 31 30 30 30  ip      0x001000
15090 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c   /* COLLATE, AS,
150a0 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a   or UNLIKELY */.
150b0 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63  #define EP_Reduc
150c0 65 64 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a  ed   0x002000 /*
150d0 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50   Expr struct EXP
150e0 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62 79  R_REDUCEDSIZE by
150f0 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  tes only */.#def
15100 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  ine EP_TokenOnly
15110 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70   0x004000 /* Exp
15120 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f  r struct EXPR_TO
15130 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65  KENONLYSIZE byte
15140 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
15150 65 20 45 50 5f 53 74 61 74 69 63 20 20 20 20 30  e EP_Static    0
15160 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c 64 20  x008000 /* Held 
15170 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62  in memory not ob
15180 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c  tained from mall
15190 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oc() */.#define 
151a0 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30  EP_MemToken  0x0
151b0 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f  10000 /* Need to
151c0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
151d0 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a   Expr.zToken */.
151e0 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64  #define EP_NoRed
151f0 75 63 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a  uce  0x020000 /*
15200 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f   Cannot EXPRDUP_
15210 52 45 44 55 43 45 20 74 68 69 73 20 45 78 70 72  REDUCE this Expr
15220 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55   */.#define EP_U
15230 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30 30 30  nlikely  0x04000
15240 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20  0 /* unlikely() 
15250 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20  or likelihood() 
15260 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
15270 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63  ine EP_ConstFunc
15280 20 30 78 30 38 30 30 30 30 20 2f 2a 20 4e 6f 64   0x080000 /* Nod
15290 65 20 69 73 20 61 20 53 51 4c 49 54 45 5f 46 55  e is a SQLITE_FU
152a0 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 75 6e 63  NC_CONSTANT func
152b0 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
152c0 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20 30 78 31  EP_CanBeNull 0x1
152d0 30 30 30 30 30 20 2f 2a 20 43 61 6e 20 62 65 20  00000 /* Can be 
152e0 6e 75 6c 6c 20 64 65 73 70 69 74 65 20 4e 4f 54  null despite NOT
152f0 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
15300 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53   */.#define EP_S
15310 75 62 71 75 65 72 79 20 20 30 78 32 30 30 30 30  ubquery  0x20000
15320 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69  0 /* Tree contai
15330 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f  ns a TK_SELECT o
15340 70 65 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 0a 2a  perator */../*.*
15350 2a 20 43 6f 6d 62 69 6e 61 74 69 6f 6e 73 20 6f  * Combinations o
15360 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 50  f two or more EP
15370 5f 2a 20 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66  _* flags.*/.#def
15380 69 6e 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65  ine EP_Propagate
15390 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f   (EP_Collate|EP_
153a0 53 75 62 71 75 65 72 79 29 20 2f 2a 20 50 72 6f  Subquery) /* Pro
153b0 70 61 67 61 74 65 20 74 68 65 73 65 20 62 69 74  pagate these bit
153c0 73 20 75 70 20 74 72 65 65 20 2a 2f 0a 0a 2f 2a  s up tree */../*
153d0 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
153e0 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
153f0 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
15400 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20  ear bits in the 
15410 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66  .** Expr.flags f
15420 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
15430 20 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79   ExprHasProperty
15440 28 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d  (E,P)     (((E)-
15450 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a  >flags&(P))!=0).
15460 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 41  #define ExprHasA
15470 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  llProperty(E,P) 
15480 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50   (((E)->flags&(P
15490 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65  ))==(P)).#define
154a0 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79   ExprSetProperty
154b0 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66  (E,P)     (E)->f
154c0 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e  lags|=(P).#defin
154d0 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65  e ExprClearPrope
154e0 72 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e  rty(E,P)   (E)->
154f0 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20  flags&=~(P)../* 
15500 54 68 65 20 45 78 70 72 53 65 74 56 56 41 50 72  The ExprSetVVAPr
15510 6f 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69  operty() macro i
15520 73 20 75 73 65 64 20 66 6f 72 20 56 65 72 69 66  s used for Verif
15530 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74  ication, Validat
15540 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72  ion,.** and Accr
15550 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20  editation only. 
15560 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45   It works like E
15570 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 29  xprSetProperty()
15580 20 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70   during VVA.** p
15590 72 6f 63 65 73 73 65 73 20 62 75 74 20 69 73 20  rocesses but is 
155a0 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69  a no-op for deli
155b0 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  very..*/.#ifdef 
155c0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64  SQLITE_DEBUG.# d
155d0 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41  efine ExprSetVVA
155e0 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28  Property(E,P)  (
155f0 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23  E)->flags|=(P).#
15600 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78  else.# define Ex
15610 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
15620 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (E,P).#endif../*
15630 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65  .** Macros to de
15640 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62  termine the numb
15650 65 72 20 6f 66 20 62 79 74 65 73 20 72 65 71 75  er of bytes requ
15660 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c  ired by a normal
15670 20 45 78 70 72 20 0a 2a 2a 20 73 74 72 75 63 74   Expr .** struct
15680 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74  , an Expr struct
15690 20 77 69 74 68 20 74 68 65 20 45 50 5f 52 65 64   with the EP_Red
156a0 75 63 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e  uced flag set in
156b0 20 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a 20   Expr.flags .** 
156c0 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75  and an Expr stru
156d0 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54  ct with the EP_T
156e0 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65  okenOnly flag se
156f0 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  t..*/.#define EX
15700 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20  PR_FULLSIZE     
15710 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70        sizeof(Exp
15720 72 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r)           /* 
15730 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65  Full size */.#de
15740 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45  fine EXPR_REDUCE
15750 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66  DSIZE        off
15760 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c  setof(Expr,iTabl
15770 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65  e)  /* Common fe
15780 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e  atures */.#defin
15790 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  e EXPR_TOKENONLY
157a0 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74  SIZE      offset
157b0 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20  of(Expr,pLeft)  
157c0 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72   /* Fewer featur
157d0 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61  es */../*.** Fla
157e0 67 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  gs passed to the
157f0 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28   sqlite3ExprDup(
15800 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20  ) function. See 
15810 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65  the header comme
15820 6e 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c  nt .** above sql
15830 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f  ite3ExprDup() fo
15840 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64  r details..*/.#d
15850 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45  efine EXPRDUP_RE
15860 44 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30  DUCE         0x0
15870 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64  001  /* Used red
15880 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e  uced-size Expr n
15890 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  odes */../*.** A
158a0 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
158b0 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72  ions.  Each expr
158c0 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f  ession may optio
158d0 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20  nally have a.** 
158e0 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e  name.  An expr/n
158f0 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  ame combination 
15900 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73  can be used in s
15910 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63  everal ways, suc
15920 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74  h.** as the list
15930 20 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22   of "expr AS ID"
15940 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e   fields followin
15950 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20  g a "SELECT" or 
15960 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f  in the.** list o
15970 66 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74  f "ID = expr" it
15980 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45  ems in an UPDATE
15990 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70  .  A list of exp
159a0 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20  ressions can.** 
159b0 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20  also be used as 
159c0 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  the argument to 
159d0 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77  a function, in w
159e0 68 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e  hich case the a.
159f0 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69  zName.** field i
15a00 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a  s not used..**.*
15a10 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65  * By default the
15a20 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c   Expr.zSpan fiel
15a30 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d  d holds a human-
15a40 72 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70  readable descrip
15a50 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65  tion of.** the e
15a60 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
15a70 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65  s used in the ge
15a80 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f  neration of erro
15a90 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a  r messages and.*
15aa0 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e  * column labels.
15ab0 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20    In this case, 
15ac0 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79  Expr.zSpan is ty
15ad0 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74  pically the text
15ae0 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20   of a.** column 
15af0 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74  expression as it
15b00 20 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c   exists in a SEL
15b10 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
15b20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74  However, if.** t
15b30 68 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c  he bSpanIsTab fl
15b40 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ag is set, then 
15b50 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61  zSpan is overloa
15b60 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20  ded to mean the 
15b70 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72  name.** of the r
15b80 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20  esult column in 
15b90 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41  the form: DATABA
15ba0 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e  SE.TABLE.COLUMN.
15bb0 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20    This later.** 
15bc0 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72  form is used for
15bd0 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e   name resolution
15be0 20 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f   with nested FRO
15bf0 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74  M clauses..*/.st
15c00 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a  ruct ExprList {.
15c10 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20    int nExpr;    
15c20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15c30 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  er of expression
15c40 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  s on the list */
15c50 0a 20 20 73 74 72 75 63 74 20 45 78 70 72 4c 69  .  struct ExprLi
15c60 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72  st_item { /* For
15c70 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e   each expression
15c80 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   in the list */.
15c90 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
15ca0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
15cb0 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65  he list of expre
15cc0 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 63 68  ssions */.    ch
15cd0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
15ce0 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61        /* Token a
15cf0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
15d00 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  his expression *
15d10 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70 61  /.    char *zSpa
15d20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
15d30 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f   Original text o
15d40 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
15d50 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 4f   */.    u8 sortO
15d60 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  rder;           
15d70 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72  /* 1 for DESC or
15d80 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20   0 for ASC */.  
15d90 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20    unsigned done 
15da0 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 66  :1;       /* A f
15db0 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20  lag to indicate 
15dc0 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20  when processing 
15dd0 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20  is finished */. 
15de0 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70 61     unsigned bSpa
15df0 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53  nIsTab :1; /* zS
15e00 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41 42  pan holds DB.TAB
15e10 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20  LE.COLUMN */.   
15e20 20 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61 62   unsigned reusab
15e30 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73  le :1;   /* Cons
15e40 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20  tant expression 
15e50 69 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20  is reusable */. 
15e60 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20     union {.     
15e70 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20   struct {.      
15e80 20 20 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f    u16 iOrderByCo
15e90 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f  l;      /* For O
15ea0 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20  RDER BY, column 
15eb0 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74  number in result
15ec0 20 73 65 74 20 2a 2f 0a 20 20 20 20 20 20 20 20   set */.        
15ed0 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20  u16 iAlias;     
15ee0 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
15ef0 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73  nto Parse.aAlias
15f00 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a  [] for zName */.
15f10 20 20 20 20 20 20 7d 20 78 3b 0a 20 20 20 20 20        } x;.     
15f20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78 70 72 52   int iConstExprR
15f30 65 67 3b 20 20 20 20 20 20 2f 2a 20 52 65 67 69  eg;      /* Regi
15f40 73 74 65 72 20 69 6e 20 77 68 69 63 68 20 45 78  ster in which Ex
15f50 70 72 20 76 61 6c 75 65 20 69 73 20 63 61 63 68  pr value is cach
15f60 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20  ed */.    } u;. 
15f70 20 7d 20 2a 61 3b 20 20 20 20 20 20 20 20 20 20   } *a;          
15f80 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63          /* Alloc
15f90 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 20   a power of two 
15fa0 67 72 65 61 74 65 72 20 6f 72 20 65 71 75 61 6c  greater or equal
15fb0 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a   to nExpr */.};.
15fc0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
15fd0 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
15fe0 74 75 72 65 20 69 73 20 75 73 65 64 20 62 79 20  ture is used by 
15ff0 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 72 65  the parser to re
16000 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65  cord both.** the
16010 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72 20   parse tree for 
16020 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e  an expression an
16030 64 20 74 68 65 20 73 70 61 6e 20 6f 66 20 69 6e  d the span of in
16040 70 75 74 20 74 65 78 74 20 66 6f 72 20 61 6e 0a  put text for an.
16050 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a  ** expression..*
16060 2f 0a 73 74 72 75 63 74 20 45 78 70 72 53 70 61  /.struct ExprSpa
16070 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70 45 78 70  n {.  Expr *pExp
16080 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  r;          /* T
16090 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70 61  he expression pa
160a0 72 73 65 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f  rse tree */.  co
160b0 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61 72 74  nst char *zStart
160c0 3b 20 20 20 2f 2a 20 46 69 72 73 74 20 63 68 61  ;   /* First cha
160d0 72 61 63 74 65 72 20 6f 66 20 69 6e 70 75 74 20  racter of input 
160e0 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  text */.  const 
160f0 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20  char *zEnd;     
16100 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63 74 65 72  /* One character
16110 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66   past the end of
16120 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d   input text */.}
16130 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
16140 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
16150 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20  ucture can hold 
16160 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66  a simple list of
16170 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a   identifiers,.**
16180 20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69 73   such as the lis
16190 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65  t "a,b,c" in the
161a0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65   following state
161b0 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ments:.**.**    
161c0 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28    INSERT INTO t(
161d0 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e  a,b,c) VALUES ..
161e0 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54  .;.**      CREAT
161f0 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74  E INDEX idx ON t
16200 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20  (a,b,c);.**     
16210 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
16220 74 72 69 67 20 42 45 46 4f 52 45 20 55 50 44 41  trig BEFORE UPDA
16230 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e  TE ON t(a,b,c) .
16240 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64  ..;.**.** The Id
16250 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64  List.a.idx field
16260 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 74 68   is used when th
16270 65 20 49 64 4c 69 73 74 20 72 65 70 72 65 73 65  e IdList represe
16280 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a  nts the list of.
16290 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ** column names 
162a0 61 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61  after a table na
162b0 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20  me in an INSERT 
162c0 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74  statement.  In t
162d0 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a  he statement.**.
162e0 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  **     INSERT IN
162f0 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a  TO t(a,b,c) ....
16300 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20  **.** If "a" is 
16310 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20  the k-th column 
16320 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68  of table "t", th
16330 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69  en IdList.a[0].i
16340 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74  dx==k..*/.struct
16350 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75   IdList {.  stru
16360 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b  ct IdList_item {
16370 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
16380 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  ;      /* Name o
16390 66 20 74 68 65 20 69 64 65 6e 74 69 66 69 65 72  f the identifier
163a0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b   */.    int idx;
163b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
163c0 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65  ex in some Table
163d0 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c  .aCol[] of a col
163e0 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20  umn named zName 
163f0 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74  */.  } *a;.  int
16400 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a   nId;         /*
16410 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74   Number of ident
16420 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69  ifiers on the li
16430 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
16440 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74 61  The bitmask data
16450 74 79 70 65 20 64 65 66 69 6e 65 64 20 62 65 6c  type defined bel
16460 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20 76  ow is used for v
16470 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74  arious optimizat
16480 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e  ions..**.** Chan
16490 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20 61  ging this from a
164a0 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32 2d   64-bit to a 32-
164b0 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73 20  bit type limits 
164c0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a  the number of.**
164d0 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69   tables in a joi
164e0 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64 20  n to 32 instead 
164f0 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74 20 61  of 64.  But it a
16500 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68 65 20  lso reduces the 
16510 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c  size.** of the l
16520 69 62 72 61 72 79 20 62 79 20 37 33 38 20 62 79  ibrary by 738 by
16530 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a  tes on ix86..*/.
16540 74 79 70 65 64 65 66 20 75 36 34 20 42 69 74 6d  typedef u64 Bitm
16550 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ask;../*.** The 
16560 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 69  number of bits i
16570 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22 42  n a Bitmask.  "B
16580 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d 61  MS" means "BitMa
16590 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65  sk Size"..*/.#de
165a0 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74 29  fine BMS  ((int)
165b0 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29  (sizeof(Bitmask)
165c0 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69  *8))../*.** A bi
165d0 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a  t in a Bitmask.*
165e0 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49  /.#define MASKBI
165f0 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61 73  T(n)   (((Bitmas
16600 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69  k)1)<<(n)).#defi
16610 6e 65 20 4d 41 53 4b 42 49 54 33 32 28 6e 29 20  ne MASKBIT32(n) 
16620 28 28 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29  (((unsigned int)
16630 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20  1)<<(n))../*.** 
16640 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  The following st
16650 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 65  ructure describe
16660 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  s the FROM claus
16670 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74  e of a SELECT st
16680 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68  atement..** Each
16690 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65   table or subque
166a0 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  ry in the FROM c
166b0 6c 61 75 73 65 20 69 73 20 61 20 73 65 70 61 72  lause is a separ
166c0 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a  ate element of.*
166d0 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b  * the SrcList.a[
166e0 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57  ] array..**.** W
166f0 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e  ith the addition
16700 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74   of multiple dat
16710 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74  abase support, t
16720 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
16730 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c  ucture.** can al
16740 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64 65  so be used to de
16750 73 63 72 69 62 65 20 61 20 70 61 72 74 69 63 75  scribe a particu
16760 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68 20 61  lar table such a
16770 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  s the table that
16780 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20  .** is modified 
16790 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45  by an INSERT, DE
167a0 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20  LETE, or UPDATE 
167b0 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73  statement.  In s
167c0 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20  tandard SQL,.** 
167d0 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73  such a table mus
167e0 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61  t be a simple na
167f0 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20  me: ID.  But in 
16800 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c  SQLite, the tabl
16810 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20  e can.** now be 
16820 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20  identified by a 
16830 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61  database name, a
16840 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74   dot, then the t
16850 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44  able name: ID.ID
16860 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e  ..**.** The join
16870 74 79 70 65 20 73 74 61 72 74 73 20 6f 75 74 20  type starts out 
16880 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e  showing the join
16890 20 74 79 70 65 20 62 65 74 77 65 65 6e 20 74 68   type between th
168a0 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a  e current table.
168b0 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20  ** and the next 
168c0 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73  table on the lis
168d0 74 2e 20 20 54 68 65 20 70 61 72 73 65 72 20 62  t.  The parser b
168e0 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74  uilds the list t
168f0 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20  his way..** But 
16900 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68  sqlite3SrcListSh
16910 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61  iftJoinType() la
16920 74 65 72 20 73 68 69 66 74 73 20 74 68 65 20 6a  ter shifts the j
16930 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74  ointypes so that
16940 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70   each.** jointyp
16950 65 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20  e expresses the 
16960 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65  join between the
16970 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70   table and the p
16980 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a  revious table..*
16990 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55  *.** In the colU
169a0 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68  sed field, the h
169b0 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62  igh-order bit (b
169c0 69 74 20 36 33 29 20 69 73 20 73 65 74 20 69 66  it 63) is set if
169d0 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f   the table.** co
169e0 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e  ntains more than
169f0 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20   63 columns and 
16a00 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74  the 64-th or lat
16a10 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65  er column is use
16a20 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63  d..*/.struct Src
16a30 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72  List {.  int nSr
16a40 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  c;        /* Num
16a50 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72  ber of tables or
16a60 20 73 75 62 71 75 65 72 69 65 73 20 69 6e 20 74   subqueries in t
16a70 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  he FROM clause *
16a80 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20  /.  u32 nAlloc; 
16a90 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16aa0 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61  f entries alloca
16ab0 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77  ted in a[] below
16ac0 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63   */.  struct Src
16ad0 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20  List_item {.    
16ae0 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
16af0 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77    /* Schema to w
16b00 68 69 63 68 20 74 68 69 73 20 69 74 65 6d 20 69  hich this item i
16b10 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63  s fixed */.    c
16b20 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20  har *zDatabase; 
16b30 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61   /* Name of data
16b40 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69  base holding thi
16b50 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63  s table */.    c
16b60 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
16b70 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
16b80 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61  table */.    cha
16b90 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f  r *zAlias;     /
16ba0 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20 6f  * The "B" part o
16bb0 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68 72  f a "A AS B" phr
16bc0 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74  ase.  zName is t
16bd0 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61  he "A" */.    Ta
16be0 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
16bf0 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20  /* An SQL table 
16c00 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
16c10 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65   zName */.    Se
16c20 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
16c30 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61 74  /* A SELECT stat
16c40 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c  ement used in pl
16c50 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e  ace of a table n
16c60 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61  ame */.    int a
16c70 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20  ddrFillSub;  /* 
16c80 41 64 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f  Address of subro
16c90 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73  utine to manifes
16ca0 74 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a  t a subquery */.
16cb0 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75 72      int regRetur
16cc0 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65  n;    /* Registe
16cd0 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e  r holding return
16ce0 20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64 72   address of addr
16cf0 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69  FillSub */.    i
16d00 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20  nt regResult;   
16d10 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68 6f   /* Registers ho
16d20 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f 66  lding results of
16d30 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f   a co-routine */
16d40 0a 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65  .    u8 jointype
16d50 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f  ;      /* Type o
16d60 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74  f join between t
16d70 68 69 73 20 61 62 6c 65 20 61 6e 64 20 74 68 65  his able and the
16d80 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20   previous */.   
16d90 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64   unsigned notInd
16da0 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54  exed :1;    /* T
16db0 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20  rue if there is 
16dc0 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c  a NOT INDEXED cl
16dd0 61 75 73 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69  ause */.    unsi
16de0 67 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65  gned isCorrelate
16df0 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69  d :1;  /* True i
16e00 66 20 73 75 62 2d 71 75 65 72 79 20 69 73 20 63  f sub-query is c
16e10 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20  orrelated */.   
16e20 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72   unsigned viaCor
16e30 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49  outine :1;  /* I
16e40 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20  mplemented as a 
16e50 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20  co-routine */.  
16e60 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 63    unsigned isRec
16e70 75 72 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20  ursive :1;   /* 
16e80 54 72 75 65 20 66 6f 72 20 72 65 63 75 72 73 69  True for recursi
16e90 76 65 20 72 65 66 65 72 65 6e 63 65 20 69 6e 20  ve reference in 
16ea0 57 49 54 48 20 2a 2f 0a 23 69 66 6e 64 65 66 20  WITH */.#ifndef 
16eb0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c  SQLITE_OMIT_EXPL
16ec0 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c 65  AIN.    u8 iSele
16ed0 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66 20  ctId;     /* If 
16ee0 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65 20  pSelect!=0, the 
16ef0 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73 65  id of the sub-se
16f00 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23  lect in EQP */.#
16f10 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69 43  endif.    int iC
16f20 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54  ursor;      /* T
16f30 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e  he VDBE cursor n
16f40 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61 63  umber used to ac
16f50 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65 20  cess this table 
16f60 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e  */.    Expr *pOn
16f70 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
16f80 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a  ON clause of a j
16f90 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73  oin */.    IdLis
16fa0 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20  t *pUsing;   /* 
16fb0 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65  The USING clause
16fc0 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20   of a join */.  
16fd0 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65    Bitmask colUse
16fe0 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c  d;  /* Bit N (1<
16ff0 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d  <N) set if colum
17000 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75  n N of pTab is u
17010 73 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  sed */.    char 
17020 2a 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f 2a 20  *zIndex;     /* 
17030 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20  Identifier from 
17040 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e  "INDEXED BY <zIn
17050 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a  dex>" clause */.
17060 20 20 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65      Index *pInde
17070 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 73  x;    /* Index s
17080 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73 70  tructure corresp
17090 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64 65 78  onding to zIndex
170a0 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 7d 20  , if any */.  } 
170b0 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20  a[1];           
170c0 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66    /* One entry f
170d0 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69 66 69  or each identifi
170e0 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  er on the list *
170f0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d  /.};../*.** Perm
17100 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20  itted values of 
17110 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f  the SrcList.a.jo
17120 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a  intype field.*/.
17130 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52  #define JT_INNER
17140 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f       0x0001    /
17150 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e  * Any kind of in
17160 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69  ner or cross joi
17170 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
17180 43 52 4f 53 53 20 20 20 20 20 30 78 30 30 30 32  CROSS     0x0002
17190 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20      /* Explicit 
171a0 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53  use of the CROSS
171b0 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
171c0 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20  ine JT_NATURAL  
171d0 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72   0x0004    /* Tr
171e0 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61  ue for a "natura
171f0 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  l" join */.#defi
17200 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20  ne JT_LEFT      
17210 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66  0x0008    /* Lef
17220 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  t outer join */.
17230 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54  #define JT_RIGHT
17240 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f       0x0010    /
17250 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f  * Right outer jo
17260 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
17270 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30 30 32  _OUTER     0x002
17280 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54  0    /* The "OUT
17290 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70  ER" keyword is p
172a0 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  resent */.#defin
172b0 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30  e JT_ERROR     0
172c0 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e  x0040    /* unkn
172d0 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74  own or unsupport
172e0 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a  ed join type */.
172f0 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70  ../*.** Flags ap
17300 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68  propriate for th
17310 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72  e wctrlFlags par
17320 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65  ameter of sqlite
17330 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a  3WhereBegin().**
17340 20 61 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e   and the WhereIn
17350 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65  fo.wctrlFlags me
17360 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  mber..*/.#define
17370 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e   WHERE_ORDERBY_N
17380 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f  ORMAL   0x0000 /
17390 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69  * No-op */.#defi
173a0 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
173b0 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30 31  _MIN      0x0001
173c0 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f   /* ORDER BY pro
173d0 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28  cessing for min(
173e0 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  ) func */.#defin
173f0 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
17400 4d 41 58 20 20 20 20 20 20 30 78 30 30 30 32 20  MAX      0x0002 
17410 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63  /* ORDER BY proc
17420 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29  essing for max()
17430 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
17440 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44   WHERE_ONEPASS_D
17450 45 53 49 52 45 44 20 20 30 78 30 30 30 34 20 2f  ESIRED  0x0004 /
17460 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65  * Want to do one
17470 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c  -pass UPDATE/DEL
17480 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ETE */.#define W
17490 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f  HERE_DUPLICATES_
174a0 4f 4b 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20  OK    0x0008 /* 
174b0 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72  Ok to return a r
174c0 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63  ow more than onc
174d0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  e */.#define WHE
174e0 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f  RE_OMIT_OPEN_CLO
174f0 53 45 20 20 30 78 30 30 31 30 20 2f 2a 20 54 61  SE  0x0010 /* Ta
17500 62 6c 65 20 63 75 72 73 6f 72 73 20 61 72 65 20  ble cursors are 
17510 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f 0a  already open */.
17520 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 46 4f  #define WHERE_FO
17530 52 43 45 5f 54 41 42 4c 45 20 20 20 20 20 20 30  RCE_TABLE      0
17540 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74 20  x0020 /* Do not 
17550 75 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c  use an index-onl
17560 79 20 73 65 61 72 63 68 20 2a 2f 0a 23 64 65 66  y search */.#def
17570 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54 41 42  ine WHERE_ONETAB
17580 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30 34  LE_ONLY    0x004
17590 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20 74  0 /* Only code t
175a0 68 65 20 31 73 74 20 74 61 62 6c 65 20 69 6e 20  he 1st table in 
175b0 70 54 61 62 4c 69 73 74 20 2a 2f 0a 23 64 65 66  pTabList */.#def
175c0 69 6e 65 20 57 48 45 52 45 5f 4e 4f 5f 41 55 54  ine WHERE_NO_AUT
175d0 4f 49 4e 44 45 58 20 20 20 20 20 30 78 30 30 38  OINDEX     0x008
175e0 30 20 2f 2a 20 44 69 73 61 6c 6c 6f 77 20 61 75  0 /* Disallow au
175f0 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20  tomatic indexes 
17600 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
17610 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20 20 20  _GROUPBY        
17620 20 20 30 78 30 31 30 30 20 2f 2a 20 70 4f 72 64    0x0100 /* pOrd
17630 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61  erBy is really a
17640 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65   GROUP BY */.#de
17650 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
17660 4e 43 54 42 59 20 20 20 20 20 20 20 30 78 30 32  NCTBY       0x02
17670 30 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69  00 /* pOrderby i
17680 73 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49  s really a DISTI
17690 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  NCT clause */.#d
176a0 65 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54  efine WHERE_WANT
176b0 5f 44 49 53 54 49 4e 43 54 20 20 20 20 30 78 30  _DISTINCT    0x0
176c0 34 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75  400 /* All outpu
176d0 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69  t needs to be di
176e0 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e  stinct */.#defin
176f0 65 20 57 48 45 52 45 5f 53 4f 52 54 42 59 47 52  e WHERE_SORTBYGR
17700 4f 55 50 20 20 20 20 20 20 30 78 30 38 30 30 20  OUP      0x0800 
17710 2f 2a 20 53 75 70 70 6f 72 74 20 73 71 6c 69 74  /* Support sqlit
17720 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28  e3WhereIsSorted(
17730 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  ) */.#define WHE
17740 52 45 5f 52 45 4f 50 45 4e 5f 49 44 58 20 20 20  RE_REOPEN_IDX   
17750 20 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72      0x1000 /* Tr
17760 79 20 74 6f 20 75 73 65 20 4f 50 5f 52 65 6f 70  y to use OP_Reop
17770 65 6e 49 64 78 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c  enIdx */../* All
17780 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75  owed return valu
17790 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 57  es from sqlite3W
177a0 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 29  hereIsDistinct()
177b0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52  .*/.#define WHER
177c0 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20  E_DISTINCT_NOOP 
177d0 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49       0  /* DISTI
177e0 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20  NCT keyword not 
177f0 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
17800 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55  WHERE_DISTINCT_U
17810 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e  NIQUE    1  /* N
17820 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a  o duplicates */.
17830 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
17840 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20  STINCT_ORDERED  
17850 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69   2  /* All dupli
17860 63 61 74 65 73 20 61 72 65 20 61 64 6a 61 63 65  cates are adjace
17870 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nt */.#define WH
17880 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f  ERE_DISTINCT_UNO
17890 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70  RDERED 3  /* Dup
178a0 6c 69 63 61 74 65 73 20 61 72 65 20 73 63 61 74  licates are scat
178b0 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tered */../*.** 
178c0 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65  A NameContext de
178d0 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20  fines a context 
178e0 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f  in which to reso
178f0 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f  lve table and co
17900 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20  lumn.** names.  
17910 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73  The context cons
17920 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f  ists of a list o
17930 66 20 74 61 62 6c 65 73 20 28 74 68 65 20 70 53  f tables (the pS
17940 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e  rcList) field an
17950 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e  d.** a list of n
17960 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20  amed expression 
17970 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e  (pEList).  The n
17980 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20  amed expression 
17990 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e  list may.** be N
179a0 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63  ULL.  The pSrc c
179b0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
179c0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
179d0 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20   a SELECT or.** 
179e0 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  to the table bei
179f0 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62  ng operated on b
17a00 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  y INSERT, UPDATE
17a10 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68  , or DELETE.  Th
17a20 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72  e.** pEList corr
17a30 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72  esponds to the r
17a40 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53  esult set of a S
17a50 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c  ELECT and is NUL
17a60 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73  L for.** other s
17a70 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
17a80 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61   NameContexts ca
17a90 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68  n be nested.  Wh
17aa0 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  en resolving nam
17ab0 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f  es, the inner-mo
17ac0 73 74 20 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69  st .** context i
17ad0 73 20 73 65 61 72 63 68 65 64 20 66 69 72 73 74  s searched first
17ae0 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69  .  If no match i
17af0 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78  s found, the nex
17b00 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65  t outer.** conte
17b10 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20  xt is checked.  
17b20 49 66 20 74 68 65 72 65 20 69 73 20 73 74 69 6c  If there is stil
17b30 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20  l no match, the 
17b40 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20  next context.** 
17b50 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69  is checked.  Thi
17b60 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e  s process contin
17b70 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72  ues until either
17b80 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
17b90 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74  d.** or all cont
17ba0 65 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20  exts are check. 
17bb0 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73   When a match is
17bc0 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66   found, the nRef
17bd0 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68   member of.** th
17be0 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69  e context contai
17bf0 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69  ning the match i
17c00 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 20 0a  s incremented. .
17c10 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75  **.** Each subqu
17c20 65 72 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e  ery gets a new N
17c30 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65  ameContext.  The
17c40 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69   pNext field poi
17c50 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61  nts to the.** Na
17c60 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65  meContext in the
17c70 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20   parent query.  
17c80 54 68 75 73 20 74 68 65 20 70 72 6f 63 65 73 73  Thus the process
17c90 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65   of scanning the
17ca0 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
17cb0 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  list corresponds
17cc0 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68   to searching th
17cd0 72 6f 75 67 68 20 73 75 63 63 65 73 73 69 76 65  rough successive
17ce0 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71  ly outer.** subq
17cf0 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66  ueries looking f
17d00 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73  or a match..*/.s
17d10 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78  truct NameContex
17d20 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  t {.  Parse *pPa
17d30 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  rse;       /* Th
17d40 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72  e parser */.  Sr
17d50 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b  cList *pSrcList;
17d60 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72     /* One or mor
17d70 65 20 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f  e tables used to
17d80 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a   resolve names *
17d90 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  /.  ExprList *pE
17da0 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69  List;    /* Opti
17db0 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72 65 73  onal list of res
17dc0 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20  ult-set columns 
17dd0 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41  */.  AggInfo *pA
17de0 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66  ggInfo;   /* Inf
17df0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61  ormation about a
17e00 67 67 72 65 67 61 74 65 73 20 61 74 20 74 68 69  ggregates at thi
17e10 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d  s level */.  Nam
17e20 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b  eContext *pNext;
17e30 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72 20    /* Next outer 
17e40 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e  name context.  N
17e50 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73  ULL for outermos
17e60 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b  t */.  int nRef;
17e70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
17e80 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72  umber of names r
17e90 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20  esolved by this 
17ea0 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74  context */.  int
17eb0 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20   nErr;          
17ec0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
17ed0 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65  rrors encountere
17ee0 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e  d while resolvin
17ef0 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 31 36  g names */.  u16
17f00 20 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20   ncFlags;       
17f10 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72    /* Zero or mor
17f20 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65 66  e NC_* flags def
17f30 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b  ined below */.};
17f40 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
17f50 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e  values for the N
17f60 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c  ameContext, ncFl
17f70 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a  ags field..**.**
17f80 20 4e 6f 74 65 3a 20 20 4e 43 5f 4d 69 6e 4d 61   Note:  NC_MinMa
17f90 78 41 67 67 20 6d 75 73 74 20 68 61 76 65 20 74  xAgg must have t
17fa0 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 61 73  he same value as
17fb0 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 61 6e   SF_MinMaxAgg an
17fc0 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43  d.** SQLITE_FUNC
17fd0 5f 4d 49 4e 4d 41 58 2e 0a 2a 2a 20 0a 2a 2f 0a  _MINMAX..** .*/.
17fe0 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77  #define NC_Allow
17ff0 41 67 67 20 20 30 78 30 30 30 31 20 20 2f 2a 20  Agg  0x0001  /* 
18000 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  Aggregate functi
18010 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20  ons are allowed 
18020 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  here */.#define 
18030 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30 78 30  NC_HasAgg    0x0
18040 30 30 32 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d  002  /* One or m
18050 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75  ore aggregate fu
18060 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a  nctions seen */.
18070 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43 68 65  #define NC_IsChe
18080 63 6b 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20  ck   0x0004  /* 
18090 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e  True if resolvin
180a0 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 48 45  g names in a CHE
180b0 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  CK constraint */
180c0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67  .#define NC_InAg
180d0 67 46 75 6e 63 20 30 78 30 30 30 38 20 20 2f 2a  gFunc 0x0008  /*
180e0 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79 7a 69   True if analyzi
180f0 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  ng arguments to 
18100 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23  an agg func */.#
18110 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49 64  define NC_PartId
18120 78 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 54  x   0x0010  /* T
18130 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67  rue if resolving
18140 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78   a partial index
18150 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e   WHERE */.#defin
18160 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 30  e NC_MinMaxAgg 0
18170 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61  x1000  /* min/ma
18180 78 20 61 67 67 72 65 67 61 74 65 73 20 73 65 65  x aggregates see
18190 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20 61 62 6f  n.  See note abo
181a0 76 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  ve */../*.** An 
181b0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
181c0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
181d0 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c  ure contains all
181e0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20   information.** 
181f0 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
18200 74 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69  te code for a si
18210 6e 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  ngle SELECT stat
18220 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69  ement..**.** nLi
18230 6d 69 74 20 69 73 20 73 65 74 20 74 6f 20 2d 31  mit is set to -1
18240 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   if there is no 
18250 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e 20 20 6e  LIMIT clause.  n
18260 4f 66 66 73 65 74 20 69 73 20 73 65 74 20 74 6f  Offset is set to
18270 20 30 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65 20   0..** If there 
18280 69 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73  is a LIMIT claus
18290 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 73 65  e, the parser se
182a0 74 73 20 6e 4c 69 6d 69 74 20 74 6f 20 74 68 65  ts nLimit to the
182b0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a   value of the.**
182c0 20 6c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73   limit and nOffs
182d0 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  et to the value 
182e0 6f 66 20 74 68 65 20 6f 66 66 73 65 74 20 28 6f  of the offset (o
182f0 72 20 30 20 69 66 20 74 68 65 72 65 20 69 73 20  r 0 if there is 
18300 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65 74 29 2e 20  not.** offset). 
18310 20 42 75 74 20 6c 61 74 65 72 20 6f 6e 2c 20 6e   But later on, n
18320 4c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65  Limit and nOffse
18330 74 20 62 65 63 6f 6d 65 20 74 68 65 20 6d 65 6d  t become the mem
18340 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a  ory locations.**
18350 20 69 6e 20 74 68 65 20 56 44 42 45 20 74 68 61   in the VDBE tha
18360 74 20 72 65 63 6f 72 64 20 74 68 65 20 6c 69 6d  t record the lim
18370 69 74 20 61 6e 64 20 6f 66 66 73 65 74 20 63 6f  it and offset co
18380 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64  unters..**.** ad
18390 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74  drOpenEphm[] ent
183a0 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 74 68 65  ries contain the
183b0 20 61 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f   address of OP_O
183c0 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63  penEphemeral opc
183d0 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61  odes..** These a
183e0 64 64 72 65 73 73 65 73 20 6d 75 73 74 20 62 65  ddresses must be
183f0 20 73 74 6f 72 65 64 20 73 6f 20 74 68 61 74 20   stored so that 
18400 77 65 20 63 61 6e 20 67 6f 20 62 61 63 6b 20 61  we can go back a
18410 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68  nd fill in.** th
18420 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64  e P4_KEYINFO and
18430 20 50 32 20 70 61 72 61 6d 65 74 65 72 73 20 6c   P2 parameters l
18440 61 74 65 72 2e 20 20 4e 65 69 74 68 65 72 20 74  ater.  Neither t
18450 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a  he KeyInfo nor.*
18460 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
18470 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63 61  columns in P2 ca
18480 6e 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61 74  n be computed at
18490 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a   the same time.*
184a0 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e  * as the OP_Open
184b0 45 70 68 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e  Ephm instruction
184c0 20 69 73 20 63 6f 64 65 64 20 62 65 63 61 75 73   is coded becaus
184d0 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20  e not.** enough 
184e0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
184f0 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71  t the compound q
18500 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74  uery is known at
18510 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20   that point..** 
18520 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20  The KeyInfo for 
18530 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20  addrOpenTran[0] 
18540 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73  and [1] contains
18550 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
18560 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20  nces.** for the 
18570 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68 65  result set.  The
18580 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64   KeyInfo for add
18590 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e  rOpenEphm[2] con
185a0 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a  tains collating.
185b0 2a 2a 20 73 65 71 75 65 6e 63 65 73 20 66 6f 72  ** sequences for
185c0 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
185d0 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ause..*/.struct 
185e0 53 65 6c 65 63 74 20 7b 0a 20 20 45 78 70 72 4c  Select {.  ExprL
185f0 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20  ist *pEList;    
18600 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20    /* The fields 
18610 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f  of the result */
18620 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
18630 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
18640 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b   of: TK_UNION TK
18650 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43  _ALL TK_INTERSEC
18660 54 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20  T TK_EXCEPT */. 
18670 20 75 31 36 20 73 65 6c 46 6c 61 67 73 3b 20 20   u16 selFlags;  
18680 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f          /* Vario
18690 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a  us SF_* values *
186a0 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20  /.  int iLimit, 
186b0 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65  iOffset;   /* Me
186c0 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 68  mory registers h
186d0 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f  olding LIMIT & O
186e0 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a  FFSET counters *
186f0 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43  /.#if SELECTTRAC
18700 45 5f 45 4e 41 42 4c 45 44 0a 20 20 63 68 61 72  E_ENABLED.  char
18710 20 7a 53 65 6c 4e 61 6d 65 5b 31 32 5d 3b 20 20   zSelName[12];  
18720 20 20 20 2f 2a 20 53 79 6d 62 6f 6c 69 63 20 6e     /* Symbolic n
18730 61 6d 65 20 6f 66 20 74 68 69 73 20 53 45 4c 45  ame of this SELE
18740 43 54 20 75 73 65 20 66 6f 72 20 64 65 62 75 67  CT use for debug
18750 67 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  ging */.#endif. 
18760 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70 68   int addrOpenEph
18770 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70  m[2];   /* OP_Op
18780 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73 20  enEphem opcodes 
18790 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73 20  related to this 
187a0 73 65 6c 65 63 74 20 2a 2f 0a 20 20 75 36 34 20  select */.  u64 
187b0 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20  nSelectRow;     
187c0 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
187d0 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74  number of result
187e0 20 72 6f 77 73 20 2a 2f 0a 20 20 53 72 63 4c 69   rows */.  SrcLi
187f0 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20 20  st *pSrc;       
18800 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c    /* The FROM cl
18810 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ause */.  Expr *
18820 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 20  pWhere;         
18830 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c   /* The WHERE cl
18840 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ause */.  ExprLi
18850 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
18860 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42 59   /* The GROUP BY
18870 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
18880 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20 20  r *pHaving;     
18890 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49 4e      /* The HAVIN
188a0 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  G clause */.  Ex
188b0 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79  prList *pOrderBy
188c0 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44 45  ;    /* The ORDE
188d0 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  R BY clause */. 
188e0 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b   Select *pPrior;
188f0 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f 72          /* Prior
18900 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d   select in a com
18910 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61  pound select sta
18920 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65  tement */.  Sele
18930 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ct *pNext;      
18940 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63     /* Next selec
18950 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69 6e  t to the left in
18960 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20   a compound */. 
18970 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20   Expr *pLimit;  
18980 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54          /* LIMIT
18990 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c   expression. NUL
189a0 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64  L means not used
189b0 2e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66  . */.  Expr *pOf
189c0 66 73 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  fset;         /*
189d0 20 4f 46 46 53 45 54 20 65 78 70 72 65 73 73 69   OFFSET expressi
189e0 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e  on. NULL means n
189f0 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69  ot used. */.  Wi
18a00 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20  th *pWith;      
18a10 20 20 20 20 20 2f 2a 20 57 49 54 48 20 63 6c 61       /* WITH cla
18a20 75 73 65 20 61 74 74 61 63 68 65 64 20 74 6f 20  use attached to 
18a30 74 68 69 73 20 73 65 6c 65 63 74 2e 20 4f 72 20  this select. Or 
18a40 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  NULL. */.};../*.
18a50 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
18a60 73 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c  s for Select.sel
18a70 46 6c 61 67 73 2e 20 20 54 68 65 20 22 53 46 22  Flags.  The "SF"
18a80 20 70 72 65 66 69 78 20 73 74 61 6e 64 73 20 66   prefix stands f
18a90 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c  or.** "Select Fl
18aa0 61 67 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ag"..*/.#define 
18ab0 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20  SF_Distinct     
18ac0 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 75     0x0001  /* Ou
18ad0 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44  tput should be D
18ae0 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69  ISTINCT */.#defi
18af0 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20  ne SF_Resolved  
18b00 20 20 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a        0x0002  /*
18b10 20 49 64 65 6e 74 69 66 69 65 72 73 20 68 61 76   Identifiers hav
18b20 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20  e been resolved 
18b30 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67  */.#define SF_Ag
18b40 67 72 65 67 61 74 65 20 20 20 20 20 20 20 30 78  gregate       0x
18b50 30 30 30 34 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  0004  /* Contain
18b60 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  s aggregate func
18b70 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
18b80 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61   SF_UsesEphemera
18b90 6c 20 20 20 30 78 30 30 30 38 20 20 2f 2a 20 55  l   0x0008  /* U
18ba0 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65  ses the OpenEphe
18bb0 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a  meral opcode */.
18bc0 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e  #define SF_Expan
18bd0 64 65 64 20 20 20 20 20 20 20 20 30 78 30 30 31  ded        0x001
18be0 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c  0  /* sqlite3Sel
18bf0 65 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c  ectExpand() call
18c00 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64  ed on this */.#d
18c10 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65  efine SF_HasType
18c20 49 6e 66 6f 20 20 20 20 20 30 78 30 30 32 30 20  Info     0x0020 
18c30 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72   /* FROM subquer
18c40 69 65 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d  ies have Table m
18c50 65 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69  etadata */.#defi
18c60 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20  ne SF_Compound  
18c70 20 20 20 20 20 20 30 78 30 30 34 30 20 20 2f 2a        0x0040  /*
18c80 20 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f   Part of a compo
18c90 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65  und query */.#de
18ca0 66 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20  fine SF_Values  
18cb0 20 20 20 20 20 20 20 20 30 78 30 30 38 30 20 20          0x0080  
18cc0 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66  /* Synthesized f
18cd0 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73  rom VALUES claus
18ce0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
18cf0 4d 75 6c 74 69 56 61 6c 75 65 20 20 20 20 20 20  MultiValue      
18d00 30 78 30 31 30 30 20 20 2f 2a 20 53 69 6e 67 6c  0x0100  /* Singl
18d10 65 20 56 41 4c 55 45 53 20 74 65 72 6d 20 77 69  e VALUES term wi
18d20 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  th multiple rows
18d30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e   */.#define SF_N
18d40 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20 20 30  estedFrom      0
18d50 78 30 32 30 30 20 20 2f 2a 20 50 61 72 74 20 6f  x0200  /* Part o
18d60 66 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65  f a parenthesize
18d70 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  d FROM clause */
18d80 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 79 62  .#define SF_Mayb
18d90 65 43 6f 6e 76 65 72 74 20 20 20 20 30 78 30 34  eConvert    0x04
18da0 30 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76  00  /* Need conv
18db0 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63  ertCompoundSelec
18dc0 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f  tToSubquery() */
18dd0 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75  .#define SF_Recu
18de0 72 73 69 76 65 20 20 20 20 20 20 20 30 78 30 38  rsive       0x08
18df0 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72  00  /* The recur
18e00 73 69 76 65 20 70 61 72 74 20 6f 66 20 61 20 72  sive part of a r
18e10 65 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a  ecursive CTE */.
18e20 23 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61  #define SF_MinMa
18e30 78 41 67 67 20 20 20 20 20 20 20 30 78 31 30 30  xAgg       0x100
18e40 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  0  /* Aggregate 
18e50 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29  containing min()
18e60 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64 65   or max() */.#de
18e70 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74 65  fine SF_Converte
18e80 64 20 20 20 20 20 20 20 30 78 32 30 30 30 20 20  d       0x2000  
18e90 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d  /* By convertCom
18ea0 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
18eb0 71 75 65 72 79 28 29 20 2a 2f 0a 0a 0a 2f 2a 0a  query() */.../*.
18ec0 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f  ** The results o
18ed0 66 20 61 20 53 45 4c 45 43 54 20 63 61 6e 20 62  f a SELECT can b
18ee0 65 20 64 69 73 74 72 69 62 75 74 65 64 20 69 6e  e distributed in
18ef0 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 61   several ways, a
18f00 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20  s defined.** by 
18f10 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  one of the follo
18f20 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54 68  wing macros.  Th
18f30 65 20 22 53 52 54 22 20 70 72 65 66 69 78 20 6d  e "SRT" prefix m
18f40 65 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73  eans "SELECT Res
18f50 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a  ult.** Type"..**
18f60 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e 69 6f  .**     SRT_Unio
18f70 6e 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65  n       Store re
18f80 73 75 6c 74 73 20 61 73 20 61 20 6b 65 79 20 69  sults as a key i
18f90 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e  n a temporary in
18fa0 64 65 78 20 0a 2a 2a 20 20 20 20 20 20 20 20 20  dex .**         
18fb0 20 20 20 20 20 20 20 20 20 20 20 20 69 64 65 6e              iden
18fc0 74 69 66 69 65 64 20 62 79 20 70 44 65 73 74 2d  tified by pDest-
18fd0 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20  >iSDParm..**.** 
18fe0 20 20 20 20 53 52 54 5f 45 78 63 65 70 74 20 20      SRT_Except  
18ff0 20 20 20 20 52 65 6d 6f 76 65 20 72 65 73 75 6c      Remove resul
19000 74 73 20 66 72 6f 6d 20 74 68 65 20 74 65 6d 70  ts from the temp
19010 6f 72 61 72 79 20 69 6e 64 65 78 20 70 44 65 73  orary index pDes
19020 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a  t->iSDParm..**.*
19030 2a 20 20 20 20 20 53 52 54 5f 45 78 69 73 74 73  *     SRT_Exists
19040 20 20 20 20 20 20 53 74 6f 72 65 20 61 20 31 20        Store a 1 
19050 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70  in memory cell p
19060 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 69 66  Dest->iSDParm if
19070 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20   the result.**  
19080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19090 20 20 20 73 65 74 20 69 73 20 6e 6f 74 20 65 6d     set is not em
190a0 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  pty..**.**     S
190b0 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 54  RT_Discard     T
190c0 68 72 6f 77 20 74 68 65 20 72 65 73 75 6c 74 73  hrow the results
190d0 20 61 77 61 79 2e 20 20 54 68 69 73 20 69 73 20   away.  This is 
190e0 75 73 65 64 20 62 79 20 53 45 4c 45 43 54 0a 2a  used by SELECT.*
190f0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19100 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73        statements
19110 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
19120 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70   whose only purp
19130 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20 20 20 20  ose is.**       
19140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
19150 65 20 73 69 64 65 2d 65 66 66 65 63 74 73 20 6f  e side-effects o
19160 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  f functions..**.
19170 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20 61 62  ** All of the ab
19180 6f 76 65 20 61 72 65 20 66 72 65 65 20 74 6f 20  ove are free to 
19190 69 67 6e 6f 72 65 20 74 68 65 69 72 20 4f 52 44  ignore their ORD
191a0 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68  ER BY clause. Th
191b0 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c  ose that.** foll
191c0 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68  ow must honor th
191d0 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
191e0 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  e..**.**     SRT
191f0 5f 4f 75 74 70 75 74 20 20 20 20 20 20 47 65 6e  _Output      Gen
19200 65 72 61 74 65 20 61 20 72 6f 77 20 6f 66 20 6f  erate a row of o
19210 75 74 70 75 74 20 28 75 73 69 6e 67 20 74 68 65  utput (using the
19220 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a   OP_ResultRow.**
19230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19240 20 20 20 20 20 6f 70 63 6f 64 65 29 20 66 6f 72       opcode) for
19250 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65   each row in the
19260 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a   result set..**.
19270 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d 20 20  **     SRT_Mem  
19280 20 20 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69         Only vali
19290 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  d if the result 
192a0 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  is a single colu
192b0 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  mn..**          
192c0 20 20 20 20 20 20 20 20 20 20 20 53 74 6f 72 65             Store
192d0 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d   the first colum
192e0 6e 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 72  n of the first r
192f0 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20  esult row.**    
19300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19310 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65   in register pDe
19320 73 74 2d 3e 69 53 44 50 61 72 6d 20 74 68 65 6e  st->iSDParm then
19330 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 72 65 73   abandon the res
19340 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
19350 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20           of the 
19360 71 75 65 72 79 2e 20 20 54 68 69 73 20 64 65 73  query.  This des
19370 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73  tination implies
19380 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a   "LIMIT 1"..**.*
19390 2a 20 20 20 20 20 53 52 54 5f 53 65 74 20 20 20  *     SRT_Set   
193a0 20 20 20 20 20 20 54 68 65 20 72 65 73 75 6c 74        The result
193b0 20 6d 75 73 74 20 62 65 20 61 20 73 69 6e 67 6c   must be a singl
193c0 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65  e column.  Store
193d0 20 65 61 63 68 0a 2a 2a 20 20 20 20 20 20 20 20   each.**        
193e0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
193f0 20 6f 66 20 72 65 73 75 6c 74 20 61 73 20 74 68   of result as th
19400 65 20 6b 65 79 20 69 6e 20 74 61 62 6c 65 20 70  e key in table p
19410 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 20 0a  Dest->iSDParm. .
19420 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19430 20 20 20 20 20 20 20 41 70 70 6c 79 20 74 68 65         Apply the
19440 20 61 66 66 69 6e 69 74 79 20 70 44 65 73 74 2d   affinity pDest-
19450 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72 65 20  >affSdst before 
19460 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20  storing.**      
19470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
19480 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74 6f  esults.  Used to
19490 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28   implement "IN (
194a0 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a  SELECT ...)"..**
194b0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68 65  .**     SRT_Ephe
194c0 6d 54 61 62 20 20 20 20 43 72 65 61 74 65 20 61  mTab    Create a
194d0 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  n temporary tabl
194e0 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
194f0 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20   and store.**   
19500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19510 20 20 74 68 65 20 72 65 73 75 6c 74 20 74 68 65    the result the
19520 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20 69  re. The cursor i
19530 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74 65  s left open afte
19540 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  r.**            
19550 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 69           returni
19560 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69 6b  ng.  This is lik
19570 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63 65  e SRT_Table exce
19580 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20 20  pt that.**      
19590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
195a0 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  his destination 
195b0 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65  uses OP_OpenEphe
195c0 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65 0a  meral to create.
195d0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
195e0 20 20 20 20 20 20 20 74 68 65 20 74 61 62 6c 65         the table
195f0 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20   first..**.**   
19600 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20    SRT_Coroutine 
19610 20 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f 2d    Generate a co-
19620 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65 74  routine that ret
19630 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20 6f  urns a new row o
19640 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  f.**            
19650 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73           results
19660 20 65 61 63 68 20 74 69 6d 65 20 69 74 20 69 73   each time it is
19670 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20 65   invoked.  The e
19680 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20  ntry point.**   
19690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196a0 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75 74    of the co-rout
196b0 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ine is stored in
196c0 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d   register pDest-
196d0 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20  >iSDParm.**     
196e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196f0 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 72  and the result r
19700 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ow is stored in 
19710 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65 67  pDest->nDest reg
19720 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20 20  isters.**       
19730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
19740 61 72 74 69 6e 67 20 77 69 74 68 20 70 44 65 73  arting with pDes
19750 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20  t->iSdst..**.** 
19760 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20 20      SRT_Table   
19770 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
19780 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 74  s in temporary t
19790 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
197a0 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f  arm..**     SRT_
197b0 46 69 66 6f 20 20 20 20 20 20 20 20 54 68 69 73  Fifo        This
197c0 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70 68   is like SRT_Eph
197d0 65 6d 54 61 62 20 65 78 63 65 70 74 20 74 68 61  emTab except tha
197e0 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20  t the table.**  
197f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19800 20 20 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f     is assumed to
19810 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65 6e   already be open
19820 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73 0a  .  SRT_Fifo has.
19830 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19840 20 20 20 20 20 20 20 74 68 65 20 61 64 64 69 74         the addit
19850 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20 6f  ional property o
19860 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20  f being able to 
19870 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20  ignore.**       
19880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
19890 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
198a0 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  e..**.**     SRT
198b0 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53 74 6f  _DistFifo    Sto
198c0 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20  re results in a 
198d0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
198e0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
198f0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19900 20 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f 20         But also 
19910 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61  use temporary ta
19920 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
19930 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20 20  rm+1 as.**      
19940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
19950 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70   record of all p
19960 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e 64  rior results and
19970 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c   ignore any dupl
19980 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20  icate.**        
19990 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
199a0 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20  s.  Name means: 
199b0 20 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f 22   "Distinct Fifo"
199c0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
199d0 51 75 65 75 65 20 20 20 20 20 20 20 53 74 6f 72  Queue       Stor
199e0 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69  e results in pri
199f0 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73  ority queue pDes
19a00 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61 6c  t->iSDParm (real
19a10 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ly.**           
19a20 20 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e 64            an ind
19a30 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20 73  ex).  Append a s
19a40 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 73  equence number s
19a50 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72 69  o that all entri
19a60 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  es.**           
19a70 20 20 20 20 20 20 20 20 20 20 61 72 65 20 64 69            are di
19a80 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  stinct..**.**   
19a90 20 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20    SRT_DistQueue 
19aa0 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
19ab0 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75  in priority queu
19ac0 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
19ad0 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20   only if.**     
19ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19af0 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64 20  the same record 
19b00 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20 73  has never been s
19b10 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20 54  tored before.  T
19b20 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  he.**           
19b30 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 20            index 
19b40 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  at pDest->iSDPar
19b50 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69  m+1 hold all pri
19b60 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64  or stores..*/.#d
19b70 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20  efine SRT_Union 
19b80 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f         1  /* Sto
19b90 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79  re result as key
19ba0 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f  s in an index */
19bb0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63  .#define SRT_Exc
19bc0 65 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20  ept       2  /* 
19bd0 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72  Remove result fr
19be0 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78  om a UNION index
19bf0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
19c00 45 78 69 73 74 73 20 20 20 20 20 20 20 33 20 20  Exists       3  
19c10 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74 68  /* Store 1 if th
19c20 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20  e result is not 
19c30 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65  empty */.#define
19c40 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20   SRT_Discard    
19c50 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73    4  /* Do not s
19c60 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ave the results 
19c70 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65 66  anywhere */.#def
19c80 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20 20  ine SRT_Fifo    
19c90 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72 65       5  /* Store
19ca0 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20   result as data 
19cb0 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69  with an automati
19cc0 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  c rowid */.#defi
19cd0 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20  ne SRT_DistFifo 
19ce0 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53      6  /* Like S
19cf0 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e 69  RT_Fifo, but uni
19d00 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79  que results only
19d10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
19d20 51 75 65 75 65 20 20 20 20 20 20 20 20 37 20 20  Queue        7  
19d30 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
19d40 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23  in an queue */.#
19d50 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 51  define SRT_DistQ
19d60 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c 69  ueue    8  /* Li
19d70 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62 75  ke SRT_Queue, bu
19d80 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73  t unique results
19d90 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65   only */../* The
19da0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
19db0 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20   is ignored for 
19dc0 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  all of the above
19dd0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f   */.#define Igno
19de0 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20  rableOrderby(X) 
19df0 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54  ((X->eDest)<=SRT
19e00 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64 65  _DistQueue)..#de
19e10 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20  fine SRT_Output 
19e20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74 70        9  /* Outp
19e30 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72  ut each row of r
19e40 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esult */.#define
19e50 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20   SRT_Mem        
19e60 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65   10  /* Store re
19e70 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79  sult in a memory
19e80 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65   cell */.#define
19e90 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20   SRT_Set        
19ea0 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65   11  /* Store re
19eb0 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e  sults as keys in
19ec0 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65   an index */.#de
19ed0 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61  fine SRT_EphemTa
19ee0 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65 61  b    12  /* Crea
19ef0 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62  te transient tab
19f00 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20   and store like 
19f10 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65  SRT_Table */.#de
19f20 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74 69  fine SRT_Corouti
19f30 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e 65  ne   13  /* Gene
19f40 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72 6f  rate a single ro
19f50 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23  w of result */.#
19f60 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65  define SRT_Table
19f70 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53 74         14  /* St
19f80 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61  ore result as da
19f90 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d  ta with an autom
19fa0 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f  atic rowid */../
19fb0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
19fc0 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20   of this object 
19fd0 64 65 73 63 72 69 62 65 73 20 77 68 65 72 65 20  describes where 
19fe0 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72 65  to put of the re
19ff0 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45  sults of.** a SE
1a000 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
1a010 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74  */.struct Select
1a020 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73  Dest {.  u8 eDes
1a030 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
1a040 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65 20   How to dispose 
1a050 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e 20  of the results. 
1a060 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f   On of SRT_* abo
1a070 76 65 2e 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  ve. */.  char af
1a080 66 53 64 73 74 3b 20 20 20 20 20 20 20 20 2f 2a  fSdst;        /*
1a090 20 41 66 66 69 6e 69 74 79 20 75 73 65 64 20 77   Affinity used w
1a0a0 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53  hen eDest==SRT_S
1a0b0 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50  et */.  int iSDP
1a0c0 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  arm;         /* 
1a0d0 41 20 70 61 72 61 6d 65 74 65 72 20 75 73 65 64  A parameter used
1a0e0 20 62 79 20 74 68 65 20 65 44 65 73 74 20 64 69   by the eDest di
1a0f0 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f  sposal method */
1a100 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20  .  int iSdst;   
1a110 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20          /* Base 
1a120 72 65 67 69 73 74 65 72 20 77 68 65 72 65 20 72  register where r
1a130 65 73 75 6c 74 73 20 61 72 65 20 77 72 69 74 74  esults are writt
1a140 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73  en */.  int nSds
1a150 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
1a160 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74  Number of regist
1a170 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f  ers allocated */
1a180 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72  .  ExprList *pOr
1a190 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63  derBy;  /* Key c
1a1a0 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51  olumns for SRT_Q
1a1b0 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69 73  ueue and SRT_Dis
1a1c0 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  tQueue */.};../*
1a1d0 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65 20  .** During code 
1a1e0 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73 74  generation of st
1a1f0 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64 6f  atements that do
1a200 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41 55   inserts into AU
1a210 54 4f 49 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a 20  TOINCREMENT .** 
1a220 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c  tables, the foll
1a230 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f  owing informatio
1a240 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  n is attached to
1a250 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74   the Table.u.aut
1a260 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65  oInc.p.** pointe
1a270 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e  r of each autoin
1a280 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f  crement table to
1a290 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64   record some sid
1a2a0 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  e information th
1a2b0 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67  at.** the code g
1a2c0 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20  enerator needs. 
1a2d0 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70   We have to keep
1a2e0 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69   per-table autoi
1a2f0 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f  ncrement.** info
1a300 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20  rmation in case 
1a310 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 77 6e  inserts are down
1a320 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
1a330 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e  .  Triggers do n
1a340 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63  ot.** normally c
1a350 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72 20  oordinate their 
1a360 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74 20  activities, but 
1a370 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f  we do need to co
1a380 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20  ordinate the.** 
1a390 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69  loading and savi
1a3a0 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d  ng of autoincrem
1a3b0 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ent information.
1a3c0 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69  .*/.struct Autoi
1a3d0 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69  ncInfo {.  Autoi
1a3e0 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20  ncInfo *pNext;  
1a3f0 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c   /* Next info bl
1a400 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66  ock in a list of
1a410 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54   them all */.  T
1a420 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
1a430 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68       /* Table th
1a440 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65  is info block re
1a450 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74  fers to */.  int
1a460 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
1a470 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73     /* Index in s
1a480 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20  qlite3.aDb[] of 
1a490 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67  database holding
1a4a0 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72   pTab */.  int r
1a4b0 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20 20  egCtr;          
1a4c0 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73   /* Memory regis
1a4d0 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ter holding the 
1a4e0 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f  rowid counter */
1a4f0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20  .};../*.** Size 
1a500 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61  of the column ca
1a510 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  che.*/.#ifndef S
1a520 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45  QLITE_N_COLCACHE
1a530 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1a540 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a 23  _N_COLCACHE 10.#
1a550 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20  endif../*.** At 
1a560 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e  least one instan
1a570 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
1a580 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
1a590 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63   created for eac
1a5a0 68 20 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68  h .** trigger th
1a5b0 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64 20  at may be fired 
1a5c0 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e  while parsing an
1a5d0 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20   INSERT, UPDATE 
1a5e0 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61  or DELETE.** sta
1a5f0 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68  tement. All such
1a600 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f   objects are sto
1a610 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65  red in the linke
1a620 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61 74  d list headed at
1a630 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67  .** Parse.pTrigg
1a640 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65  erPrg and delete
1a650 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74  d once statement
1a660 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73   compilation has
1a670 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74   been.** complet
1a680 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65  ed..**.** A Vdbe
1a690 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61   sub-program tha
1a6a0 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65  t implements the
1a6b0 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63   body and WHEN c
1a6c0 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65 72  lause of trigger
1a6d0 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70  .** TriggerPrg.p
1a6e0 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e  Trigger, assumin
1a6f0 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43  g a default ON C
1a700 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f  ONFLICT clause o
1a710 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  f.** TriggerPrg.
1a720 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65  orconf, is store
1a730 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65 72  d in the Trigger
1a740 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72  Prg.pProgram var
1a750 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61  iable..** The Pa
1a760 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1a770 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61  list never conta
1a780 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20  ins two entries 
1a790 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a  with the same.**
1a7a0 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68   values for both
1a7b0 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72   pTrigger and or
1a7c0 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  conf..**.** The 
1a7d0 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d  TriggerPrg.aColm
1a7e0 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20  ask[0] variable 
1a7f0 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b  is set to a mask
1a800 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e   of old.* column
1a810 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f  s.** accessed (o
1a820 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74  r set to 0 for t
1a830 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61 73  riggers fired as
1a840 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53   a result of INS
1a850 45 52 54 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  ERT .** statemen
1a860 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20  ts). Similarly, 
1a870 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61  the TriggerPrg.a
1a880 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61  Colmask[1] varia
1a890 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a  ble is set to.**
1a8a0 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a   a mask of new.*
1a8b0 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79   columns used by
1a8c0 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f   the program..*/
1a8d0 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50  .struct TriggerP
1a8e0 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a  rg {.  Trigger *
1a8f0 70 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f  pTrigger;      /
1a900 2a 20 54 72 69 67 67 65 72 20 74 68 69 73 20 70  * Trigger this p
1a910 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64  rogram was coded
1a920 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67   from */.  Trigg
1a930 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20  erPrg *pNext;   
1a940 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79     /* Next entry
1a950 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67   in Parse.pTrigg
1a960 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20  erPrg list */.  
1a970 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f  SubProgram *pPro
1a980 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72  gram;   /* Progr
1a990 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  am implementing 
1a9a0 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20  pTrigger/orconf 
1a9b0 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b  */.  int orconf;
1a9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a9d0 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
1a9e0 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20  ICT policy */.  
1a9f0 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b  u32 aColmask[2];
1aa00 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73          /* Masks
1aa10 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a   of old.*, new.*
1aa20 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65   columns accesse
1aa30 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  d */.};../*.** T
1aa40 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74  he yDbMask datat
1aa50 79 70 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d  ype for the bitm
1aa60 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63  ask of all attac
1aa70 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  hed databases..*
1aa80 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
1aa90 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74  _ATTACHED>30.  t
1aaa0 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20  ypedef unsigned 
1aab0 63 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53 51  char yDbMask[(SQ
1aac0 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
1aad0 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e  D+9)/8];.# defin
1aae0 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49  e DbMaskTest(M,I
1aaf0 29 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f 38  )    (((M)[(I)/8
1ab00 5d 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29 21  ]&(1<<((I)&7)))!
1ab10 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  =0).# define DbM
1ab20 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20  askZero(M)      
1ab30 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a  memset((M),0,siz
1ab40 65 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e 65  eof(M)).# define
1ab50 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20   DbMaskSet(M,I) 
1ab60 20 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d      (M)[(I)/8]|=
1ab70 28 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20 64  (1<<((I)&7)).# d
1ab80 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a  efine DbMaskAllZ
1ab90 65 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65 33  ero(M)   sqlite3
1aba0 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1abb0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1abc0 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73 71  NonZero(M)   (sq
1abd0 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65  lite3DbMaskAllZe
1abe0 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a  ro(M)==0).#else.
1abf0 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e    typedef unsign
1ac00 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a  ed int yDbMask;.
1ac10 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54  # define DbMaskT
1ac20 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d  est(M,I)    (((M
1ac30 29 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  )&(((yDbMask)1)<
1ac40 3c 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65 66  <(I)))!=0).# def
1ac50 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d  ine DbMaskZero(M
1ac60 29 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20 64  )      (M)=0.# d
1ac70 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28  efine DbMaskSet(
1ac80 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28 28  M,I)     (M)|=((
1ac90 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29  (yDbMask)1)<<(I)
1aca0 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1acb0 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d  kAllZero(M)   (M
1acc0 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62  )==0.# define Db
1acd0 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20  MaskNonZero(M)  
1ace0 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a   (M)!=0.#endif..
1acf0 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72  /*.** An SQL par
1ad00 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20  ser context.  A 
1ad10 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74 72  copy of this str
1ad20 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64  ucture is passed
1ad30 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20   through.** the 
1ad40 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20  parser and down 
1ad50 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72  into all the par
1ad60 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69  ser action routi
1ad70 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ne in order to.*
1ad80 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69  * carry around i
1ad90 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20  nformation that 
1ada0 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65  is global to the
1adb0 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a   entire parse..*
1adc0 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75  *.** The structu
1add0 72 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e  re is divided in
1ade0 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57  to two parts.  W
1adf0 68 65 6e 20 74 68 65 20 70 61 72 73 65 72 20 61  hen the parser a
1ae00 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72  nd code.** gener
1ae10 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c  ate call themsel
1ae20 76 65 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c  ves recursively,
1ae30 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20   the first part 
1ae40 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65  of the structure
1ae50 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20  .** is constant 
1ae60 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70  but the second p
1ae70 61 72 74 20 69 73 20 72 65 73 65 74 20 61 74 20  art is reset at 
1ae80 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e  the beginning an
1ae90 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68  d end of.** each
1aea0 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a   recursion..**.*
1aeb0 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b  * The nTableLock
1aec0 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20   and aTableLock 
1aed0 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e  variables are on
1aee0 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20 73  ly used if the s
1aef0 68 61 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a 20  hared-cache .** 
1af00 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c  feature is enabl
1af10 65 64 20 28 69 66 20 73 71 6c 69 74 65 33 54 73  ed (if sqlite3Ts
1af20 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61  d()->useSharedDa
1af30 74 61 20 69 73 20 74 72 75 65 29 2e 20 54 68 65  ta is true). The
1af40 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f  y are.** used to
1af50 20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f   store the set o
1af60 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65  f table-locks re
1af70 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73 74  quired by the st
1af80 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a  atement being.**
1af90 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74   compiled. Funct
1afa0 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65  ion sqlite3Table
1afb0 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20 74  Lock() is used t
1afc0 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f  o add entries to
1afd0 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f   the.** list..*/
1afe0 0a 73 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a  .struct Parse {.
1aff0 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
1b000 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61         /* The ma
1b010 69 6e 20 64 61 74 61 62 61 73 65 20 73 74 72 75  in database stru
1b020 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20  cture */.  char 
1b030 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20  *zErrMsg;       
1b040 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73  /* An error mess
1b050 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70  age */.  Vdbe *p
1b060 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Vdbe;         /*
1b070 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65   An engine for e
1b080 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61 73  xecuting databas
1b090 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20  e bytecode */.  
1b0a0 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20  int rc;         
1b0b0 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63       /* Return c
1b0c0 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69  ode from executi
1b0d0 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61  on */.  u8 colNa
1b0e0 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20  mesSet;      /* 
1b0f0 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f  TRUE after OP_Co
1b100 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65  lumnName has bee
1b110 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56 64 62  n issued to pVdb
1b120 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53  e */.  u8 checkS
1b130 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43  chema;      /* C
1b140 61 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f  auses schema coo
1b150 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65 72 20  kie check after 
1b160 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38  an error */.  u8
1b170 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20 20   nested;        
1b180 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1b190 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20  nested calls to 
1b1a0 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20  the parser/code 
1b1b0 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75  generator */.  u
1b1c0 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20  8 nTempReg;     
1b1d0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1b1e0 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
1b1f0 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67  ters in aTempReg
1b200 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c  [] */.  u8 isMul
1b210 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20  tiWrite;     /* 
1b220 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e  True if statemen
1b230 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73  t may modify/ins
1b240 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  ert multiple row
1b250 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f  s */.  u8 mayAbo
1b260 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  rt;         /* T
1b270 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74  rue if statement
1b280 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42   may throw an AB
1b290 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f  ORT exception */
1b2a0 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e  .  u8 hasCompoun
1b2b0 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20  d;      /* Need 
1b2c0 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72  to invoke conver
1b2d0 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54  tCompoundSelectT
1b2e0 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20  oSubquery() */. 
1b2f0 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f   u8 okConstFacto
1b300 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66  r;    /* OK to f
1b310 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61  actor out consta
1b320 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65  nts */.  int aTe
1b330 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f 2a  mpReg[8];     /*
1b340 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f   Holding area fo
1b350 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  r temporary regi
1b360 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  sters */.  int n
1b370 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
1b380 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74  /* Size of the t
1b390 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
1b3a0 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74  r block */.  int
1b3b0 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20   iRangeReg;     
1b3c0 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73    /* First regis
1b3d0 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79  ter in temporary
1b3e0 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20   register block 
1b3f0 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
1b400 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1b410 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65  ber of errors se
1b420 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62  en */.  int nTab
1b430 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1b440 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f  Number of previo
1b450 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56  usly allocated V
1b460 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20  DBE cursors */. 
1b470 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20   int nMem;      
1b480 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b490 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  of memory cells 
1b4a0 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
1b4b0 20 69 6e 74 20 6e 53 65 74 3b 20 20 20 20 20 20   int nSet;      
1b4c0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b4d0 6f 66 20 73 65 74 73 20 75 73 65 64 20 73 6f 20  of sets used so 
1b4e0 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e  far */.  int nOn
1b4f0 63 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ce;           /*
1b500 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f 6e   Number of OP_On
1b510 63 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20  ce instructions 
1b520 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1b530 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20  nOpAlloc;       
1b540 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c   /* Number of sl
1b550 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f  ots allocated fo
1b560 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a  r Vdbe.aOp[] */.
1b570 20 20 69 6e 74 20 69 46 69 78 65 64 4f 70 3b 20    int iFixedOp; 
1b580 20 20 20 20 20 20 20 2f 2a 20 4e 65 76 65 72 20         /* Never 
1b590 62 61 63 6b 20 6f 75 74 20 6f 70 63 6f 64 65 73  back out opcodes
1b5a0 20 69 46 69 78 65 64 4f 70 2d 31 20 6f 72 20 65   iFixedOp-1 or e
1b5b0 61 72 6c 69 65 72 20 2a 2f 0a 20 20 69 6e 74 20  arlier */.  int 
1b5c0 63 6b 42 61 73 65 3b 20 20 20 20 20 20 20 20 20  ckBase;         
1b5d0 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65   /* Base registe
1b5e0 72 20 6f 66 20 64 61 74 61 20 64 75 72 69 6e 67  r of data during
1b5f0 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e   check constrain
1b600 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69 50 61 72  ts */.  int iPar
1b610 74 49 64 78 54 61 62 3b 20 20 20 20 20 2f 2a 20  tIdxTab;     /* 
1b620 54 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64  Table correspond
1b630 69 6e 67 20 74 6f 20 61 20 70 61 72 74 69 61 6c  ing to a partial
1b640 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
1b650 69 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20  iCacheLevel;    
1b660 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c   /* ColCache val
1b670 69 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68  id when aColCach
1b680 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63  e[].iLevel<=iCac
1b690 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74  heLevel */.  int
1b6a0 20 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20   iCacheCnt;     
1b6b0 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65    /* Counter use
1b6c0 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43  d to generate aC
1b6d0 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61  olCache[].lru va
1b6e0 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c  lues */.  int nL
1b6f0 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f  abel;          /
1b700 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65  * Number of labe
1b710 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74  ls used */.  int
1b720 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20 20 20   *aLabel;       
1b730 20 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68 6f    /* Space to ho
1b740 6c 64 20 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f  ld the labels */
1b750 0a 20 20 73 74 72 75 63 74 20 79 43 6f 6c 43 61  .  struct yColCa
1b760 63 68 65 20 7b 0a 20 20 20 20 69 6e 74 20 69 54  che {.    int iT
1b770 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
1b780 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72 20  /* Table cursor 
1b790 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69 31  number */.    i1
1b7a0 36 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  6 iColumn;      
1b7b0 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c      /* Table col
1b7c0 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  umn number */.  
1b7d0 20 20 75 38 20 74 65 6d 70 52 65 67 3b 20 20 20    u8 tempReg;   
1b7e0 20 20 20 20 20 20 20 20 2f 2a 20 69 52 65 67 20          /* iReg 
1b7f0 69 73 20 61 20 74 65 6d 70 20 72 65 67 69 73 74  is a temp regist
1b800 65 72 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f  er that needs to
1b810 20 62 65 20 66 72 65 65 64 20 2a 2f 0a 20 20 20   be freed */.   
1b820 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20   int iLevel;    
1b830 20 20 20 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e         /* Nestin
1b840 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69  g level */.    i
1b850 6e 74 20 69 52 65 67 3b 20 20 20 20 20 20 20 20  nt iReg;        
1b860 20 20 20 20 20 2f 2a 20 52 65 67 20 77 69 74 68       /* Reg with
1b870 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
1b880 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e  olumn. 0 means n
1b890 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  one. */.    int 
1b8a0 6c 72 75 3b 20 20 20 20 20 20 20 20 20 20 20 20  lru;            
1b8b0 20 20 2f 2a 20 4c 65 61 73 74 20 72 65 63 65 6e    /* Least recen
1b8c0 74 6c 79 20 75 73 65 64 20 65 6e 74 72 79 20 68  tly used entry h
1b8d0 61 73 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  as the smallest 
1b8e0 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f  value */.  } aCo
1b8f0 6c 43 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f  lCache[SQLITE_N_
1b900 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f  COLCACHE];  /* O
1b910 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  ne for each colu
1b920 6d 6e 20 63 61 63 68 65 20 65 6e 74 72 79 20 2a  mn cache entry *
1b930 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43  /.  ExprList *pC
1b940 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73  onstExpr;/* Cons
1b950 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73  tant expressions
1b960 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73   */.  Token cons
1b970 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61  traintName;/* Na
1b980 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72  me of the constr
1b990 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62  aint currently b
1b9a0 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 20  eing parsed */. 
1b9b0 20 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61   yDbMask writeMa
1b9c0 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61  sk;   /* Start a
1b9d0 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69   write transacti
1b9e0 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61  on on these data
1b9f0 62 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61  bases */.  yDbMa
1ba00 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20  sk cookieMask;  
1ba10 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63  /* Bitmask of sc
1ba20 68 65 6d 61 20 76 65 72 69 66 69 65 64 20 64 61  hema verified da
1ba30 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74  tabases */.  int
1ba40 20 63 6f 6f 6b 69 65 56 61 6c 75 65 5b 53 51 4c   cookieValue[SQL
1ba50 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
1ba60 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c 75 65 73 20  +2];  /* Values 
1ba70 6f 66 20 63 6f 6f 6b 69 65 73 20 74 6f 20 76 65  of cookies to ve
1ba80 72 69 66 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65  rify */.  int re
1ba90 67 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f  gRowid;        /
1baa0 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
1bab0 6e 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41  ng rowid of CREA
1bac0 54 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a  TE TABLE entry *
1bad0 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b  /.  int regRoot;
1bae0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
1baf0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f  ster holding roo
1bb00 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f  t page number fo
1bb10 72 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f  r new objects */
1bb20 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20  .  int nMaxArg; 
1bb30 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61          /* Max a
1bb40 72 67 73 20 70 61 73 73 65 64 20 74 6f 20 75 73  rgs passed to us
1bb50 65 72 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73  er function by s
1bb60 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69  ub-program */.#i
1bb70 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  f SELECTTRACE_EN
1bb80 41 42 4c 45 44 0a 20 20 69 6e 74 20 6e 53 65 6c  ABLED.  int nSel
1bb90 65 63 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ect;         /* 
1bba0 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c 45 43 54  Number of SELECT
1bbb0 20 73 74 61 74 65 6d 65 6e 74 73 20 73 65 65 6e   statements seen
1bbc0 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63   */.  int nSelec
1bbd0 74 49 6e 64 65 6e 74 3b 20 20 20 2f 2a 20 48 6f  tIndent;   /* Ho
1bbe0 77 20 66 61 72 20 74 6f 20 69 6e 64 65 6e 74 20  w far to indent 
1bbf0 53 45 4c 45 43 54 54 52 41 43 45 28 29 20 6f 75  SELECTTRACE() ou
1bc00 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  tput */.#endif.#
1bc10 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1bc20 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a  IT_SHARED_CACHE.
1bc30 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b    int nTableLock
1bc40 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
1bc50 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61  er of locks in a
1bc60 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54  TableLock */.  T
1bc70 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65  ableLock *aTable
1bc80 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65  Lock; /* Require
1bc90 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f  d table locks fo
1bca0 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  r shared-cache m
1bcb0 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
1bcc0 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69  AutoincInfo *pAi
1bcd0 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  nc;  /* Informat
1bce0 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e  ion about AUTOIN
1bcf0 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73  CREMENT counters
1bd00 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d   */..  /* Inform
1bd10 61 74 69 6f 6e 20 75 73 65 64 20 77 68 69 6c 65  ation used while
1bd20 20 63 6f 64 69 6e 67 20 74 72 69 67 67 65 72 20   coding trigger 
1bd30 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50  programs. */.  P
1bd40 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b  arse *pToplevel;
1bd50 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72      /* Parse str
1bd60 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20  ucture for main 
1bd70 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c  program (or NULL
1bd80 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  ) */.  Table *pT
1bd90 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54  riggerTab;  /* T
1bda0 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 61 72  able triggers ar
1bdb0 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f  e being coded fo
1bdc0 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43  r */.  int addrC
1bdd0 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41  rTab;       /* A
1bde0 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65  ddress of OP_Cre
1bdf0 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20  ateTable opcode 
1be00 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  on CREATE TABLE 
1be10 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 53 6b 69  */.  int addrSki
1be20 70 50 4b 3b 20 20 20 20 20 20 2f 2a 20 41 64 64  pPK;      /* Add
1be30 72 65 73 73 20 6f 66 20 69 6e 73 74 72 75 63 74  ress of instruct
1be40 69 6f 6e 20 74 6f 20 73 6b 69 70 20 50 52 49 4d  ion to skip PRIM
1be50 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f  ARY KEY index */
1be60 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f  .  u32 nQueryLoo
1be70 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e  p;      /* Est n
1be80 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69  umber of iterati
1be90 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20 28  ons of a query (
1bea0 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20  10*log2(N)) */. 
1beb0 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20   u32 oldmask;   
1bec0 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
1bed0 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72   old.* columns r
1bee0 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75  eferenced */.  u
1bef0 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20  32 newmask;     
1bf00 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e      /* Mask of n
1bf10 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66  ew.* columns ref
1bf20 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20  erenced */.  u8 
1bf30 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20  eTriggerOp;     
1bf40 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20    /* TK_UPDATE, 
1bf50 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f  TK_INSERT or TK_
1bf60 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65  DELETE */.  u8 e
1bf70 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  Orconf;         
1bf80 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43   /* Default ON C
1bf90 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66  ONFLICT policy f
1bfa0 6f 72 20 74 72 69 67 67 65 72 20 73 74 65 70 73  or trigger steps
1bfb0 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65   */.  u8 disable
1bfc0 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72  Triggers;  /* Tr
1bfd0 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72  ue to disable tr
1bfe0 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a  iggers */..  /**
1bff0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c000 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c010 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c020 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c030 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76  ******.  ** Abov
1c040 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65  e is constant be
1c050 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73  tween recursions
1c060 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65  .  Below is rese
1c070 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74  t before and aft
1c080 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63  er.  ** each rec
1c090 75 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75  ursion.  The bou
1c0a0 6e 64 61 72 79 20 62 65 74 77 65 65 6e 20 74 68  ndary between th
1c0b0 65 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20  ese two regions 
1c0c0 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20  is determined.  
1c0d0 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f  ** using offseto
1c0e0 66 28 50 61 72 73 65 2c 6e 56 61 72 29 20 73 6f  f(Parse,nVar) so
1c0f0 20 74 68 65 20 6e 56 61 72 20 66 69 65 6c 64 20   the nVar field 
1c100 6d 75 73 74 20 62 65 20 74 68 65 20 66 69 72 73  must be the firs
1c110 74 20 66 69 65 6c 64 0a 20 20 2a 2a 20 69 6e 20  t field.  ** in 
1c120 74 68 65 20 72 65 63 75 72 73 69 76 65 20 72 65  the recursive re
1c130 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  gion..  ********
1c140 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c150 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c160 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c170 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c180 2f 0a 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20 20  /..  int nVar;  
1c190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c1a0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20  * Number of '?' 
1c1b0 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69  variables seen i
1c1c0 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72  n the SQL so far
1c1d0 20 2a 2f 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b   */.  int nzVar;
1c1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1f0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 76 61  /* Number of ava
1c200 69 6c 61 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20  ilable slots in 
1c210 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20  azVar[] */.  u8 
1c220 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20  iPkSortOrder;   
1c230 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72         /* ASC or
1c240 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45   DESC for INTEGE
1c250 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f  R PRIMARY KEY */
1c260 0a 20 20 75 38 20 62 46 72 65 65 57 69 74 68 3b  .  u8 bFreeWith;
1c270 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c280 54 72 75 65 20 69 66 20 70 57 69 74 68 20 73 68  True if pWith sh
1c290 6f 75 6c 64 20 62 65 20 66 72 65 65 64 20 77 69  ould be freed wi
1c2a0 74 68 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 75  th parser */.  u
1c2b0 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20  8 explain;      
1c2c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1c2d0 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20   if the EXPLAIN 
1c2e0 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e  flag is found on
1c2f0 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69   the query */.#i
1c300 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1c310 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
1c320 20 75 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b   u8 declareVtab;
1c330 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1c340 75 65 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c  ue if inside sql
1c350 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
1c360 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74  b() */.  int nVt
1c370 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20  abLock;         
1c380 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1c390 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74  virtual tables t
1c3a0 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  o lock */.#endif
1c3b0 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20  .  int nAlias;  
1c3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c3d0 4e 75 6d 62 65 72 20 6f 66 20 61 6c 69 61 73 65  Number of aliase
1c3e0 64 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c  d result set col
1c3f0 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  umns */.  int nH
1c400 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
1c410 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
1c420 6e 20 74 72 65 65 20 68 65 69 67 68 74 20 6f 66  n tree height of
1c430 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c   current sub-sel
1c440 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ect */.#ifndef S
1c450 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
1c460 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74  IN.  int iSelect
1c470 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Id;            /
1c480 2a 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20  * ID of current 
1c490 73 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41  select for EXPLA
1c4a0 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69  IN output */.  i
1c4b0 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64  nt iNextSelectId
1c4c0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  ;        /* Next
1c4d0 20 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63   available selec
1c4e0 74 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e  t ID for EXPLAIN
1c4f0 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69   output */.#endi
1c500 66 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 72  f.  char **azVar
1c510 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1c520 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d   Pointers to nam
1c530 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73  es of parameters
1c540 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70   */.  Vdbe *pRep
1c550 72 65 70 61 72 65 3b 20 20 20 20 20 20 20 20 20  repare;         
1c560 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72  /* VM being repr
1c570 65 70 61 72 65 64 20 28 73 71 6c 69 74 65 33 52  epared (sqlite3R
1c580 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20  eprepare()) */. 
1c590 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
1c5a0 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  il;        /* Al
1c5b0 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74 20  l SQL text past 
1c5c0 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c  the last semicol
1c5d0 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54  on parsed */.  T
1c5e0 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b  able *pNewTable;
1c5f0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61           /* A ta
1c600 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72  ble being constr
1c610 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20  ucted by CREATE 
1c620 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67  TABLE */.  Trigg
1c630 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b  er *pNewTrigger;
1c640 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20       /* Trigger 
1c650 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20  under construct 
1c660 62 79 20 61 20 43 52 45 41 54 45 20 54 52 49 47  by a CREATE TRIG
1c670 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  GER */.  const c
1c680 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78  har *zAuthContex
1c690 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61  t; /* The 6th pa
1c6a0 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78  rameter to db->x
1c6b0 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a  Auth callbacks *
1c6c0 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54  /.  Token sNameT
1c6d0 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  oken;         /*
1c6e0 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75   Token with unqu
1c6f0 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f  alified schema o
1c700 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20  bject name */.  
1c710 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e  Token sLastToken
1c720 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1c730 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73   last token pars
1c740 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ed */.#ifndef SQ
1c750 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
1c760 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73  LTABLE.  Token s
1c770 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
1c780 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74     /* Complete t
1c790 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20  ext of a module 
1c7a0 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61  argument */.  Ta
1c7b0 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b  ble **apVtabLock
1c7c0 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ;       /* Point
1c7d0 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61  er to virtual ta
1c7e0 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63  bles needing loc
1c7f0 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  king */.#endif. 
1c800 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54   Table *pZombieT
1c810 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  ab;        /* Li
1c820 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65  st of Table obje
1c830 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66  cts to delete af
1c840 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a  ter code gen */.
1c850 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54    TriggerPrg *pT
1c860 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c  riggerPrg;  /* L
1c870 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f  inked list of co
1c880 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ded triggers */.
1c890 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20    With *pWith;  
1c8a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
1c8b0 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75  urrent WITH clau
1c8c0 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 7d  se, or NULL */.}
1c8d0 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  ;../*.** Return 
1c8e0 74 72 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c  true if currentl
1c8f0 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69  y inside an sqli
1c900 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62  te3_declare_vtab
1c910 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64  () call..*/.#ifd
1c920 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
1c930 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64  IRTUALTABLE.  #d
1c940 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45  efine IN_DECLARE
1c950 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20  _VTAB 0.#else.  
1c960 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41  #define IN_DECLA
1c970 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d  RE_VTAB (pParse-
1c980 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65  >declareVtab).#e
1c990 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
1c9a0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
1c9b0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1c9c0 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72  re can be declar
1c9d0 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e  ed on a stack an
1c9e0 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76  d used.** to sav
1c9f0 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74  e the Parse.zAut
1ca00 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73  hContext value s
1ca10 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65  o that it can be
1ca20 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e   restored later.
1ca30 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43  .*/.struct AuthC
1ca40 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74  ontext {.  const
1ca50 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74   char *zAuthCont
1ca60 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61  ext;   /* Put sa
1ca70 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43  ved Parse.zAuthC
1ca80 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20  ontext here */. 
1ca90 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
1caa0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1cab0 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74  The Parse struct
1cac0 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ure */.};../*.**
1cad0 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20   Bitfield flags 
1cae0 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20  for P5 value in 
1caf0 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e  various opcodes.
1cb00 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c  .*/.#define OPFL
1cb10 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20  AG_NCHANGE      
1cb20 20 30 78 30 31 20 20 20 20 2f 2a 20 53 65 74 20   0x01    /* Set 
1cb30 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43  to update db->nC
1cb40 68 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65  hange */.#define
1cb50 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20   OPFLAG_EPHEM   
1cb60 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
1cb70 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65   OP_Column: Ephe
1cb80 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20  meral output is 
1cb90 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ok */.#define OP
1cba0 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20  FLAG_LASTROWID  
1cbb0 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53 65     0x02    /* Se
1cbc0 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e  t to update db->
1cbd0 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65  lastRowid */.#de
1cbe0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50  fine OPFLAG_ISUP
1cbf0 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20  DATE      0x04  
1cc00 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73    /* This OP_Ins
1cc10 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50  ert is an sql UP
1cc20 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
1cc30 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20  OPFLAG_APPEND   
1cc40 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20       0x08    /* 
1cc50 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74  This is likely t
1cc60 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a  o be an append *
1cc70 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1cc80 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30  _USESEEKRESULT 0
1cc90 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f  x10    /* Try to
1cca0 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e   avoid a seek in
1ccb0 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a   BtreeInsert() *
1ccc0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1ccd0 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20 30  _LENGTHARG     0
1cce0 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x40    /* OP_Col
1ccf0 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f  umn only used fo
1cd00 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64  r length() */.#d
1cd10 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50  efine OPFLAG_TYP
1cd20 45 4f 46 41 52 47 20 20 20 20 20 30 78 38 30 20  EOFARG     0x80 
1cd30 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20     /* OP_Column 
1cd40 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79  only used for ty
1cd50 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e  peof() */.#defin
1cd60 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52  e OPFLAG_BULKCSR
1cd70 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
1cd80 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64  * OP_Open** used
1cd90 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75   to open bulk cu
1cda0 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rsor */.#define 
1cdb0 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20  OPFLAG_SEEKEQ   
1cdc0 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20       0x02    /* 
1cdd0 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72  OP_Open** cursor
1cde0 20 75 73 65 73 20 45 51 20 73 65 65 6b 20 6f 6e   uses EQ seek on
1cdf0 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ly */.#define OP
1ce00 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20 20  FLAG_P2ISREG    
1ce10 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 50 32     0x04    /* P2
1ce20 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73   to OP_Open** is
1ce30 20 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62   a register numb
1ce40 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  er */.#define OP
1ce50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20  FLAG_PERMUTE    
1ce60 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
1ce70 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68  _Compare: use th
1ce80 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f  e permutation */
1ce90 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69  ../*. * Each tri
1cea0 67 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20  gger present in 
1ceb0 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
1cec0 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61 73  ema is stored as
1ced0 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a   an instance of.
1cee0 20 2a 20 73 74 72 75 63 74 20 54 72 69 67 67 65   * struct Trigge
1cef0 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65  r. . *. * Pointe
1cf00 72 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20  rs to instances 
1cf10 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
1cf20 72 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  r are stored in 
1cf30 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20  two ways.. * 1. 
1cf40 49 6e 20 74 68 65 20 22 74 72 69 67 48 61 73 68  In the "trigHash
1cf50 22 20 68 61 73 68 20 74 61 62 6c 65 20 28 70 61  " hash table (pa
1cf60 72 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  rt of the sqlite
1cf70 33 2a 20 74 68 61 74 20 72 65 70 72 65 73 65 6e  3* that represen
1cf80 74 73 20 74 68 65 20 0a 20 2a 20 20 20 20 64 61  ts the . *    da
1cf90 74 61 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c  tabase). This al
1cfa0 6c 6f 77 73 20 54 72 69 67 67 65 72 20 73 74 72  lows Trigger str
1cfb0 75 63 74 75 72 65 73 20 74 6f 20 62 65 20 72 65  uctures to be re
1cfc0 74 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e  trieved by name.
1cfd0 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67  . * 2. All trigg
1cfe0 65 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ers associated w
1cff0 69 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62  ith a single tab
1d000 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64  le form a linked
1d010 20 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65   list, using the
1d020 0a 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d  . *    pNext mem
1d030 62 65 72 20 6f 66 20 73 74 72 75 63 74 20 54 72  ber of struct Tr
1d040 69 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72  igger. A pointer
1d050 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c   to the first el
1d060 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20  ement of the. * 
1d070 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69     linked list i
1d080 73 20 73 74 6f 72 65 64 20 61 73 20 74 68 65 20  s stored as the 
1d090 22 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65  "pTrigger" membe
1d0a0 72 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61  r of the associa
1d0b0 74 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74  ted. *    struct
1d0c0 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68   Table.. *. * Th
1d0d0 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65  e "step_list" me
1d0e0 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74  mber points to t
1d0f0 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
1d100 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   of a linked lis
1d110 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20  t. * containing 
1d120 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
1d130 74 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  ts specified as 
1d140 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
1d150 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20  ram.. */.struct 
1d160 54 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72  Trigger {.  char
1d170 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
1d180 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20      /* The name 
1d190 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 20 20  of the trigger  
1d1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1b0 20 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20        */.  char 
1d1c0 2a 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  *table;         
1d1d0 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20     /* The table 
1d1e0 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68  or view to which
1d1f0 20 74 68 65 20 74 72 69 67 67 65 72 20 61 70 70   the trigger app
1d200 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b  lies */.  u8 op;
1d210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d220 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44    /* One of TK_D
1d230 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45  ELETE, TK_UPDATE
1d240 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20  , TK_INSERT     
1d250 20 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74      */.  u8 tr_t
1d260 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
1d270 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47   /* One of TRIGG
1d280 45 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47  ER_BEFORE, TRIGG
1d290 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78  ER_AFTER */.  Ex
1d2a0 70 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20  pr *pWhen;      
1d2b0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
1d2c0 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  N clause of the 
1d2d0 65 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20  expression (may 
1d2e0 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64  be NULL) */.  Id
1d2f0 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20  List *pColumns; 
1d300 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73        /* If this
1d310 20 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46   is an UPDATE OF
1d320 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74   <column-list> t
1d330 72 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20  rigger,.        
1d340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d350 20 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e       the <column
1d360 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64  -list> is stored
1d370 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d   here */.  Schem
1d380 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
1d390 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
1d3a0 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67  taining the trig
1d3b0 67 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ger */.  Schema 
1d3c0 2a 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20  *pTabSchema;    
1d3d0 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
1d3e0 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20  ining the table 
1d3f0 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  */.  TriggerStep
1d400 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20   *step_list; /* 
1d410 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69  Link list of tri
1d420 67 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65  gger program ste
1d430 70 73 20 20 20 20 20 20 20 20 20 20 20 20 20 2a  ps             *
1d440 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65  /.  Trigger *pNe
1d450 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  xt;         /* N
1d460 65 78 74 20 74 72 69 67 67 65 72 20 61 73 73 6f  ext trigger asso
1d470 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
1d480 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  table */.};../*.
1d490 2a 2a 20 41 20 74 72 69 67 67 65 72 20 69 73 20  ** A trigger is 
1d4a0 65 69 74 68 65 72 20 61 20 42 45 46 4f 52 45 20  either a BEFORE 
1d4b0 6f 72 20 61 6e 20 41 46 54 45 52 20 74 72 69 67  or an AFTER trig
1d4c0 67 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ger.  The follow
1d4d0 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a  ing constants.**
1d4e0 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68   determine which
1d4f0 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72  . .**.** If ther
1d500 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74  e are multiple t
1d510 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67  riggers, you mig
1d520 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52  ht of some BEFOR
1d530 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52  E and some AFTER
1d540 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73  ..** In that cas
1d550 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74  es, the constant
1d560 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f  s below can be O
1d570 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f  Red together..*/
1d580 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52  .#define TRIGGER
1d590 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69  _BEFORE  1.#defi
1d5a0 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54 45 52  ne TRIGGER_AFTER
1d5b0 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69     2../*. * An i
1d5c0 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63  nstance of struc
1d5d0 74 20 54 72 69 67 67 65 72 53 74 65 70 20 69 73  t TriggerStep is
1d5e0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61   used to store a
1d5f0 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74   single SQL stat
1d600 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73  ement. * that is
1d610 20 61 20 70 61 72 74 20 6f 66 20 61 20 74 72 69   a part of a tri
1d620 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 20 0a 20  gger-program. . 
1d630 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f  *. * Instances o
1d640 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1d650 53 74 65 70 20 61 72 65 20 73 74 6f 72 65 64 20  Step are stored 
1d660 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b  in a singly link
1d670 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a  ed list (linked.
1d680 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e   * using the "pN
1d690 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66  ext" member) ref
1d6a0 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20 22  erenced by the "
1d6b0 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65  step_list" membe
1d6c0 72 20 6f 66 20 74 68 65 20 0a 20 2a 20 61 73 73  r of the . * ass
1d6d0 6f 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54  ociated struct T
1d6e0 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e  rigger instance.
1d6f0 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   The first eleme
1d700 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64  nt of the linked
1d710 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20   list is. * the 
1d720 66 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68  first step of th
1d730 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  e trigger-progra
1d740 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68 65 20 22 6f  m.. * . * The "o
1d750 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61  p" member indica
1d760 74 65 73 20 77 68 65 74 68 65 72 20 74 68 69 73  tes whether this
1d770 20 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20   is a "DELETE", 
1d780 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54  "INSERT", "UPDAT
1d790 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54  E" or. * "SELECT
1d7a0 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65  " statement. The
1d7b0 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65   meanings of the
1d7c0 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69   other members i
1d7d0 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
1d7e0 74 68 65 20 0a 20 2a 20 76 61 6c 75 65 20 6f 66  the . * value of
1d7f0 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73   "op" as follows
1d800 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  :. *. * (op == T
1d810 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63  K_INSERT). * orc
1d820 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73  onf    -> stores
1d830 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   the ON CONFLICT
1d840 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53   algorithm. * pS
1d850 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68  elect   -> If th
1d860 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
1d870 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20  INTO ... SELECT 
1d880 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
1d890 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
1d8a0 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
1d8b0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
1d8c0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1d8d0 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c  t. Otherwise NUL
1d8e0 4c 2e 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20  L.. * zTarget   
1d8f0 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65  -> Dequoted name
1d900 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
1d910 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a   insert into.. *
1d920 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66   pExprList -> If
1d930 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
1d940 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55  RT INTO ... VALU
1d950 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74  ES ... statement
1d960 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20  , then. *       
1d970 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72         this stor
1d980 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20  es values to be 
1d990 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77  inserted. Otherw
1d9a0 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64  ise NULL.. * pId
1d9b0 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69  List   -> If thi
1d9c0 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
1d9d0 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e  NTO ... (<column
1d9e0 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20  -names>) VALUES 
1d9f0 2e 2e 2e 20 0a 20 2a 20 20 20 20 20 20 20 20 20  ... . *         
1da00 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20       statement, 
1da10 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73  then this stores
1da20 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65   the column-name
1da30 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20  s to be. *      
1da40 20 20 20 20 20 20 20 20 69 6e 73 65 72 74 65 64          inserted
1da50 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70   into.. *. * (op
1da60 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20   == TK_DELETE). 
1da70 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44  * zTarget   -> D
1da80 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20  equoted name of 
1da90 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c  the table to del
1daa0 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68  ete from.. * pWh
1dab0 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48  ere    -> The WH
1dac0 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ERE clause of th
1dad0 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  e DELETE stateme
1dae0 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65  nt if one is spe
1daf0 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20  cified.. *      
1db00 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73          Otherwis
1db10 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28  e NULL.. * . * (
1db20 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29  op == TK_UPDATE)
1db30 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e  . * zTarget   ->
1db40 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f   Dequoted name o
1db50 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75  f the table to u
1db60 70 64 61 74 65 2e 0a 20 2a 20 70 57 68 65 72 65  pdate.. * pWhere
1db70 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45      -> The WHERE
1db80 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55   clause of the U
1db90 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
1dba0 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66  if one is specif
1dbb0 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20  ied.. *         
1dbc0 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e       Otherwise N
1dbd0 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73  ULL.. * pExprLis
1dbe0 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74  t -> A list of t
1dbf0 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70  he columns to up
1dc00 64 61 74 65 20 61 6e 64 20 74 68 65 20 65 78 70  date and the exp
1dc10 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61  ressions to upda
1dc20 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  te. *           
1dc30 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20     them to. See 
1dc40 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 29 20  sqlite3Update() 
1dc50 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  documentation of
1dc60 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20   "pChanges". *  
1dc70 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 75              argu
1dc80 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74  ment.. * . */.st
1dc90 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
1dca0 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20   {.  u8 op;     
1dcb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
1dcc0 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54   of TK_DELETE, T
1dcd0 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
1dce0 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a  ERT, TK_SELECT *
1dcf0 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20  /.  u8 orconf;  
1dd00 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52           /* OE_R
1dd10 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a  ollback etc. */.
1dd20 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
1dd30 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72  ;      /* The tr
1dd40 69 67 67 65 72 20 74 68 61 74 20 74 68 69 73 20  igger that this 
1dd50 73 74 65 70 20 69 73 20 61 20 70 61 72 74 20 6f  step is a part o
1dd60 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  f */.  Select *p
1dd70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53  Select;     /* S
1dd80 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
1dd90 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54  or RHS of INSERT
1dda0 20 49 4e 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e   INTO SELECT ...
1ddb0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 61 72   */.  char *zTar
1ddc0 67 65 74 3b 20 20 20 20 20 20 20 2f 2a 20 54 61  get;       /* Ta
1ddd0 72 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44  rget table for D
1dde0 45 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49  ELETE, UPDATE, I
1ddf0 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20  NSERT */.  Expr 
1de00 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20  *pWhere;        
1de10 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  /* The WHERE cla
1de20 75 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f  use for DELETE o
1de30 72 20 55 50 44 41 54 45 20 73 74 65 70 73 20 2a  r UPDATE steps *
1de40 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  /.  ExprList *pE
1de50 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20  xprList; /* SET 
1de60 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41 54  clause for UPDAT
1de70 45 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a  E. */.  IdList *
1de80 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20  pIdList;     /* 
1de90 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72  Column names for
1dea0 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69   INSERT */.  Tri
1deb0 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b  ggerStep *pNext;
1dec0 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65    /* Next in the
1ded0 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20   link-list */.  
1dee0 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61  TriggerStep *pLa
1def0 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65  st;  /* Last ele
1df00 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73  ment in link-lis
1df10 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74  t. Valid for 1st
1df20 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b   elem only */.};
1df30 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
1df40 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1df50 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61  contains informa
1df60 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65  tion used by the
1df70 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a   sqliteFix....**
1df80 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65   routines as the
1df90 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65  y walk the parse
1dfa0 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61   tree to make da
1dfb0 74 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65  tabase reference
1dfc0 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20 20  s.** explicit.  
1dfd0 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
1dfe0 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78  ct DbFixer DbFix
1dff0 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78  er;.struct DbFix
1e000 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  er {.  Parse *pP
1e010 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68  arse;      /* Th
1e020 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78  e parsing contex
1e030 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67  t.  Error messag
1e040 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20  es written here 
1e050 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
1e060 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20  hema;    /* Fix 
1e070 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63  items to this sc
1e080 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56  hema */.  int bV
1e090 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a  arOnly;       /*
1e0a0 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61   Check for varia
1e0b0 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f  ble references o
1e0c0 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  nly */.  const c
1e0d0 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20  har *zDb;    /* 
1e0e0 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62  Make sure all ob
1e0f0 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69  jects are contai
1e100 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61  ned in this data
1e110 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  base */.  const 
1e120 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a  char *zType;  /*
1e130 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e   Type of the con
1e140 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
1e150 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
1e160 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65   */.  const Toke
1e170 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d  n *pName; /* Nam
1e180 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
1e190 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
1e1a0 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
1e1b0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a  };../*.** An obj
1e1c0 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63  ected used to ac
1e1d0 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78  cumulate the tex
1e1e0 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68  t of a string wh
1e1f0 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74  ere we.** do not
1e200 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f   necessarily kno
1e210 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74  w how big the st
1e220 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20  ring will be in 
1e230 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
1e240 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20  ct StrAccum {.  
1e250 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
1e260 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c       /* Optional
1e270 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f   database for lo
1e280 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65  okaside.  Can be
1e290 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20   NULL */.  char 
1e2a0 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20 20  *zBase;         
1e2b0 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61  /* A base alloca
1e2c0 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20  tion.  Not from 
1e2d0 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61  malloc. */.  cha
1e2e0 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20  r *zText;       
1e2f0 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20    /* The string 
1e300 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72  collected so far
1e310 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61 72   */.  int  nChar
1e320 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65  ;          /* Le
1e330 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69  ngth of the stri
1e340 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ng so far */.  i
1e350 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20  nt  nAlloc;     
1e360 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66      /* Amount of
1e370 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64   space allocated
1e380 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69   in zText */.  i
1e390 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20  nt  mxAlloc;    
1e3a0 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61      /* Maximum a
1e3b0 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f  llowed allocatio
1e3c0 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c  n.  0 for no mal
1e3d0 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20 20 75  loc usage */.  u
1e3e0 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20  8   accError;   
1e3f0 20 20 20 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f      /* STRACCUM_
1e400 4e 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43 43 55  NOMEM or STRACCU
1e410 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a 7d 3b 0a 23  M_TOOBIG */.};.#
1e420 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f  define STRACCUM_
1e430 4e 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66 69 6e  NOMEM   1.#defin
1e440 65 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49  e STRACCUM_TOOBI
1e450 47 20 20 32 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f  G  2../*.** A po
1e460 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
1e470 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
1e480 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69  to communicate i
1e490 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72  nformation.** fr
1e4a0 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61  om sqlite3Init a
1e4b0 6e 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d  nd OP_ParseSchem
1e4c0 61 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74  a into the sqlit
1e4d0 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a  e3InitCallback..
1e4e0 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
1e4f0 74 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  t {.  sqlite3 *d
1e500 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  b;        /* The
1e510 20 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20   database being 
1e520 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
1e530 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67   char **pzErrMsg
1e540 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65  ;    /* Error me
1e550 73 73 61 67 65 20 73 74 6f 72 65 64 20 68 65 72  ssage stored her
1e560 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20  e */.  int iDb; 
1e570 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20             /* 0 
1e580 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73  for main databas
1e590 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20  e.  1 for TEMP, 
1e5a0 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64  2.. for ATTACHed
1e5b0 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20   */.  int rc;   
1e5c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
1e5d0 75 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20  ult code stored 
1e5e0 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61  here */.} InitDa
1e5f0 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63  ta;../*.** Struc
1e600 74 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ture containing 
1e610 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61  global configura
1e620 74 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68  tion data for th
1e630 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  e SQLite library
1e640 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ..**.** This str
1e650 75 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74  ucture also cont
1e660 61 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20  ains some state 
1e670 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
1e680 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f  struct Sqlite3Co
1e690 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65  nfig {.  int bMe
1e6a0 6d 73 74 61 74 3b 20 20 20 20 20 20 20 20 20 20  mstat;          
1e6b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1e6c0 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d  ue to enable mem
1e6d0 6f 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20  ory status */.  
1e6e0 69 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20  int bCoreMutex; 
1e6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e700 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
1e710 62 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e  ble core mutexin
1e720 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c  g */.  int bFull
1e730 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
1e740 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1e750 20 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20   to enable full 
1e760 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e  mutexing */.  in
1e770 74 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20  t bOpenUri;     
1e780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e790 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72  /* True to inter
1e7a0 70 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61  pret filenames a
1e7b0 73 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20  s URIs */.  int 
1e7c0 62 55 73 65 43 69 73 3b 20 20 20 20 20 20 20 20  bUseCis;        
1e7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e7e0 20 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e   Use covering in
1e7f0 64 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73  dices for full-s
1e800 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78  cans */.  int mx
1e810 53 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  Strlen;         
1e820 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
1e830 61 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65  aximum string le
1e840 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65  ngth */.  int ne
1e850 76 65 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20  verCorrupt;     
1e860 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
1e870 61 74 61 62 61 73 65 20 69 73 20 61 6c 77 61 79  atabase is alway
1e880 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f  s well-formed */
1e890 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69  .  int szLookasi
1e8a0 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
1e8b0 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
1e8c0 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
1e8d0 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e   size */.  int n
1e8e0 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20  Lookaside;      
1e8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e900 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
1e910 65 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a  e buffer count *
1e920 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  /.  sqlite3_mem_
1e930 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20  methods m;      
1e940 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76        /* Low-lev
1e950 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  el memory alloca
1e960 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a  tion interface *
1e970 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
1e980 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b  x_methods mutex;
1e990 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76        /* Low-lev
1e9a0 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61  el mutex interfa
1e9b0 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ce */.  sqlite3_
1e9c0 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20  pcache_methods2 
1e9d0 70 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77  pcache2;  /* Low
1e9e0 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68  -level page-cach
1e9f0 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  e interface */. 
1ea00 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20   void *pHeap;   
1ea10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea20 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61     /* Heap stora
1ea30 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e  ge space */.  in
1ea40 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20  t nHeap;        
1ea50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea60 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70  /* Size of pHeap
1ea70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65  [] */.  int mnRe
1ea80 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20  q, mxReq;       
1ea90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e            /* Min
1eaa0 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65   and max heap re
1eab0 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a  quests sizes */.
1eac0 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
1ead0 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  szMmap;         
1eae0 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70      /* mmap() sp
1eaf0 61 63 65 20 70 65 72 20 6f 70 65 6e 20 66 69 6c  ace per open fil
1eb00 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69  e */.  sqlite3_i
1eb10 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20  nt64 mxMmap;    
1eb20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
1eb30 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72 20 73 7a  mum value for sz
1eb40 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  Mmap */.  void *
1eb50 70 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20  pScratch;       
1eb60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1eb70 63 72 61 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f  cratch memory */
1eb80 0a 20 20 69 6e 74 20 73 7a 53 63 72 61 74 63 68  .  int szScratch
1eb90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1eba0 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
1ebb0 65 61 63 68 20 73 63 72 61 74 63 68 20 62 75 66  each scratch buf
1ebc0 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63  fer */.  int nSc
1ebd0 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20  ratch;          
1ebe0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1ebf0 6d 62 65 72 20 6f 66 20 73 63 72 61 74 63 68 20  mber of scratch 
1ec00 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69  buffers */.  voi
1ec10 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20  d *pPage;       
1ec20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ec30 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d  * Page cache mem
1ec40 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50  ory */.  int szP
1ec50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
1ec60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
1ec70 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67 65 20  ze of each page 
1ec80 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20  in pPage[] */.  
1ec90 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20  int nPage;      
1eca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecb0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
1ecc0 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20  ages in pPage[] 
1ecd0 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65  */.  int mxParse
1ece0 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20  rStack;         
1ecf0 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75         /* maximu
1ed00 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65 20 70  m depth of the p
1ed10 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20  arser stack */. 
1ed20 20 69 6e 74 20 73 68 61 72 65 64 43 61 63 68 65   int sharedCache
1ed30 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20  Enabled;        
1ed40 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68     /* true if sh
1ed50 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20  ared-cache mode 
1ed60 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 75 33 32  enabled */.  u32
1ed70 20 73 7a 50 6d 61 3b 20 20 20 20 20 20 20 20 20   szPma;         
1ed80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ed90 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72 74 65 72  * Maximum Sorter
1eda0 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a 20 20 2f   PMA size */.  /
1edb0 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68  * The above migh
1edc0 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64  t be initialized
1edd0 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54   to non-zero.  T
1ede0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65  he following nee
1edf0 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a  d to always.  **
1ee00 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65   initially be ze
1ee10 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a  ro, however. */.
1ee20 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20    int isInit;   
1ee30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee40 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
1ee50 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  r initialization
1ee60 20 68 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f   has finished */
1ee70 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73  .  int inProgres
1ee80 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
1ee90 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69       /* True whi
1eea0 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  le initializatio
1eeb0 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f  n in progress */
1eec0 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e  .  int isMutexIn
1eed0 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
1eee0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
1eef0 65 72 20 6d 75 74 65 78 65 73 20 61 72 65 20 69  er mutexes are i
1ef00 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
1ef10 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74  int isMallocInit
1ef20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ef30 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
1ef40 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61  malloc is initia
1ef50 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  lized */.  int i
1ef60 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20  sPCacheInit;    
1ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ef80 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f  True after mallo
1ef90 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  c is initialized
1efa0 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e   */.  int nRefIn
1efb0 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  itMutex;        
1efc0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1efd0 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49  r of users of pI
1efe0 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71  nitMutex */.  sq
1eff0 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e  lite3_mutex *pIn
1f000 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  itMutex;        
1f010 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20 62 79  /* Mutex used by
1f020 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c   sqlite3_initial
1f030 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ize() */.  void 
1f040 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e  (*xLog)(void*,in
1f050 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20  t,const char*); 
1f060 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20  /* Function for 
1f070 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69  logging */.  voi
1f080 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20  d *pLogArg;     
1f090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0a0 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d    /* First argum
1f0b0 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f  ent to xLog() */
1f0c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
1f0d0 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76  NABLE_SQLLOG.  v
1f0e0 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f  oid(*xSqllog)(vo
1f0f0 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  id*,sqlite3*,con
1f100 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  st char*, int);.
1f110 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41    void *pSqllogA
1f120 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  rg;.#endif.#ifde
1f130 66 20 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f  f SQLITE_VDBE_CO
1f140 56 45 52 41 47 45 0a 20 20 2f 2a 20 54 68 65 20  VERAGE.  /* The 
1f150 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61  following callba
1f160 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29  ck (if not NULL)
1f170 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65   is invoked on e
1f180 76 65 72 79 20 56 44 42 45 20 62 72 61 6e 63 68  very VDBE branch
1f190 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e  .  ** operation.
1f1a0 20 20 53 65 74 20 74 68 65 20 63 61 6c 6c 62 61    Set the callba
1f1b0 63 6b 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f  ck using SQLITE_
1f1c0 54 45 53 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f  TESTCTRL_VDBE_CO
1f1d0 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76  VERAGE..  */.  v
1f1e0 6f 69 64 20 28 2a 78 56 64 62 65 42 72 61 6e 63  oid (*xVdbeBranc
1f1f0 68 29 28 76 6f 69 64 2a 2c 69 6e 74 20 69 53 72  h)(void*,int iSr
1f200 63 4c 69 6e 65 2c 75 38 20 65 54 68 69 73 2c 75  cLine,u8 eThis,u
1f210 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c  8 eMx);  /* Call
1f220 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  back */.  void *
1f230 70 56 64 62 65 42 72 61 6e 63 68 41 72 67 3b 20  pVdbeBranchArg; 
1f240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f260 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d      /* 1st argum
1f270 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ent */.#endif.#i
1f280 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1f290 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20  T_BUILTIN_TEST. 
1f2a0 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c   int (*xTestCall
1f2b0 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20  back)(int);     
1f2c0 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79     /* Invoked by
1f2d0 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
1f2e0 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  () */.#endif.  i
1f2f0 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75  nt bLocaltimeFau
1f300 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  lt;             
1f310 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c   /* True to fail
1f320 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c   localtime() cal
1f330 6c 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ls */.};../*.** 
1f340 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73  This macro is us
1f350 65 64 20 69 6e 73 69 64 65 20 6f 66 20 61 73 73  ed inside of ass
1f360 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
1f370 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61   to indicate tha
1f380 74 0a 2a 2a 20 74 68 65 20 61 73 73 65 72 74 20  t.** the assert 
1f390 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e  is only valid on
1f3a0 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64   a well-formed d
1f3b0 61 74 61 62 61 73 65 2e 20 20 49 6e 73 74 65 61  atabase.  Instea
1f3c0 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  d of:.**.**     
1f3d0 61 73 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a  assert( X );.**.
1f3e0 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a  ** One writes:.*
1f3f0 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28  *.**     assert(
1f400 20 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42   X || CORRUPT_DB
1f410 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50   );.**.** CORRUP
1f420 54 5f 44 42 20 69 73 20 74 72 75 65 20 64 75 72  T_DB is true dur
1f430 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61  ing normal opera
1f440 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44  tion.  CORRUPT_D
1f450 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63  B does not indic
1f460 61 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20  ate.** that the 
1f470 64 61 74 61 62 61 73 65 20 69 73 20 64 65 66 69  database is defi
1f480 6e 69 74 65 6c 79 20 63 6f 72 72 75 70 74 2c 20  nitely corrupt, 
1f490 6f 6e 6c 79 20 74 68 61 74 20 69 74 20 6d 69 67  only that it mig
1f4a0 68 74 20 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a  ht be corrupt..*
1f4b0 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65 73 74 20  * For most test 
1f4c0 63 61 73 65 73 2c 20 43 4f 52 52 55 50 54 5f 44  cases, CORRUPT_D
1f4d0 42 20 69 73 20 73 65 74 20 74 6f 20 66 61 6c 73  B is set to fals
1f4e0 65 20 75 73 69 6e 67 20 61 20 73 70 65 63 69 61  e using a specia
1f4f0 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73  l.** sqlite3_tes
1f500 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68  t_control().  Th
1f510 69 73 20 65 6e 61 62 6c 65 73 20 61 73 73 65 72  is enables asser
1f520 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74  t() statements t
1f530 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67  o prove.** thing
1f540 73 20 74 68 61 74 20 61 72 65 20 61 6c 77 61 79  s that are alway
1f550 73 20 74 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d  s true for well-
1f560 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 73  formed databases
1f570 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52  ..*/.#define COR
1f580 52 55 50 54 5f 44 42 20 20 28 73 71 6c 69 74 65  RUPT_DB  (sqlite
1f590 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72  3Config.neverCor
1f5a0 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  rupt==0)../*.** 
1f5b0 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20  Context pointer 
1f5c0 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f  passed down thro
1f5d0 75 67 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c  ugh the tree-wal
1f5e0 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c  k..*/.struct Wal
1f5f0 6b 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 45  ker {.  int (*xE
1f600 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c  xprCallback)(Wal
1f610 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20  ker*, Expr*);   
1f620 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f    /* Callback fo
1f630 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  r expressions */
1f640 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74  .  int (*xSelect
1f650 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72  Callback)(Walker
1f660 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20  *,Select*);  /* 
1f670 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c  Callback for SEL
1f680 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28  ECTs */.  void (
1f690 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b  *xSelectCallback
1f6a0 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63  2)(Walker*,Selec
1f6b0 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61  t*);/* Second ca
1f6c0 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43  llback for SELEC
1f6d0 54 73 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  Ts */.  Parse *p
1f6e0 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20  Parse;          
1f6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f700 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74    /* Parser cont
1f710 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 77  ext.  */.  int w
1f720 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20  alkerDepth;     
1f730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f740 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1f750 66 20 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a  f subqueries */.
1f760 20 20 75 38 20 65 43 6f 64 65 3b 20 20 20 20 20    u8 eCode;     
1f770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f780 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
1f790 20 73 6d 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e   small processin
1f7a0 67 20 63 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f  g code */.  unio
1f7b0 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  n {             
1f7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7d0 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64        /* Extra d
1f7e0 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b  ata for callback
1f7f0 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74   */.    NameCont
1f800 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20  ext *pNC;       
1f810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f820 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e     /* Naming con
1f830 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20  text */.    int 
1f840 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
1f850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f860 20 20 20 20 20 20 20 2f 2a 20 41 20 63 6f 75 6e         /* A coun
1f870 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ter */.    int i
1f880 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cur;            
1f890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8a0 20 20 20 20 20 20 2f 2a 20 41 20 63 75 72 73 6f        /* A curso
1f8b0 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  r number */.    
1f8c0 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73  SrcList *pSrcLis
1f8d0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1f8e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52             /* FR
1f8f0 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  OM clause */.   
1f900 20 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74   struct SrcCount
1f910 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20   *pSrcCount;    
1f920 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
1f930 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72  ounting column r
1f940 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d  eferences */.  }
1f950 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61   u;.};../* Forwa
1f960 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  rd declarations 
1f970 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  */.int sqlite3Wa
1f980 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20  lkExpr(Walker*, 
1f990 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
1f9a0 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28  te3WalkExprList(
1f9b0 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73  Walker*, ExprLis
1f9c0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1f9d0 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65  WalkSelect(Walke
1f9e0 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
1f9f0 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
1fa00 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c  ectExpr(Walker*,
1fa10 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
1fa20 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
1fa30 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65  From(Walker*, Se
1fa40 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52  lect*);../*.** R
1fa50 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20  eturn code from 
1fa60 74 68 65 20 70 61 72 73 65 2d 74 72 65 65 20 77  the parse-tree w
1fa70 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65  alking primitive
1fa80 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63  s and their.** c
1fa90 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65  allbacks..*/.#de
1faa0 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75  fine WRC_Continu
1fab0 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74  e    0   /* Cont
1fac0 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63  inue down into c
1fad0 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69  hildren */.#defi
1fae0 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20  ne WRC_Prune    
1faf0 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63     1   /* Omit c
1fb00 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74  hildren but cont
1fb10 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62  inue walking sib
1fb20 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65  lings */.#define
1fb30 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20   WRC_Abort      
1fb40 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20   2   /* Abandon 
1fb50 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f  the tree walk */
1fb60 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
1fb70 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
1fb80 63 74 75 72 65 20 72 65 70 72 65 73 65 6e 74 73  cture represents
1fb90 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72   a set of one or
1fba0 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63   more CTEs.** (c
1fbb0 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
1fbc0 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64  essions) created
1fbd0 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54   by a single WIT
1fbe0 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72  H clause..*/.str
1fbf0 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74  uct With {.  int
1fc00 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20 20   nCte;          
1fc10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1fc20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69  Number of CTEs i
1fc30 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73  n the WITH claus
1fc40 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75  e */.  With *pOu
1fc50 74 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ter;            
1fc60 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69         /* Contai
1fc70 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65  ning WITH clause
1fc80 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73  , or NULL */.  s
1fc90 74 72 75 63 74 20 43 74 65 20 7b 20 20 20 20 20  truct Cte {     
1fca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1fcb0 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45 20 69  * For each CTE i
1fcc0 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73  n the WITH claus
1fcd0 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61  e.... */.    cha
1fce0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
1fcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1fd00 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45  Name of this CTE
1fd10 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74   */.    ExprList
1fd20 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20   *pCols;        
1fd30 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
1fd40 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75  of explicit colu
1fd50 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c  mn names, or NUL
1fd60 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20  L */.    Select 
1fd70 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20  *pSelect;       
1fd80 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1fd90 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68  definition of th
1fda0 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f  is CTE */.    co
1fdb0 6e 73 74 20 63 68 61 72 20 2a 7a 45 72 72 3b 20  nst char *zErr; 
1fdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1fdd0 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66   Error message f
1fde0 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65 66 65  or circular refe
1fdf0 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b  rences */.  } a[
1fe00 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53  1];.};..#ifdef S
1fe10 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
1fe20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1fe30 20 74 68 65 20 54 72 65 65 56 69 65 77 20 6f 62   the TreeView ob
1fe40 6a 65 63 74 20 69 73 20 75 73 65 64 20 66 6f 72  ject is used for
1fe50 20 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f   printing the co
1fe60 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61  ntent of.** data
1fe70 20 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73   structures on s
1fe80 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74  qlite3DebugPrint
1fe90 66 28 29 20 75 73 69 6e 67 20 61 20 74 72 65 65  f() using a tree
1fea0 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73  -like view..*/.s
1feb0 74 72 75 63 74 20 54 72 65 65 56 69 65 77 20 7b  truct TreeView {
1fec0 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20  .  int iLevel;  
1fed0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
1fee0 69 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65  ich level of the
1fef0 20 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20   tree we are on 
1ff00 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31  */.  u8  bLine[1
1ff10 30 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  00];         /* 
1ff20 44 72 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e  Draw vertical in
1ff30 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69   column i if bLi
1ff40 6e 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f  ne[i] is true */
1ff50 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  .};.#endif /* SQ
1ff60 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f  LITE_DEBUG */../
1ff70 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49  *.** Assuming zI
1ff80 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  n points to the 
1ff90 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 20  first byte of a 
1ffa0 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c  UTF-8 character,
1ffb0 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20  .** advance zIn 
1ffc0 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20  to point to the 
1ffd0 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 74 68  first byte of th
1ffe0 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61  e next UTF-8 cha
1fff0 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  racter..*/.#defi
20000 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55  ne SQLITE_SKIP_U
20010 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20  TF8(zIn) {      
20020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20030 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e    \.  if( (*(zIn
20040 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20  ++))>=0xc0 ){   
20050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20060 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20             \.   
20070 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20   while( (*zIn & 
20080 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a  0xc0)==0x80 ){ z
20090 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20  In++; }         
200a0 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20      \.  }       
200b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200d0 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d               \.}
200e0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
200f0 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73  TE_*_BKPT macros
20100 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65 73   are substitutes
20110 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63   for the error c
20120 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65  odes with.** the
20130 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77   same name but w
20140 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54  ithout the _BKPT
20150 20 73 75 66 66 69 78 2e 20 20 54 68 65 73 65 20   suffix.  These 
20160 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a  macros invoke.**
20170 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72   routines that r
20180 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e  eport the line-n
20190 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74  umber on which t
201a0 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61  he error origina
201b0 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c  ted.** using sql
201c0 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65  ite3_log().  The
201d0 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70   routines also p
201e0 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69  rovide a conveni
201f0 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20  ent place.** to 
20200 73 65 74 20 61 20 64 65 62 75 67 67 65 72 20 62  set a debugger b
20210 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e  reakpoint..*/.in
20220 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  t sqlite3Corrupt
20230 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20  Error(int);.int 
20240 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72  sqlite3MisuseErr
20250 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  or(int);.int sql
20260 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f  ite3CantopenErro
20270 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20  r(int);.#define 
20280 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
20290 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75  KPT sqlite3Corru
202a0 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  ptError(__LINE__
202b0 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ).#define SQLITE
202c0 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c  _MISUSE_BKPT sql
202d0 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28  ite3MisuseError(
202e0 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e  __LINE__).#defin
202f0 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45  e SQLITE_CANTOPE
20300 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61  N_BKPT sqlite3Ca
20310 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49  ntopenError(__LI
20320 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54  NE__).../*.** FT
20330 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20  S4 is really an 
20340 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54  extension for FT
20350 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c  S3.  It is enabl
20360 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  ed using the.** 
20370 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
20380 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74  S3 macro.  But t
20390 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f  o avoid confusio
203a0 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a  n we also call.*
203b0 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41  * the SQLITE_ENA
203c0 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74  BLE_FTS4 macro t
203d0 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c  o serve as an al
203e0 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45 5f 45  ias for SQLITE_E
203f0 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23  NABLE_FTS3..*/.#
20400 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
20410 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26  E_ENABLE_FTS4) &
20420 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
20430 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23  E_ENABLE_FTS3).#
20440 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
20450 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e  NABLE_FTS3 1.#en
20460 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63  dif../*.** The c
20470 74 79 70 65 2e 68 20 68 65 61 64 65 72 20 69 73  type.h header is
20480 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d   needed for non-
20490 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20  ASCII systems.  
204a0 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65  It is also.** ne
204b0 65 64 65 64 20 62 79 20 46 54 53 33 20 77 68 65  eded by FTS3 whe
204c0 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64  n FTS3 is includ
204d0 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61  ed in the amalga
204e0 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21  mation..*/.#if !
204f0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41  defined(SQLITE_A
20500 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28  SCII) || \.    (
20510 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
20520 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64  NABLE_FTS3) && d
20530 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d  efined(SQLITE_AM
20540 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69  ALGAMATION)).# i
20550 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e  nclude <ctype.h>
20560 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
20570 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
20580 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74  ros mimic the st
20590 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20 66  andard library f
205a0 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72  unctions toupper
205b0 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29  (),.** isspace()
205c0 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64  , isalnum(), isd
205d0 69 67 69 74 28 29 20 61 6e 64 20 69 73 78 64 69  igit() and isxdi
205e0 67 69 74 28 29 2c 20 72 65 73 70 65 63 74 69 76  git(), respectiv
205f0 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69  ely. The.** sqli
20600 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79  te versions only
20610 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20   work for ASCII 
20620 63 68 61 72 61 63 74 65 72 73 2c 20 72 65 67 61  characters, rega
20630 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65  rdless of locale
20640 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
20650 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e  TE_ASCII.# defin
20660 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72  e sqlite3Toupper
20670 28 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69  (x)  ((x)&~(sqli
20680 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
20690 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
206a0 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20  0x20)).# define 
206b0 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78  sqlite3Isspace(x
206c0 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
206d0 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
206e0 68 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23  har)(x)]&0x01).#
206f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
20700 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c  salnum(x)   (sql
20710 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
20720 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
20730 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20  &0x06).# define 
20740 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78  sqlite3Isalpha(x
20750 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
20760 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
20770 68 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23  har)(x)]&0x02).#
20780 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
20790 73 64 69 67 69 74 28 78 29 20 20 20 28 73 71 6c  sdigit(x)   (sql
207a0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
207b0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
207c0 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20  &0x04).# define 
207d0 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28  sqlite3Isxdigit(
207e0 78 29 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  x)  (sqlite3Ctyp
207f0 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
20800 68 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23  har)(x)]&0x08).#
20810 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
20820 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c  olower(x)   (sql
20830 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72  ite3UpperToLower
20840 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
20850 28 78 29 5d 29 0a 23 65 6c 73 65 0a 23 20 64 65  (x)]).#else.# de
20860 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
20870 70 65 72 28 78 29 20 20 20 74 6f 75 70 70 65 72  per(x)   toupper
20880 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
20890 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
208a0 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20  lite3Isspace(x) 
208b0 20 20 69 73 73 70 61 63 65 28 28 75 6e 73 69 67    isspace((unsig
208c0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
208d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
208e0 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e  alnum(x)   isaln
208f0 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  um((unsigned cha
20900 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
20910 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78  sqlite3Isalpha(x
20920 29 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73  )   isalpha((uns
20930 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
20940 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20950 49 73 64 69 67 69 74 28 78 29 20 20 20 69 73 64  Isdigit(x)   isd
20960 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
20970 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
20980 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  e sqlite3Isxdigi
20990 74 28 78 29 20 20 69 73 78 64 69 67 69 74 28 28  t(x)  isxdigit((
209a0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
209b0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
209c0 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20  te3Tolower(x)   
209d0 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65  tolower((unsigne
209e0 64 20 63 68 61 72 29 28 78 29 29 0a 23 65 6e 64  d char)(x)).#end
209f0 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  if.int sqlite3Is
20a00 49 64 43 68 61 72 28 75 38 29 3b 0a 0a 2f 2a 0a  IdChar(u8);../*.
20a10 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63  ** Internal func
20a20 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a  tion prototypes.
20a30 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  */.#define sqlit
20a40 65 33 53 74 72 49 43 6d 70 20 73 71 6c 69 74 65  e3StrICmp sqlite
20a50 33 5f 73 74 72 69 63 6d 70 0a 69 6e 74 20 73 71  3_stricmp.int sq
20a60 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f  lite3Strlen30(co
20a70 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66  nst char*);.#def
20a80 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49  ine sqlite3StrNI
20a90 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e  Cmp sqlite3_strn
20aa0 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65  icmp..int sqlite
20ab0 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64  3MallocInit(void
20ac0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
20ad0 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a  allocEnd(void);.
20ae0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
20af0 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a  loc(u64);.void *
20b00 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72  sqlite3MallocZer
20b10 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  o(u64);.void *sq
20b20 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
20b30 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29  o(sqlite3*, u64)
20b40 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
20b50 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74  bMallocRaw(sqlit
20b60 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20  e3*, u64);.char 
20b70 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70  *sqlite3DbStrDup
20b80 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
20b90 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71  char*);.char *sq
20ba0 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73  lite3DbStrNDup(s
20bb0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
20bc0 61 72 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  ar*, u64);.void 
20bd0 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28  *sqlite3Realloc(
20be0 76 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  void*, u64);.voi
20bf0 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c  d *sqlite3DbReal
20c00 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65  locOrFree(sqlite
20c10 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34  3 *, void *, u64
20c20 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
20c30 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65  DbRealloc(sqlite
20c40 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34  3 *, void *, u64
20c50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
20c60 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20  bFree(sqlite3*, 
20c70 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
20c80 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f  te3MallocSize(vo
20c90 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
20ca0 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71  3DbMallocSize(sq
20cb0 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
20cc0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72  void *sqlite3Scr
20cd0 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b  atchMalloc(int);
20ce0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72  .void sqlite3Scr
20cf0 61 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b  atchFree(void*);
20d00 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61  .void *sqlite3Pa
20d10 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  geMalloc(int);.v
20d20 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46  oid sqlite3PageF
20d30 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  ree(void*);.void
20d40 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65   sqlite3MemSetDe
20d50 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69  fault(void);.voi
20d60 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d  d sqlite3BenignM
20d70 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20  allocHooks(void 
20d80 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20  (*)(void), void 
20d90 28 2a 29 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20  (*)(void));.int 
20da0 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c  sqlite3HeapNearl
20db0 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a  yFull(void);../*
20dc0 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77  .** On systems w
20dd0 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20  ith ample stack 
20de0 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73  space and that s
20df0 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c  upport alloca(),
20e00 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20   make.** use of 
20e10 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61  alloca() to obta
20e20 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72  in space for lar
20e30 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a  ge automatic obj
20e40 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c  ects.  By defaul
20e50 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61  t,.** obtain spa
20e60 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ce from malloc()
20e70 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f  ..**.** The allo
20e80 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76  ca() routine nev
20e90 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e  er returns NULL.
20ea0 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
20eb0 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20  e code paths.** 
20ec0 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73  that deal with s
20ed0 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
20ee0 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62  () failures to b
20ef0 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a  e unreachable..*
20f00 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
20f10 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66  USE_ALLOCA.# def
20f20 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
20f30 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
20f40 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69  alloca(N).# defi
20f50 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
20f60 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d  llocZero(D,N)  m
20f70 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c  emset(alloca(N),
20f80 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20   0, N).# define 
20f90 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
20fa0 28 44 2c 50 29 20 20 20 20 20 20 20 0a 23 65 6c  (D,P)       .#el
20fb0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
20fc0 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77  te3StackAllocRaw
20fd0 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44  (D,N)   sqlite3D
20fe0 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a  bMallocRaw(D,N).
20ff0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
21000 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44  StackAllocZero(D
21010 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61  ,N)  sqlite3DbMa
21020 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20  llocZero(D,N).# 
21030 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
21040 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20  ackFree(D,P)    
21050 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
21060 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69  (D,P).#endif..#i
21070 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
21080 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74  LE_MEMSYS3.const
21090 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
210a0 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d  hods *sqlite3Mem
210b0 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29  GetMemsys3(void)
210c0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
210d0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
210e0 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69  MSYS5.const sqli
210f0 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
21100 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65  *sqlite3MemGetMe
21110 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e  msys5(void);.#en
21120 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  dif...#ifndef SQ
21130 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a  LITE_MUTEX_OMIT.
21140 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
21150 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73  methods const *s
21160 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74  qlite3DefaultMut
21170 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69  ex(void);.  sqli
21180 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
21190 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33  s const *sqlite3
211a0 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b  NoopMutex(void);
211b0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
211c0 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c   *sqlite3MutexAl
211d0 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20  loc(int);.  int 
211e0 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74  sqlite3MutexInit
211f0 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71  (void);.  int sq
21200 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f  lite3MutexEnd(vo
21210 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 73 71 6c  id);.#endif..sql
21220 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74  ite3_int64 sqlit
21230 65 33 53 74 61 74 75 73 56 61 6c 75 65 28 69 6e  e3StatusValue(in
21240 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21250 53 74 61 74 75 73 55 70 28 69 6e 74 2c 20 69 6e  StatusUp(int, in
21260 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21270 53 74 61 74 75 73 44 6f 77 6e 28 69 6e 74 2c 20  StatusDown(int, 
21280 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21290 65 33 53 74 61 74 75 73 53 65 74 28 69 6e 74 2c  e3StatusSet(int,
212a0 20 69 6e 74 29 3b 0a 0a 2f 2a 20 41 63 63 65 73   int);../* Acces
212b0 73 20 74 6f 20 6d 75 74 65 78 65 73 20 75 73 65  s to mutexes use
212c0 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73 74 61  d by sqlite3_sta
212d0 74 75 73 28 29 20 2a 2f 0a 73 71 6c 69 74 65 33  tus() */.sqlite3
212e0 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 50  _mutex *sqlite3P
212f0 63 61 63 68 65 31 4d 75 74 65 78 28 76 6f 69 64  cache1Mutex(void
21300 29 3b 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  );.sqlite3_mutex
21310 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d   *sqlite3MallocM
21320 75 74 65 78 28 76 6f 69 64 29 3b 0a 0a 23 69 66  utex(void);..#if
21330 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
21340 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
21350 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e    int sqlite3IsN
21360 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73  aN(double);.#els
21370 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
21380 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65  e3IsNaN(X)  0.#e
21390 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
213a0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
213b0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
213c0 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61  re holds informa
213d0 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a  tion about SQL.*
213e0 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75  * functions argu
213f0 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65 20 74  ments that are t
21400 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  he parameters to
21410 20 74 68 65 20 70 72 69 6e 74 66 28 29 20 66 75   the printf() fu
21420 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  nction..*/.struc
21430 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  t PrintfArgument
21440 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20  s {.  int nArg; 
21450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21460 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  * Total number o
21470 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
21480 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20   int nUsed;     
21490 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
214a0 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
214b0 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
214c0 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
214d0 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68  **apArg;   /* Th
214e0 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65  e argument value
214f0 73 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65  s */.};..#define
21500 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49   SQLITE_PRINTF_I
21510 4e 54 45 52 4e 41 4c 20 30 78 30 31 0a 23 64 65  NTERNAL 0x01.#de
21520 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
21530 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32  TF_SQLFUNC  0x02
21540 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50  .void sqlite3VXP
21550 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c  rintf(StrAccum*,
21560 20 75 33 32 2c 20 63 6f 6e 73 74 20 63 68 61 72   u32, const char
21570 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f 69  *, va_list);.voi
21580 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66  d sqlite3XPrintf
21590 28 53 74 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c  (StrAccum*, u32,
215a0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
215b0 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  .);.char *sqlite
215c0 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  3MPrintf(sqlite3
215d0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  *,const char*, .
215e0 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ..);.char *sqlit
215f0 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74  e3VMPrintf(sqlit
21600 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
21610 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66 20 64   va_list);.#if d
21620 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
21630 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
21640 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
21650 52 41 43 45 29 0a 20 20 76 6f 69 64 20 73 71 6c  RACE).  void sql
21660 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
21670 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
21680 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  );.#endif.#if de
21690 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
216a0 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  T).  void *sqlit
216b0 65 33 54 65 73 74 54 65 78 74 54 6f 50 74 72 28  e3TestTextToPtr(
216c0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
216d0 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65  ndif..#if define
216e0 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a  d(SQLITE_DEBUG).
216f0 20 20 54 72 65 65 56 69 65 77 20 2a 73 71 6c 69    TreeView *sqli
21700 74 65 33 54 72 65 65 56 69 65 77 50 75 73 68 28  te3TreeViewPush(
21710 54 72 65 65 56 69 65 77 2a 2c 75 38 29 3b 0a 20  TreeView*,u8);. 
21720 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
21730 65 56 69 65 77 50 6f 70 28 54 72 65 65 56 69 65  eViewPop(TreeVie
21740 77 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  w*);.  void sqli
21750 74 65 33 54 72 65 65 56 69 65 77 4c 69 6e 65 28  te3TreeViewLine(
21760 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
21770 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20   char*, ...);.  
21780 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
21790 56 69 65 77 49 74 65 6d 28 54 72 65 65 56 69 65  ViewItem(TreeVie
217a0 77 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  w*, const char*,
217b0 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c   u8);.  void sql
217c0 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72  ite3TreeViewExpr
217d0 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
217e0 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20  t Expr*, u8);.  
217f0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
21800 56 69 65 77 45 78 70 72 4c 69 73 74 28 54 72 65  ViewExprList(Tre
21810 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78  eView*, const Ex
21820 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e  prList*, u8, con
21830 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
21840 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
21850 77 53 65 6c 65 63 74 28 54 72 65 65 56 69 65 77  wSelect(TreeView
21860 2a 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a  *, const Select*
21870 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a  , u8);.#endif...
21880 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53  void sqlite3SetS
21890 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73  tring(char **, s
218a0 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63  qlite3*, const c
218b0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
218c0 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73  te3ErrorMsg(Pars
218d0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
218e0 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74   ...);.int sqlit
218f0 65 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29  e3Dequote(char*)
21900 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79  ;.int sqlite3Key
21910 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75  wordCode(const u
21920 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69  nsigned char*, i
21930 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
21940 52 75 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a  RunParser(Parse*
21950 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
21960 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  har **);.void sq
21970 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e  lite3FinishCodin
21980 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73  g(Parse*);.int s
21990 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65 67  qlite3GetTempReg
219a0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
219b0 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d  qlite3ReleaseTem
219c0 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29  pReg(Parse*,int)
219d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
219e0 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a  TempRange(Parse*
219f0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
21a00 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61  te3ReleaseTempRa
21a10 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69  nge(Parse*,int,i
21a20 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21a30 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63  3ClearTempRegCac
21a40 68 65 28 50 61 72 73 65 2a 29 3b 0a 45 78 70 72  he(Parse*);.Expr
21a50 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c   *sqlite3ExprAll
21a60 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  oc(sqlite3*,int,
21a70 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74  const Token*,int
21a80 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
21a90 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  Expr(sqlite3*,in
21aa0 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
21ab0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
21ac0 41 74 74 61 63 68 53 75 62 74 72 65 65 73 28 73  AttachSubtrees(s
21ad0 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78  qlite3*,Expr*,Ex
21ae0 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72  pr*,Expr*);.Expr
21af0 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28 50   *sqlite3PExpr(P
21b00 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72  arse*, int, Expr
21b10 2a 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20  *, Expr*, const 
21b20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73  Token*);.Expr *s
21b30 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73 71  qlite3ExprAnd(sq
21b40 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78  lite3*,Expr*, Ex
21b50 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
21b60 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28  te3ExprFunction(
21b70 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
21b80 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
21b90 73 71 6c 69 74 65 33 45 78 70 72 41 73 73 69 67  sqlite3ExprAssig
21ba0 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65  nVarNumber(Parse
21bb0 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
21bc0 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74  sqlite3ExprDelet
21bd0 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72  e(sqlite3*, Expr
21be0 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  *);.ExprList *sq
21bf0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70  lite3ExprListApp
21c00 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  end(Parse*,ExprL
21c10 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69  ist*,Expr*);.voi
21c20 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
21c30 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c  tSetName(Parse*,
21c40 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a  ExprList*,Token*
21c50 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
21c60 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 70  te3ExprListSetSp
21c70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  an(Parse*,ExprLi
21c80 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a  st*,ExprSpan*);.
21c90 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
21ca0 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
21cb0 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  e3*, ExprList*);
21cc0 0a 75 33 32 20 73 71 6c 69 74 65 33 45 78 70 72  .u32 sqlite3Expr
21cd0 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e 73 74 20  ListFlags(const 
21ce0 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
21cf0 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69  sqlite3Init(sqli
21d00 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69  te3*, char**);.i
21d10 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  nt sqlite3InitCa
21d20 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e  llback(void*, in
21d30 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a  t, char**, char*
21d40 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21d50 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f  Pragma(Parse*,To
21d60 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  ken*,Token*,Toke
21d70 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  n*,int);.void sq
21d80 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
21d90 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
21da0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
21db0 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65   sqlite3ResetOne
21dc0 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c  Schema(sqlite3*,
21dd0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21de0 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61  e3CollapseDataba
21df0 73 65 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a  seArray(sqlite3*
21e00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
21e10 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a  eginParse(Parse*
21e20 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
21e30 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61  te3CommitInterna
21e40 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  lChanges(sqlite3
21e50 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
21e60 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c  e3ResultSetOfSel
21e70 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63  ect(Parse*,Selec
21e80 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
21e90 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65  3OpenMasterTable
21ea0 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a  (Parse *, int);.
21eb0 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72  Index *sqlite3Pr
21ec0 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61  imaryKeyIndex(Ta
21ed0 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74  ble*);.i16 sqlit
21ee0 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28  e3ColumnOfIndex(
21ef0 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f  Index*, i16);.vo
21f00 69 64 20 73 71 6c 69 74 65 33 53 74 61 72 74 54  id sqlite3StartT
21f10 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  able(Parse*,Toke
21f20 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e  n*,Token*,int,in
21f30 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  t,int,int);.void
21f40 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d   sqlite3AddColum
21f50 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29  n(Parse*,Token*)
21f60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
21f70 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c  dNotNull(Parse*,
21f80 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
21f90 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79  te3AddPrimaryKey
21fa0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
21fb0 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  t*, int, int, in
21fc0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21fd0 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69  AddCheckConstrai
21fe0 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  nt(Parse*, Expr*
21ff0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
22000 64 64 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72  ddColumnType(Par
22010 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  se*,Token*);.voi
22020 64 20 73 71 6c 69 74 65 33 41 64 64 44 65 66 61  d sqlite3AddDefa
22030 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c  ultValue(Parse*,
22040 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64  ExprSpan*);.void
22050 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61   sqlite3AddColla
22060 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54  teType(Parse*, T
22070 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
22080 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72  ite3EndTable(Par
22090 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
220a0 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69  *,u8,Select*);.i
220b0 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 55  nt sqlite3ParseU
220c0 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  ri(const char*,c
220d0 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67  onst char*,unsig
220e0 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20  ned int*,.      
220f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
22100 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72  lite3_vfs**,char
22110 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72  **,char **);.Btr
22120 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d  ee *sqlite3DbNam
22130 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33  eToBtree(sqlite3
22140 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
22150 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 4f  int sqlite3CodeO
22160 6e 63 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 23  nce(Parse *);..#
22170 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
22180 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23  T_BUILTIN_TEST.#
22190 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46   define sqlite3F
221a0 61 75 6c 74 53 69 6d 28 58 29 20 53 51 4c 49 54  aultSim(X) SQLIT
221b0 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74  E_OK.#else.  int
221c0 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
221d0 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42  (int);.#endif..B
221e0 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33 42 69  itvec *sqlite3Bi
221f0 74 76 65 63 43 72 65 61 74 65 28 75 33 32 29 3b  tvecCreate(u32);
22200 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
22210 65 63 54 65 73 74 28 42 69 74 76 65 63 2a 2c 20  ecTest(Bitvec*, 
22220 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
22230 33 42 69 74 76 65 63 53 65 74 28 42 69 74 76 65  3BitvecSet(Bitve
22240 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73  c*, u32);.void s
22250 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65 61  qlite3BitvecClea
22260 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20  r(Bitvec*, u32, 
22270 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
22280 69 74 65 33 42 69 74 76 65 63 44 65 73 74 72 6f  ite3BitvecDestro
22290 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20  y(Bitvec*);.u32 
222a0 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a  sqlite3BitvecSiz
222b0 65 28 42 69 74 76 65 63 2a 29 3b 0a 69 6e 74 20  e(Bitvec*);.int 
222c0 73 71 6c 69 74 65 33 42 69 74 76 65 63 42 75 69  sqlite3BitvecBui
222d0 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74  ltinTest(int,int
222e0 2a 29 3b 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c  *);..RowSet *sql
222f0 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28 73  ite3RowSetInit(s
22300 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c 20  qlite3*, void*, 
22310 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a 76  unsigned int);.v
22320 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65  oid sqlite3RowSe
22330 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a 29 3b  tClear(RowSet*);
22340 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
22350 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74  SetInsert(RowSet
22360 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  *, i64);.int sql
22370 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 52  ite3RowSetTest(R
22380 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61 74  owSet*, int iBat
22390 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71  ch, i64);.int sq
223a0 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28  lite3RowSetNext(
223b0 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a  RowSet*, i64*);.
223c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65  .void sqlite3Cre
223d0 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54  ateView(Parse*,T
223e0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  oken*,Token*,Tok
223f0 65 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c  en*,Select*,int,
22400 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69  int);..#if !defi
22410 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
22420 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65  VIEW) || !define
22430 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
22440 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e  RTUALTABLE).  in
22450 74 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74  t sqlite3ViewGet
22460 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73  ColumnNames(Pars
22470 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73  e*,Table*);.#els
22480 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
22490 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e  e3ViewGetColumnN
224a0 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64  ames(A,B) 0.#end
224b0 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  if..#if SQLITE_M
224c0 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20  AX_ATTACHED>30. 
224d0 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61   int sqlite3DbMa
224e0 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73  skAllZero(yDbMas
224f0 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  k);.#endif.void 
22500 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65  sqlite3DropTable
22510 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
22520 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
22530 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72  id sqlite3CodeDr
22540 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  opTable(Parse*, 
22550 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
22560 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
22570 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
22580 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69  e3*, Table*);.#i
22590 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
225a0 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
225b0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
225c0 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e  toincrementBegin
225d0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
225e0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
225f0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
22600 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
22610 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
22620 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
22630 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65  entBegin(X).# de
22640 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f  fine sqlite3Auto
22650 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a  incrementEnd(X).
22660 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
22670 74 65 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a  te3Insert(Parse*
22680 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65  , SrcList*, Sele
22690 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e  ct*, IdList*, in
226a0 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
226b0 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73  3ArrayAllocate(s
226c0 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e  qlite3*,void*,in
226d0 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64  t,int*,int*);.Id
226e0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c  List *sqlite3IdL
226f0 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65  istAppend(sqlite
22700 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b  3*, IdList*, Tok
22710 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
22720 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c  3IdListIndex(IdL
22730 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ist*,const char*
22740 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
22750 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67  te3SrcListEnlarg
22760 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  e(sqlite3*, SrcL
22770 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
22780 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
22790 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73  3SrcListAppend(s
227a0 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
227b0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
227c0 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  *);.SrcList *sql
227d0 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e  ite3SrcListAppen
227e0 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a  dFromTerm(Parse*
227f0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
22800 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20  n*, Token*,.    
22810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22830 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74    Token*, Select
22840 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74  *, Expr*, IdList
22850 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22860 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79  SrcListIndexedBy
22870 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73  (Parse *, SrcLis
22880 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69  t *, Token *);.i
22890 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65  nt sqlite3Indexe
228a0 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20  dByLookup(Parse 
228b0 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69 73  *, struct SrcLis
228c0 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20  t_item *);.void 
228d0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68  sqlite3SrcListSh
228e0 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c  iftJoinType(SrcL
228f0 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
22900 74 65 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e  te3SrcListAssign
22910 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20  Cursors(Parse*, 
22920 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20  SrcList*);.void 
22930 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c  sqlite3IdListDel
22940 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64  ete(sqlite3*, Id
22950 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
22960 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74  ite3SrcListDelet
22970 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  e(sqlite3*, SrcL
22980 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71  ist*);.Index *sq
22990 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64  lite3AllocateInd
229a0 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33  exObject(sqlite3
229b0 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a  *,i16,int,char**
229c0 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
229d0 33 43 72 65 61 74 65 49 6e 64 65 78 28 50 61 72  3CreateIndex(Par
229e0 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
229f0 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c  *,SrcList*,ExprL
22a00 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c  ist*,int,Token*,
22a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22a20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a             Expr*
22a30 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
22a40 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64  d sqlite3DropInd
22a50 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  ex(Parse*, SrcLi
22a60 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  st*, int);.int s
22a70 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61 72  qlite3Select(Par
22a80 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65  se*, Select*, Se
22a90 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65  lectDest*);.Sele
22aa0 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63  ct *sqlite3Selec
22ab0 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72  tNew(Parse*,Expr
22ac0 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  List*,SrcList*,E
22ad0 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a  xpr*,ExprList*,.
22ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22af0 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45           Expr*,E
22b00 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45 78 70  xprList*,u16,Exp
22b10 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  r*,Expr*);.void 
22b20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c  sqlite3SelectDel
22b30 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65  ete(sqlite3*, Se
22b40 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  lect*);.Table *s
22b50 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f  qlite3SrcListLoo
22b60 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  kup(Parse*, SrcL
22b70 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
22b80 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72  e3IsReadOnly(Par
22b90 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
22ba0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
22bb0 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  penTable(Parse*,
22bc0 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69   int iCur, int i
22bd0 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  Db, Table*, int)
22be0 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
22bf0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41  LITE_ENABLE_UPDA
22c00 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29  TE_DELETE_LIMIT)
22c10 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
22c20 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52  ITE_OMIT_SUBQUER
22c30 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  Y).Expr *sqlite3
22c40 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72 73 65  LimitWhere(Parse
22c50 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
22c60 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
22c70 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23  ,Expr*,char*);.#
22c80 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
22c90 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72  e3DeleteFrom(Par
22ca0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45  se*, SrcList*, E
22cb0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
22cc0 74 65 33 55 70 64 61 74 65 28 50 61 72 73 65 2a  te3Update(Parse*
22cd0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
22ce0 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  List*, Expr*, in
22cf0 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73  t);.WhereInfo *s
22d00 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e  qlite3WhereBegin
22d10 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a  (Parse*,SrcList*
22d20 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
22d30 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69  ,ExprList*,u16,i
22d40 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
22d50 33 57 68 65 72 65 45 6e 64 28 57 68 65 72 65 49  3WhereEnd(WhereI
22d60 6e 66 6f 2a 29 3b 0a 75 36 34 20 73 71 6c 69 74  nfo*);.u64 sqlit
22d70 65 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77  e3WhereOutputRow
22d80 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a  Count(WhereInfo*
22d90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
22da0 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 57 68  ereIsDistinct(Wh
22db0 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
22dc0 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72 64  qlite3WhereIsOrd
22dd0 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  ered(WhereInfo*)
22de0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
22df0 72 65 49 73 53 6f 72 74 65 64 28 57 68 65 72 65  reIsSorted(Where
22e00 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
22e10 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65  te3WhereContinue
22e20 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a  Label(WhereInfo*
22e30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
22e40 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68  ereBreakLabel(Wh
22e50 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
22e60 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65  qlite3WhereOkOne
22e70 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c  Pass(WhereInfo*,
22e80 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
22e90 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
22ea0 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62  lumn(Parse*, Tab
22eb0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
22ec0 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  nt, u8);.void sq
22ed0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
22ee0 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64  ColumnOfTable(Vd
22ef0 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  be*, Table*, int
22f00 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
22f10 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
22f20 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e  eMove(Parse*, in
22f30 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
22f40 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
22f50 63 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a 2c  cheStore(Parse*,
22f60 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
22f70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
22f80 72 43 61 63 68 65 50 75 73 68 28 50 61 72 73 65  rCachePush(Parse
22f90 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22fa0 45 78 70 72 43 61 63 68 65 50 6f 70 28 50 61 72  ExprCachePop(Par
22fb0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
22fc0 65 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f 76  e3ExprCacheRemov
22fd0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
22fe0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
22ff0 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72 28  3ExprCacheClear(
23000 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
23010 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 41 66  lite3ExprCacheAf
23020 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61 72  finityChange(Par
23030 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
23040 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23050 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70  Code(Parse*, Exp
23060 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
23070 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46 61  qlite3ExprCodeFa
23080 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c  ctorable(Parse*,
23090 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
230a0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
230b0 64 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c  deAtInit(Parse*,
230c0 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38 29   Expr*, int, u8)
230d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
230e0 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a  rCodeTemp(Parse*
230f0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  , Expr*, int*);.
23100 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
23110 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65 2a  odeTarget(Parse*
23120 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
23130 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
23140 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73  odeAndCache(Pars
23150 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
23160 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
23170 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72  CodeExprList(Par
23180 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
23190 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e  int, u8);.#defin
231a0 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55  e SQLITE_ECEL_DU
231b0 50 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20  P      0x01  /* 
231c0 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f  Deep, not shallo
231d0 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66  w copies */.#def
231e0 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
231f0 46 41 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f  FACTOR   0x02  /
23200 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e  * Factor out con
23210 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 76  stant terms */.v
23220 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
23230 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78  fTrue(Parse*, Ex
23240 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
23250 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23260 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20  IfFalse(Parse*, 
23270 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
23280 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
23290 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65  FindTable(sqlite
232a0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
232b0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61  const char*);.Ta
232c0 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  ble *sqlite3Loca
232d0 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 69  teTable(Parse*,i
232e0 6e 74 20 69 73 56 69 65 77 2c 63 6f 6e 73 74 20  nt isView,const 
232f0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
23300 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  r*);.Table *sqli
23310 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74  te3LocateTableIt
23320 65 6d 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73  em(Parse*,int is
23330 56 69 65 77 2c 73 74 72 75 63 74 20 53 72 63 4c  View,struct SrcL
23340 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64  ist_item *);.Ind
23350 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49  ex *sqlite3FindI
23360 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f  ndex(sqlite3*,co
23370 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
23380 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
23390 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
233a0 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65  leteTable(sqlite
233b0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
233c0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
233d0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
233e0 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69  Index(sqlite3*,i
233f0 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
23400 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63  .void sqlite3Vac
23410 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74  uum(Parse*);.int
23420 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75   sqlite3RunVacuu
23430 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65  m(char**, sqlite
23440 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  3*);.char *sqlit
23450 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28  e3NameFromToken(
23460 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a  sqlite3*, Token*
23470 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
23480 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c  prCompare(Expr*,
23490 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
234a0 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  t sqlite3ExprLis
234b0 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73  tCompare(ExprLis
234c0 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  t*, ExprList*, i
234d0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
234e0 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28  ExprImpliesExpr(
234f0 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
23500 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
23510 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65  ExprAnalyzeAggre
23520 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  gates(NameContex
23530 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
23540 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c   sqlite3ExprAnal
23550 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43  yzeAggList(NameC
23560 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74  ontext*,ExprList
23570 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
23580 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53  unctionUsesThisS
23590 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73  rc(Expr*, SrcLis
235a0 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74  t*);.Vdbe *sqlit
235b0 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65 2a  e3GetVdbe(Parse*
235c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
235d0 72 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f 69  rngSaveState(voi
235e0 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
235f0 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65  PrngRestoreState
23600 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
23610 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28  ite3RollbackAll(
23620 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
23630 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56  oid sqlite3CodeV
23640 65 72 69 66 79 53 63 68 65 6d 61 28 50 61 72 73  erifySchema(Pars
23650 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
23660 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
23670 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73  NamedSchema(Pars
23680 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  e*, const char *
23690 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  zDb);.void sqlit
236a0 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69  e3BeginTransacti
236b0 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  on(Parse*, int);
236c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
236d0 6d 69 74 54 72 61 6e 73 61 63 74 69 6f 6e 28 50  mitTransaction(P
236e0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
236f0 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e  ite3RollbackTran
23700 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b  saction(Parse*);
23710 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76  .void sqlite3Sav
23720 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  epoint(Parse*, i
23730 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  nt, Token*);.voi
23740 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61  d sqlite3CloseSa
23750 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33  vepoints(sqlite3
23760 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
23770 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c  3LeaveMutexAndCl
23780 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65  oseZombie(sqlite
23790 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
237a0 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45  ExprIsConstant(E
237b0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
237c0 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
237d0 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a  NotJoin(Expr*);.
237e0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
237f0 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74  sConstantOrFunct
23800 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a  ion(Expr*, u8);.
23810 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
23820 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45  sTableConstant(E
23830 78 70 72 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  xpr*,int);.int s
23840 71 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74 65  qlite3ExprIsInte
23850 67 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29  ger(Expr*, int*)
23860 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
23870 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74  rCanBeNull(const
23880 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
23890 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41  ite3ExprNeedsNoA
238a0 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f  ffinityChange(co
238b0 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29  nst Expr*, char)
238c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52  ;.int sqlite3IsR
238d0 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a  owid(const char*
238e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
238f0 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65  enerateRowDelete
23900 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54  (Parse*,Table*,T
23910 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c  rigger*,int,int,
23920 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38  int,i16,u8,u8,u8
23930 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
23940 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44  enerateRowIndexD
23950 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61  elete(Parse*, Ta
23960 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
23970 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
23980 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b  e3GenerateIndexK
23990 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78  ey(Parse*, Index
239a0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
239b0 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e  , int*,Index*,in
239c0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
239d0 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61  ResolvePartIdxLa
239e0 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  bel(Parse*,int);
239f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
23a00 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43  erateConstraintC
23a10 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62  hecks(Parse*,Tab
23a20 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74  le*,int*,int,int
23a30 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20  ,int,int,.      
23a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
23a60 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a  8,u8,int,int*);.
23a70 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70  void sqlite3Comp
23a80 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61  leteInsertion(Pa
23a90 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c  rse*,Table*,int,
23aa0 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74  int,int,int*,int
23ab0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  ,int,int);.int s
23ac0 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41  qlite3OpenTableA
23ad0 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a  ndIndices(Parse*
23ae0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
23af0 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69  nt, u8*, int*, i
23b00 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  nt*);.void sqlit
23b10 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72  e3BeginWriteOper
23b20 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e  ation(Parse*, in
23b30 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
23b40 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28  lite3MultiWrite(
23b50 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
23b60 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61  lite3MayAbort(Pa
23b70 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
23b80 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e  te3HaltConstrain
23b90 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  t(Parse*, int, i
23ba0 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75  nt, char*, i8, u
23bb0 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
23bc0 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74  UniqueConstraint
23bd0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e  (Parse*, int, In
23be0 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
23bf0 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69  te3RowidConstrai
23c00 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
23c10 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73  Table*);.Expr *s
23c20 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 73 71  qlite3ExprDup(sq
23c30 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74  lite3*,Expr*,int
23c40 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c  );.ExprList *sql
23c50 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70 28  ite3ExprListDup(
23c60 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73  sqlite3*,ExprLis
23c70 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74  t*,int);.SrcList
23c80 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
23c90 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63  Dup(sqlite3*,Src
23ca0 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69  List*,int);.IdLi
23cb0 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73  st *sqlite3IdLis
23cc0 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64  tDup(sqlite3*,Id
23cd0 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a  List*);.Select *
23ce0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70  sqlite3SelectDup
23cf0 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74  (sqlite3*,Select
23d00 2a 2c 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c 45  *,int);.#if SELE
23d10 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a  CTTRACE_ENABLED.
23d20 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
23d30 63 74 53 65 74 4e 61 6d 65 28 53 65 6c 65 63 74  ctSetName(Select
23d40 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
23d50 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
23d60 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e  qlite3SelectSetN
23d70 61 6d 65 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a  ame(A,B).#endif.
23d80 76 6f 69 64 20 73 71 6c 69 74 65 33 46 75 6e 63  void sqlite3Func
23d90 44 65 66 49 6e 73 65 72 74 28 46 75 6e 63 44 65  DefInsert(FuncDe
23da0 66 48 61 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a  fHash*, FuncDef*
23db0 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69  );.FuncDef *sqli
23dc0 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28  te3FindFunction(
23dd0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
23de0 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c  har*,int,int,u8,
23df0 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
23e00 33 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e  3RegisterBuiltin
23e10 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65  Functions(sqlite
23e20 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
23e30 33 52 65 67 69 73 74 65 72 44 61 74 65 54 69 6d  3RegisterDateTim
23e40 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  eFunctions(void)
23e50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
23e60 67 69 73 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63  gisterGlobalFunc
23e70 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74  tions(void);.int
23e80 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
23e90 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b  eckOk(sqlite3*);
23ea0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
23eb0 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28  tyCheckSickOrOk(
23ec0 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
23ed0 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f  sqlite3ChangeCoo
23ee0 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  kie(Parse*, int)
23ef0 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ;..#if !defined(
23f00 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57  SQLITE_OMIT_VIEW
23f10 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
23f20 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
23f30 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  R).void sqlite3M
23f40 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50  aterializeView(P
23f50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
23f60 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64  xpr*, int);.#end
23f70 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
23f80 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a  TE_OMIT_TRIGGER.
23f90 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65    void sqlite3Be
23fa0 67 69 6e 54 72 69 67 67 65 72 28 50 61 72 73 65  ginTrigger(Parse
23fb0 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  *, Token*,Token*
23fc0 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a  ,int,int,IdList*
23fd0 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20  ,SrcList*,.     
23fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ff0 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c        Expr*,int,
24000 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
24010 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69 67 67  lite3FinishTrigg
24020 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
24030 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29  erStep*, Token*)
24040 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
24050 44 72 6f 70 54 72 69 67 67 65 72 28 50 61 72 73  DropTrigger(Pars
24060 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
24070 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
24080 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72  e3DropTriggerPtr
24090 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
240a0 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73  *);.  Trigger *s
240b0 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78  qlite3TriggersEx
240c0 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62  ist(Parse *, Tab
240d0 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  le*, int, ExprLi
240e0 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29  st*, int *pMask)
240f0 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c  ;.  Trigger *sql
24100 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28  ite3TriggerList(
24110 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a  Parse *, Table *
24120 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
24130 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28  3CodeRowTrigger(
24140 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20  Parse*, Trigger 
24150 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
24160 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c  *, int, Table *,
24170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24180 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
24190 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  , int, int);.  v
241a0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52  oid sqlite3CodeR
241b0 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28  owTriggerDirect(
241c0 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72  Parse *, Trigger
241d0 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74   *, Table *, int
241e0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  , int, int);.  v
241f0 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77 54 72  oid sqliteViewTr
24200 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54  iggers(Parse*, T
24210 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  able*, Expr*, in
24220 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20  t, ExprList*);. 
24230 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c   void sqlite3Del
24240 65 74 65 54 72 69 67 67 65 72 53 74 65 70 28 73  eteTriggerStep(s
24250 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72  qlite3*, Trigger
24260 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65  Step*);.  Trigge
24270 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
24280 69 67 67 65 72 53 65 6c 65 63 74 53 74 65 70 28  iggerSelectStep(
24290 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a  sqlite3*,Select*
242a0 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
242b0 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
242c0 49 6e 73 65 72 74 53 74 65 70 28 73 71 6c 69 74  InsertStep(sqlit
242d0 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69  e3*,Token*, IdLi
242e0 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
242f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24300 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65 6c               Sel
24310 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67  ect*,u8);.  Trig
24320 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
24330 54 72 69 67 67 65 72 55 70 64 61 74 65 53 74 65  TriggerUpdateSte
24340 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
24350 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  *,ExprList*, Exp
24360 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69 67 67  r*, u8);.  Trigg
24370 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
24380 72 69 67 67 65 72 44 65 6c 65 74 65 53 74 65 70  riggerDeleteStep
24390 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a  (sqlite3*,Token*
243a0 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64  , Expr*);.  void
243b0 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
243c0 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 20  igger(sqlite3*, 
243d0 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69  Trigger*);.  voi
243e0 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  d sqlite3UnlinkA
243f0 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  ndDeleteTrigger(
24400 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
24410 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33 32  st char*);.  u32
24420 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
24430 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54 72  olmask(Parse*,Tr
24440 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a  igger*,ExprList*
24450 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c  ,int,int,Table*,
24460 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 73  int);.# define s
24470 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65  qlite3ParseTople
24480 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f  vel(p) ((p)->pTo
24490 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54  plevel ? (p)->pT
244a0 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a 23  oplevel : (p)).#
244b0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
244c0 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69  lite3TriggersExi
244d0 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a  st(B,C,D,E,F) 0.
244e0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
244f0 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c  DeleteTrigger(A,
24500 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
24510 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74  te3DropTriggerPt
24520 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20  r(A,B).# define 
24530 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
24540 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c  DeleteTrigger(A,
24550 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71  B,C).# define sq
24560 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
24570 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c  ger(A,B,C,D,E,F,
24580 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20  G,H,I).# define 
24590 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
245a0 69 67 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c  iggerDirect(A,B,
245b0 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e  C,D,E,F).# defin
245c0 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
245d0 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64  List(X, Y) 0.# d
245e0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72  efine sqlite3Par
245f0 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a  seToplevel(p) p.
24600 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24610 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41  TriggerColmask(A
24620 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a  ,B,C,D,E,F,G) 0.
24630 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69  #endif..int sqli
24640 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73  te3JoinType(Pars
24650 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
24660 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  n*, Token*);.voi
24670 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46  d sqlite3CreateF
24680 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
24690 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b  , ExprList*, Tok
246a0 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  en*, ExprList*, 
246b0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
246c0 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65  e3DeferForeignKe
246d0 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  y(Parse*, int);.
246e0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
246f0 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f  MIT_AUTHORIZATIO
24700 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  N.  void sqlite3
24710 41 75 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c  AuthRead(Parse*,
24720 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72  Expr*,Schema*,Sr
24730 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73  cList*);.  int s
24740 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28  qlite3AuthCheck(
24750 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73  Parse*,int, cons
24760 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
24770 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
24780 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
24790 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73  e3AuthContextPus
247a0 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f  h(Parse*, AuthCo
247b0 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68  ntext*, const ch
247c0 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
247d0 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
247e0 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29  op(AuthContext*)
247f0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41  ;.  int sqlite3A
24800 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65  uthReadCol(Parse
24810 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
24820 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
24830 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  nt);.#else.# def
24840 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 52  ine sqlite3AuthR
24850 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64  ead(a,b,c,d).# d
24860 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
24870 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65  hCheck(a,b,c,d,e
24880 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  )    SQLITE_OK.#
24890 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
248a0 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61  uthContextPush(a
248b0 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73  ,b,c).# define s
248c0 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
248d0 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29  tPop(a)  ((void)
248e0 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  (a)).#endif.void
248f0 20 73 71 6c 69 74 65 33 41 74 74 61 63 68 28 50   sqlite3Attach(P
24900 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78  arse*, Expr*, Ex
24910 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  pr*, Expr*);.voi
24920 64 20 73 71 6c 69 74 65 33 44 65 74 61 63 68 28  d sqlite3Detach(
24930 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
24940 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 78 49  void sqlite3FixI
24950 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61  nit(DbFixer*, Pa
24960 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  rse*, int, const
24970 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   char*, const To
24980 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
24990 65 33 46 69 78 53 72 63 4c 69 73 74 28 44 62 46  e3FixSrcList(DbF
249a0 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29  ixer*, SrcList*)
249b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
249c0 53 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c  Select(DbFixer*,
249d0 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
249e0 71 6c 69 74 65 33 46 69 78 45 78 70 72 28 44 62  qlite3FixExpr(Db
249f0 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  Fixer*, Expr*);.
24a00 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78  int sqlite3FixEx
24a10 70 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c  prList(DbFixer*,
24a20 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
24a30 20 73 71 6c 69 74 65 33 46 69 78 54 72 69 67 67   sqlite3FixTrigg
24a40 65 72 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c  erStep(DbFixer*,
24a50 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a   TriggerStep*);.
24a60 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28  int sqlite3AtoF(
24a70 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64  const char *z, d
24a80 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29  ouble*, int, u8)
24a90 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
24aa0 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72  Int32(const char
24ab0 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73   *, int*);.int s
24ac0 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74  qlite3Atoi(const
24ad0 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
24ae0 69 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e  ite3Utf16ByteLen
24af0 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61  (const void *pDa
24b00 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a  ta, int nChar);.
24b10 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 43  int sqlite3Utf8C
24b20 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61  harLen(const cha
24b30 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42  r *pData, int nB
24b40 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  yte);.u32 sqlite
24b50 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20  3Utf8Read(const 
24b60 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71  u8**);.LogEst sq
24b70 6c 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34 29  lite3LogEst(u64)
24b80 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  ;.LogEst sqlite3
24b90 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73 74  LogEstAdd(LogEst
24ba0 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64 65  ,LogEst);.#ifnde
24bb0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
24bc0 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73  RTUALTABLE.LogEs
24bd0 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46  t sqlite3LogEstF
24be0 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65  romDouble(double
24bf0 29 3b 0a 23 65 6e 64 69 66 0a 75 36 34 20 73 71  );.#endif.u64 sq
24c00 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74  lite3LogEstToInt
24c10 28 4c 6f 67 45 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a  (LogEst);../*.**
24c20 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61   Routines to rea
24c30 64 20 61 6e 64 20 77 72 69 74 65 20 76 61 72 69  d and write vari
24c40 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65  able-length inte
24c50 67 65 72 73 2e 20 20 54 68 65 73 65 20 75 73 65  gers.  These use
24c60 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e  d to.** be defin
24c70 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20  ed locally, but 
24c80 6e 6f 77 20 77 65 20 75 73 65 20 74 68 65 20 76  now we use the v
24c90 61 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69  arint routines i
24ca0 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20  n the util.c.** 
24cb0 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  file..*/.int sql
24cc0 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e  ite3PutVarint(un
24cd0 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36  signed char*, u6
24ce0 34 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65  4);.u8 sqlite3Ge
24cf0 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e  tVarint(const un
24d00 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75  signed char *, u
24d10 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65  64 *);.u8 sqlite
24d20 33 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e  3GetVarint32(con
24d30 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
24d40 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20   *, u32 *);.int 
24d50 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
24d60 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20  (u64 v);../*.** 
24d70 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  The common case 
24d80 69 73 20 66 6f 72 20 61 20 76 61 72 69 6e 74 20  is for a varint 
24d90 74 6f 20 62 65 20 61 20 73 69 6e 67 6c 65 20 62  to be a single b
24da0 79 74 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f  yte.  They follo
24db0 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68  wing.** macros h
24dc0 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e  andle the common
24dd0 20 63 61 73 65 20 77 69 74 68 6f 75 74 20 61 20   case without a 
24de0 70 72 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c 20  procedure call, 
24df0 62 75 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a  but then call.**
24e00 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 66   the procedure f
24e10 6f 72 20 6c 61 72 67 65 72 20 76 61 72 69 6e 74  or larger varint
24e20 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65  s..*/.#define ge
24e30 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20  tVarint32(A,B)  
24e40 5c 0a 20 20 28 75 38 29 28 28 2a 28 41 29 3c 28  \.  (u8)((*(A)<(
24e50 75 38 29 30 78 38 30 29 3f 28 28 42 29 3d 28 75  u8)0x80)?((B)=(u
24e60 33 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74  32)*(A)),1:sqlit
24e70 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 28 41  e3GetVarint32((A
24e80 29 2c 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a  ),(u32 *)&(B))).
24e90 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e  #define putVarin
24ea0 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75  t32(A,B)  \.  (u
24eb0 38 29 28 28 28 75 33 32 29 28 42 29 3c 28 75 33  8)(((u32)(B)<(u3
24ec0 32 29 30 78 38 30 29 3f 28 2a 28 41 29 3d 28 75  2)0x80)?(*(A)=(u
24ed0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 42 29  nsigned char)(B)
24ee0 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50  ),1:\.  sqlite3P
24ef0 75 74 56 61 72 69 6e 74 28 28 41 29 2c 28 42 29  utVarint((A),(B)
24f00 29 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61  )).#define getVa
24f10 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47  rint    sqlite3G
24f20 65 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65  etVarint.#define
24f30 20 70 75 74 56 61 72 69 6e 74 20 20 20 20 73 71   putVarint    sq
24f40 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a  lite3PutVarint..
24f50 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
24f60 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74  ite3IndexAffinit
24f70 79 53 74 72 28 56 64 62 65 20 2a 2c 20 49 6e 64  yStr(Vdbe *, Ind
24f80 65 78 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ex *);.void sqli
24f90 74 65 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79  te3TableAffinity
24fa0 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  (Vdbe*, Table*, 
24fb0 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  int);.char sqlit
24fc0 65 33 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74  e3CompareAffinit
24fd0 79 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63  y(Expr *pExpr, c
24fe0 68 61 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73  har aff2);.int s
24ff0 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e  qlite3IndexAffin
25000 69 74 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70  ityOk(Expr *pExp
25010 72 2c 20 63 68 61 72 20 69 64 78 5f 61 66 66 69  r, char idx_affi
25020 6e 69 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69  nity);.char sqli
25030 74 65 33 45 78 70 72 41 66 66 69 6e 69 74 79 28  te3ExprAffinity(
25040 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e  Expr *pExpr);.in
25050 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28  t sqlite3Atoi64(
25060 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34  const char*, i64
25070 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
25080 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78   sqlite3DecOrHex
25090 54 6f 49 36 34 28 63 6f 6e 73 74 20 63 68 61 72  ToI64(const char
250a0 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73  *, i64*);.void s
250b0 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d  qlite3ErrorWithM
250c0 73 67 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  sg(sqlite3*, int
250d0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e  , const char*,..
250e0 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .);.void sqlite3
250f0 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69  Error(sqlite3*,i
25100 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
25110 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69  e3HexToBlob(sqli
25120 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  te3*, const char
25130 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20   *z, int n);.u8 
25140 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28  sqlite3HexToInt(
25150 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69  int h);.int sqli
25160 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50  te3TwoPartName(P
25170 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c  arse *, Token *,
25180 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20   Token *, Token 
25190 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65  **);..#if define
251a0 64 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52  d(SQLITE_NEED_ER
251b0 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68  R_NAME).const ch
251c0 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61  ar *sqlite3ErrNa
251d0 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  me(int);.#endif.
251e0 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
251f0 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b  ite3ErrStr(int);
25200 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64  .int sqlite3Read
25210 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50  Schema(Parse *pP
25220 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  arse);.CollSeq *
25230 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53  sqlite3FindCollS
25240 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65  eq(sqlite3*,u8 e
25250 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nc, const char*,
25260 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  int);.CollSeq *s
25270 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c  qlite3LocateColl
25280 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
25290 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e  e, const char*zN
252a0 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  ame);.CollSeq *s
252b0 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65  qlite3ExprCollSe
252c0 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
252d0 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45   Expr *pExpr);.E
252e0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
252f0 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28  AddCollateToken(
25300 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
25310 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  xpr*, const Toke
25320 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a  n*, int);.Expr *
25330 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f  sqlite3ExprAddCo
25340 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72 73  llateString(Pars
25350 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63  e*,Expr*,const c
25360 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  har*);.Expr *sql
25370 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c  ite3ExprSkipColl
25380 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  ate(Expr*);.int 
25390 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c  sqlite3CheckColl
253a0 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c  Seq(Parse *, Col
253b0 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  lSeq *);.int sql
253c0 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e  ite3CheckObjectN
253d0 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e  ame(Parse *, con
253e0 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64  st char *);.void
253f0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
25400 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a  hanges(sqlite3 *
25410 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
25420 74 65 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a  te3AddInt64(i64*
25430 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
25440 65 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c  e3SubInt64(i64*,
25450 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
25460 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69  3MulInt64(i64*,i
25470 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
25480 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23  AbsInt32(int);.#
25490 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
254a0 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f  BLE_8_3_NAMES.vo
254b0 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75  id sqlite3FileSu
254c0 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72  ffix3(const char
254d0 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65  *, char*);.#else
254e0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
254f0 33 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59  3FileSuffix3(X,Y
25500 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69  ).#endif.u8 sqli
25510 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f  te3GetBoolean(co
25520 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b  nst char *z,u8);
25530 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71  ..const void *sq
25540 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 73  lite3ValueText(s
25550 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75  qlite3_value*, u
25560 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  8);.int sqlite3V
25570 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74 65  alueBytes(sqlite
25580 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76  3_value*, u8);.v
25590 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
255a0 53 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76  SetStr(sqlite3_v
255b0 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  alue*, int, cons
255c0 74 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20 20  t void *,u8, .  
255d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255e0 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f        void(*)(vo
255f0 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69  id*));.void sqli
25600 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28  te3ValueSetNull(
25610 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b  sqlite3_value*);
25620 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
25630 75 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76  ueFree(sqlite3_v
25640 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f  alue*);.sqlite3_
25650 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61  value *sqlite3Va
25660 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a  lueNew(sqlite3 *
25670 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
25680 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33  Utf16to8(sqlite3
25690 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c   *, const void*,
256a0 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
256b0 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45  qlite3ValueFromE
256c0 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45  xpr(sqlite3 *, E
256d0 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73  xpr *, u8, u8, s
256e0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
256f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
25700 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79  lueApplyAffinity
25710 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
25720 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64  , u8, u8);.#ifnd
25730 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ef SQLITE_AMALGA
25740 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f  MATION.extern co
25750 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
25760 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50  r sqlite3OpcodeP
25770 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72  roperty[];.exter
25780 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
25790 20 63 68 61 72 20 73 71 6c 69 74 65 33 55 70 70   char sqlite3Upp
257a0 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74  erToLower[];.ext
257b0 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
257c0 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 43  ed char sqlite3C
257d0 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72  typeMap[];.exter
257e0 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71  n const Token sq
257f0 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d  lite3IntTokens[]
25800 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f  ;.extern SQLITE_
25810 57 53 44 20 73 74 72 75 63 74 20 53 71 6c 69 74  WSD struct Sqlit
25820 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33  e3Config sqlite3
25830 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 53  Config;.extern S
25840 51 4c 49 54 45 5f 57 53 44 20 46 75 6e 63 44 65  QLITE_WSD FuncDe
25850 66 48 61 73 68 20 73 71 6c 69 74 65 33 47 6c 6f  fHash sqlite3Glo
25860 62 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69  balFunctions;.#i
25870 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
25880 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74  T_WSD.extern int
25890 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42   sqlite3PendingB
258a0 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64  yte;.#endif.#end
258b0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  if.void sqlite3R
258c0 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c  ootPageMoved(sql
258d0 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ite3*, int, int,
258e0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
258f0 74 65 33 52 65 69 6e 64 65 78 28 50 61 72 73 65  te3Reindex(Parse
25900 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
25910 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25920 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76  AlterFunctions(v
25930 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
25940 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62  e3AlterRenameTab
25950 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
25960 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  st*, Token*);.in
25970 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65  t sqlite3GetToke
25980 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n(const unsigned
25990 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b   char *, int *);
259a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73  .void sqlite3Nes
259b0 74 65 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c  tedParse(Parse*,
259c0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
259d0 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .);.void sqlite3
259e0 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
259f0 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33  atements(sqlite3
25a00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
25a10 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50 61 72  odeSubselect(Par
25a20 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e  se *, Expr *, in
25a30 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
25a40 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65 70 28  lite3SelectPrep(
25a50 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
25a60 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a   NameContext*);.
25a70 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68  int sqlite3Match
25a80 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63  SpanName(const c
25a90 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
25aa0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
25ab0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
25ac0 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
25ad0 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f  ExprNames(NameCo
25ae0 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  ntext*, Expr*);.
25af0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
25b00 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50  lveSelectNames(P
25b10 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
25b20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76  NameContext*);.v
25b30 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
25b40 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28  veSelfReference(
25b50 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
25b60 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  t,Expr*,ExprList
25b70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
25b80 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70  esolveOrderGroup
25b90 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  By(Parse*, Selec
25ba0 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  t*, ExprList*, c
25bb0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
25bc0 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44  d sqlite3ColumnD
25bd0 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54  efault(Vdbe *, T
25be0 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  able *, int, int
25bf0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
25c00 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c  lterFinishAddCol
25c10 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  umn(Parse *, Tok
25c20 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  en *);.void sqli
25c30 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64  te3AlterBeginAdd
25c40 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
25c50 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c  SrcList *);.Coll
25c60 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43  Seq *sqlite3GetC
25c70 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75  ollSeq(Parse*, u
25c80 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f  8, CollSeq *, co
25c90 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72  nst char*);.char
25ca0 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79   sqlite3Affinity
25cb0 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  Type(const char*
25cc0 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  , u8*);.void sql
25cd0 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73  ite3Analyze(Pars
25ce0 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
25cf0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
25d00 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65  InvokeBusyHandle
25d10 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b  r(BusyHandler*);
25d20 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
25d30 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b  Db(sqlite3*, Tok
25d40 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
25d50 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69  3FindDbName(sqli
25d60 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
25d70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r *);.int sqlite
25d80 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71  3AnalysisLoad(sq
25d90 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b  lite3*,int iDB);
25da0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
25db0 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28  eteIndexSamples(
25dc0 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29  sqlite3*,Index*)
25dd0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
25de0 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65  faultRowEst(Inde
25df0 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
25e00 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e  3RegisterLikeFun
25e10 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c  ctions(sqlite3*,
25e20 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
25e30 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e  e3IsLikeFunction
25e40 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
25e50 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69  int*,char*);.voi
25e60 64 20 73 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d  d sqlite3Minimum
25e70 46 69 6c 65 46 6f 72 6d 61 74 28 50 61 72 73 65  FileFormat(Parse
25e80 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
25e90 69 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  id sqlite3Schema
25ea0 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53  Clear(void *);.S
25eb0 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63  chema *sqlite3Sc
25ec0 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20  hemaGet(sqlite3 
25ed0 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74  *, Btree *);.int
25ee0 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f   sqlite3SchemaTo
25ef0 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64  Index(sqlite3 *d
25f00 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65  b, Schema *);.Ke
25f10 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
25f20 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74  yInfoAlloc(sqlit
25f30 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f  e3*,int,int);.vo
25f40 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  id sqlite3KeyInf
25f50 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29  oUnref(KeyInfo*)
25f60 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
25f70 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65 79  e3KeyInfoRef(Key
25f80 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20  Info*);.KeyInfo 
25f90 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f  *sqlite3KeyInfoO
25fa0 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 49  fIndex(Parse*, I
25fb0 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65 66 20 53  ndex*);.#ifdef S
25fc0 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20  QLITE_DEBUG.int 
25fd0 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73  sqlite3KeyInfoIs
25fe0 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66  Writeable(KeyInf
25ff0 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  o*);.#endif.int 
26000 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e  sqlite3CreateFun
26010 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  c(sqlite3 *, con
26020 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20  st char *, int, 
26030 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20  int, void *, .  
26040 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
26050 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
26060 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
26070 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
26080 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
26090 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
260a0 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c  *), void (*)(sql
260b0 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a  ite3_context*),.
260c0 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72    FuncDestructor
260d0 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b   *pDestructor.);
260e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45  .int sqlite3ApiE
260f0 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  xit(sqlite3 *db,
26100 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
26110 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61  e3OpenTempDataba
26120 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f  se(Parse *);..vo
26130 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
26140 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a  umInit(StrAccum*
26150 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72  , sqlite3*, char
26160 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
26170 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
26180 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63 75  umAppend(StrAccu
26190 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  m*,const char*,i
261a0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
261b0 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 41  3StrAccumAppendA
261c0 6c 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e  ll(StrAccum*,con
261d0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
261e0 73 71 6c 69 74 65 33 41 70 70 65 6e 64 43 68 61  sqlite3AppendCha
261f0 72 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74 2c  r(StrAccum*,int,
26200 63 68 61 72 29 3b 0a 63 68 61 72 20 2a 73 71 6c  char);.char *sql
26210 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69  ite3StrAccumFini
26220 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76  sh(StrAccum*);.v
26230 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
26240 63 75 6d 52 65 73 65 74 28 53 74 72 41 63 63 75  cumReset(StrAccu
26250 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  m*);.void sqlite
26260 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28  3SelectDestInit(
26270 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c  SelectDest*,int,
26280 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
26290 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45  te3CreateColumnE
262a0 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53  xpr(sqlite3 *, S
262b0 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69  rcList *, int, i
262c0 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74  nt);..void sqlit
262d0 65 33 42 61 63 6b 75 70 52 65 73 74 61 72 74 28  e3BackupRestart(
262e0 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a  sqlite3_backup *
262f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
26300 61 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69  ackupUpdate(sqli
26310 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67  te3_backup *, Pg
26320 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b  no, const u8 *);
26330 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
26340 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
26350 53 54 41 54 34 0a 76 6f 69 64 20 73 71 6c 69 74  STAT4.void sqlit
26360 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f  e3AnalyzeFunctio
26370 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71  ns(void);.int sq
26380 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 53  lite3Stat4ProbeS
26390 65 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 49  etValue(Parse*,I
263a0 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65  ndex*,UnpackedRe
263b0 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 75 38 2c  cord**,Expr*,u8,
263c0 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  int,int*);.int s
263d0 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c 75 65  qlite3Stat4Value
263e0 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65 2a 2c  FromExpr(Parse*,
263f0 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69   Expr*, u8, sqli
26400 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f  te3_value**);.vo
26410 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 34 50  id sqlite3Stat4P
26420 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b 65  robeFree(Unpacke
26430 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73  dRecord*);.int s
26440 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c 75 6d  qlite3Stat4Colum
26450 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73  n(sqlite3*, cons
26460 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e  t void*, int, in
26470 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  t, sqlite3_value
26480 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  **);.#endif../*.
26490 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
264a0 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65   to the LEMON-ge
264b0 6e 65 72 61 74 65 64 20 70 61 72 73 65 72 0a 2a  nerated parser.*
264c0 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50  /.void *sqlite3P
264d0 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a  arserAlloc(void*
264e0 28 2a 29 28 75 36 34 29 29 3b 0a 76 6f 69 64 20  (*)(u64));.void 
264f0 73 71 6c 69 74 65 33 50 61 72 73 65 72 46 72 65  sqlite3ParserFre
26500 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29  e(void*, void(*)
26510 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73  (void*));.void s
26520 71 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f 69  qlite3Parser(voi
26530 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20  d*, int, Token, 
26540 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20  Parse*);.#ifdef 
26550 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44  YYTRACKMAXSTACKD
26560 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74  EPTH.  int sqlit
26570 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65 61  e3ParserStackPea
26580 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66  k(void*);.#endif
26590 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75  ..void sqlite3Au
265a0 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73  toLoadExtensions
265b0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e  (sqlite3*);.#ifn
265c0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
265d0 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20  LOAD_EXTENSION. 
265e0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f   void sqlite3Clo
265f0 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c  seExtensions(sql
26600 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  ite3*);.#else.# 
26610 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c  define sqlite3Cl
26620 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29  oseExtensions(X)
26630 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
26640 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
26650 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64  RED_CACHE.  void
26660 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
26670 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20  k(Parse *, int, 
26680 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63  int, u8, const c
26690 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  har *);.#else.  
266a0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54  #define sqlite3T
266b0 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79  ableLock(v,w,x,y
266c0 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  ,z).#endif..#ifd
266d0 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
266e0 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38   int sqlite3Utf8
266f0 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61  To8(unsigned cha
26700 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
26710 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
26720 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20  VIRTUALTABLE.#  
26730 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
26740 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65  abClear(Y).#  de
26750 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
26760 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45  Sync(X,Y) SQLITE
26770 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71  _OK.#  define sq
26780 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63  lite3VtabRollbac
26790 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  k(X).#  define s
267a0 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74  qlite3VtabCommit
267b0 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
267c0 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28  lite3VtabInSync(
267d0 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20  db) 0.#  define 
267e0 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28  sqlite3VtabLock(
267f0 58 29 20 0a 23 20 20 64 65 66 69 6e 65 20 73 71  X) .#  define sq
26800 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
26810 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
26820 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
26830 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  st(X).#  define 
26840 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
26850 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51  oint(X, Y, Z) SQ
26860 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e  LITE_OK.#  defin
26870 65 20 73 71 6c 69 74 65 33 47 65 74 56 54 61 62  e sqlite3GetVTab
26880 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c  le(X,Y)  ((VTabl
26890 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76  e*)0).#else.   v
268a0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 43  oid sqlite3VtabC
268b0 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62  lear(sqlite3 *db
268c0 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f  , Table*);.   vo
268d0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 44 69  id sqlite3VtabDi
268e0 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33  sconnect(sqlite3
268f0 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b   *db, Table *p);
26900 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
26910 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20  tabSync(sqlite3 
26920 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20  *db, Vdbe*);.   
26930 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52  int sqlite3VtabR
26940 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20  ollback(sqlite3 
26950 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  *db);.   int sql
26960 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73  ite3VtabCommit(s
26970 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20  qlite3 *db);.   
26980 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
26990 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a  Lock(VTable *);.
269a0 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
269b0 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65  tabUnlock(VTable
269c0 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c   *);.   void sql
269d0 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
269e0 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20  st(sqlite3*);.  
269f0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
26a00 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65  Savepoint(sqlite
26a10 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  3 *, int, int);.
26a20 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
26a30 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
26a40 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76  Vdbe*, sqlite3_v
26a50 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65  tab*);.   VTable
26a60 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62   *sqlite3GetVTab
26a70 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62  le(sqlite3*, Tab
26a80 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65 20  le*);.#  define 
26a90 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e  sqlite3VtabInSyn
26aa0 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54  c(db) ((db)->nVT
26ab0 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e  rans>0 && (db)->
26ac0 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64  aVTrans==0).#end
26ad0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  if.void sqlite3V
26ae0 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28  tabMakeWritable(
26af0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a  Parse*,Table*);.
26b00 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
26b10 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65  BeginParse(Parse
26b20 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
26b30 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b  *, Token*, int);
26b40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
26b50 62 46 69 6e 69 73 68 50 61 72 73 65 28 50 61 72  bFinishParse(Par
26b60 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  se*, Token*);.vo
26b70 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72  id sqlite3VtabAr
26b80 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76  gInit(Parse*);.v
26b90 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41  oid sqlite3VtabA
26ba0 72 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c  rgExtend(Parse*,
26bb0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
26bc0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65  lite3VtabCallCre
26bd0 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ate(sqlite3*, in
26be0 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  t, const char *,
26bf0 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73   char **);.int s
26c00 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f  qlite3VtabCallCo
26c10 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61  nnect(Parse*, Ta
26c20 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ble*);.int sqlit
26c30 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f  e3VtabCallDestro
26c40 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  y(sqlite3*, int,
26c50 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
26c60 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 42  int sqlite3VtabB
26c70 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20  egin(sqlite3 *, 
26c80 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44  VTable *);.FuncD
26c90 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f  ef *sqlite3VtabO
26ca0 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28  verloadFunction(
26cb0 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65  sqlite3 *,FuncDe
26cc0 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78  f*, int nArg, Ex
26cd0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
26ce0 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f  e3InvalidFunctio
26cf0 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  n(sqlite3_contex
26d00 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
26d10 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33  alue**);.sqlite3
26d20 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74  _int64 sqlite3St
26d30 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71  mtCurrentTime(sq
26d40 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b  lite3_context*);
26d50 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
26d60 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56  ParameterIndex(V
26d70 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  dbe*, const char
26d80 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
26d90 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64  ite3TransferBind
26da0 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d  ings(sqlite3_stm
26db0 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d  t *, sqlite3_stm
26dc0 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  t *);.void sqlit
26dd0 65 33 50 61 72 73 65 72 52 65 73 65 74 28 50 61  e3ParserReset(Pa
26de0 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
26df0 65 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65  e3Reprepare(Vdbe
26e00 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26e10 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e  ExprListCheckLen
26e20 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  gth(Parse*, Expr
26e30 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  List*, const cha
26e40 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  r*);.CollSeq *sq
26e50 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61  lite3BinaryCompa
26e60 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  reCollSeq(Parse 
26e70 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20  *, Expr *, Expr 
26e80 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  *);.int sqlite3T
26e90 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73  empInMemory(cons
26ea0 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e  t sqlite3*);.con
26eb0 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
26ec0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
26ed0 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
26ee0 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
26ef0 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
26f00 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20  point(sqlite3*, 
26f10 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
26f20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  int*);.  int sql
26f30 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f  ite3WalDefaultHo
26f40 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  ok(void*,sqlite3
26f50 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
26f60 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  t);.#endif.#ifnd
26f70 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
26f80 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74  TE.  With *sqlit
26f90 65 33 57 69 74 68 41 64 64 28 50 61 72 73 65 2a  e3WithAdd(Parse*
26fa0 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  ,With*,Token*,Ex
26fb0 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29  prList*,Select*)
26fc0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
26fd0 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74  WithDelete(sqlit
26fe0 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f  e3*,With*);.  vo
26ff0 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 50 75  id sqlite3WithPu
27000 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a  sh(Parse*, With*
27010 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65  , u8);.#else.#de
27020 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68  fine sqlite3With
27030 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66  Push(x,y,z).#def
27040 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 44  ine sqlite3WithD
27050 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69  elete(x,y).#endi
27060 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f  f../* Declaratio
27070 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73  ns for functions
27080 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20   in fkey.c. All 
27090 6f 66 20 74 68 65 73 65 20 61 72 65 20 72 65 70  of these are rep
270a0 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f  laced by.** no-o
270b0 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54  p macros if OMIT
270c0 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20  _FOREIGN_KEY is 
270d0 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73  defined. In this
270e0 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e   case no foreign
270f0 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e  .** key function
27100 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61 62  ality is availab
27110 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47  le. If OMIT_TRIG
27120 47 45 52 20 69 73 20 64 65 66 69 6e 65 64 20 62  GER is defined b
27130 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49  ut.** OMIT_FOREI
27140 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f  GN_KEY is not, o
27150 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20  nly some of the 
27160 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f  functions are no
27170 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69  -oped. In.** thi
27180 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b  s case foreign k
27190 65 79 73 20 61 72 65 20 70 61 72 73 65 64 2c 20  eys are parsed, 
271a0 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e  but no other fun
271b0 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 0a 2a  ctionality is .*
271c0 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f  * provided (enfo
271d0 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f  rcement of FK co
271e0 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75 69 72  nstraints requir
271f0 65 73 20 74 68 65 20 74 72 69 67 67 65 72 73 20  es the triggers 
27200 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a  sub-system)..*/.
27210 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
27220 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
27230 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65  _KEY) && !define
27240 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  d(SQLITE_OMIT_TR
27250 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71  IGGER).  void sq
27260 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72  lite3FkCheck(Par
27270 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
27280 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
27290 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
272a0 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72  3FkDropTable(Par
272b0 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  se*, SrcList *, 
272c0 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20  Table*);.  void 
272d0 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73  sqlite3FkActions
272e0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
272f0 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
27300 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69   int*, int);.  i
27310 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  nt sqlite3FkRequ
27320 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62  ired(Parse*, Tab
27330 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  le*, int*, int);
27340 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b  .  u32 sqlite3Fk
27350 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20  Oldmask(Parse*, 
27360 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20  Table*);.  FKey 
27370 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65  *sqlite3FkRefere
27380 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23  nces(Table *);.#
27390 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
273a0 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28  qlite3FkActions(
273b0 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23  a,b,c,d,e,f).  #
273c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
273d0 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c  Check(a,b,c,d,e,
273e0 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  f).  #define sql
273f0 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28  ite3FkDropTable(
27400 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65  a,b,c).  #define
27410 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73   sqlite3FkOldmas
27420 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20 20 30  k(a,b)         0
27430 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
27440 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62  e3FkRequired(a,b
27450 2c 63 2c 64 29 20 20 20 20 30 0a 23 65 6e 64 69  ,c,d)    0.#endi
27460 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
27470 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
27480 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  Y.  void sqlite3
27490 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  FkDelete(sqlite3
274a0 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69   *, Table*);.  i
274b0 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61  nt sqlite3FkLoca
274c0 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54  teIndex(Parse*,T
274d0 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65  able*,FKey*,Inde
274e0 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73  x**,int**);.#els
274f0 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
27500 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62 29  te3FkDelete(a,b)
27510 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
27520 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
27530 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69  a,b,c,d,e).#endi
27540 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61  f.../*.** Availa
27550 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63 74  ble fault inject
27560 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65 20  ors.  Should be 
27570 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e 69  numbered beginni
27580 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64  ng with 0..*/.#d
27590 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55  efine SQLITE_FAU
275a0 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f  LTINJECTOR_MALLO
275b0 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20  C     0.#define 
275c0 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45  SQLITE_FAULTINJE
275d0 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20 20  CTOR_COUNT      
275e0 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  1../*.** The int
275f0 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 63 6f  erface to the co
27600 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75 73  de in fault.c us
27610 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79 69  ed for identifyi
27620 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d  ng "benign".** m
27630 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e 20  alloc failures. 
27640 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72 65  This is only pre
27650 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f 4f  sent if SQLITE_O
27660 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
27670 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69 6e  .** is not defin
27680 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ed..*/.#ifndef S
27690 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
276a0 49 4e 5f 54 45 53 54 0a 20 20 76 6f 69 64 20 73  IN_TEST.  void s
276b0 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
276c0 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20  nMalloc(void);. 
276d0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64   void sqlite3End
276e0 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69  BenignMalloc(voi
276f0 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  d);.#else.  #def
27700 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67 69 6e  ine sqlite3Begin
27710 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20  BenignMalloc(). 
27720 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
27730 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  EndBenignMalloc(
27740 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
27750 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76  Allowed return v
27760 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74  alues from sqlit
27770 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a  e3FindInIndex().
27780 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
27790 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20 20  DEX_ROWID       
277a0 20 31 20 20 20 2f 2a 20 53 65 61 72 63 68 20 74   1   /* Search t
277b0 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
277c0 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
277d0 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20   IN_INDEX_EPH   
277e0 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 53 65         2   /* Se
277f0 61 72 63 68 20 61 6e 20 65 70 68 65 6d 65 72 61  arch an ephemera
27800 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66  l b-tree */.#def
27810 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44  ine IN_INDEX_IND
27820 45 58 5f 41 53 43 20 20 20 20 33 20 20 20 2f 2a  EX_ASC    3   /*
27830 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20   Existing index 
27840 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65  ASCENDING */.#de
27850 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e  fine IN_INDEX_IN
27860 44 45 58 5f 44 45 53 43 20 20 20 34 20 20 20 2f  DEX_DESC   4   /
27870 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78  * Existing index
27880 20 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23   DESCENDING */.#
27890 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
278a0 4e 4f 4f 50 20 20 20 20 20 20 20 20 20 35 20 20  NOOP         5  
278b0 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61 76 61   /* No table ava
278c0 69 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70  ilable. Use comp
278d0 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a  arisons */./*.**
278e0 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73 20 66   Allowed flags f
278f0 6f 72 20 74 68 65 20 33 72 64 20 70 61 72 61 6d  or the 3rd param
27900 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 46  eter to sqlite3F
27910 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f  indInIndex()..*/
27920 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
27930 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78  X_NOOP_OK     0x
27940 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72  0001  /* OK to r
27950 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e  eturn IN_INDEX_N
27960 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  OOP */.#define I
27970 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48  N_INDEX_MEMBERSH
27980 49 50 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49  IP  0x0002  /* I
27990 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20  N operator used 
279a0 66 6f 72 20 6d 65 6d 62 65 72 73 68 69 70 20 74  for membership t
279b0 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  est */.#define I
279c0 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20  N_INDEX_LOOP    
279d0 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 49      0x0004  /* I
279e0 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20  N operator used 
279f0 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74  as a loop */.int
27a00 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e   sqlite3FindInIn
27a10 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78 70  dex(Parse *, Exp
27a20 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a 29 3b  r *, u32, int*);
27a30 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
27a40 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52  ENABLE_ATOMIC_WR
27a50 49 54 45 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  ITE.  int sqlite
27a60 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c  3JournalOpen(sql
27a70 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73  ite3_vfs *, cons
27a80 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65  t char *, sqlite
27a90 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69  3_file *, int, i
27aa0 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
27ab0 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71  e3JournalSize(sq
27ac0 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a 20 20  lite3_vfs *);.  
27ad0 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
27ae0 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33  alCreate(sqlite3
27af0 5f 66 69 6c 65 20 2a 29 3b 0a 20 20 69 6e 74 20  _file *);.  int 
27b00 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78  sqlite3JournalEx
27b10 69 73 74 73 28 73 71 6c 69 74 65 33 5f 66 69 6c  ists(sqlite3_fil
27b20 65 20 2a 70 29 3b 0a 23 65 6c 73 65 0a 20 20 23  e *p);.#else.  #
27b30 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f  define sqlite3Jo
27b40 75 72 6e 61 6c 53 69 7a 65 28 70 56 66 73 29 20  urnalSize(pVfs) 
27b50 28 28 70 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c  ((pVfs)->szOsFil
27b60 65 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  e).  #define sql
27b70 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74  ite3JournalExist
27b80 73 28 70 29 20 31 0a 23 65 6e 64 69 66 0a 0a 76  s(p) 1.#endif..v
27b90 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f  oid sqlite3MemJo
27ba0 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65  urnalOpen(sqlite
27bb0 33 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e 74 20 73  3_file *);.int s
27bc0 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c  qlite3MemJournal
27bd0 53 69 7a 65 28 76 6f 69 64 29 3b 0a 69 6e 74 20  Size(void);.int 
27be0 73 71 6c 69 74 65 33 49 73 4d 65 6d 4a 6f 75 72  sqlite3IsMemJour
27bf0 6e 61 6c 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  nal(sqlite3_file
27c00 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74   *);..void sqlit
27c10 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74 41  e3ExprSetHeightA
27c20 6e 64 46 6c 61 67 73 28 50 61 72 73 65 20 2a 70  ndFlags(Parse *p
27c30 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b  Parse, Expr *p);
27c40 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
27c50 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69  EXPR_DEPTH>0.  i
27c60 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  nt sqlite3Select
27c70 45 78 70 72 48 65 69 67 68 74 28 53 65 6c 65 63  ExprHeight(Selec
27c80 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  t *);.  int sqli
27c90 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67  te3ExprCheckHeig
27ca0 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ht(Parse*, int);
27cb0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
27cc0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
27cd0 70 72 48 65 69 67 68 74 28 78 29 20 30 0a 20 20  prHeight(x) 0.  
27ce0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45  #define sqlite3E
27cf0 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 78  xprCheckHeight(x
27d00 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20  ,y).#endif..u32 
27d10 73 71 6c 69 74 65 33 47 65 74 34 62 79 74 65 28  sqlite3Get4byte(
27d20 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64  const u8*);.void
27d30 20 73 71 6c 69 74 65 33 50 75 74 34 62 79 74 65   sqlite3Put4byte
27d40 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66  (u8*, u32);..#if
27d50 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
27d60 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a  E_UNLOCK_NOTIFY.
27d70 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
27d80 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28  nnectionBlocked(
27d90 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74  sqlite3 *, sqlit
27da0 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  e3 *);.  void sq
27db0 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
27dc0 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  nlocked(sqlite3 
27dd0 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  *db);.  void sql
27de0 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c  ite3ConnectionCl
27df0 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62  osed(sqlite3 *db
27e00 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
27e10 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
27e20 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29  tionBlocked(x,y)
27e30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
27e40 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f  e3ConnectionUnlo
27e50 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e  cked(x).  #defin
27e60 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
27e70 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e  ionClosed(x).#en
27e80 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
27e90 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20  TE_DEBUG.  void 
27ea0 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61  sqlite3ParserTra
27eb0 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a  ce(FILE*, char *
27ec0 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  );.#endif../*.**
27ed0 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45   If the SQLITE_E
27ee0 4e 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78  NABLE IOTRACE ex
27ef0 69 73 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c  ists then the gl
27f00 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a  obal variable.**
27f10 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
27f20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
27f30 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f  a printf-like ro
27f40 75 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a  utine used to.**
27f50 20 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69   print I/O traci
27f60 6e 67 20 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f  ng messages. .*/
27f70 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
27f80 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20  NABLE_IOTRACE.# 
27f90 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41  define IOTRACE(A
27fa0 29 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f  )  if( sqlite3Io
27fb0 54 72 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33  Trace ){ sqlite3
27fc0 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76  IoTrace A; }.  v
27fd0 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 49  oid sqlite3VdbeI
27fe0 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29  OTraceSql(Vdbe*)
27ff0 3b 0a 53 51 4c 49 54 45 5f 41 50 49 20 53 51 4c  ;.SQLITE_API SQL
28000 49 54 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20  ITE_EXTERN void 
28010 28 53 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73  (SQLITE_CDECL *s
28020 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29 28 63  qlite3IoTrace)(c
28030 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
28040 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
28050 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64 65 66  IOTRACE(A).# def
28060 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 49  ine sqlite3VdbeI
28070 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e  OTraceSql(X).#en
28080 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65  dif../*.** These
28090 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76   routines are av
280a0 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20  ailable for the 
280b0 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67  mem2.c debugging
280c0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f   memory allocato
280d0 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79  r.** only.  They
280e0 20 61 72 65 20 75 73 65 64 20 74 6f 20 76 65 72   are used to ver
280f0 69 66 79 20 74 68 61 74 20 64 69 66 66 65 72 65  ify that differe
28100 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65  nt "types" of me
28110 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69  mory.** allocati
28120 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79  ons are properly
28130 20 74 72 61 63 6b 65 64 20 62 79 20 74 68 65 20   tracked by the 
28140 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71  system..**.** sq
28150 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
28160 54 79 70 65 28 29 20 73 65 74 73 20 74 68 65 20  Type() sets the 
28170 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c  "type" of an all
28180 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f  ocation to one o
28190 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45  f.** the MEMTYPE
281a0 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65  _* macros define
281b0 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79  d below.  The ty
281c0 70 65 20 6d 75 73 74 20 62 65 20 61 20 62 69 74  pe must be a bit
281d0 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73  mask with.** a s
281e0 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a  ingle bit set..*
281f0 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
28200 65 62 75 67 48 61 73 54 79 70 65 28 29 20 72 65  ebugHasType() re
28210 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e  turns true if an
28220 79 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  y of the bits in
28230 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
28240 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
28250 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
28260 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
28270 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
28280 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  e()..** sqlite3M
28290 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29  emdebugHasType()
282a0 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72   is intended for
282b0 20 75 73 65 20 69 6e 73 69 64 65 20 61 73 73 65   use inside asse
282c0 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e  rt() statements.
282d0 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
282e0 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72  mdebugNoType() r
282f0 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e  eturns true if n
28300 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74 73 20  one of the bits 
28310 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
28320 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
28330 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
28340 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
28350 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
28360 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72  ype()..**.** Per
28370 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d  haps the most im
28380 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73  portant point is
28390 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   the difference 
283a0 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f  between MEMTYPE_
283b0 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54  HEAP.** and MEMT
283c0 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20  YPE_LOOKASIDE.  
283d0 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e  If an allocation
283e0 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b   is MEMTYPE_LOOK
283f0 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e  ASIDE, that mean
28400 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61  s.** it might ha
28410 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65  ve been allocate
28420 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20  d by lookaside, 
28430 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63  except the alloc
28440 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f  ation was.** too
28450 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73   large or lookas
28460 69 64 65 20 77 61 73 20 61 6c 72 65 61 64 79 20  ide was already 
28470 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70  full.  It is imp
28480 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79  ortant to verify
28490 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74  .** that allocat
284a0 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20  ions that might 
284b0 68 61 76 65 20 62 65 65 6e 20 73 61 74 69 73 66  have been satisf
284c0 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ied by lookaside
284d0 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73   are not.** pass
284e0 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c  ed back to non-l
284f0 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20  ookaside free() 
28500 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72  routines.  Asser
28510 74 73 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a  ts such as the.*
28520 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20  * example above 
28530 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68  are placed on th
28540 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20  e non-lookaside 
28550 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20  free() routines 
28560 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69  to verify.** thi
28570 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a  s constraint. .*
28580 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73  *.** All of this
28590 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20   is no-op for a 
285a0 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64  production build
285b0 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73  .  It only comes
285c0 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68   into.** play wh
285d0 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45  en the SQLITE_ME
285e0 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74  MDEBUG compile-t
285f0 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73  ime option is us
28600 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ed..*/.#ifdef SQ
28610 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20  LITE_MEMDEBUG.  
28620 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64  void sqlite3Memd
28630 65 62 75 67 53 65 74 54 79 70 65 28 76 6f 69 64  ebugSetType(void
28640 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c  *,u8);.  int sql
28650 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
28660 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20  ype(void*,u8);. 
28670 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64   int sqlite3Memd
28680 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a  ebugNoType(void*
28690 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ,u8);.#else.# de
286a0 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
286b0 65 62 75 67 53 65 74 54 79 70 65 28 58 2c 59 29  ebugSetType(X,Y)
286c0 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20    /* no-op */.# 
286d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
286e0 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 58 2c  mdebugHasType(X,
286f0 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65 20 73  Y)  1.# define s
28700 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
28710 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a 23 65  Type(X,Y)   1.#e
28720 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d  ndif.#define MEM
28730 54 59 50 45 5f 48 45 41 50 20 20 20 20 20 20 20  TYPE_HEAP       
28740 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c  0x01  /* General
28750 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e   heap allocation
28760 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  s */.#define MEM
28770 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20  TYPE_LOOKASIDE  
28780 30 78 30 32 20 20 2f 2a 20 48 65 61 70 20 74 68  0x02  /* Heap th
28790 61 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  at might have be
287a0 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a  en lookaside */.
287b0 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
287c0 53 43 52 41 54 43 48 20 20 20 20 30 78 30 34 20  SCRATCH    0x04 
287d0 20 2f 2a 20 53 63 72 61 74 63 68 20 61 6c 6c 6f   /* Scratch allo
287e0 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  cations */.#defi
287f0 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48  ne MEMTYPE_PCACH
28800 45 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20 50  E     0x08  /* P
28810 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61  age cache alloca
28820 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tions */../*.** 
28830 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65 72 66  Threading interf
28840 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  ace.*/.#if SQLIT
28850 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
28860 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74  EADS>0.int sqlit
28870 65 33 54 68 72 65 61 64 43 72 65 61 74 65 28 53  e3ThreadCreate(S
28880 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f  QLiteThread**,vo
28890 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f  id*(*)(void*),vo
288a0 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
288b0 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69  3ThreadJoin(SQLi
288c0 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a  teThread*, void*
288d0 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  *);.#endif..#if 
288e0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
288f0 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f 56 54 41  NABLE_DBSTAT_VTA
28900 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  B) || defined(SQ
28910 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74 20 73  LITE_TEST).int s
28920 71 6c 69 74 65 33 44 62 73 74 61 74 52 65 67 69  qlite3DbstatRegi
28930 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ster(sqlite3*);.
28940 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f  #endif..#endif /
28950 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20  * _SQLITEINT_H_ 
28960 2a 2f 0a                                         */.