/ Hex Artifact Content
Login

Artifact d2804bd5a9c270bc60fe096c9c416123425ebdde:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 49 6e  INT_H_../*.** In
01e0: 63 6c 75 64 65 20 74 68 65 20 68 65 61 64 65 72  clude the header
01f0: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 63 75   file used to cu
0200: 73 74 6f 6d 69 7a 65 20 74 68 65 20 63 6f 6d 70  stomize the comp
0210: 69 6c 65 72 20 6f 70 74 69 6f 6e 73 20 66 6f 72  iler options for
0220: 20 4d 53 56 43 2e 0a 2a 2a 20 54 68 69 73 20 73   MSVC..** This s
0230: 68 6f 75 6c 64 20 62 65 20 64 6f 6e 65 20 66 69  hould be done fi
0240: 72 73 74 20 73 6f 20 74 68 61 74 20 69 74 20 63  rst so that it c
0250: 61 6e 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20  an successfully 
0260: 70 72 65 76 65 6e 74 20 73 70 75 72 69 6f 75 73  prevent spurious
0270: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  .** compiler war
0280: 6e 69 6e 67 73 20 64 75 65 20 74 6f 20 73 75 62  nings due to sub
0290: 73 65 71 75 65 6e 74 20 63 6f 6e 74 65 6e 74 20  sequent content 
02a0: 69 6e 20 74 68 69 73 20 66 69 6c 65 20 61 6e 64  in this file and
02b0: 20 6f 74 68 65 72 20 66 69 6c 65 73 0a 2a 2a 20   other files.** 
02c0: 74 68 61 74 20 61 72 65 20 69 6e 63 6c 75 64 65  that are include
02d0: 64 20 62 79 20 74 68 69 73 20 66 69 6c 65 2e 0a  d by this file..
02e0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 6d 73 76  */.#include "msv
02f0: 63 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 53 70 65 63  c.h"../*.** Spec
0300: 69 61 6c 20 73 65 74 75 70 20 66 6f 72 20 56 78  ial setup for Vx
0310: 57 6f 72 6b 73 0a 2a 2f 0a 23 69 6e 63 6c 75 64  Works.*/.#includ
0320: 65 20 22 76 78 77 6f 72 6b 73 2e 68 22 0a 0a 2f  e "vxworks.h"../
0330: 2a 0a 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69  *.** These #defi
0340: 6e 65 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c  nes should enabl
0350: 65 20 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70  e >2GB file supp
0360: 6f 72 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20  ort on POSIX if 
0370: 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e  the.** underlyin
0380: 67 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74  g operating syst
0390: 65 6d 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20  em supports it. 
03a0: 20 49 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73   If the OS lacks
03b0: 0a 2a 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73  .** large file s
03c0: 75 70 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68  upport, or if th
03d0: 65 20 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c  e OS is windows,
03e0: 20 74 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65   these should be
03f0: 20 6e 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54   no-ops..**.** T
0400: 69 63 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68  icket #2739:  Th
0410: 65 20 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55  e _LARGEFILE_SOU
0420: 52 43 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61  RCE macro must a
0430: 70 70 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79  ppear before any
0440: 0a 2a 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c  .** system #incl
0450: 75 64 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68  udes.  Hence, th
0460: 69 73 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65  is block of code
0470: 20 6d 75 73 74 20 62 65 20 74 68 65 20 76 65 72   must be the ver
0480: 79 20 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20  y first.** code 
0490: 69 6e 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69  in all source fi
04a0: 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65  les..**.** Large
04b0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61   file support ca
04c0: 6e 20 62 65 20 64 69 73 61 62 6c 65 64 20 75 73  n be disabled us
04d0: 69 6e 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45  ing the -DSQLITE
04e0: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69  _DISABLE_LFS swi
04f0: 74 63 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f  tch.** on the co
0500: 6d 70 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c  mpiler command l
0510: 69 6e 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65  ine.  This is ne
0520: 63 65 73 73 61 72 79 20 69 66 20 79 6f 75 20 61  cessary if you a
0530: 72 65 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20  re compiling.** 
0540: 6f 6e 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68  on a recent mach
0550: 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61 74  ine (ex: Red Hat
0560: 20 37 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61   7.2) but you wa
0570: 6e 74 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20  nt your code to 
0580: 77 6f 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c  work.** on an ol
0590: 64 65 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a  der machine (ex:
05a0: 20 52 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20   Red Hat 6.0).  
05b0: 49 66 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f  If you compile o
05c0: 6e 20 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a  n Red Hat 7.2.**
05d0: 20 77 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70   without this op
05e0: 74 69 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61  tion, LFS is ena
05f0: 62 6c 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f  ble.  But LFS do
0600: 65 73 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20  es not exist in 
0610: 74 68 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e  the kernel.** in
0620: 20 52 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f   Red Hat 6.0, so
0630: 20 74 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20   the code won't 
0640: 77 6f 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f  work.  Hence, fo
0650: 72 20 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79  r maximum binary
0660: 0a 2a 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20  .** portability 
0670: 79 6f 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20  you should omit 
0680: 4c 46 53 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70  LFS..**.** The p
0690: 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61 70  revious paragrap
06a0: 68 20 77 61 73 20 77 72 69 74 74 65 6e 20 69 6e  h was written in
06b0: 20 32 30 30 35 2e 20 20 28 54 68 69 73 20 70 61   2005.  (This pa
06c0: 72 61 67 72 61 70 68 20 69 73 20 77 72 69 74 74  ragraph is writt
06d0: 65 6e 0a 2a 2a 20 6f 6e 20 32 30 30 38 2d 31 31  en.** on 2008-11
06e0: 2d 32 38 2e 29 20 54 68 65 73 65 20 64 61 79 73  -28.) These days
06f0: 2c 20 61 6c 6c 20 4c 69 6e 75 78 20 6b 65 72 6e  , all Linux kern
0700: 65 6c 73 20 73 75 70 70 6f 72 74 20 6c 61 72 67  els support larg
0710: 65 20 66 69 6c 65 73 2c 20 73 6f 0a 2a 2a 20 79  e files, so.** y
0720: 6f 75 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62  ou should probab
0730: 6c 79 20 6c 65 61 76 65 20 4c 46 53 20 65 6e 61  ly leave LFS ena
0740: 62 6c 65 64 2e 20 20 42 75 74 20 73 6f 6d 65 20  bled.  But some 
0750: 65 6d 62 65 64 64 65 64 20 70 6c 61 74 66 6f 72  embedded platfor
0760: 6d 73 20 6d 69 67 68 74 0a 2a 2a 20 6c 61 63 6b  ms might.** lack
0770: 20 4c 46 53 20 69 6e 20 77 68 69 63 68 20 63 61   LFS in which ca
0780: 73 65 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49  se the SQLITE_DI
0790: 53 41 42 4c 45 5f 4c 46 53 20 6d 61 63 72 6f 20  SABLE_LFS macro 
07a0: 6d 69 67 68 74 20 73 74 69 6c 6c 20 62 65 20 75  might still be u
07b0: 73 65 66 75 6c 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d  seful..**.** Sim
07c0: 69 6c 61 72 20 69 73 20 74 72 75 65 20 66 6f 72  ilar is true for
07d0: 20 4d 61 63 20 4f 53 20 58 2e 20 20 4c 46 53 20   Mac OS X.  LFS 
07e0: 69 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65  is only supporte
07f0: 64 20 6f 6e 20 4d 61 63 20 4f 53 20 58 20 39 20  d on Mac OS X 9 
0800: 61 6e 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69  and later..*/.#i
0810: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53  fndef SQLITE_DIS
0820: 41 42 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69 6e  ABLE_LFS.# defin
0830: 65 20 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20 20  e _LARGE_FILE   
0840: 20 20 20 20 31 0a 23 20 69 66 6e 64 65 66 20 5f      1.# ifndef _
0850: 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53  FILE_OFFSET_BITS
0860: 0a 23 20 20 20 64 65 66 69 6e 65 20 5f 46 49 4c  .#   define _FIL
0870: 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34  E_OFFSET_BITS 64
0880: 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e  .# endif.# defin
0890: 65 20 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55  e _LARGEFILE_SOU
08a0: 52 43 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  RCE 1.#endif../*
08b0: 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72 69   Needed for vari
08c0: 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e  ous definitions.
08d0: 2e 2e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  .. */.#if define
08e0: 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21  d(__GNUC__) && !
08f0: 64 65 66 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55  defined(_GNU_SOU
0900: 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 47  RCE).# define _G
0910: 4e 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66  NU_SOURCE.#endif
0920: 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  ..#if defined(__
0930: 4f 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21 64  OpenBSD__) && !d
0940: 65 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52  efined(_BSD_SOUR
0950: 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42 53  CE).# define _BS
0960: 44 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a  D_SOURCE.#endif.
0970: 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57  ./*.** For MinGW
0980: 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20 69  , check to see i
0990: 66 20 77 65 20 63 61 6e 20 69 6e 63 6c 75 64 65  f we can include
09a0: 20 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65   the header file
09b0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a   containing its.
09c0: 2a 2a 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72  ** version infor
09d0: 6d 61 74 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74  mation, among ot
09e0: 68 65 72 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72  her things.  Nor
09f0: 6d 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 74 65  mally, this inte
0a00: 72 6e 61 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65  rnal MinGW.** he
0a10: 61 64 65 72 20 66 69 6c 65 20 77 6f 75 6c 64 20  ader file would 
0a20: 5b 6f 6e 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64  [only] be includ
0a30: 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
0a40: 20 62 79 20 6f 74 68 65 72 20 4d 69 6e 47 57 20   by other MinGW 
0a50: 68 65 61 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b  header.** files;
0a60: 20 68 6f 77 65 76 65 72 2c 20 74 68 65 20 63 6f   however, the co
0a70: 6e 74 61 69 6e 65 64 20 76 65 72 73 69 6f 6e 20  ntained version 
0a80: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e  information is n
0a90: 6f 77 20 72 65 71 75 69 72 65 64 20 62 79 20 74  ow required by t
0aa0: 68 69 73 0a 2a 2a 20 68 65 61 64 65 72 20 66 69  his.** header fi
0ab0: 6c 65 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e  le to work aroun
0ac0: 64 20 62 69 6e 61 72 79 20 63 6f 6d 70 61 74 69  d binary compati
0ad0: 62 69 6c 69 74 79 20 69 73 73 75 65 73 20 28 73  bility issues (s
0ae0: 65 65 20 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a  ee below) and.**
0af0: 20 74 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c   this is the onl
0b00: 79 20 6b 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72  y known way to r
0b10: 65 6c 69 61 62 6c 79 20 6f 62 74 61 69 6e 20 69  eliably obtain i
0b20: 74 2e 20 20 54 68 69 73 20 65 6e 74 69 72 65 20  t.  This entire 
0b30: 23 69 66 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75  #if block.** wou
0b40: 6c 64 20 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79  ld be completely
0b50: 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69 66 20   unnecessary if 
0b60: 74 68 65 72 65 20 77 61 73 20 61 6e 79 20 6f 74  there was any ot
0b70: 68 65 72 20 77 61 79 20 6f 66 20 64 65 74 65 63  her way of detec
0b80: 74 69 6e 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69  ting.** MinGW vi
0b90: 61 20 74 68 65 69 72 20 70 72 65 70 72 6f 63 65  a their preproce
0ba0: 73 73 6f 72 20 28 65 2e 67 2e 20 69 66 20 74 68  ssor (e.g. if th
0bb0: 65 79 20 63 75 73 74 6f 6d 69 7a 65 64 20 74 68  ey customized th
0bc0: 65 69 72 20 47 43 43 20 74 6f 20 64 65 66 69 6e  eir GCC to defin
0bd0: 65 0a 2a 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d  e.** some MinGW-
0be0: 73 70 65 63 69 66 69 63 20 6d 61 63 72 6f 73 29  specific macros)
0bf0: 2e 20 20 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e  .  When compilin
0c00: 67 20 66 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74  g for MinGW, eit
0c10: 68 65 72 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45  her the.** _HAVE
0c20: 5f 4d 49 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56  _MINGW_H or _HAV
0c30: 45 5f 5f 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65  E__MINGW_H (note
0c40: 20 74 68 65 20 65 78 74 72 61 20 75 6e 64 65 72   the extra under
0c50: 73 63 6f 72 65 29 20 6d 61 63 72 6f 20 6d 75 73  score) macro mus
0c60: 74 20 62 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b  t be.** defined;
0c70: 20 6f 74 68 65 72 77 69 73 65 2c 20 64 65 74 65   otherwise, dete
0c80: 63 74 69 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69  ction of conditi
0c90: 6f 6e 73 20 73 70 65 63 69 66 69 63 20 74 6f 20  ons specific to 
0ca0: 4d 69 6e 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a  MinGW will be.**
0cb0: 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69   disabled..*/.#i
0cc0: 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f  f defined(_HAVE_
0cd0: 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75  MINGW_H).# inclu
0ce0: 64 65 20 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c  de "mingw.h".#el
0cf0: 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56 45  if defined(_HAVE
0d00: 5f 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63  __MINGW_H).# inc
0d10: 6c 75 64 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a  lude "_mingw.h".
0d20: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f  #endif../*.** Fo
0d30: 72 20 4d 69 6e 47 57 20 76 65 72 73 69 6f 6e 20  r MinGW version 
0d40: 34 2e 78 20 28 61 6e 64 20 68 69 67 68 65 72 29  4.x (and higher)
0d50: 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20 69  , check to see i
0d60: 66 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54  f the _USE_32BIT
0d70: 5f 54 49 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e  _TIME_T.** defin
0d80: 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f  e is required to
0d90: 20 6d 61 69 6e 74 61 69 6e 20 62 69 6e 61 72 79   maintain binary
0da0: 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77   compatibility w
0db0: 69 74 68 20 74 68 65 20 4d 53 56 43 20 72 75 6e  ith the MSVC run
0dc0: 74 69 6d 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20  time.** library 
0dd0: 69 6e 20 75 73 65 20 28 65 2e 67 2e 20 66 6f 72  in use (e.g. for
0de0: 20 57 69 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f   Windows XP)..*/
0df0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 55  .#if !defined(_U
0e00: 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54 29  SE_32BIT_TIME_T)
0e10: 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 55 53   && !defined(_US
0e20: 45 5f 36 34 42 49 54 5f 54 49 4d 45 5f 54 29 20  E_64BIT_TIME_T) 
0e30: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
0e40: 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65 66  (_WIN32) && !def
0e50: 69 6e 65 64 28 5f 57 49 4e 36 34 29 20 26 26 20  ined(_WIN64) && 
0e60: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f  \.    defined(__
0e70: 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53  MINGW_MAJOR_VERS
0e80: 49 4f 4e 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f  ION) && __MINGW_
0e90: 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d  MAJOR_VERSION >=
0ea0: 20 34 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69   4 && \.    defi
0eb0: 6e 65 64 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a  ned(__MSVCRT__).
0ec0: 23 20 64 65 66 69 6e 65 20 5f 55 53 45 5f 33 32  # define _USE_32
0ed0: 42 49 54 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69  BIT_TIME_T.#endi
0ee0: 66 0a 0a 2f 2a 20 54 68 65 20 70 75 62 6c 69 63  f../* The public
0ef0: 20 53 51 4c 69 74 65 20 69 6e 74 65 72 66 61 63   SQLite interfac
0f00: 65 2e 20 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46  e.  The _FILE_OF
0f10: 46 53 45 54 5f 42 49 54 53 20 6d 61 63 72 6f 20  FSET_BITS macro 
0f20: 6d 75 73 74 20 61 70 70 65 61 72 0a 2a 2a 20 66  must appear.** f
0f30: 69 72 73 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c  irst in QNX.  Al
0f40: 73 6f 2c 20 74 68 65 20 5f 55 53 45 5f 33 32 42  so, the _USE_32B
0f50: 49 54 5f 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20  IT_TIME_T macro 
0f60: 6d 75 73 74 20 61 70 70 65 61 72 20 66 69 72 73  must appear firs
0f70: 74 20 66 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a  t for.** MinGW..
0f80: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c  */.#include "sql
0f90: 69 74 65 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49  ite3.h"../*.** I
0fa0: 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e 66 69  nclude the confi
0fb0: 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65 72 20  guration header 
0fc0: 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e 66 69  output by 'confi
0fd0: 67 75 72 65 27 20 69 66 20 77 65 27 72 65 20 75  gure' if we're u
0fe0: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f  sing the.** auto
0ff0: 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69 6c 64  conf-based build
1000: 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 48 41 56 45  .*/.#ifdef _HAVE
1010: 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48  _SQLITE_CONFIG_H
1020: 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69  .#include "confi
1030: 67 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 23 69 6e  g.h".#endif..#in
1040: 63 6c 75 64 65 20 22 73 71 6c 69 74 65 4c 69 6d  clude "sqliteLim
1050: 69 74 2e 68 22 0a 0a 2f 2a 20 44 69 73 61 62 6c  it.h"../* Disabl
1060: 65 20 6e 75 69 73 61 6e 63 65 20 77 61 72 6e 69  e nuisance warni
1070: 6e 67 73 20 6f 6e 20 42 6f 72 6c 61 6e 64 20 63  ngs on Borland c
1080: 6f 6d 70 69 6c 65 72 73 20 2a 2f 0a 23 69 66 20  ompilers */.#if 
1090: 64 65 66 69 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e  defined(__BORLAN
10a0: 44 43 5f 5f 29 0a 23 70 72 61 67 6d 61 20 77 61  DC__).#pragma wa
10b0: 72 6e 20 2d 72 63 68 20 2f 2a 20 75 6e 72 65 61  rn -rch /* unrea
10c0: 63 68 61 62 6c 65 20 63 6f 64 65 20 2a 2f 0a 23  chable code */.#
10d0: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 63 63  pragma warn -ccc
10e0: 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 20 69 73   /* Condition is
10f0: 20 61 6c 77 61 79 73 20 74 72 75 65 20 6f 72 20   always true or 
1100: 66 61 6c 73 65 20 2a 2f 0a 23 70 72 61 67 6d 61  false */.#pragma
1110: 20 77 61 72 6e 20 2d 61 75 73 20 2f 2a 20 41 73   warn -aus /* As
1120: 73 69 67 6e 65 64 20 76 61 6c 75 65 20 69 73 20  signed value is 
1130: 6e 65 76 65 72 20 75 73 65 64 20 2a 2f 0a 23 70  never used */.#p
1140: 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 73 75 20  ragma warn -csu 
1150: 2f 2a 20 43 6f 6d 70 61 72 69 6e 67 20 73 69 67  /* Comparing sig
1160: 6e 65 64 20 61 6e 64 20 75 6e 73 69 67 6e 65 64  ned and unsigned
1170: 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72 6e   */.#pragma warn
1180: 20 2d 73 70 61 20 2f 2a 20 53 75 73 70 69 63 69   -spa /* Suspici
1190: 6f 75 73 20 70 6f 69 6e 74 65 72 20 61 72 69 74  ous pointer arit
11a0: 68 6d 65 74 69 63 20 2a 2f 0a 23 65 6e 64 69 66  hmetic */.#endif
11b0: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
11c0: 73 74 61 6e 64 61 72 64 20 68 65 61 64 65 72 20  standard header 
11d0: 66 69 6c 65 73 20 61 73 20 6e 65 63 65 73 73 61  files as necessa
11e0: 72 79 0a 2a 2f 0a 23 69 66 64 65 66 20 48 41 56  ry.*/.#ifdef HAV
11f0: 45 5f 53 54 44 49 4e 54 5f 48 0a 23 69 6e 63 6c  E_STDINT_H.#incl
1200: 75 64 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a 23  ude <stdint.h>.#
1210: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41 56  endif.#ifdef HAV
1220: 45 5f 49 4e 54 54 59 50 45 53 5f 48 0a 23 69 6e  E_INTTYPES_H.#in
1230: 63 6c 75 64 65 20 3c 69 6e 74 74 79 70 65 73 2e  clude <inttypes.
1240: 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  h>.#endif../*.**
1250: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
1260: 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20 74  acros are used t
1270: 6f 20 63 61 73 74 20 70 6f 69 6e 74 65 72 73 20  o cast pointers 
1280: 74 6f 20 69 6e 74 65 67 65 72 73 20 61 6e 64 0a  to integers and.
1290: 2a 2a 20 69 6e 74 65 67 65 72 73 20 74 6f 20 70  ** integers to p
12a0: 6f 69 6e 74 65 72 73 2e 20 20 54 68 65 20 77 61  ointers.  The wa
12b0: 79 20 79 6f 75 20 64 6f 20 74 68 69 73 20 76 61  y you do this va
12c0: 72 69 65 73 20 66 72 6f 6d 20 6f 6e 65 20 63 6f  ries from one co
12d0: 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 74 68 65  mpiler.** to the
12e0: 20 6e 65 78 74 2c 20 73 6f 20 77 65 20 68 61 76   next, so we hav
12f0: 65 20 64 65 76 65 6c 6f 70 65 64 20 74 68 65 20  e developed the 
1300: 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 74 20 6f 66  following set of
1310: 20 23 69 66 20 73 74 61 74 65 6d 65 6e 74 73 0a   #if statements.
1320: 2a 2a 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ** to generate a
1330: 70 70 72 6f 70 72 69 61 74 65 20 6d 61 63 72 6f  ppropriate macro
1340: 73 20 66 6f 72 20 61 20 77 69 64 65 20 72 61 6e  s for a wide ran
1350: 67 65 20 6f 66 20 63 6f 6d 70 69 6c 65 72 73 2e  ge of compilers.
1360: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 72 72 65  .**.** The corre
1370: 63 74 20 22 41 4e 53 49 22 20 77 61 79 20 74 6f  ct "ANSI" way to
1380: 20 64 6f 20 74 68 69 73 20 69 73 20 74 6f 20 75   do this is to u
1390: 73 65 20 74 68 65 20 69 6e 74 70 74 72 5f 74 20  se the intptr_t 
13a0: 74 79 70 65 2e 20 0a 2a 2a 20 55 6e 66 6f 72 74  type. .** Unfort
13b0: 75 6e 61 74 65 6c 79 2c 20 74 68 61 74 20 74 79  unately, that ty
13c0: 70 65 64 65 66 20 69 73 20 6e 6f 74 20 61 76 61  pedef is not ava
13d0: 69 6c 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f  ilable on all co
13e0: 6d 70 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69  mpilers, or.** i
13f0: 66 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c  f it is availabl
1400: 65 2c 20 69 74 20 72 65 71 75 69 72 65 73 20 61  e, it requires a
1410: 6e 20 23 69 6e 63 6c 75 64 65 20 6f 66 20 73 70  n #include of sp
1420: 65 63 69 66 69 63 20 68 65 61 64 65 72 73 0a 2a  ecific headers.*
1430: 2a 20 74 68 61 74 20 76 61 72 79 20 66 72 6f 6d  * that vary from
1440: 20 6f 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f 20   one machine to 
1450: 74 68 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  the next..**.** 
1460: 54 69 63 6b 65 74 20 23 33 38 36 30 3a 20 20 54  Ticket #3860:  T
1470: 68 65 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20  he llvm-gcc-4.2 
1480: 63 6f 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41 70  compiler from Ap
1490: 70 6c 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a  ple chokes on.**
14a0: 20 74 68 65 20 28 28 76 6f 69 64 2a 29 26 28 28   the ((void*)&((
14b0: 63 68 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e  char*)0)[X]) con
14c0: 73 74 72 75 63 74 2e 20 20 42 75 74 20 4d 53 56  struct.  But MSV
14d0: 43 20 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f  C chokes on ((vo
14e0: 69 64 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20  id*)(X))..** So 
14f0: 77 65 20 68 61 76 65 20 74 6f 20 64 65 66 69 6e  we have to defin
1500: 65 20 74 68 65 20 6d 61 63 72 6f 73 20 69 6e 20  e the macros in 
1510: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 64  different ways d
1520: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a  epending on the.
1530: 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a  ** compiler..*/.
1540: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 50 54  #if defined(__PT
1550: 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f  RDIFF_TYPE__)  /
1560: 2a 20 54 68 69 73 20 63 61 73 65 20 73 68 6f 75  * This case shou
1570: 6c 64 20 77 6f 72 6b 20 66 6f 72 20 47 43 43 20  ld work for GCC 
1580: 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  */.# define SQLI
1590: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29  TE_INT_TO_PTR(X)
15a0: 20 20 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52    ((void*)(__PTR
15b0: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
15c0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
15d0: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
15e0: 28 28 69 6e 74 29 28 5f 5f 50 54 52 44 49 46 46  ((int)(__PTRDIFF
15f0: 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c  _TYPE__)(X)).#el
1600: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e  if !defined(__GN
1610: 55 43 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20 57  UC__)       /* W
1620: 6f 72 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65  orks for compile
1630: 72 73 20 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c  rs other than LL
1640: 56 4d 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53  VM */.# define S
1650: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
1660: 28 58 29 20 20 28 28 76 6f 69 64 2a 29 26 28 28  (X)  ((void*)&((
1670: 63 68 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64  char*)0)[X]).# d
1680: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
1690: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
16a0: 74 29 28 28 28 63 68 61 72 2a 29 58 29 2d 28 63  t)(((char*)X)-(c
16b0: 68 61 72 2a 29 30 29 29 0a 23 65 6c 69 66 20 64  har*)0)).#elif d
16c0: 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49  efined(HAVE_STDI
16d0: 4e 54 5f 48 29 20 20 20 2f 2a 20 55 73 65 20 74  NT_H)   /* Use t
16e0: 68 69 73 20 63 61 73 65 20 69 66 20 77 65 20 68  his case if we h
16f0: 61 76 65 20 41 4e 53 49 20 68 65 61 64 65 72 73  ave ANSI headers
1700: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
1710: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
1720: 29 20 20 28 28 76 6f 69 64 2a 29 28 69 6e 74 70  )  ((void*)(intp
1730: 74 72 5f 74 29 28 58 29 29 0a 23 20 64 65 66 69  tr_t)(X)).# defi
1740: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
1750: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
1760: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 65  intptr_t)(X)).#e
1770: 6c 73 65 20 20 20 20 20 20 20 20 20 20 20 20 20  lse             
1780: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1790: 47 65 6e 65 72 61 74 65 73 20 61 20 77 61 72 6e  Generates a warn
17a0: 69 6e 67 20 2d 20 62 75 74 20 69 74 20 61 6c 77  ing - but it alw
17b0: 61 79 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64  ays works */.# d
17c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
17d0: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
17e0: 69 64 2a 29 28 58 29 29 0a 23 20 64 65 66 69 6e  id*)(X)).# defin
17f0: 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f  e SQLITE_PTR_TO_
1800: 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 58  INT(X)  ((int)(X
1810: 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  )).#endif../*.**
1820: 20 41 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e 74   A macro to hint
1830: 20 74 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   to the compiler
1840: 20 74 68 61 74 20 61 20 66 75 6e 63 74 69 6f 6e   that a function
1850: 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a   should not be.*
1860: 2a 20 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23 69  * inlined..*/.#i
1870: 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43  f defined(__GNUC
1880: 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 53 51  __).#  define SQ
1890: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f  LITE_NOINLINE  _
18a0: 5f 61 74 74 72 69 62 75 74 65 5f 5f 28 28 6e 6f  _attribute__((no
18b0: 69 6e 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20 64  inline)).#elif d
18c0: 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29  efined(_MSC_VER)
18d0: 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33   && _MSC_VER>=13
18e0: 31 30 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c  10.#  define SQL
18f0: 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f  ITE_NOINLINE  __
1900: 64 65 63 6c 73 70 65 63 28 6e 6f 69 6e 6c 69 6e  declspec(noinlin
1910: 65 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  e).#else.#  defi
1920: 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49  ne SQLITE_NOINLI
1930: 4e 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  NE.#endif../*.**
1940: 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48 52 45   The SQLITE_THRE
1950: 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d 75 73  ADSAFE macro mus
1960: 74 20 62 65 20 64 65 66 69 6e 65 64 20 61 73 20  t be defined as 
1970: 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a 20 30  0, 1, or 2..** 0
1980: 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73 20 61   means mutexes a
1990: 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64  re permanently d
19a0: 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65 20 6c  isable and the l
19b0: 69 62 72 61 72 79 20 69 73 20 6e 65 76 65 72 0a  ibrary is never.
19c0: 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e 20 20  ** threadsafe.  
19d0: 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72  1 means the libr
19e0: 61 72 79 20 69 73 20 73 65 72 69 61 6c 69 7a 65  ary is serialize
19f0: 64 20 77 68 69 63 68 20 69 73 20 74 68 65 20 68  d which is the h
1a00: 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65 6c 20  ighest.** level 
1a10: 6f 66 20 74 68 72 65 61 64 73 61 66 65 74 79 2e  of threadsafety.
1a20: 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    2 means the li
1a30: 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69 74 68  brary is multith
1a40: 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69 70 6c  readed - multipl
1a50: 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63 61 6e  e.** threads can
1a60: 20 75 73 65 20 53 51 4c 69 74 65 20 61 73 20 6c   use SQLite as l
1a70: 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20 74 68  ong as no two th
1a80: 72 65 61 64 73 20 74 72 79 20 74 6f 20 75 73 65  reads try to use
1a90: 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64 61 74   the same.** dat
1aa0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
1ab0: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
1ac0: 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72 20 76  e..**.** Older v
1ad0: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
1ae0: 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69 6f 6e  e used an option
1af0: 61 6c 20 54 48 52 45 41 44 53 41 46 45 20 6d 61  al THREADSAFE ma
1b00: 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70 70 6f  cro..** We suppo
1b10: 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65 67 61  rt that for lega
1b20: 63 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  cy..*/.#if !defi
1b30: 6e 65 64 28 53 51 4c 49 54 45 5f 54 48 52 45 41  ned(SQLITE_THREA
1b40: 44 53 41 46 45 29 0a 23 20 69 66 20 64 65 66 69  DSAFE).# if defi
1b50: 6e 65 64 28 54 48 52 45 41 44 53 41 46 45 29 0a  ned(THREADSAFE).
1b60: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
1b70: 45 5f 54 48 52 45 41 44 53 41 46 45 20 54 48 52  E_THREADSAFE THR
1b80: 45 41 44 53 41 46 45 0a 23 20 65 6c 73 65 0a 23  EADSAFE.# else.#
1b90: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
1ba0: 5f 54 48 52 45 41 44 53 41 46 45 20 31 20 2f 2a  _THREADSAFE 1 /*
1bb0: 20 49 4d 50 3a 20 52 2d 30 37 32 37 32 2d 32 32   IMP: R-07272-22
1bc0: 33 30 39 20 2a 2f 0a 23 20 65 6e 64 69 66 0a 23  309 */.# endif.#
1bd0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77  endif../*.** Pow
1be0: 65 72 73 61 66 65 20 6f 76 65 72 77 72 69 74 65  ersafe overwrite
1bf0: 20 69 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c   is on by defaul
1c00: 74 2e 20 20 42 75 74 20 63 61 6e 20 62 65 20 74  t.  But can be t
1c10: 75 72 6e 65 64 20 6f 66 66 20 75 73 69 6e 67 0a  urned off using.
1c20: 2a 2a 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f  ** the -DSQLITE_
1c30: 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52  POWERSAFE_OVERWR
1c40: 49 54 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69  ITE=0 command-li
1c50: 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69  ne option..*/.#i
1c60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 50 4f 57  fndef SQLITE_POW
1c70: 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45  ERSAFE_OVERWRITE
1c80: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1c90: 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57  _POWERSAFE_OVERW
1ca0: 52 49 54 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  RITE 1.#endif../
1cb0: 2a 0a 2a 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46  *.** EVIDENCE-OF
1cc0: 3a 20 52 2d 32 35 37 31 35 2d 33 37 30 37 32 20  : R-25715-37072 
1cd0: 4d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  Memory allocatio
1ce0: 6e 20 73 74 61 74 69 73 74 69 63 73 20 61 72 65  n statistics are
1cf0: 20 65 6e 61 62 6c 65 64 20 62 79 0a 2a 2a 20 64   enabled by.** d
1d00: 65 66 61 75 6c 74 20 75 6e 6c 65 73 73 20 53 51  efault unless SQ
1d10: 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64  Lite is compiled
1d20: 20 77 69 74 68 20 53 51 4c 49 54 45 5f 44 45 46   with SQLITE_DEF
1d30: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 3d 30  AULT_MEMSTATUS=0
1d40: 20 69 6e 0a 2a 2a 20 77 68 69 63 68 20 63 61 73   in.** which cas
1d50: 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
1d60: 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20 61  ion statistics a
1d70: 72 65 20 64 69 73 61 62 6c 65 64 20 62 79 20 64  re disabled by d
1d80: 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 21  efault..*/.#if !
1d90: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
1da0: 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53  EFAULT_MEMSTATUS
1db0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
1dc0: 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41  E_DEFAULT_MEMSTA
1dd0: 54 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  TUS 1.#endif../*
1de0: 0a 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20  .** Exactly one 
1df0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1e00: 20 6d 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20   macros must be 
1e10: 64 65 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72  defined in order
1e20: 20 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77   to.** specify w
1e30: 68 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  hich memory allo
1e40: 63 61 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d  cation subsystem
1e50: 20 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   to use..**.**  
1e60: 20 20 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d     SQLITE_SYSTEM
1e70: 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20  _MALLOC         
1e80: 20 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73   // Use normal s
1e90: 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a  ystem malloc().*
1ea0: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e  *     SQLITE_WIN
1eb0: 33 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20  32_MALLOC       
1ec0: 20 20 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32      // Use Win32
1ed0: 20 6e 61 74 69 76 65 20 68 65 61 70 20 41 50 49   native heap API
1ee0: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a  .**     SQLITE_Z
1ef0: 45 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20  ERO_MALLOC      
1f00: 20 20 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73        // Use a s
1f10: 74 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68  tub allocator th
1f20: 61 74 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a  at always fails.
1f30: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45  **     SQLITE_ME
1f40: 4d 44 45 42 55 47 20 20 20 20 20 20 20 20 20 20  MDEBUG          
1f50: 20 20 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e       // Debuggin
1f60: 67 20 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73  g version of sys
1f70: 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a  tem malloc().**.
1f80: 2a 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69  ** On Windows, i
1f90: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e  f the SQLITE_WIN
1fa0: 33 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41  32_MALLOC_VALIDA
1fb0: 54 45 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69  TE macro is defi
1fc0: 6e 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61  ned and the.** a
1fd0: 73 73 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73  ssert() macro is
1fe0: 20 65 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63   enabled, each c
1ff0: 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e  all into the Win
2000: 33 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 73  32 native heap s
2010: 75 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c  ubsystem.** will
2020: 20 63 61 75 73 65 20 48 65 61 70 56 61 6c 69 64   cause HeapValid
2030: 61 74 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64  ate to be called
2040: 2e 20 20 49 66 20 68 65 61 70 20 76 61 6c 69 64  .  If heap valid
2050: 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69  ation should fai
2060: 6c 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69  l, an.** asserti
2070: 6f 6e 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67  on will be trigg
2080: 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e  ered..**.** If n
2090: 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65  one of the above
20a0: 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68   are defined, th
20b0: 65 6e 20 73 65 74 20 53 51 4c 49 54 45 5f 53 59  en set SQLITE_SY
20c0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a  STEM_MALLOC as.*
20d0: 2a 20 74 68 65 20 64 65 66 61 75 6c 74 2e 0a 2a  * the default..*
20e0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
20f0: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
2100: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
2110: 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d  d(SQLITE_WIN32_M
2120: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2130: 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f  ined(SQLITE_ZERO
2140: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
2150: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45  efined(SQLITE_ME
2160: 4d 44 45 42 55 47 29 3e 31 0a 23 20 65 72 72 6f  MDEBUG)>1.# erro
2170: 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20 6f  r "Two or more o
2180: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
2190: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e  compile-time con
21a0: 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f  figuration optio
21b0: 6e 73 5c 0a 20 61 72 65 20 64 65 66 69 6e 65 64  ns\. are defined
21c0: 20 62 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e 65   but at most one
21d0: 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53   is allowed:\. S
21e0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
21f0: 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e 33  LOC, SQLITE_WIN3
2200: 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45  2_MALLOC, SQLITE
2210: 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51 4c  _MEMDEBUG,\. SQL
2220: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22  ITE_ZERO_MALLOC"
2230: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
2240: 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45  ned(SQLITE_SYSTE
2250: 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  M_MALLOC) \.  + 
2260: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57  defined(SQLITE_W
2270: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  IN32_MALLOC) \. 
2280: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
2290: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c  E_ZERO_MALLOC) \
22a0: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
22b0: 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d 30  ITE_MEMDEBUG)==0
22c0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
22d0: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31  _SYSTEM_MALLOC 1
22e0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
22f0: 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f  f SQLITE_MALLOC_
2300: 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f  SOFT_LIMIT is no
2310: 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79  t zero, then try
2320: 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20   to keep the.** 
2330: 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20  sizes of memory 
2340: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f  allocations belo
2350: 77 20 74 68 69 73 20 76 61 6c 75 65 20 77 68 65  w this value whe
2360: 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a  re possible..*/.
2370: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2380: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
2390: 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20  LIMIT).# define 
23a0: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
23b0: 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65  FT_LIMIT 1024.#e
23c0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e  ndif../*.** We n
23d0: 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58  eed to define _X
23e0: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66  OPEN_SOURCE as f
23f0: 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20  ollows in order 
2400: 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63  to enable.** rec
2410: 75 72 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f  ursive mutexes o
2420: 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74  n most Unix syst
2430: 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64 28 29  ems and fchmod()
2440: 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20   on OpenBSD..** 
2450: 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  But _XOPEN_SOURC
2460: 45 20 64 65 66 69 6e 65 20 63 61 75 73 65 73 20  E define causes 
2470: 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63  problems for Mac
2480: 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a   OS X, so omit.*
2490: 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  * it..*/.#if !de
24a0: 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55  fined(_XOPEN_SOU
24b0: 52 43 45 29 20 26 26 20 21 64 65 66 69 6e 65 64  RCE) && !defined
24c0: 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20  (__DARWIN__) && 
24d0: 21 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45  !defined(__APPLE
24e0: 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 5f 58  __).#  define _X
24f0: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a  OPEN_SOURCE 600.
2500: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44  #endif../*.** ND
2510: 45 42 55 47 20 61 6e 64 20 53 51 4c 49 54 45 5f  EBUG and SQLITE_
2520: 44 45 42 55 47 20 61 72 65 20 6f 70 70 6f 73 69  DEBUG are opposi
2530: 74 65 73 2e 20 20 49 74 20 73 68 6f 75 6c 64 20  tes.  It should 
2540: 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20 74  always be true t
2550: 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e  hat.** defined(N
2560: 44 45 42 55 47 29 3d 3d 21 64 65 66 69 6e 65 64  DEBUG)==!defined
2570: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 2e 20  (SQLITE_DEBUG). 
2580: 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20   If this is not 
2590: 63 75 72 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a  currently true,.
25a0: 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72 75 65 20  ** make it true 
25b0: 62 79 20 64 65 66 69 6e 69 6e 67 20 6f 72 20 75  by defining or u
25c0: 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45 42 55 47  ndefining NDEBUG
25d0: 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20  ..**.** Setting 
25e0: 4e 44 45 42 55 47 20 6d 61 6b 65 73 20 74 68 65  NDEBUG makes the
25f0: 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e   code smaller an
2600: 64 20 66 61 73 74 65 72 20 62 79 20 64 69 73 61  d faster by disa
2610: 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73  bling the.** ass
2620: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
2630: 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53   in the code.  S
2640: 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20 64 65  o we want the de
2650: 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20  fault action.** 
2660: 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47  to be for NDEBUG
2670: 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e   to be set and N
2680: 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65  DEBUG to be unde
2690: 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51  fined only if SQ
26a0: 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73  LITE_DEBUG.** is
26b0: 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42   set.  Thus NDEB
26c0: 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70  UG becomes an op
26d0: 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e  t-in rather than
26e0: 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66   an opt-out.** f
26f0: 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21  eature..*/.#if !
2700: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20  defined(NDEBUG) 
2710: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
2720: 54 45 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66  TE_DEBUG) .# def
2730: 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e  ine NDEBUG 1.#en
2740: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
2750: 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e  NDEBUG) && defin
2760: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
2770: 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a  .# undef NDEBUG.
2780: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e  #endif../*.** En
2790: 61 62 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  able SQLITE_ENAB
27a0: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
27b0: 4e 54 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45  NTS if SQLITE_DE
27c0: 42 55 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e  BUG is turned on
27d0: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
27e0: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
27f0: 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53  EXPLAIN_COMMENTS
2800: 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
2810: 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66  ITE_DEBUG).# def
2820: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
2830: 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e  E_EXPLAIN_COMMEN
2840: 54 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  TS 1.#endif../*.
2850: 2a 2a 20 54 68 65 20 74 65 73 74 63 61 73 65 28  ** The testcase(
2860: 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  ) macro is used 
2870: 74 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61  to aid in covera
2880: 67 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65  ge testing.  Whe
2890: 6e 20 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65  n .** doing cove
28a0: 72 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68  rage testing, th
28b0: 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69  e condition insi
28c0: 64 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  de the argument 
28d0: 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29  to.** testcase()
28e0: 20 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61 74   must be evaluat
28f0: 65 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64  ed both true and
2900: 20 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20   false in order 
2910: 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62  to.** get full b
2920: 72 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20  ranch coverage. 
2930: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
2940: 6d 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65  macro is inserte
2950: 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73  d.** to help ens
2960: 75 72 65 20 61 64 65 71 75 61 74 65 20 74 65 73  ure adequate tes
2970: 74 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c  t coverage in pl
2980: 61 63 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c  aces where simpl
2990: 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64  e.** condition/d
29a0: 65 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65  ecision coverage
29b0: 20 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20   is inadequate. 
29c0: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65   For example, te
29d0: 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20  stcase().** can 
29e0: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
29f0: 73 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61  sure boundary va
2a00: 6c 75 65 73 20 61 72 65 20 74 65 73 74 65 64 2e  lues are tested.
2a10: 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b    For.** bitmask
2a20: 20 74 65 73 74 73 2c 20 74 65 73 74 63 61 73 65   tests, testcase
2a30: 28 29 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  () can be used t
2a40: 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68  o make sure each
2a50: 20 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69   bit.** is signi
2a60: 66 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20  ficant and used 
2a70: 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20  at least once.  
2a80: 4f 6e 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  On switch statem
2a90: 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75  ents.** where mu
2aa0: 6c 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20  ltiple cases go 
2ab0: 74 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63  to the same bloc
2ac0: 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63  k of code, testc
2ad0: 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73  ase().** can ins
2ae0: 75 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73  ure that all cas
2af0: 65 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  es are evaluated
2b00: 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ..**.*/.#ifdef S
2b10: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
2b20: 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  EST.  void sqlit
2b30: 65 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b  e3Coverage(int);
2b40: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
2b50: 73 65 28 58 29 20 20 69 66 28 20 58 20 29 7b 20  se(X)  if( X ){ 
2b60: 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28  sqlite3Coverage(
2b70: 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c  __LINE__); }.#el
2b80: 73 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74  se.# define test
2b90: 63 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a  case(X).#endif..
2ba0: 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e  /*.** The TESTON
2bb0: 4c 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  LY macro is used
2bc0: 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69   to enclose vari
2bd0: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
2be0: 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69  s or.** other bi
2bf0: 74 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  ts of code that 
2c00: 61 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75  are needed to su
2c10: 70 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65  pport the argume
2c20: 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65  nts.** within te
2c30: 73 74 63 61 73 65 28 29 20 61 6e 64 20 61 73 73  stcase() and ass
2c40: 65 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f  ert() macros..*/
2c50: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  .#if !defined(ND
2c60: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
2c70: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
2c80: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
2c90: 54 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23  TESTONLY(X)  X.#
2ca0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45  else.# define TE
2cb0: 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66  STONLY(X).#endif
2cc0: 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65  ../*.** Sometime
2cd0: 73 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c  s we need a smal
2ce0: 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65  l amount of code
2cf0: 20 73 75 63 68 20 61 73 20 61 20 76 61 72 69 61   such as a varia
2d00: 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ble initializati
2d10: 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66  on.** to setup f
2d20: 6f 72 20 61 20 6c 61 74 65 72 20 61 73 73 65 72  or a later asser
2d30: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  t() statement.  
2d40: 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  We do not want t
2d50: 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61  his code to.** a
2d60: 70 70 65 61 72 20 77 68 65 6e 20 61 73 73 65 72  ppear when asser
2d70: 74 28 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e  t() is disabled.
2d80: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
2d90: 6d 61 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f  macro is therefo
2da0: 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f  re.** used to co
2db0: 6e 74 61 69 6e 20 74 68 61 74 20 73 65 74 75 70  ntain that setup
2dc0: 20 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41   code.  The "VVA
2dd0: 22 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73  " acronym stands
2de0: 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63   for.** "Verific
2df0: 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f  ation, Validatio
2e00: 6e 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74 61  n, and Accredita
2e10: 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72  tion".  In other
2e20: 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63   words, the.** c
2e30: 6f 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f  ode within VVA_O
2e40: 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20  NLY() will only 
2e50: 72 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66  run during verif
2e60: 69 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65  ication processe
2e70: 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44  s..*/.#ifndef ND
2e80: 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56  EBUG.# define VV
2e90: 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  A_ONLY(X)  X.#el
2ea0: 73 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  se.# define VVA_
2eb0: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
2ec0: 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53  /*.** The ALWAYS
2ed0: 20 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f   and NEVER macro
2ee0: 73 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65  s surround boole
2ef0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77  an expressions w
2f00: 68 69 63 68 20 0a 2a 2a 20 61 72 65 20 69 6e 74  hich .** are int
2f10: 65 6e 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20  ended to always 
2f20: 62 65 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  be true or false
2f30: 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
2f40: 20 53 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73   Such.** express
2f50: 69 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d  ions could be om
2f60: 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63  itted from the c
2f70: 6f 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20  ode completely. 
2f80: 20 42 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65   But they.** are
2f90: 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66   included in a f
2fa0: 65 77 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65  ew cases in orde
2fb0: 72 20 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65  r to enhance the
2fc0: 20 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f   resilience.** o
2fd0: 66 20 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78  f SQLite to unex
2fe0: 70 65 63 74 65 64 20 62 65 68 61 76 69 6f 72 20  pected behavior 
2ff0: 2d 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f  - to make the co
3000: 64 65 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67  de "self-healing
3010: 22 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65  ".** or "ductile
3020: 22 20 72 61 74 68 65 72 20 74 68 61 6e 20 62 65  " rather than be
3030: 69 6e 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e  ing "brittle" an
3040: 64 20 63 72 61 73 68 69 6e 67 20 61 74 20 74 68  d crashing at th
3050: 65 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20  e first.** hint 
3060: 6f 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68  of unplanned beh
3070: 61 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  avior..**.** In 
3080: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57  other words, ALW
3090: 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72  AYS and NEVER ar
30a0: 65 20 61 64 64 65 64 20 66 6f 72 20 64 65 66 65  e added for defe
30b0: 6e 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a  nsive code..**.*
30c0: 2a 20 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76  * When doing cov
30d0: 65 72 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c  erage testing AL
30e0: 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61  WAYS and NEVER a
30f0: 72 65 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f  re hard-coded to
3100: 0a 2a 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20  .** be true and 
3110: 66 61 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68  false so that th
3120: 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f  e unreachable co
3130: 64 65 20 74 68 65 79 20 73 70 65 63 69 66 79 20  de they specify 
3140: 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63  will.** not be c
3150: 6f 75 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74  ounted as untest
3160: 65 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20  ed code..*/.#if 
3170: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43  defined(SQLITE_C
3180: 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20  OVERAGE_TEST).# 
3190: 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29  define ALWAYS(X)
31a0: 20 20 20 20 20 20 28 31 29 0a 23 20 64 65 66 69        (1).# defi
31b0: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
31c0: 20 20 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66    (0).#elif !def
31d0: 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64  ined(NDEBUG).# d
31e0: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
31f0: 20 20 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73       ((X)?1:(ass
3200: 65 72 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66  ert(0),0)).# def
3210: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
3220: 20 20 20 28 28 58 29 3f 28 61 73 73 65 72 74 28     ((X)?(assert(
3230: 30 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23  0),1):0).#else.#
3240: 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58   define ALWAYS(X
3250: 29 20 20 20 20 20 20 28 58 29 0a 23 20 64 65 66  )      (X).# def
3260: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
3270: 20 20 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f     (X).#endif../
3280: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
3290: 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74   (non-zero) if t
32a0: 68 65 20 69 6e 70 75 74 20 69 73 20 61 6e 20 69  he input is an i
32b0: 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20 74  nteger that is t
32c0: 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66  oo large.** to f
32d0: 69 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20  it in 32-bits.  
32e0: 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73  This macro is us
32f0: 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72  ed inside of var
3300: 69 6f 75 73 20 74 65 73 74 63 61 73 65 28 29 0a  ious testcase().
3310: 2a 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72  ** macros to ver
3320: 69 66 79 20 74 68 61 74 20 77 65 20 68 61 76 65  ify that we have
3330: 20 74 65 73 74 65 64 20 53 51 4c 69 74 65 20 66   tested SQLite f
3340: 6f 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75  or large-file su
3350: 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  pport..*/.#defin
3360: 65 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20  e IS_BIG_INT(X) 
3370: 20 28 28 28 58 29 26 7e 28 69 36 34 29 30 78 66   (((X)&~(i64)0xf
3380: 66 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a  fffffff)!=0)../*
3390: 0a 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e  .** The macro un
33a0: 6c 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69  likely() is a hi
33b0: 6e 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64  nt that surround
33c0: 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65  s a boolean.** e
33d0: 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
33e0: 73 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e  s usually false.
33f0: 20 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29    Macro likely()
3400: 20 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20   surrounds.** a 
3410: 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
3420: 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c  on that is usual
3430: 6c 79 20 74 72 75 65 2e 20 20 54 68 65 73 65 20  ly true.  These 
3440: 68 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20  hints could,.** 
3450: 69 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73  in theory, be us
3460: 65 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c  ed by the compil
3470: 65 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62  er to generate b
3480: 65 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a  etter code, but.
3490: 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65  ** currently the
34a0: 79 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65  y are just comme
34b0: 6e 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65  nts for human re
34c0: 61 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  aders..*/.#defin
34d0: 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28  e likely(X)    (
34e0: 58 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b  X).#define unlik
34f0: 65 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e  ely(X)  (X)..#in
3500: 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23  clude "hash.h".#
3510: 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68  include "parse.h
3520: 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69  ".#include <stdi
3530: 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73  o.h>.#include <s
3540: 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64  tdlib.h>.#includ
3550: 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e  e <string.h>.#in
3560: 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e  clude <assert.h>
3570: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65  .#include <stdde
3580: 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63  f.h>../*.** If c
3590: 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70  ompiling for a p
35a0: 72 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61  rocessor that la
35b0: 63 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  cks floating poi
35c0: 6e 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73  nt support,.** s
35d0: 75 62 73 74 69 74 75 74 65 20 69 6e 74 65 67 65  ubstitute intege
35e0: 72 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70  r for floating-p
35f0: 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53  oint.*/.#ifdef S
3600: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
3610: 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69  ING_POINT.# defi
3620: 6e 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65  ne double sqlite
3630: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
3640: 66 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74  float sqlite_int
3650: 36 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47  64.# define LONG
3660: 44 4f 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69  DOUBLE_TYPE sqli
3670: 74 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65  te_int64.# ifnde
3680: 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c  f SQLITE_BIG_DBL
3690: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
36a0: 54 45 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71  TE_BIG_DBL (((sq
36b0: 6c 69 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c  lite3_int64)1)<<
36c0: 35 30 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65  50).# endif.# de
36d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fine SQLITE_OMIT
36e0: 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20  _DATETIME_FUNCS 
36f0: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
3700: 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23  E_OMIT_TRACE 1.#
3710: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49   undef SQLITE_MI
3720: 58 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54  XED_ENDIAN_64BIT
3730: 5f 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53  _FLOAT.# undef S
3740: 51 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e  QLITE_HAVE_ISNAN
3750: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
3760: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23  SQLITE_BIG_DBL.#
3770: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
3780: 49 47 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65  IG_DBL (1e99).#e
3790: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54  ndif../*.** OMIT
37a0: 5f 54 45 4d 50 44 42 20 69 73 20 73 65 74 20 74  _TEMPDB is set t
37b0: 6f 20 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d  o 1 if SQLITE_OM
37c0: 49 54 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66  IT_TEMPDB is def
37d0: 69 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66  ined, or 0.** af
37e0: 74 65 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20  terward. Having 
37f0: 74 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77  this macro allow
3800: 73 20 75 73 20 74 6f 20 63 61 75 73 65 20 74 68  s us to cause th
3810: 65 20 43 20 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a  e C compiler .**
3820: 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75 73   to omit code us
3830: 65 64 20 62 79 20 54 45 4d 50 20 74 61 62 6c 65  ed by TEMP table
3840: 73 20 77 69 74 68 6f 75 74 20 6d 65 73 73 79 20  s without messy 
3850: 23 69 66 6e 64 65 66 20 73 74 61 74 65 6d 65 6e  #ifndef statemen
3860: 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ts..*/.#ifdef SQ
3870: 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42  LITE_OMIT_TEMPDB
3880: 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45  .#define OMIT_TE
3890: 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a 23 64 65  MPDB 1.#else.#de
38a0: 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42  fine OMIT_TEMPDB
38b0: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
38c0: 20 54 68 65 20 22 66 69 6c 65 20 66 6f 72 6d 61   The "file forma
38d0: 74 22 20 6e 75 6d 62 65 72 20 69 73 20 61 6e 20  t" number is an 
38e0: 69 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20  integer that is 
38f0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e  incremented when
3900: 65 76 65 72 0a 2a 2a 20 74 68 65 20 56 44 42 45  ever.** the VDBE
3910: 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d  -level file form
3920: 61 74 20 63 68 61 6e 67 65 73 2e 20 20 54 68 65  at changes.  The
3930: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
3940: 73 20 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20  s define the.** 
3950: 74 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65  the default file
3960: 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77 20   format for new 
3970: 64 61 74 61 62 61 73 65 73 20 61 6e 64 20 74 68  databases and th
3980: 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 66  e maximum file f
3990: 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74 68  ormat.** that th
39a0: 65 20 6c 69 62 72 61 72 79 20 63 61 6e 20 72 65  e library can re
39b0: 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ad..*/.#define S
39c0: 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46  QLITE_MAX_FILE_F
39d0: 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64 65 66 20  ORMAT 4.#ifndef 
39e0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46  SQLITE_DEFAULT_F
39f0: 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66  ILE_FORMAT.# def
3a00: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
3a10: 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34  LT_FILE_FORMAT 4
3a20: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
3a30: 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
3a40: 20 74 72 69 67 67 65 72 73 20 61 72 65 20 72 65   triggers are re
3a50: 63 75 72 73 69 76 65 20 62 79 20 64 65 66 61 75  cursive by defau
3a60: 6c 74 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65  lt.  This can be
3a70: 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61 74 20 72  .** changed at r
3a80: 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67 20 61 20  un-time using a 
3a90: 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64  pragma..*/.#ifnd
3aa0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
3ab0: 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47  T_RECURSIVE_TRIG
3ac0: 47 45 52 53 0a 23 20 64 65 66 69 6e 65 20 53 51  GERS.# define SQ
3ad0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43  LITE_DEFAULT_REC
3ae0: 55 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 20  URSIVE_TRIGGERS 
3af0: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
3b00: 50 72 6f 76 69 64 65 20 61 20 64 65 66 61 75 6c  Provide a defaul
3b10: 74 20 76 61 6c 75 65 20 66 6f 72 20 53 51 4c 49  t value for SQLI
3b20: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e  TE_TEMP_STORE in
3b30: 20 63 61 73 65 20 69 74 20 69 73 20 6e 6f 74 20   case it is not 
3b40: 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20  specified.** on 
3b50: 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  the command-line
3b60: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
3b70: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20  TE_TEMP_STORE.# 
3b80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45  define SQLITE_TE
3b90: 4d 50 5f 53 54 4f 52 45 20 31 0a 23 20 64 65 66  MP_STORE 1.# def
3ba0: 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  ine SQLITE_TEMP_
3bb0: 53 54 4f 52 45 5f 78 63 20 31 20 20 2f 2a 20 45  STORE_xc 1  /* E
3bc0: 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d  xclude from ctim
3bd0: 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  e.c */.#endif../
3be0: 2a 0a 2a 2a 20 49 66 20 6e 6f 20 76 61 6c 75 65  *.** If no value
3bf0: 20 68 61 73 20 62 65 65 6e 20 70 72 6f 76 69 64   has been provid
3c00: 65 64 20 66 6f 72 20 53 51 4c 49 54 45 5f 4d 41  ed for SQLITE_MA
3c10: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
3c20: 2c 20 6f 72 20 69 66 0a 2a 2a 20 53 51 4c 49 54  , or if.** SQLIT
3c30: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 73 20  E_TEMP_STORE is 
3c40: 73 65 74 20 74 6f 20 33 20 28 6e 65 76 65 72 20  set to 3 (never 
3c50: 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69  use temporary fi
3c60: 6c 65 73 29 2c 20 73 65 74 20 69 74 20 0a 2a 2a  les), set it .**
3c70: 20 74 6f 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66   to zero..*/.#if
3c80: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
3c90: 52 45 3d 3d 33 20 7c 7c 20 53 51 4c 49 54 45 5f  RE==3 || SQLITE_
3ca0: 54 48 52 45 41 44 53 41 46 45 3d 3d 30 0a 23 20  THREADSAFE==0.# 
3cb0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58  undef SQLITE_MAX
3cc0: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a  _WORKER_THREADS.
3cd0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3ce0: 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
3cf0: 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e  DS 0.#endif.#ifn
3d00: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  def SQLITE_MAX_W
3d10: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
3d20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
3d30: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
3d40: 20 38 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   8.#endif.#ifnde
3d50: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
3d60: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a  _WORKER_THREADS.
3d70: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3d80: 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54  DEFAULT_WORKER_T
3d90: 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69 66 0a  HREADS 0.#endif.
3da0: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  #if SQLITE_DEFAU
3db0: 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  LT_WORKER_THREAD
3dc0: 53 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  S>SQLITE_MAX_WOR
3dd0: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 75 6e  KER_THREADS.# un
3de0: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  def SQLITE_MAX_W
3df0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
3e00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
3e10: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
3e20: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
3e30: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23  WORKER_THREADS.#
3e40: 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 47 43  endif.../*.** GC
3e50: 43 20 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e  C does not defin
3e60: 65 20 74 68 65 20 6f 66 66 73 65 74 6f 66 28 29  e the offsetof()
3e70: 20 6d 61 63 72 6f 20 73 6f 20 77 65 27 6c 6c 20   macro so we'll 
3e80: 68 61 76 65 20 74 6f 20 64 6f 20 69 74 0a 2a 2a  have to do it.**
3e90: 20 6f 75 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23   ourselves..*/.#
3ea0: 69 66 6e 64 65 66 20 6f 66 66 73 65 74 6f 66 0a  ifndef offsetof.
3eb0: 23 64 65 66 69 6e 65 20 6f 66 66 73 65 74 6f 66  #define offsetof
3ec0: 28 53 54 52 55 43 54 55 52 45 2c 46 49 45 4c 44  (STRUCTURE,FIELD
3ed0: 29 20 28 28 69 6e 74 29 28 28 63 68 61 72 2a 29  ) ((int)((char*)
3ee0: 26 28 28 53 54 52 55 43 54 55 52 45 2a 29 30 29  &((STRUCTURE*)0)
3ef0: 2d 3e 46 49 45 4c 44 29 29 0a 23 65 6e 64 69 66  ->FIELD)).#endif
3f00: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
3f10: 6f 20 63 6f 6d 70 75 74 65 20 6d 69 6e 69 6d 75  o compute minimu
3f20: 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d 20 6f 66  m and maximum of
3f30: 20 74 77 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f   two numbers..*/
3f40: 0a 23 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c 42  .#define MIN(A,B
3f50: 29 20 28 28 41 29 3c 28 42 29 3f 28 41 29 3a 28  ) ((A)<(B)?(A):(
3f60: 42 29 29 0a 23 64 65 66 69 6e 65 20 4d 41 58 28  B)).#define MAX(
3f70: 41 2c 42 29 20 28 28 41 29 3e 28 42 29 3f 28 41  A,B) ((A)>(B)?(A
3f80: 29 3a 28 42 29 29 0a 0a 2f 2a 0a 2a 2a 20 53 77  ):(B))../*.** Sw
3f90: 61 70 20 74 77 6f 20 6f 62 6a 65 63 74 73 20 6f  ap two objects o
3fa0: 66 20 74 79 70 65 20 54 59 50 45 2e 0a 2a 2f 0a  f type TYPE..*/.
3fb0: 23 64 65 66 69 6e 65 20 53 57 41 50 28 54 59 50  #define SWAP(TYP
3fc0: 45 2c 41 2c 42 29 20 7b 54 59 50 45 20 74 3d 41  E,A,B) {TYPE t=A
3fd0: 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a  ; A=B; B=t;}../*
3fe0: 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65  .** Check to see
3ff0: 20 69 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65   if this machine
4000: 20 75 73 65 73 20 45 42 43 44 49 43 2e 20 20 28   uses EBCDIC.  (
4010: 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20  Yes, believe it 
4020: 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65  or.** not, there
4030: 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69   are still machi
4040: 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20 74 68  nes out there th
4050: 61 74 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a  at use EBCDIC.).
4060: 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c  */.#if 'A' == '\
4070: 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51  301'.# define SQ
4080: 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65  LITE_EBCDIC 1.#e
4090: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  lse.# define SQL
40a0: 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64  ITE_ASCII 1.#end
40b0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65  if../*.** Intege
40c0: 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65  rs of known size
40d0: 73 2e 20 20 54 68 65 73 65 20 74 79 70 65 64 65  s.  These typede
40e0: 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  fs might change 
40f0: 66 6f 72 20 61 72 63 68 69 74 65 63 74 75 72 65  for architecture
4100: 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73  s.** where the s
4110: 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72 65 70  izes very.  Prep
4120: 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20  rocessor macros 
4130: 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f  are available so
4140: 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70   that the.** typ
4150: 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e  es can be conven
4160: 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64  iently redefined
4170: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65   at compile-type
4180: 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a  .  Like this:.**
4190: 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63 20 27  .**         cc '
41a0: 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c  -DUINTPTR_TYPE=l
41b0: 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e  ong long int' ..
41c0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e  ..*/.#ifndef UIN
41d0: 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T32_TYPE.# ifdef
41e0: 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23   HAVE_UINT32_T.#
41f0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f    define UINT32_
4200: 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20  TYPE uint32_t.# 
4210: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
4220: 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67  INT32_TYPE unsig
4230: 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ned int.# endif.
4240: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
4250: 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64  INT16_TYPE.# ifd
4260: 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54  ef HAVE_UINT16_T
4270: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31  .#  define UINT1
4280: 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a  6_TYPE uint16_t.
4290: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
42a0: 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73   UINT16_TYPE uns
42b0: 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a  igned short int.
42c0: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
42d0: 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50  ifndef INT16_TYP
42e0: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 49  E.# ifdef HAVE_I
42f0: 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65  NT16_T.#  define
4300: 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31   INT16_TYPE int1
4310: 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  6_t.# else.#  de
4320: 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20  fine INT16_TYPE 
4330: 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69  short int.# endi
4340: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
4350: 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66   UINT8_TYPE.# if
4360: 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54  def HAVE_UINT8_T
4370: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38  .#  define UINT8
4380: 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20  _TYPE uint8_t.# 
4390: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
43a0: 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e  INT8_TYPE unsign
43b0: 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a  ed char.# endif.
43c0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49  #endif.#ifndef I
43d0: 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66  NT8_TYPE.# ifdef
43e0: 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20   HAVE_INT8_T.#  
43f0: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
4400: 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23   int8_t.# else.#
4410: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
4420: 50 45 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23  PE signed char.#
4430: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
4440: 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45  fndef LONGDOUBLE
4450: 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c  _TYPE.# define L
4460: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c  ONGDOUBLE_TYPE l
4470: 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69  ong double.#endi
4480: 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65  f.typedef sqlite
4490: 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20  _int64 i64;     
44a0: 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73       /* 8-byte s
44b0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
44c0: 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f  .typedef sqlite_
44d0: 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20  uint64 u64;     
44e0: 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e      /* 8-byte un
44f0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
4500: 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 33 32  /.typedef UINT32
4510: 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20 20 20  _TYPE u32;      
4520: 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75       /* 4-byte u
4530: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
4540: 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31  */.typedef UINT1
4550: 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20 20 20  6_TYPE u16;     
4560: 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20        /* 2-byte 
4570: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
4580: 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31   */.typedef INT1
4590: 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20 20 20  6_TYPE i16;     
45a0: 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65         /* 2-byte
45b0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
45c0: 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38  */.typedef UINT8
45d0: 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20 20 20  _TYPE u8;       
45e0: 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20        /* 1-byte 
45f0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
4600: 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38   */.typedef INT8
4610: 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20 20 20  _TYPE i8;       
4620: 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65         /* 1-byte
4630: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
4640: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45  */../*.** SQLITE
4650: 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20 75 36  _MAX_U32 is a u6
4660: 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20  4 constant that 
4670: 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75  is the maximum u
4680: 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74  64 value.** that
4690: 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69   can be stored i
46a0: 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75 74 20  n a u32 without 
46b0: 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54  loss of data.  T
46c0: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30  he value.** is 0
46d0: 78 30 30 30 30 30 30 30 30 66 66 66 66 66 66 66  x00000000fffffff
46e0: 66 2e 20 20 42 75 74 20 62 65 63 61 75 73 65 20  f.  But because 
46f0: 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d  of quirks of som
4700: 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a  e compilers, we.
4710: 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65 63 69  ** have to speci
4720: 66 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  fy the value in 
4730: 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69  the less intuiti
4740: 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a  ve manner shown:
4750: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
4760: 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28  TE_MAX_U32  ((((
4770: 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a  u64)1)<<32)-1)..
4780: 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79  /*.** The dataty
4790: 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  pe used to store
47a0: 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68   estimates of th
47b0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
47c0: 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f   in a.** table o
47d0: 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69  r index.  This i
47e0: 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e  s an unsigned in
47f0: 74 65 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72  teger type.  For
4800: 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65   99.9% of.** the
4810: 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74   world, a 32-bit
4820: 20 69 6e 74 65 67 65 72 20 69 73 20 73 75 66 66   integer is suff
4830: 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36  icient.  But a 6
4840: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a  4-bit integer.**
4850: 20 63 61 6e 20 62 65 20 75 73 65 64 20 61 74 20   can be used at 
4860: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20  compile-time if 
4870: 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64  desired..*/.#ifd
4880: 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f  ef SQLITE_64BIT_
4890: 53 54 41 54 53 0a 20 74 79 70 65 64 65 66 20 75  STATS. typedef u
48a0: 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  64 tRowcnt;    /
48b0: 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66  * 64-bit only if
48c0: 20 72 65 71 75 65 73 74 65 64 20 61 74 20 63 6f   requested at co
48d0: 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65  mpile-time */.#e
48e0: 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75 33 32  lse. typedef u32
48f0: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
4900: 33 32 2d 62 69 74 20 69 73 20 74 68 65 20 64 65  32-bit is the de
4910: 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  fault */.#endif.
4920: 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64  ./*.** Estimated
4930: 20 71 75 61 6e 74 69 74 69 65 73 20 75 73 65 64   quantities used
4940: 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61 6e 6e   for query plann
4950: 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64 20 61  ing are stored a
4960: 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61  s 16-bit.** loga
4970: 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71 75 61  rithms.  For qua
4980: 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76 61 6c  ntity X, the val
4990: 75 65 20 73 74 6f 72 65 64 20 69 73 20 31 30 2a  ue stored is 10*
49a0: 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73 0a 2a  log2(X).  This.*
49b0: 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73 69 62  * gives a possib
49c0: 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61 6c 75  le range of valu
49d0: 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74  es of approximat
49e0: 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f 20 31  ely 1.0e986 to 1
49f0: 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68  e-986..** But th
4a00: 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  e allowed values
4a10: 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e 20 20   are "grainy".  
4a20: 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75 65 20  Not every value 
4a30: 69 73 20 72 65 70 72 65 73 65 6e 74 61 62 6c 65  is representable
4a40: 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65  ..** For example
4a50: 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31 36 20  , quantities 16 
4a60: 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74 68 20  and 17 are both 
4a70: 72 65 70 72 65 73 65 6e 74 65 64 20 62 79 20 61  represented by a
4a80: 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30   LogEst.** of 40
4a90: 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69 6e 63  .  However, sinc
4aa0: 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74 69 74  e LogEst quantit
4ab0: 69 65 73 20 61 72 65 20 73 75 70 70 6f 73 65 20  ies are suppose 
4ac0: 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65 73 2c  to be estimates,
4ad0: 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20 76 61  .** not exact va
4ae0: 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70 72 65  lues, this impre
4af0: 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20  cision is not a 
4b00: 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22  problem..**.** "
4b10: 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f 72 74  LogEst" is short
4b20: 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68 6d 69   for "Logarithmi
4b30: 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a  c Estimate"..**.
4b40: 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20  ** Examples:.** 
4b50: 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20 20 20       1 -> 0     
4b60: 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e 20 34           20 -> 4
4b70: 33 20 20 20 20 20 20 20 20 20 20 31 30 30 30 30  3          10000
4b80: 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20 20 20   -> 132.**      
4b90: 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20 20 20  2 -> 10         
4ba0: 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20 20 20      25 -> 46    
4bb0: 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e 20 31        25000 -> 1
4bc0: 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20  46.**      3 -> 
4bd0: 31 36 20 20 20 20 20 20 20 20 20 20 20 20 31 30  16            10
4be0: 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20 20 31  0 -> 66        1
4bf0: 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a  000000 -> 199.**
4c00: 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20 20 20        4 -> 20   
4c10: 20 20 20 20 20 20 20 20 31 30 30 30 20 2d 3e 20          1000 -> 
4c20: 39 39 20 20 20 20 20 20 20 20 31 30 34 38 35 37  99        104857
4c30: 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20  6 -> 200.**     
4c40: 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20 20 20  10 -> 33        
4c50: 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30 20 20     1024 -> 100  
4c60: 20 20 34 32 39 34 39 36 37 32 39 36 20 2d 3e 20    4294967296 -> 
4c70: 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f  320.**.** The Lo
4c80: 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65 67 61  gEst can be nega
4c90: 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61 74 65  tive to indicate
4ca0: 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75   fractional valu
4cb0: 65 73 2e 20 0a 2a 2a 20 45 78 61 6d 70 6c 65 73  es. .** Examples
4cc0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d  :.**.**    0.5 -
4cd0: 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20 20  > -10           
4ce0: 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20 20  0.1 -> -33      
4cf0: 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a    0.0625 -> -40.
4d00: 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36  */.typedef INT16
4d10: 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f  _TYPE LogEst;../
4d20: 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 51 4c  *.** Set the SQL
4d30: 49 54 45 5f 50 54 52 53 49 5a 45 20 6d 61 63 72  ITE_PTRSIZE macr
4d40: 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  o to the number 
4d50: 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 70 6f  of bytes in a po
4d60: 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66  inter.*/.#ifndef
4d70: 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 0a   SQLITE_PTRSIZE.
4d80: 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 53  # if defined(__S
4d90: 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 29  IZEOF_POINTER__)
4da0: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
4db0: 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49 5a  TE_PTRSIZE __SIZ
4dc0: 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23 20  EOF_POINTER__.# 
4dd0: 65 6c 69 66 20 64 65 66 69 6e 65 64 28 69 33 38  elif defined(i38
4de0: 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  6)     || define
4df0: 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c  d(__i386__)   ||
4e00: 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36   defined(_M_IX86
4e10: 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 20  ) ||    \.      
4e20: 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29   defined(_M_ARM)
4e30: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
4e40: 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65 66  arm__)    || def
4e50: 69 6e 65 64 28 5f 5f 78 38 36 29 0a 23 20 20 20  ined(__x86).#   
4e60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
4e70: 52 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23  RSIZE 4.# else.#
4e80: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
4e90: 5f 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64  _PTRSIZE 8.# end
4ea0: 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  if.#endif../*.**
4eb0: 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72   Macros to deter
4ec0: 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68 65  mine whether the
4ed0: 20 6d 61 63 68 69 6e 65 20 69 73 20 62 69 67 20   machine is big 
4ee0: 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e  or little endian
4ef0: 2c 0a 2a 2a 20 61 6e 64 20 77 68 65 74 68 65 72  ,.** and whether
4f00: 20 6f 72 20 6e 6f 74 20 74 68 61 74 20 64 65 74   or not that det
4f10: 65 72 6d 69 6e 61 74 69 6f 6e 20 69 73 20 72 75  ermination is ru
4f20: 6e 2d 74 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c  n-time or compil
4f30: 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f  e-time..**.** Fo
4f40: 72 20 62 65 73 74 20 70 65 72 66 6f 72 6d 61 6e  r best performan
4f50: 63 65 2c 20 61 6e 20 61 74 74 65 6d 70 74 20 69  ce, an attempt i
4f60: 73 20 6d 61 64 65 20 74 6f 20 67 75 65 73 73 20  s made to guess 
4f70: 61 74 20 74 68 65 20 62 79 74 65 2d 6f 72 64 65  at the byte-orde
4f80: 72 0a 2a 2a 20 75 73 69 6e 67 20 43 2d 70 72 65  r.** using C-pre
4f90: 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73  processor macros
4fa0: 2e 20 20 49 66 20 74 68 61 74 20 69 73 20 75 6e  .  If that is un
4fb0: 73 75 63 63 65 73 73 66 75 6c 2c 20 6f 72 20 69  successful, or i
4fc0: 66 0a 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 52 55  f.** -DSQLITE_RU
4fd0: 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 3d  NTIME_BYTEORDER=
4fe0: 31 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 62  1 is set, then b
4ff0: 79 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65 74  yte-order is det
5000: 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72 75  ermined.** at ru
5010: 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65  n-time..*/.#ifde
5020: 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
5030: 41 54 49 4f 4e 0a 63 6f 6e 73 74 20 69 6e 74 20  ATION.const int 
5040: 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a  sqlite3one = 1;.
5050: 23 65 6c 73 65 0a 65 78 74 65 72 6e 20 63 6f 6e  #else.extern con
5060: 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e  st int sqlite3on
5070: 65 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 28 64  e;.#endif.#if (d
5080: 65 66 69 6e 65 64 28 69 33 38 36 29 20 20 20 20  efined(i386)    
5090: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33   || defined(__i3
50a0: 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e  86__)   || defin
50b0: 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20  ed(_M_IX86) ||  
50c0: 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64    \.     defined
50d0: 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64 65  (__x86_64) || de
50e0: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f  fined(__x86_64__
50f0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f  ) || defined(_M_
5100: 58 36 34 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20  X64)  ||    \.  
5110: 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d     defined(_M_AM
5120: 44 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  D64) || defined(
5130: 5f 4d 5f 41 52 4d 29 20 20 20 20 20 7c 7c 20 64  _M_ARM)     || d
5140: 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20  efined(__x86)   
5150: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66  ||    \.     def
5160: 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 29 20 26  ined(__arm__)) &
5170: 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
5180: 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52  E_RUNTIME_BYTEOR
5190: 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51  DER).# define SQ
51a0: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20  LITE_BYTEORDER  
51b0: 20 20 31 32 33 34 0a 23 20 64 65 66 69 6e 65 20    1234.# define 
51c0: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
51d0: 20 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53      0.# define S
51e0: 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49  QLITE_LITTLEENDI
51f0: 41 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51  AN 1.# define SQ
5200: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
5210: 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45    SQLITE_UTF16LE
5220: 0a 23 65 6e 64 69 66 0a 23 69 66 20 28 64 65 66  .#endif.#if (def
5230: 69 6e 65 64 28 73 70 61 72 63 29 20 20 20 20 7c  ined(sparc)    |
5240: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f  | defined(__ppc_
5250: 5f 29 29 20 20 5c 0a 20 20 20 20 26 26 20 21 64  _))  \.    && !d
5260: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 52 55  efined(SQLITE_RU
5270: 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 29  NTIME_BYTEORDER)
5280: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5290: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 34 33  _BYTEORDER    43
52a0: 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  21.# define SQLI
52b0: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
52c0: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
52d0: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30  E_LITTLEENDIAN 0
52e0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
52f0: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51  _UTF16NATIVE  SQ
5300: 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6e  LITE_UTF16BE.#en
5310: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
5320: 28 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45  (SQLITE_BYTEORDE
5330: 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  R).# define SQLI
5340: 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20  TE_BYTEORDER    
5350: 30 20 20 20 20 20 2f 2a 20 30 20 6d 65 61 6e 73  0     /* 0 means
5360: 20 22 75 6e 6b 6e 6f 77 6e 20 61 74 20 63 6f 6d   "unknown at com
5370: 70 69 6c 65 2d 74 69 6d 65 22 20 2a 2f 0a 23 20  pile-time" */.# 
5380: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
5390: 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68  GENDIAN    (*(ch
53a0: 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e  ar *)(&sqlite3on
53b0: 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  e)==0).# define 
53c0: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
53d0: 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26  IAN (*(char *)(&
53e0: 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a  sqlite3one)==1).
53f0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5400: 55 54 46 31 36 4e 41 54 49 56 45 20 20 28 53 51  UTF16NATIVE  (SQ
5410: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53  LITE_BIGENDIAN?S
5420: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51  QLITE_UTF16BE:SQ
5430: 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65  LITE_UTF16LE).#e
5440: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73  ndif../*.** Cons
5450: 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61  tants for the la
5460: 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65  rgest and smalle
5470: 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62  st possible 64-b
5480: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
5490: 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  rs..** These mac
54a0: 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e 65 64  ros are designed
54b0: 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74   to work correct
54c0: 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69  ly on both 32-bi
54d0: 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20  t and 64-bit.** 
54e0: 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64  compilers..*/.#d
54f0: 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e  efine LARGEST_IN
5500: 54 36 34 20 20 28 30 78 66 66 66 66 66 66 66 66  T64  (0xffffffff
5510: 7c 28 28 28 69 36 34 29 30 78 37 66 66 66 66 66  |(((i64)0x7fffff
5520: 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e  ff)<<32)).#defin
5530: 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  e SMALLEST_INT64
5540: 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41   (((i64)-1) - LA
5550: 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a  RGEST_INT64)../*
5560: 20 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20   .** Round up a 
5570: 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65  number to the ne
5580: 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70  xt larger multip
5590: 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69  le of 8.  This i
55a0: 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72  s used.** to for
55b0: 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d  ce 8-byte alignm
55c0: 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72  ent on 64-bit ar
55d0: 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a  chitectures..*/.
55e0: 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78  #define ROUND8(x
55f0: 29 20 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e  )     (((x)+7)&~
5600: 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20  7)../*.** Round 
5610: 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72  down to the near
5620: 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20  est multiple of 
5630: 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55  8.*/.#define ROU
5640: 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26  NDDOWN8(x) ((x)&
5650: 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72  ~7)../*.** Asser
5660: 74 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74  t that the point
5670: 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20  er X is aligned 
5680: 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75  to an 8-byte bou
5690: 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20  ndary.  This.** 
56a0: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e  macro is used on
56b0: 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65 72 74  ly within assert
56c0: 28 29 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  () to verify tha
56d0: 74 20 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a  t the code gets.
56e0: 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74  ** all alignment
56f0: 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f   restrictions co
5700: 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63  rrect..**.** Exc
5710: 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34  ept, if SQLITE_4
5720: 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41  _BYTE_ALIGNED_MA
5730: 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c  LLOC is defined,
5740: 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64   then the.** und
5750: 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29  erlying malloc()
5760: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
5770: 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75 73 20  might return us 
5780: 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a  4-byte aligned.*
5790: 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20  * pointers.  In 
57a0: 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20  that case, only 
57b0: 76 65 72 69 66 79 20 34 2d 62 79 74 65 20 61 6c  verify 4-byte al
57c0: 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64  ignment..*/.#ifd
57d0: 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45  ef SQLITE_4_BYTE
57e0: 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a  _ALIGNED_MALLOC.
57f0: 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42  # define EIGHT_B
5800: 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29  YTE_ALIGNMENT(X)
5810: 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29     ((((char*)(X)
5820: 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29 3d   - (char*)0)&3)=
5830: 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  =0).#else.# defi
5840: 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c  ne EIGHT_BYTE_AL
5850: 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28  IGNMENT(X)   (((
5860: 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68  (char*)(X) - (ch
5870: 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23 65  ar*)0)&7)==0).#e
5880: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61  ndif../*.** Disa
5890: 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74  ble MMAP on plat
58a0: 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20 69  forms where it i
58b0: 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77  s known to not w
58c0: 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ork.*/.#if defin
58d0: 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20  ed(__OpenBSD__) 
58e0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58  || defined(__QNX
58f0: 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53  NTO__).# undef S
5900: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
5910: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
5920: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
5930: 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  E 0.#endif../*.*
5940: 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d 75  * Default maximu
5950: 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79  m size of memory
5960: 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d   used by memory-
5970: 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74 68  mapped I/O in th
5980: 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20  e VFS.*/.#ifdef 
5990: 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c  __APPLE__.# incl
59a0: 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64 69  ude <TargetCondi
59b0: 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 20 69 66 20  tionals.h>.# if 
59c0: 54 41 52 47 45 54 5f 4f 53 5f 49 50 48 4f 4e 45  TARGET_OS_IPHONE
59d0: 0a 23 20 20 20 75 6e 64 65 66 20 53 51 4c 49 54  .#   undef SQLIT
59e0: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
59f0: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
5a00: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
5a10: 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  0.# endif.#endif
5a20: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5a30: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
5a40: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e  if defined(__lin
5a50: 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66  ux__) \.  || def
5a60: 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20  ined(_WIN32) \. 
5a70: 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 41   || (defined(__A
5a80: 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66 69 6e  PPLE__) && defin
5a90: 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a  ed(__MACH__)) \.
5aa0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73    || defined(__s
5ab0: 75 6e 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  un).#   define S
5ac0: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
5ad0: 49 5a 45 20 30 78 37 66 66 66 30 30 30 30 20 20  IZE 0x7fff0000  
5ae0: 2f 2a 20 32 31 34 37 34 31 38 31 31 32 20 2a 2f  /* 2147418112 */
5af0: 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69  .# else.#   defi
5b00: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
5b10: 41 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64 69  AP_SIZE 0.# endi
5b20: 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  f.# define SQLIT
5b30: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f  E_MAX_MMAP_SIZE_
5b40: 78 63 20 31 20 2f 2a 20 65 78 63 6c 75 64 65 20  xc 1 /* exclude 
5b50: 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a  from ctime.c */.
5b60: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
5b70: 65 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53  e default MMAP_S
5b80: 49 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61  IZE is zero on a
5b90: 6c 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f  ll platforms.  O
5ba0: 72 2c 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72  r, even if a lar
5bb0: 67 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d  ger.** default M
5bc0: 4d 41 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63  MAP_SIZE is spec
5bd0: 69 66 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65  ified at compile
5be0: 2d 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65  -time, make sure
5bf0: 20 74 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a   that it does.**
5c00: 20 6e 6f 74 20 65 78 63 65 65 64 20 74 68 65 20   not exceed the 
5c10: 6d 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a  maximum mmap siz
5c20: 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  e..*/.#ifndef SQ
5c30: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
5c40: 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20  P_SIZE.# define 
5c50: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
5c60: 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 64 65 66  MAP_SIZE 0.# def
5c70: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
5c80: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20  LT_MMAP_SIZE_xc 
5c90: 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20 66 72  1  /* Exclude fr
5ca0: 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65  om ctime.c */.#e
5cb0: 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f  ndif.#if SQLITE_
5cc0: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
5cd0: 45 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  E>SQLITE_MAX_MMA
5ce0: 50 5f 53 49 5a 45 0a 23 20 75 6e 64 65 66 20 53  P_SIZE.# undef S
5cf0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
5d00: 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65  AP_SIZE.# define
5d10: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
5d20: 4d 4d 41 50 5f 53 49 5a 45 20 53 51 4c 49 54 45  MMAP_SIZE SQLITE
5d30: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
5d40: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c  endif../*.** Onl
5d50: 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f  y one of SQLITE_
5d60: 45 4e 41 42 4c 45 5f 53 54 41 54 33 20 6f 72 20  ENABLE_STAT3 or 
5d70: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
5d80: 41 54 34 20 63 61 6e 20 62 65 20 64 65 66 69 6e  AT4 can be defin
5d90: 65 64 2e 0a 2a 2a 20 50 72 69 6f 72 69 74 79 20  ed..** Priority 
5da0: 69 73 20 67 69 76 65 6e 20 74 6f 20 53 51 4c 49  is given to SQLI
5db0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 2e  TE_ENABLE_STAT4.
5dc0: 20 20 49 66 20 65 69 74 68 65 72 20 61 72 65 20    If either are 
5dd0: 64 65 66 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a  defined, also.**
5de0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
5df0: 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
5e00: 54 41 54 34 0a 2a 2f 0a 23 69 66 64 65 66 20 53  TAT4.*/.#ifdef S
5e10: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
5e20: 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  T4.# undef SQLIT
5e30: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23  E_ENABLE_STAT3.#
5e40: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
5e50: 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
5e60: 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c  TAT4 1.#elif SQL
5e70: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
5e80: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5e90: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
5ea0: 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53  _STAT4 1.#elif S
5eb0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
5ec0: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 20 75 6e  T3_OR_STAT4.# un
5ed0: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
5ee0: 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
5ef0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53  .#endif../*.** S
5f00: 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
5f10: 45 44 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65  ED will be eithe
5f20: 72 20 31 20 6f 72 20 30 20 64 65 70 65 6e 64 69  r 1 or 0 dependi
5f30: 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72  ng on whether or
5f40: 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 53 65 6c 65   not.** the Sele
5f50: 63 74 20 71 75 65 72 79 20 67 65 6e 65 72 61 74  ct query generat
5f60: 6f 72 20 74 72 61 63 69 6e 67 20 6c 6f 67 69 63  or tracing logic
5f70: 20 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a   is turned on..*
5f80: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
5f90: 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64  LITE_DEBUG) || d
5fa0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
5fb0: 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45  ABLE_SELECTTRACE
5fc0: 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43  ).# define SELEC
5fd0: 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 31  TTRACE_ENABLED 1
5fe0: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
5ff0: 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42  SELECTTRACE_ENAB
6000: 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LED 0.#endif../*
6010: 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
6020: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
6030: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
6040: 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
6050: 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20  busy-handler.** 
6060: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67  callback for a g
6070: 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64  iven sqlite hand
6080: 6c 65 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  le. .**.** The s
6090: 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65  qlite.busyHandle
60a0: 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  r member of the 
60b0: 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f  sqlite struct co
60c0: 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a  ntains the busy.
60d0: 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  ** callback for 
60e0: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
60f0: 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20  dle. Each pager 
6100: 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73  opened via the s
6110: 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20  qlite.** handle 
6120: 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e  is passed a poin
6130: 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75  ter to sqlite.bu
6140: 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62  syHandler. The b
6150: 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63  usy-handler.** c
6160: 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65  allback is curre
6170: 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c  ntly invoked onl
6180: 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61  y from within pa
6190: 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65  ger.c..*/.typede
61a0: 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  f struct BusyHan
61b0: 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72  dler BusyHandler
61c0: 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  ;.struct BusyHan
61d0: 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78  dler {.  int (*x
61e0: 46 75 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74  Func)(void *,int
61f0: 29 3b 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20  );  /* The busy 
6200: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  callback */.  vo
6210: 69 64 20 2a 70 41 72 67 3b 20 20 20 20 20 20 20  id *pArg;       
6220: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
6230: 74 20 61 72 67 20 74 6f 20 62 75 73 79 20 63 61  t arg to busy ca
6240: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20  llback */.  int 
6250: 6e 42 75 73 79 3b 20 20 20 20 20 20 20 20 20 20  nBusy;          
6260: 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d         /* Increm
6270: 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20  ented with each 
6280: 62 75 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a  busy call */.};.
6290: 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74  ./*.** Name of t
62a0: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
62b0: 73 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d  se table.  The m
62c0: 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74  aster database t
62d0: 61 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65  able.** is a spe
62e0: 63 69 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20  cial table that 
62f0: 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20  holds the names 
6300: 61 6e 64 20 61 74 74 72 69 62 75 74 65 73 20 6f  and attributes o
6310: 66 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61  f all.** user ta
6320: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
6330: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  ..*/.#define MAS
6340: 54 45 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22  TER_NAME       "
6350: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23  sqlite_master".#
6360: 64 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54  define TEMP_MAST
6370: 45 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65  ER_NAME  "sqlite
6380: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f  _temp_master"../
6390: 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61  *.** The root-pa
63a0: 67 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72  ge of the master
63b0: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e   database table.
63c0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54  .*/.#define MAST
63d0: 45 52 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a  ER_ROOT       1.
63e0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20  ./*.** The name 
63f0: 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 74 61  of the schema ta
6400: 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ble..*/.#define 
6410: 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20  SCHEMA_TABLE(x) 
6420: 20 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29   ((!OMIT_TEMPDB)
6430: 26 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41  &&(x==1)?TEMP_MA
6440: 53 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52  STER_NAME:MASTER
6450: 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20  _NAME)../*.** A 
6460: 63 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63 72  convenience macr
6470: 6f 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 74  o that returns t
6480: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65  he number of ele
6490: 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61  ments in.** an a
64a0: 72 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  rray..*/.#define
64b0: 20 41 72 72 61 79 53 69 7a 65 28 58 29 20 20 20   ArraySize(X)   
64c0: 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 58   ((int)(sizeof(X
64d0: 29 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29  )/sizeof(X[0])))
64e0: 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e  ../*.** Determin
64f0: 65 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e  e if the argumen
6500: 74 20 69 73 20 61 20 70 6f 77 65 72 20 6f 66 20  t is a power of 
6510: 74 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  two.*/.#define I
6520: 73 50 6f 77 65 72 4f 66 54 77 6f 28 58 29 20 28  sPowerOfTwo(X) (
6530: 28 28 58 29 26 28 28 58 29 2d 31 29 29 3d 3d 30  ((X)&((X)-1))==0
6540: 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  )../*.** The fol
6550: 6c 6f 77 69 6e 67 20 76 61 6c 75 65 20 61 73 20  lowing value as 
6560: 61 20 64 65 73 74 72 75 63 74 6f 72 20 6d 65 61  a destructor mea
6570: 6e 73 20 74 6f 20 75 73 65 20 73 71 6c 69 74 65  ns to use sqlite
6580: 33 44 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68  3DbFree()..** Th
6590: 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  e sqlite3DbFree(
65a0: 29 20 72 6f 75 74 69 6e 65 20 72 65 71 75 69 72  ) routine requir
65b0: 65 73 20 74 77 6f 20 70 61 72 61 6d 65 74 65 72  es two parameter
65c0: 73 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65  s instead of the
65d0: 20 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74   .** one paramet
65e0: 65 72 20 74 68 61 74 20 64 65 73 74 72 75 63 74  er that destruct
65f0: 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e  ors normally wan
6600: 74 2e 20 20 53 6f 20 77 65 20 68 61 76 65 20 74  t.  So we have t
6610: 6f 20 69 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20  o introduce .** 
6620: 74 68 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65  this magic value
6630: 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b   that the code k
6640: 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64  nows to handle d
6650: 69 66 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79  ifferently.  Any
6660: 20 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c   .** pointer wil
6670: 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c  l work here as l
6680: 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64 69 73  ong as it is dis
6690: 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54  tinct from SQLIT
66a0: 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20  E_STATIC.** and 
66b0: 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
66c0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
66d0: 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28  ITE_DYNAMIC   ((
66e0: 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74  sqlite3_destruct
66f0: 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d  or_type)sqlite3M
6700: 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a  allocSize)../*.*
6710: 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d  * When SQLITE_OM
6720: 49 54 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65  IT_WSD is define
6730: 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  d, it means that
6740: 20 74 68 65 20 74 61 72 67 65 74 20 70 6c 61 74   the target plat
6750: 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  form does.** not
6760: 20 73 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c   support Writabl
6770: 65 20 53 74 61 74 69 63 20 44 61 74 61 20 28 57  e Static Data (W
6780: 53 44 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62  SD) such as glob
6790: 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20 76 61  al and static va
67a0: 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20  riables..** All 
67b0: 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65  variables must e
67c0: 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20  ither be on the 
67d0: 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63  stack or dynamic
67e0: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66  ally allocated f
67f0: 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e  rom.** the heap.
6800: 20 20 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e    When WSD is un
6810: 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76  supported, the v
6820: 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74  ariable declarat
6830: 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a  ions scattered.*
6840: 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65  * throughout the
6850: 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73   SQLite code mus
6860: 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e  t become constan
6870: 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65  ts instead.  The
6880: 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d   SQLITE_WSD.** m
6890: 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72  acro is used for
68a0: 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20   this purpose.  
68b0: 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72  And instead of r
68c0: 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76  eferencing the v
68d0: 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63  ariable.** direc
68e0: 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74 73 20  tly, we use its 
68f0: 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65  constant as a ke
6900: 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20  y to lookup the 
6910: 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74  run-time allocat
6920: 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61  ed.** buffer tha
6930: 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72  t holds real var
6940: 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73  iable.  The cons
6950: 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65  tant is also the
6960: 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20   initializer.** 
6970: 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65  for the run-time
6980: 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65   allocated buffe
6990: 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20  r..**.** In the 
69a0: 75 73 75 61 6c 20 63 61 73 65 20 77 68 65 72 65  usual case where
69b0: 20 57 53 44 20 69 73 20 73 75 70 70 6f 72 74 65   WSD is supporte
69c0: 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53  d, the SQLITE_WS
69d0: 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20  D and GLOBAL.** 
69e0: 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f  macros become no
69f0: 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65  -ops and have ze
6a00: 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69  ro performance i
6a10: 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66  mpact..*/.#ifdef
6a20: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
6a30: 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54  .  #define SQLIT
6a40: 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64  E_WSD const.  #d
6a50: 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76  efine GLOBAL(t,v
6a60: 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f  ) (*(t*)sqlite3_
6a70: 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29  wsd_find((void*)
6a80: 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29  &(v), sizeof(v))
6a90: 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
6aa0: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20  te3GlobalConfig 
6ab0: 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71  GLOBAL(struct Sq
6ac0: 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c  lite3Config, sql
6ad0: 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e  ite3Config).  in
6ae0: 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e  t sqlite3_wsd_in
6af0: 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29  it(int N, int J)
6b00: 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  ;.  void *sqlite
6b10: 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20  3_wsd_find(void 
6b20: 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73  *K, int L);.#els
6b30: 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49  e.  #define SQLI
6b40: 54 45 5f 57 53 44 20 0a 20 20 23 64 65 66 69 6e  TE_WSD .  #defin
6b50: 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a  e GLOBAL(t,v) v.
6b60: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
6b70: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71  3GlobalConfig sq
6b80: 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64  lite3Config.#end
6b90: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
6ba0: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61  llowing macros a
6bb0: 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  re used to suppr
6bc0: 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  ess compiler war
6bd0: 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20  nings and to.** 
6be0: 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f  make it clear to
6bf0: 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77   human readers w
6c00: 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70  hen a function p
6c10: 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69  arameter is deli
6c20: 62 65 72 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66  berately .** lef
6c30: 74 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20  t unused within 
6c40: 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75  the body of a fu
6c50: 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75  nction. This usu
6c60: 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65  ally happens whe
6c70: 6e 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20  n.** a function 
6c80: 69 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20  is called via a 
6c90: 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
6ca0: 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68  . For example th
6cb0: 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61  e .** implementa
6cc0: 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61  tion of an SQL a
6cd0: 67 67 72 65 67 61 74 65 20 73 74 65 70 20 63 61  ggregate step ca
6ce0: 6c 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75  llback may not u
6cf0: 73 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65  se the.** parame
6d00: 74 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74  ter indicating t
6d10: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  he number of arg
6d20: 75 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f  uments passed to
6d30: 20 74 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a   the aggregate,.
6d40: 2a 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74  ** if it knows t
6d50: 68 61 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f  hat this is enfo
6d60: 72 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a  rced elsewhere..
6d70: 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e  **.** When a fun
6d80: 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20  ction parameter 
6d90: 69 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61  is not used at a
6da0: 6c 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f  ll within the bo
6db0: 64 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  dy of a function
6dc0: 2c 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72  ,.** it is gener
6dd0: 61 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55  ally named "NotU
6de0: 73 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64  sed" or "NotUsed
6df0: 32 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67  2" to make thing
6e00: 73 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a  s even clearer..
6e10: 2a 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73  ** However, thes
6e20: 65 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73  e macros may als
6e30: 6f 20 62 65 20 75 73 65 64 20 74 6f 20 73 75 70  o be used to sup
6e40: 70 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72  press warnings r
6e50: 65 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72  elated to.** par
6e60: 61 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79  ameters that may
6e70: 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75   or may not be u
6e80: 73 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  sed depending on
6e90: 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74   compilation opt
6ea0: 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61  ions..** For exa
6eb0: 6d 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d  mple those param
6ec0: 65 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20  eters only used 
6ed0: 69 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74  in assert() stat
6ee0: 65 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65  ements. In these
6ef0: 0a 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70 61  .** cases the pa
6f00: 72 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d  rameters are nam
6f10: 65 64 20 61 73 20 70 65 72 20 74 68 65 20 75 73  ed as per the us
6f20: 75 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e  ual conventions.
6f30: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53  .*/.#define UNUS
6f40: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20  ED_PARAMETER(x) 
6f50: 28 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e  (void)(x).#defin
6f60: 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54  e UNUSED_PARAMET
6f70: 45 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f  ER2(x,y) UNUSED_
6f80: 50 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55  PARAMETER(x),UNU
6f90: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29  SED_PARAMETER(y)
6fa0: 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20  ../*.** Forward 
6fb0: 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74  references to st
6fc0: 72 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65  ructures.*/.type
6fd0: 64 65 66 20 73 74 72 75 63 74 20 41 67 67 49 6e  def struct AggIn
6fe0: 66 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65  fo AggInfo;.type
6ff0: 64 65 66 20 73 74 72 75 63 74 20 41 75 74 68 43  def struct AuthC
7000: 6f 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65  ontext AuthConte
7010: 78 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  xt;.typedef stru
7020: 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41  ct AutoincInfo A
7030: 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65  utoincInfo;.type
7040: 64 65 66 20 73 74 72 75 63 74 20 42 69 74 76 65  def struct Bitve
7050: 63 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65  c Bitvec;.typede
7060: 66 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71  f struct CollSeq
7070: 20 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65   CollSeq;.typede
7080: 66 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20  f struct Column 
7090: 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20  Column;.typedef 
70a0: 73 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79  struct Db Db;.ty
70b0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 63 68  pedef struct Sch
70c0: 65 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65  ema Schema;.type
70d0: 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20  def struct Expr 
70e0: 45 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74  Expr;.typedef st
70f0: 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78  ruct ExprList Ex
7100: 70 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20  prList;.typedef 
7110: 73 74 72 75 63 74 20 45 78 70 72 53 70 61 6e 20  struct ExprSpan 
7120: 45 78 70 72 53 70 61 6e 3b 0a 74 79 70 65 64 65  ExprSpan;.typede
7130: 66 20 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b  f struct FKey FK
7140: 65 79 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ey;.typedef stru
7150: 63 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  ct FuncDestructo
7160: 72 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  r FuncDestructor
7170: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7180: 20 46 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66   FuncDef FuncDef
7190: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
71a0: 20 46 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e   FuncDefHash Fun
71b0: 63 44 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65  cDefHash;.typede
71c0: 66 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 20  f struct IdList 
71d0: 49 64 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20  IdList;.typedef 
71e0: 73 74 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64  struct Index Ind
71f0: 65 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ex;.typedef stru
7200: 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49  ct IndexSample I
7210: 6e 64 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65  ndexSample;.type
7220: 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c  def struct KeyCl
7230: 61 73 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79  ass KeyClass;.ty
7240: 70 65 64 65 66 20 73 74 72 75 63 74 20 4b 65 79  pedef struct Key
7250: 49 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79  Info KeyInfo;.ty
7260: 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f  pedef struct Loo
7270: 6b 61 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65  kaside Lookaside
7280: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7290: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c   LookasideSlot L
72a0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79  ookasideSlot;.ty
72b0: 70 65 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64  pedef struct Mod
72c0: 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65  ule Module;.type
72d0: 64 65 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43  def struct NameC
72e0: 6f 6e 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65  ontext NameConte
72f0: 78 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  xt;.typedef stru
7300: 63 74 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a  ct Parse Parse;.
7310: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50  typedef struct P
7320: 72 65 55 70 64 61 74 65 20 50 72 65 55 70 64 61  reUpdate PreUpda
7330: 74 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  te;.typedef stru
7340: 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e  ct PrintfArgumen
7350: 74 73 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e  ts PrintfArgumen
7360: 74 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ts;.typedef stru
7370: 63 74 20 52 6f 77 53 65 74 20 52 6f 77 53 65 74  ct RowSet RowSet
7380: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7390: 20 53 61 76 65 70 6f 69 6e 74 20 53 61 76 65 70   Savepoint Savep
73a0: 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66 20 73 74  oint;.typedef st
73b0: 72 75 63 74 20 53 65 6c 65 63 74 20 53 65 6c 65  ruct Select Sele
73c0: 63 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ct;.typedef stru
73d0: 63 74 20 53 51 4c 69 74 65 54 68 72 65 61 64 20  ct SQLiteThread 
73e0: 53 51 4c 69 74 65 54 68 72 65 61 64 3b 0a 74 79  SQLiteThread;.ty
73f0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c  pedef struct Sel
7400: 65 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65  ectDest SelectDe
7410: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
7420: 63 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69  ct SrcList SrcLi
7430: 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  st;.typedef stru
7440: 63 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41  ct StrAccum StrA
7450: 63 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74  ccum;.typedef st
7460: 72 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65  ruct Table Table
7470: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7480: 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65   TableLock Table
7490: 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74  Lock;.typedef st
74a0: 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e  ruct Token Token
74b0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
74c0: 20 54 72 65 65 56 69 65 77 20 54 72 65 65 56 69   TreeView TreeVi
74d0: 65 77 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ew;.typedef stru
74e0: 63 74 20 54 72 69 67 67 65 72 20 54 72 69 67 67  ct Trigger Trigg
74f0: 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  er;.typedef stru
7500: 63 74 20 54 72 69 67 67 65 72 50 72 67 20 54 72  ct TriggerPrg Tr
7510: 69 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65  iggerPrg;.typede
7520: 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
7530: 53 74 65 70 20 54 72 69 67 67 65 72 53 74 65 70  Step TriggerStep
7540: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7550: 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
7560: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a  UnpackedRecord;.
7570: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56  typedef struct V
7580: 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79  Table VTable;.ty
7590: 70 65 64 65 66 20 73 74 72 75 63 74 20 56 74 61  pedef struct Vta
75a0: 62 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79  bCtx VtabCtx;.ty
75b0: 70 65 64 65 66 20 73 74 72 75 63 74 20 57 61 6c  pedef struct Wal
75c0: 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65  ker Walker;.type
75d0: 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72 65  def struct Where
75e0: 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a  Info WhereInfo;.
75f0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57  typedef struct W
7600: 69 74 68 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a  ith With;../*.**
7610: 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20   Defer sourcing 
7620: 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65  vdbe.h and btree
7630: 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74  .h until after t
7640: 68 65 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20  he "u8" and .** 
7650: 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79  "BusyHandler" ty
7660: 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61  pedefs. vdbe.h a
7670: 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61 20 66  lso requires a f
7680: 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65  ew of the opaque
7690: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65  .** pointer type
76a0: 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29  s (i.e. FuncDef)
76b0: 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a   defined above..
76c0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72  */.#include "btr
76d0: 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  ee.h".#include "
76e0: 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  vdbe.h".#include
76f0: 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c   "pager.h".#incl
7700: 75 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a 0a  ude "pcache.h"..
7710: 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a  #include "os.h".
7720: 23 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e  #include "mutex.
7730: 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  h".../*.** Each 
7740: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f  database file to
7750: 20 62 65 20 61 63 63 65 73 73 65 64 20 62 79 20   be accessed by 
7760: 74 68 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e  the system is an
7770: 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20   instance.** of 
7780: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
7790: 72 75 63 74 75 72 65 2e 20 20 54 68 65 72 65 20  ructure.  There 
77a0: 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f  are normally two
77b0: 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63 74   of these struct
77c0: 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73  ures.** in the s
77d0: 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61  qlite.aDb[] arra
77e0: 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68  y.  aDb[0] is th
77f0: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
7800: 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b  file and.** aDb[
7810: 31 5d 20 69 73 20 74 68 65 20 64 61 74 61 62 61  1] is the databa
7820: 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
7830: 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74  hold temporary t
7840: 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e  ables.  Addition
7850: 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20  al.** databases 
7860: 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64 2e  may be attached.
7870: 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a  .*/.struct Db {.
7880: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
7890: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
78a0: 66 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  f this database 
78b0: 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  */.  Btree *pBt;
78c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
78d0: 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75 72   B*Tree structur
78e0: 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61 62  e for this datab
78f0: 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38  ase file */.  u8
7900: 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20   safety_level;  
7910: 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65 73     /* How aggres
7920: 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67 20  sive at syncing 
7930: 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a  data to disk */.
7940: 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
7950: 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65  a;     /* Pointe
7960: 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73 63  r to database sc
7970: 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73  hema (possibly s
7980: 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  hared) */.};../*
7990: 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
79a0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
79b0: 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72 65   structure store
79c0: 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63 68  s a database sch
79d0: 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20  ema..**.** Most 
79e0: 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61  Schema objects a
79f0: 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  re associated wi
7a00: 74 68 20 61 20 42 74 72 65 65 2e 20 20 54 68 65  th a Btree.  The
7a10: 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a   exception is.**
7a20: 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20   the Schema for 
7a30: 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 65  the TEMP databae
7a40: 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31  s (sqlite3.aDb[1
7a50: 5d 29 20 77 68 69 63 68 20 69 73 20 66 72 65 65  ]) which is free
7a60: 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e  -standing..** In
7a70: 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f   shared cache mo
7a80: 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68  de, a single Sch
7a90: 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62  ema object can b
7aa0: 65 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74  e shared by mult
7ab0: 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74  iple.** Btrees t
7ac0: 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68 65  hat refer to the
7ad0: 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67   same underlying
7ae0: 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74   BtShared object
7af0: 2e 0a 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20  ..** .** Schema 
7b00: 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f  objects are auto
7b10: 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f  matically deallo
7b20: 63 61 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c  cated when the l
7b30: 61 73 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a  ast Btree that.*
7b40: 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74 68 65  * references the
7b50: 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20  m is destroyed. 
7b60: 20 20 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d    The TEMP Schem
7b70: 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72  a is manually fr
7b80: 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65  eed by.** sqlite
7b90: 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20  3_close()..*.** 
7ba0: 41 20 74 68 72 65 61 64 20 6d 75 73 74 20 62 65  A thread must be
7bb0: 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78   holding a mutex
7bc0: 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f   on the correspo
7bd0: 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f  nding Btree in o
7be0: 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73  rder.** to acces
7bf0: 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74  s Schema content
7c00: 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20  .  This implies 
7c10: 74 68 61 74 20 74 68 65 20 74 68 72 65 61 64 20  that the thread 
7c20: 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20  must also be.** 
7c30: 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20  holding a mutex 
7c40: 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20 63  on the sqlite3 c
7c50: 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65  onnection pointe
7c60: 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20  r that owns the 
7c70: 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20  Btree..** For a 
7c80: 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c  TEMP Schema, onl
7c90: 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  y the connection
7ca0: 20 6d 75 74 65 78 20 69 73 20 72 65 71 75 69 72   mutex is requir
7cb0: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63  ed..*/.struct Sc
7cc0: 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68  hema {.  int sch
7cd0: 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a  ema_cookie;   /*
7ce0: 20 44 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   Database schema
7cf0: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
7d00: 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  for this file */
7d10: 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69  .  int iGenerati
7d20: 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72  on;     /* Gener
7d30: 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20  ation counter.  
7d40: 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68  Incremented with
7d50: 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a   each change */.
7d60: 20 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20    Hash tblHash; 
7d70: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61         /* All ta
7d80: 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79 20  bles indexed by 
7d90: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69  name */.  Hash i
7da0: 64 78 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f  dxHash;        /
7db0: 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e  * All (named) in
7dc0: 64 69 63 65 73 20 69 6e 64 65 78 65 64 20 62 79  dices indexed by
7dd0: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
7de0: 74 72 69 67 48 61 73 68 3b 20 20 20 20 20 20 20  trigHash;       
7df0: 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20  /* All triggers 
7e00: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
7e10: 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61  */.  Hash fkeyHa
7e20: 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  sh;       /* All
7e30: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79   foreign keys by
7e40: 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c   referenced tabl
7e50: 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c  e name */.  Tabl
7e60: 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20  e *pSeqTab;     
7e70: 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73   /* The sqlite_s
7e80: 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73  equence table us
7e90: 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d  ed by AUTOINCREM
7ea0: 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65  ENT */.  u8 file
7eb0: 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a  _format;      /*
7ec0: 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76   Schema format v
7ed0: 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20  ersion for this 
7ee0: 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63  file */.  u8 enc
7ef0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
7f00: 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
7f10: 75 73 65 64 20 62 79 20 74 68 69 73 20 64 61 74  used by this dat
7f20: 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 73  abase */.  u16 s
7f30: 63 68 65 6d 61 46 6c 61 67 73 3b 20 20 20 20 20  chemaFlags;     
7f40: 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61  /* Flags associa
7f50: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 73 63  ted with this sc
7f60: 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61  hema */.  int ca
7f70: 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f  che_size;      /
7f80: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * Number of page
7f90: 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20  s to use in the 
7fa0: 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  cache */.};../*.
7fb0: 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
7fc0: 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
7fd0: 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
7fe0: 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a  ar bits in the .
7ff0: 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66  ** Db.pSchema->f
8000: 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
8010: 64 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70  define DbHasProp
8020: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20  erty(D,I,P)     
8030: 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53  (((D)->aDb[I].pS
8040: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
8050: 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64  gs&(P))==(P)).#d
8060: 65 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50 72  efine DbHasAnyPr
8070: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 28  operty(D,I,P)  (
8080: 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63  ((D)->aDb[I].pSc
8090: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
80a0: 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69  s&(P))!=0).#defi
80b0: 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74 79  ne DbSetProperty
80c0: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d  (D,I,P)     (D)-
80d0: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
80e0: 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50  >schemaFlags|=(P
80f0: 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61  ).#define DbClea
8100: 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  rProperty(D,I,P)
8110: 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70     (D)->aDb[I].p
8120: 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c  Schema->schemaFl
8130: 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a  ags&=~(P)../*.**
8140: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
8150: 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68 65  for the DB.pSche
8160: 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e  ma->flags field.
8170: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63  .**.** The DB_Sc
8180: 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67 20  hemaLoaded flag 
8190: 69 73 20 73 65 74 20 61 66 74 65 72 20 74 68 65  is set after the
81a0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
81b0: 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61   has been.** rea
81c0: 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20  d into internal 
81d0: 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a  hash tables..**.
81e0: 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65  ** DB_UnresetVie
81f0: 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e  ws means that on
8200: 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73 20  e or more views 
8210: 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  have column name
8220: 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20 62  s that.** have b
8230: 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20  een filled out. 
8240: 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20 63   If the schema c
8250: 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63 6f  hanges, these co
8260: 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74  lumn names might
8270: 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64 20  .** changes and 
8280: 73 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c 6c  so the view will
8290: 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73 65   need to be rese
82a0: 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  t..*/.#define DB
82b0: 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20 20  _SchemaLoaded   
82c0: 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65 20   0x0001  /* The 
82d0: 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20  schema has been 
82e0: 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e  loaded */.#defin
82f0: 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77  e DB_UnresetView
8300: 73 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20  s    0x0002  /* 
8310: 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65 20  Some views have 
8320: 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e  defined column n
8330: 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ames */.#define 
8340: 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20 20  DB_Empty        
8350: 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 68     0x0004  /* Th
8360: 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79 20  e file is empty 
8370: 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73 29  (length 0 bytes)
8380: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e   */../*.** The n
8390: 75 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72 65  umber of differe
83a0: 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e  nt kinds of thin
83b0: 67 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c  gs that can be l
83c0: 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20  imited.** using 
83d0: 74 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69  the sqlite3_limi
83e0: 74 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a  t() interface..*
83f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
8400: 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45  _N_LIMIT (SQLITE
8410: 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48  _LIMIT_WORKER_TH
8420: 52 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20  READS+1)../*.** 
8430: 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  Lookaside malloc
8440: 20 69 73 20 61 20 73 65 74 20 6f 66 20 66 69 78   is a set of fix
8450: 65 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20  ed-size buffers 
8460: 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64  that can be used
8470: 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73  .** to satisfy s
8480: 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d  mall transient m
8490: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
84a0: 20 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62   requests for ob
84b0: 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61  jects.** associa
84c0: 74 65 64 20 77 69 74 68 20 61 20 70 61 72 74 69  ted with a parti
84d0: 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63  cular database c
84e0: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20  onnection.  The 
84f0: 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73  use of.** lookas
8500: 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69  ide malloc provi
8510: 64 65 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e  des a significan
8520: 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e  t performance en
8530: 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70  hancement.** (ap
8540: 70 72 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f  prox 10%) by avo
8550: 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d  iding numerous m
8560: 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65  alloc/free reque
8570: 73 74 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e  sts while parsin
8580: 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65  g.** SQL stateme
8590: 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c  nts..**.** The L
85a0: 6f 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74 75  ookaside structu
85b0: 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75  re holds configu
85c0: 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69  ration informati
85d0: 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20  on about the.** 
85e0: 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  lookaside malloc
85f0: 20 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63   subsystem.  Eac
8600: 68 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f  h available memo
8610: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e  ry allocation in
8620: 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64  .** the lookasid
8630: 65 20 73 75 62 73 79 73 74 65 6d 20 69 73 20 73  e subsystem is s
8640: 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65  tored on a linke
8650: 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73  d list of Lookas
8660: 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63  ideSlot.** objec
8670: 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73  ts..**.** Lookas
8680: 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ide allocations 
8690: 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64  are only allowed
86a0: 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61   for objects tha
86b0: 74 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64  t are associated
86c0: 0a 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74 69  .** with a parti
86d0: 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63  cular database c
86e0: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63  onnection.  Henc
86f0: 65 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  e, schema inform
8700: 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20  ation cannot.** 
8710: 62 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f  be stored in loo
8720: 6b 61 73 69 64 65 20 62 65 63 61 75 73 65 20 69  kaside because i
8730: 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  n shared cache m
8740: 6f 64 65 20 74 68 65 20 73 63 68 65 6d 61 20 69  ode the schema i
8750: 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73  nformation.** is
8760: 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69   shared by multi
8770: 70 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ple database con
8780: 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65  nections.  There
8790: 66 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73  fore, while pars
87a0: 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e  ing.** schema in
87b0: 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c  formation, the L
87c0: 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65  ookaside.bEnable
87d0: 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65  d flag is cleare
87e0: 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f  d so that.** loo
87f0: 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f  kaside allocatio
8800: 6e 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20  ns are not used 
8810: 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65  to construct the
8820: 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e   schema objects.
8830: 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61  .*/.struct Looka
8840: 73 69 64 65 20 7b 0a 20 20 75 31 36 20 73 7a 3b  side {.  u16 sz;
8850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8860: 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68   /* Size of each
8870: 20 62 75 66 66 65 72 20 69 6e 20 62 79 74 65 73   buffer in bytes
8880: 20 2a 2f 0a 20 20 75 38 20 62 45 6e 61 62 6c 65   */.  u8 bEnable
8890: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
88a0: 20 46 61 6c 73 65 20 74 6f 20 64 69 73 61 62 6c   False to disabl
88b0: 65 20 6e 65 77 20 6c 6f 6f 6b 61 73 69 64 65 20  e new lookaside 
88c0: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 20  allocations */. 
88d0: 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20   u8 bMalloced;  
88e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
88f0: 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61 69   if pStart obtai
8900: 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ned from sqlite3
8910: 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 69  _malloc() */.  i
8920: 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20 20 20 20  nt nOut;        
8930: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
8940: 20 6f 66 20 62 75 66 66 65 72 73 20 63 75 72 72   of buffers curr
8950: 65 6e 74 6c 79 20 63 68 65 63 6b 65 64 20 6f 75  ently checked ou
8960: 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f 75 74  t */.  int mxOut
8970: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
8980: 2a 20 48 69 67 68 77 61 74 65 72 20 6d 61 72 6b  * Highwater mark
8990: 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20 20 69   for nOut */.  i
89a0: 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20  nt anStat[3];   
89b0: 20 20 20 20 20 20 20 2f 2a 20 30 3a 20 68 69 74         /* 0: hit
89c0: 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69 73 73  s.  1: size miss
89d0: 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73  es.  2: full mis
89e0: 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69  ses */.  Lookasi
89f0: 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20  deSlot *pFree;  
8a00: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69   /* List of avai
8a10: 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f  lable buffers */
8a20: 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b  .  void *pStart;
8a30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
8a40: 72 73 74 20 62 79 74 65 20 6f 66 20 61 76 61 69  rst byte of avai
8a50: 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61  lable memory spa
8a60: 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45  ce */.  void *pE
8a70: 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nd;             
8a80: 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 70 61  /* First byte pa
8a90: 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61  st end of availa
8aa0: 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a  ble space */.};.
8ab0: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
8ac0: 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69  Slot {.  Lookasi
8ad0: 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20  deSlot *pNext;  
8ae0: 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72    /* Next buffer
8af0: 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20   in the list of 
8b00: 66 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a  free buffers */.
8b10: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68  };../*.** A hash
8b20: 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74   table for funct
8b30: 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e  ion definitions.
8b40: 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63 68  .**.** Hash each
8b50: 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75   FuncDef structu
8b60: 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74  re into one of t
8b70: 68 65 20 46 75 6e 63 44 65 66 48 61 73 68 2e 61  he FuncDefHash.a
8b80: 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c  [] slots..** Col
8b90: 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74  lisions are on t
8ba0: 68 65 20 46 75 6e 63 44 65 66 2e 70 48 61 73 68  he FuncDef.pHash
8bb0: 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74 72 75 63   chain..*/.struc
8bc0: 74 20 46 75 6e 63 44 65 66 48 61 73 68 20 7b 0a  t FuncDefHash {.
8bd0: 20 20 46 75 6e 63 44 65 66 20 2a 61 5b 32 33 5d    FuncDef *a[23]
8be0: 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20  ;       /* Hash 
8bf0: 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69  table for functi
8c00: 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65  ons */.};..#ifde
8c10: 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  f SQLITE_USER_AU
8c20: 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a  THENTICATION./*.
8c30: 2a 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 68  ** Information h
8c40: 65 6c 64 20 69 6e 20 74 68 65 20 22 73 71 6c 69  eld in the "sqli
8c50: 74 65 33 22 20 64 61 74 61 62 61 73 65 20 63 6f  te3" database co
8c60: 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20  nnection object 
8c70: 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d  and used.** to m
8c80: 61 6e 61 67 65 20 75 73 65 72 20 61 75 74 68 65  anage user authe
8c90: 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79  ntication..*/.ty
8ca0: 70 65 64 65 66 20 73 74 72 75 63 74 20 73 71 6c  pedef struct sql
8cb0: 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 73 71  ite3_userauth sq
8cc0: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 3b 0a  lite3_userauth;.
8cd0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75  struct sqlite3_u
8ce0: 73 65 72 61 75 74 68 20 7b 0a 20 20 75 38 20 61  serauth {.  u8 a
8cf0: 75 74 68 4c 65 76 65 6c 3b 20 20 20 20 20 20 20  uthLevel;       
8d00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
8d10: 72 65 6e 74 20 61 75 74 68 65 6e 74 69 63 61 74  rent authenticat
8d20: 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 69  ion level */.  i
8d30: 6e 74 20 6e 41 75 74 68 50 57 3b 20 20 20 20 20  nt nAuthPW;     
8d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8d50: 53 69 7a 65 20 6f 66 20 74 68 65 20 7a 41 75 74  Size of the zAut
8d60: 68 50 57 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  hPW in bytes */.
8d70: 20 20 63 68 61 72 20 2a 7a 41 75 74 68 50 57 3b    char *zAuthPW;
8d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d90: 2f 2a 20 50 61 73 73 77 6f 72 64 20 75 73 65 64  /* Password used
8da0: 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65   to authenticate
8db0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74   */.  char *zAut
8dc0: 68 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20  hUser;          
8dd0: 20 20 20 20 2f 2a 20 55 73 65 72 20 6e 61 6d 65      /* User name
8de0: 20 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74   used to authent
8df0: 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20  icate */.};../* 
8e00: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
8e10: 6f 72 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  or sqlite3_usera
8e20: 75 74 68 2e 61 75 74 68 4c 65 76 65 6c 20 2a 2f  uth.authLevel */
8e30: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55  .#define UAUTH_U
8e40: 6e 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20 20 20  nknown     0    
8e50: 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 69   /* Authenticati
8e60: 6f 6e 20 6e 6f 74 20 79 65 74 20 63 68 65 63 6b  on not yet check
8e70: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  ed */.#define UA
8e80: 55 54 48 5f 46 61 69 6c 20 20 20 20 20 20 20 20  UTH_Fail        
8e90: 31 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75  1     /* User au
8ea0: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61 69  thentication fai
8eb0: 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  led */.#define U
8ec0: 41 55 54 48 5f 55 73 65 72 20 20 20 20 20 20 20  AUTH_User       
8ed0: 20 32 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e   2     /* Authen
8ee0: 74 69 63 61 74 65 64 20 61 73 20 61 20 6e 6f 72  ticated as a nor
8ef0: 6d 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64 65 66  mal user */.#def
8f00: 69 6e 65 20 55 41 55 54 48 5f 41 64 6d 69 6e 20  ine UAUTH_Admin 
8f10: 20 20 20 20 20 20 33 20 20 20 20 20 2f 2a 20 41        3     /* A
8f20: 75 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20  uthenticated as 
8f30: 61 6e 20 61 64 6d 69 6e 69 73 74 72 61 74 6f 72  an administrator
8f40: 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e   */../* Function
8f50: 73 20 75 73 65 64 20 6f 6e 6c 79 20 62 79 20 75  s used only by u
8f60: 73 65 72 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  ser authorizatio
8f70: 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74 20 73  n logic */.int s
8f80: 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 54 61  qlite3UserAuthTa
8f90: 62 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  ble(const char*)
8fa0: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65  ;.int sqlite3Use
8fb0: 72 41 75 74 68 43 68 65 63 6b 4c 6f 67 69 6e 28  rAuthCheckLogin(
8fc0: 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
8fd0: 68 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64 20  har*,u8*);.void 
8fe0: 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 49  sqlite3UserAuthI
8ff0: 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  nit(sqlite3*);.v
9000: 6f 69 64 20 73 71 6c 69 74 65 33 43 72 79 70 74  oid sqlite3Crypt
9010: 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e  Func(sqlite3_con
9020: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
9030: 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e  3_value**);..#en
9040: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53  dif /* SQLITE_US
9050: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
9060: 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65  N */../*.** type
9070: 64 65 66 20 66 6f 72 20 74 68 65 20 61 75 74 68  def for the auth
9080: 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61  orization callba
9090: 63 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a  ck function..*/.
90a0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
90b0: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
90c0: 4e 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20  N.  typedef int 
90d0: 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29  (*sqlite3_xauth)
90e0: 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
90f0: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
9100: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a  r*,const char*,.
9110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
9130: 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
9140: 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a  t char*);.#else.
9150: 20 20 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a    typedef int (*
9160: 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76  sqlite3_xauth)(v
9170: 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
9180: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
9190: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20  ,const char*,.  
91a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
91c0: 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  st char*);.#endi
91d0: 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64  f.../*.** Each d
91e0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
91f0: 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  on is an instanc
9200: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
9210: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  ng structure..*/
9220: 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 20  .struct sqlite3 
9230: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20  {.  sqlite3_vfs 
9240: 2a 70 56 66 73 3b 20 20 20 20 20 20 20 20 20 20  *pVfs;          
9250: 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63    /* OS Interfac
9260: 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64  e */.  struct Vd
9270: 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20  be *pVdbe;      
9280: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
9290: 61 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d  active virtual m
92a0: 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c  achines */.  Col
92b0: 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b  lSeq *pDfltColl;
92c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
92d0: 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
92e0: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42 49  ing sequence (BI
92f0: 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74  NARY) */.  sqlit
9300: 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b  e3_mutex *mutex;
9310: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e           /* Conn
9320: 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a  ection mutex */.
9330: 20 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20    Db *aDb;      
9340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9350: 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20  /* All backends 
9360: 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20  */.  int nDb;   
9370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9380: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
9390: 62 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74  backends current
93a0: 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69  ly in use */.  i
93b0: 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20  nt flags;       
93c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
93d0: 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c  Miscellaneous fl
93e0: 61 67 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a  ags. See below *
93f0: 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69  /.  i64 lastRowi
9400: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
9410: 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f    /* ROWID of mo
9420: 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74  st recent insert
9430: 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a   (see above) */.
9440: 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20    i64 szMmap;   
9450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9460: 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f  /* Default mmap_
9470: 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a  size setting */.
9480: 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f    unsigned int o
9490: 70 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20  penFlags;       
94a0: 2f 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20  /* Flags passed 
94b0: 74 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78  to sqlite3_vfs.x
94c0: 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Open() */.  int 
94d0: 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20  errCode;        
94e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73            /* Mos
94f0: 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63  t recent error c
9500: 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a  ode (SQLITE_*) *
9510: 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b  /.  int errMask;
9520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9530: 20 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f    /* & result co
9540: 64 65 73 20 77 69 74 68 20 74 68 69 73 20 62 65  des with this be
9550: 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a  fore returning *
9560: 2f 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61  /.  u16 dbOptFla
9570: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
9580: 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e    /* Flags to en
9590: 61 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74  able/disable opt
95a0: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  imizations */.  
95b0: 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
95c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
95d0: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   Text encoding *
95e0: 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69  /.  u8 autoCommi
95f0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
9600: 20 20 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f    /* The auto-co
9610: 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20  mmit flag. */.  
9620: 75 38 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20  u8 temp_store;  
9630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9640: 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f   1: file 2: memo
9650: 72 79 20 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f  ry 0: default */
9660: 0a 20 20 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c  .  u8 mallocFail
9670: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ed;             
9680: 20 2f 2a 20 54 72 75 65 20 69 66 20 77 65 20 68   /* True if we h
9690: 61 76 65 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f  ave seen a mallo
96a0: 63 20 66 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75  c failure */.  u
96b0: 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20  8 dfltLockMode; 
96c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
96d0: 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d  Default locking-
96e0: 6d 6f 64 65 20 66 6f 72 20 61 74 74 61 63 68 65  mode for attache
96f0: 64 20 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65  d dbs */.  signe
9700: 64 20 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76  d char nextAutov
9710: 61 63 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f  ac;      /* Auto
9720: 76 61 63 20 73 65 74 74 69 6e 67 20 61 66 74 65  vac setting afte
9730: 72 20 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20  r VACUUM if >=0 
9740: 2a 2f 0a 20 20 75 38 20 73 75 70 70 72 65 73 73  */.  u8 suppress
9750: 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
9760: 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73     /* Do not iss
9770: 75 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  ue error message
9780: 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75  s if true */.  u
9790: 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  8 vtabOnConflict
97a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
97b0: 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
97c0: 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63  for s3_vtab_on_c
97d0: 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75  onflict() */.  u
97e0: 38 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  8 isTransactionS
97f0: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20  avepoint;    /* 
9800: 54 72 75 65 20 69 66 20 74 68 65 20 6f 75 74 65  True if the oute
9810: 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20  rmost savepoint 
9820: 69 73 20 61 20 54 53 20 2a 2f 0a 20 20 69 6e 74  is a TS */.  int
9830: 20 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20   nextPagesize;  
9840: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
9850: 67 65 73 69 7a 65 20 61 66 74 65 72 20 56 41 43  gesize after VAC
9860: 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75  UUM if >0 */.  u
9870: 33 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20  32 magic;       
9880: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9890: 4d 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72  Magic number for
98a0: 20 64 65 74 65 63 74 20 6c 69 62 72 61 72 79 20   detect library 
98b0: 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20  misuse */.  int 
98c0: 6e 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20  nChange;        
98d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
98e0: 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
98f0: 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
9900: 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c   */.  int nTotal
9910: 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20  Change;         
9920: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74      /* Value ret
9930: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
9940: 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29  _total_changes()
9950: 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74   */.  int aLimit
9960: 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d  [SQLITE_N_LIMIT]
9970: 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f  ;   /* Limits */
9980: 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65  .  int nMaxSorte
9990: 72 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  rMmap;          
99a0: 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65   /* Maximum size
99b0: 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70 70   of regions mapp
99c0: 65 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a  ed by sorter */.
99d0: 20 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33    struct sqlite3
99e0: 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20  InitInfo {      
99f0: 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  /* Information u
9a00: 73 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69  sed during initi
9a10: 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20  alization */.   
9a20: 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20   int newTnum;   
9a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9a40: 52 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c  Rootpage of tabl
9a50: 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  e being initiali
9a60: 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44  zed */.    u8 iD
9a70: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
9a80: 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
9a90: 64 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67  db file is being
9aa0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
9ab0: 20 20 20 20 75 38 20 62 75 73 79 3b 20 20 20 20      u8 busy;    
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ad0: 2f 2a 20 54 52 55 45 20 69 66 20 63 75 72 72 65  /* TRUE if curre
9ae0: 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e  ntly initializin
9af0: 67 20 2a 2f 0a 20 20 20 20 75 38 20 6f 72 70 68  g */.    u8 orph
9b00: 61 6e 54 72 69 67 67 65 72 3b 20 20 20 20 20 20  anTrigger;      
9b10: 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 73 74 61       /* Last sta
9b20: 74 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e  tement is orphan
9b30: 65 64 20 54 45 4d 50 20 74 72 69 67 67 65 72 20  ed TEMP trigger 
9b40: 2a 2f 0a 20 20 20 20 75 38 20 69 6d 70 6f 73 74  */.    u8 impost
9b50: 65 72 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20  erTable;        
9b60: 20 20 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61     /* Building a
9b70: 6e 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c 65  n imposter table
9b80: 20 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20   */.  } init;.  
9b90: 69 6e 74 20 6e 56 64 62 65 41 63 74 69 76 65 3b  int nVdbeActive;
9ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9bb0: 20 4e 75 6d 62 65 72 20 6f 66 20 56 44 42 45 73   Number of VDBEs
9bc0: 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69   currently runni
9bd0: 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62  ng */.  int nVdb
9be0: 65 52 65 61 64 3b 20 20 20 20 20 20 20 20 20 20  eRead;          
9bf0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
9c00: 6f 66 20 61 63 74 69 76 65 20 56 44 42 45 73 20  of active VDBEs 
9c10: 74 68 61 74 20 72 65 61 64 20 6f 72 20 77 72 69  that read or wri
9c20: 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62  te */.  int nVdb
9c30: 65 57 72 69 74 65 3b 20 20 20 20 20 20 20 20 20  eWrite;         
9c40: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
9c50: 6f 66 20 61 63 74 69 76 65 20 56 44 42 45 73 20  of active VDBEs 
9c60: 74 68 61 74 20 72 65 61 64 20 61 6e 64 20 77 72  that read and wr
9c70: 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64  ite */.  int nVd
9c80: 62 65 45 78 65 63 3b 20 20 20 20 20 20 20 20 20  beExec;         
9c90: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
9ca0: 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73   of nested calls
9cb0: 20 74 6f 20 56 64 62 65 45 78 65 63 28 29 20 2a   to VdbeExec() *
9cc0: 2f 0a 20 20 69 6e 74 20 6e 56 44 65 73 74 72 6f  /.  int nVDestro
9cd0: 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y;              
9ce0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
9cf0: 63 74 69 76 65 20 4f 50 5f 56 44 65 73 74 72 6f  ctive OP_VDestro
9d00: 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 2a 2f 0a  y operations */.
9d10: 20 20 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e    int nExtension
9d20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9d30: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61  /* Number of loa
9d40: 64 65 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a  ded extensions *
9d50: 2f 0a 20 20 76 6f 69 64 20 2a 2a 61 45 78 74 65  /.  void **aExte
9d60: 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  nsion;          
9d70: 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 68    /* Array of sh
9d80: 61 72 65 64 20 6c 69 62 72 61 72 79 20 68 61 6e  ared library han
9d90: 64 6c 65 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28  dles */.  void (
9da0: 2a 78 54 72 61 63 65 29 28 76 6f 69 64 2a 2c 63  *xTrace)(void*,c
9db0: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 20 20 20  onst char*);    
9dc0: 20 20 20 20 2f 2a 20 54 72 61 63 65 20 66 75 6e      /* Trace fun
9dd0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
9de0: 2a 70 54 72 61 63 65 41 72 67 3b 20 20 20 20 20  *pTraceArg;     
9df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e00: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
9e10: 20 74 6f 20 74 68 65 20 74 72 61 63 65 20 66 75   to the trace fu
9e20: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
9e30: 20 28 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f 69   (*xProfile)(voi
9e40: 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75  d*,const char*,u
9e50: 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69  64);  /* Profili
9e60: 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ng function */. 
9e70: 20 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65 41   void *pProfileA
9e80: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
9e90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
9ea0: 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c  gument to profil
9eb0: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
9ec0: 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67  void *pCommitArg
9ed0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9ee0: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
9ef0: 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b   xCommitCallback
9f00: 28 29 20 2a 2f 20 20 20 0a 20 20 69 6e 74 20 28  () */   .  int (
9f10: 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b  *xCommitCallback
9f20: 29 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20  )(void*);    /* 
9f30: 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79  Invoked at every
9f40: 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f   commit. */.  vo
9f50: 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67  id *pRollbackArg
9f60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9f70: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
9f80: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
9f90: 28 29 20 2a 2f 20 20 20 0a 20 20 76 6f 69 64 20  () */   .  void 
9fa0: 28 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  (*xRollbackCallb
9fb0: 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20  ack)(void*); /* 
9fc0: 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79  Invoked at every
9fd0: 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f   commit. */.  vo
9fe0: 69 64 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a  id *pUpdateArg;.
9ff0: 20 20 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65    void (*xUpdate
a000: 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c  Callback)(void*,
a010: 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
a020: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c  ,const char*,sql
a030: 69 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64  ite_int64);.#ifd
a040: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
a050: 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a  _PREUPDATE_HOOK.
a060: 20 20 76 6f 69 64 20 2a 70 50 72 65 55 70 64 61    void *pPreUpda
a070: 74 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  teArg;          
a080: 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
a090: 74 20 74 6f 20 78 50 72 65 55 70 64 61 74 65 43  t to xPreUpdateC
a0a0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
a0b0: 64 20 28 2a 78 50 72 65 55 70 64 61 74 65 43 61  d (*xPreUpdateCa
a0c0: 6c 6c 62 61 63 6b 29 28 20 20 20 2f 2a 20 52 65  llback)(   /* Re
a0d0: 67 69 73 74 65 72 65 64 20 75 73 69 6e 67 20 73  gistered using s
a0e0: 71 6c 69 74 65 33 5f 70 72 65 75 70 64 61 74 65  qlite3_preupdate
a0f0: 5f 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76  _hook() */.    v
a100: 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e  oid*,sqlite3*,in
a110: 74 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68  t,char const*,ch
a120: 61 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65  ar const*,sqlite
a130: 33 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f  3_int64,sqlite3_
a140: 69 6e 74 36 34 0a 20 20 29 3b 0a 20 20 50 72 65  int64.  );.  Pre
a150: 55 70 64 61 74 65 20 2a 70 50 72 65 55 70 64 61  Update *pPreUpda
a160: 74 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  te;        /* Co
a170: 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65  ntext for active
a180: 20 70 72 65 2d 75 70 64 61 74 65 20 63 61 6c 6c   pre-update call
a190: 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f  back */.#endif /
a1a0: 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
a1b0: 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a  PREUPDATE_HOOK *
a1c0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
a1d0: 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20  _OMIT_WAL.  int 
a1e0: 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28  (*xWalCallback)(
a1f0: 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20  void *, sqlite3 
a200: 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
a210: 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
a220: 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20  WalArg;.#endif. 
a230: 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64   void(*xCollNeed
a240: 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  ed)(void*,sqlite
a250: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
a260: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
a270: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
a280: 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  d16)(void*,sqlit
a290: 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70  e3*,int eTextRep
a2a0: 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20  ,const void*);. 
a2b0: 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64   void *pCollNeed
a2c0: 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33  edArg;.  sqlite3
a2d0: 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20  _value *pErr;   
a2e0: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
a2f0: 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73  ecent error mess
a300: 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  age */.  union {
a310: 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e  .    volatile in
a320: 74 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b  t isInterrupted;
a330: 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69   /* True if sqli
a340: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61  te3_interrupt ha
a350: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f  s been called */
a360: 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55  .    double notU
a370: 73 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20  sed1;           
a380: 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20   /* Spacer */.  
a390: 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64  } u1;.  Lookasid
a3a0: 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20  e lookaside;    
a3b0: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69        /* Lookasi
a3c0: 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67  de malloc config
a3d0: 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64  uration */.#ifnd
a3e0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
a3f0: 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73  UTHORIZATION.  s
a400: 71 6c 69 74 65 33 5f 78 61 75 74 68 20 78 41 75  qlite3_xauth xAu
a410: 74 68 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  th;          /* 
a420: 41 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61  Access authoriza
a430: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  tion function */
a440: 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72  .  void *pAuthAr
a450: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
a460: 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74   /* 1st argument
a470: 20 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61   to the access a
a480: 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  uth function */.
a490: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
a4a0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
a4b0: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69  ESS_CALLBACK.  i
a4c0: 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28  nt (*xProgress)(
a4d0: 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20  void *);     /* 
a4e0: 54 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  The progress cal
a4f0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
a500: 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20  *pProgressArg;  
a510: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
a520: 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67  ment to the prog
a530: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
a540: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f  .  unsigned nPro
a550: 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20  gressOps;       
a560: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70   /* Number of op
a570: 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65  codes for progre
a580: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23  ss callback */.#
a590: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
a5a0: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
a5b0: 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54  LTABLE.  int nVT
a5c0: 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
a5d0: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61         /* Alloca
a5e0: 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72  ted size of aVTr
a5f0: 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d  ans */.  Hash aM
a600: 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20  odule;          
a610: 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61         /* popula
a620: 74 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ted by sqlite3_c
a630: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
a640: 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74  /.  VtabCtx *pVt
a650: 61 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20  abCtx;          
a660: 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72    /* Context for
a670: 20 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e   active vtab con
a680: 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20  nect/create */. 
a690: 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e   VTable **aVTran
a6a0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
a6b0: 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73  * Virtual tables
a6c0: 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73   with open trans
a6d0: 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61  actions */.  VTa
a6e0: 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74  ble *pDisconnect
a6f0: 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65  ;    /* Disconne
a700: 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74  ct these in next
a710: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
a720: 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46  () */.#endif.  F
a730: 75 6e 63 44 65 66 48 61 73 68 20 61 46 75 6e 63  uncDefHash aFunc
a740: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
a750: 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f  Hash table of co
a760: 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f  nnection functio
a770: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f  ns */.  Hash aCo
a780: 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20 20 20  llSeq;          
a790: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c        /* All col
a7a0: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
a7b0: 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65   */.  BusyHandle
a7c0: 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20  r busyHandler;  
a7d0: 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c      /* Busy call
a7e0: 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62  back */.  Db aDb
a7f0: 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20  Static[2];      
a800: 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69          /* Stati
a810: 63 20 73 70 61 63 65 20 66 6f 72 20 74 68 65 20  c space for the 
a820: 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e  2 default backen
a830: 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e  ds */.  Savepoin
a840: 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20  t *pSavepoint;  
a850: 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
a860: 20 61 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e   active savepoin
a870: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79  ts */.  int busy
a880: 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20  Timeout;        
a890: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61        /* Busy ha
a8a0: 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69  ndler timeout, i
a8b0: 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20  n msec */.  int 
a8c0: 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  nSavepoint;     
a8d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
a8e0: 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73  ber of non-trans
a8f0: 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
a900: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74  s */.  int nStat
a910: 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20  ement;          
a920: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
a930: 66 20 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65  f nested stateme
a940: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  nt-transactions 
a950: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
a960: 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  redCons;        
a970: 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72      /* Net defer
a980: 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  red constraints 
a990: 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e  this transaction
a9a0: 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65  . */.  i64 nDefe
a9b0: 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20  rredImmCons;    
a9c0: 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65       /* Net defe
a9d0: 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63  rred immediate c
a9e0: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20  onstraints */.  
a9f0: 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65  int *pnBytesFree
aa00: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
aa10: 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e   If not NULL, in
aa20: 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20  crement this in 
aa30: 44 62 46 72 65 65 28 29 20 2a 2f 0a 23 69 66 64  DbFree() */.#ifd
aa40: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
aa50: 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20  _UNLOCK_NOTIFY. 
aa60: 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
aa70: 67 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  g variables are 
aa80: 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79  all protected by
aa90: 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54   the STATIC_MAST
aaa0: 45 52 20 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20  ER .  ** mutex, 
aab0: 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d  not by sqlite3.m
aac0: 75 74 65 78 2e 20 54 68 65 79 20 61 72 65 20 75  utex. They are u
aad0: 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e  sed by code in n
aae0: 6f 74 69 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20  otify.c. .  **. 
aaf0: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f   ** When X.pUnlo
ab00: 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ckConnection==Y,
ab10: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
ab20: 20 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f   X is waiting fo
ab30: 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f  r Y to.  ** unlo
ab40: 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ck so that it ca
ab50: 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a  n proceed..  **.
ab60: 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f    ** When X.pBlo
ab70: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d  ckingConnection=
ab80: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
ab90: 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68  hat something th
aba0: 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20  at X tried.  ** 
abb0: 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65  tried to do rece
abc0: 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68  ntly failed with
abd0: 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   an SQLITE_LOCKE
abe0: 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c  D error due to l
abf0: 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62  ocks.  ** held b
ac00: 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  y Y..  */.  sqli
ac10: 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f  te3 *pBlockingCo
ac20: 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e  nnection; /* Con
ac30: 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75  nection that cau
ac40: 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  sed SQLITE_LOCKE
ac50: 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  D */.  sqlite3 *
ac60: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
ac70: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
ac80: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61  Connection to wa
ac90: 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a  tch for unlock *
aca0: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63  /.  void *pUnloc
acb0: 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  kArg;           
acc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
acd0: 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b  ument to xUnlock
ace0: 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64  Notify */.  void
acf0: 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79   (*xUnlockNotify
ad00: 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b  )(void **, int);
ad10: 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69    /* Unlock noti
ad20: 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  fy callback */. 
ad30: 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42   sqlite3 *pNextB
ad40: 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f  locked;        /
ad50: 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f  * Next in list o
ad60: 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f  f all blocked co
ad70: 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e  nnections */.#en
ad80: 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
ad90: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
ada0: 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f  ATION.  sqlite3_
adb0: 75 73 65 72 61 75 74 68 20 61 75 74 68 3b 20 20  userauth auth;  
adc0: 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75        /* User au
add0: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66  thentication inf
ade0: 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64  ormation */.#end
adf0: 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d  if.};../*.** A m
ae00: 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72  acro to discover
ae10: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
ae20: 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a   a database..*/.
ae30: 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 45  #define SCHEMA_E
ae40: 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44  NC(db) ((db)->aD
ae50: 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e  b[0].pSchema->en
ae60: 63 29 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64  c).#define ENC(d
ae70: 62 29 20 20 20 20 20 20 20 20 28 28 64 62 29 2d  b)        ((db)-
ae80: 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  >enc)../*.** Pos
ae90: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
aea0: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61   the sqlite3.fla
aeb0: 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  gs..*/.#define S
aec0: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
aed0: 20 20 20 20 20 30 78 30 30 30 30 30 30 30 31 20       0x00000001 
aee0: 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63   /* True to trac
aef0: 65 20 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e  e VDBE execution
af00: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
af10: 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73  TE_InternChanges
af20: 20 20 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a    0x00000002  /*
af30: 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73   Uncommitted Has
af40: 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20  h table changes 
af50: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
af60: 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20  E_FullFSync     
af70: 20 30 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20   0x00000004  /* 
af80: 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f  Use full fsync o
af90: 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f  n the backend */
afa0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
afb0: 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30  CkptFullFSync  0
afc0: 78 30 30 30 30 30 30 30 38 20 20 2f 2a 20 55 73  x00000008  /* Us
afd0: 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72  e full fsync for
afe0: 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23   checkpoint */.#
aff0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61  define SQLITE_Ca
b000: 63 68 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30  cheSpill     0x0
b010: 30 30 30 30 30 31 30 20 20 2f 2a 20 4f 4b 20 74  0000010  /* OK t
b020: 6f 20 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61  o spill pager ca
b030: 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  che */.#define S
b040: 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d  QLITE_FullColNam
b050: 65 73 20 20 20 30 78 30 30 30 30 30 30 32 30 20  es   0x00000020 
b060: 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f   /* Show full co
b070: 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45  lumn names on SE
b080: 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LECT */.#define 
b090: 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e  SQLITE_ShortColN
b0a0: 61 6d 65 73 20 20 30 78 30 30 30 30 30 30 34 30  ames  0x00000040
b0b0: 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20    /* Show short 
b0c0: 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f  columns names */
b0d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b0e0: 43 6f 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30  CountRows      0
b0f0: 78 30 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f  x00000080  /* Co
b100: 75 6e 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64  unt rows changed
b110: 20 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20   by INSERT, */. 
b120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b140: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45           /*   DE
b150: 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20  LETE, or UPDATE 
b160: 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20  and return */.  
b170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b190: 20 20 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65          /*   the
b1a0: 20 63 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63   count using a c
b1b0: 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66  allback. */.#def
b1c0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43  ine SQLITE_NullC
b1d0: 61 6c 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30  allback   0x0000
b1e0: 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  0100  /* Invoke 
b1f0: 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63  the callback onc
b200: 65 20 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20  e if the */.    
b210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b230: 20 20 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c        /*   resul
b240: 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a  t set is empty *
b250: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b260: 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20 20 20  _SqlTrace       
b270: 30 78 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44  0x00000200  /* D
b280: 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61  ebug print SQL a
b290: 73 20 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f  s it executes */
b2a0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b2b0: 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30  VdbeListing    0
b2c0: 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20 44 65  x00000400  /* De
b2d0: 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20  bug listings of 
b2e0: 56 44 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f  VDBE programs */
b2f0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b300: 57 72 69 74 65 53 63 68 65 6d 61 20 20 20 20 30  WriteSchema    0
b310: 78 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4f 4b  x00000800  /* OK
b320: 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54   to update SQLIT
b330: 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66  E_MASTER */.#def
b340: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41  ine SQLITE_VdbeA
b350: 64 64 6f 70 54 72 61 63 65 20 30 78 30 30 30 30  ddopTrace 0x0000
b360: 31 30 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73  1000  /* Trace s
b370: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28  qlite3VdbeAddOp(
b380: 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69  ) calls */.#defi
b390: 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65  ne SQLITE_Ignore
b3a0: 43 68 65 63 6b 73 20 20 20 30 78 30 30 30 30 32  Checks   0x00002
b3b0: 30 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65  000  /* Do not e
b3c0: 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e  nforce check con
b3d0: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66  straints */.#def
b3e0: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55  ine SQLITE_ReadU
b3f0: 6e 63 6f 6d 6d 69 74 74 65 64 20 30 78 30 30 30  ncommitted 0x000
b400: 34 30 30 30 20 20 2f 2a 20 46 6f 72 20 73 68 61  4000  /* For sha
b410: 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a  red-cache mode *
b420: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b430: 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20  _LegacyFileFmt  
b440: 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 43  0x00008000  /* C
b450: 72 65 61 74 65 20 6e 65 77 20 64 61 74 61 62 61  reate new databa
b460: 73 65 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20  ses in format 1 
b470: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b480: 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64 65 20 20  E_RecoveryMode  
b490: 20 30 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20   0x00010000  /* 
b4a0: 49 67 6e 6f 72 65 20 73 63 68 65 6d 61 20 65 72  Ignore schema er
b4b0: 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rors */.#define 
b4c0: 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72  SQLITE_ReverseOr
b4d0: 64 65 72 20 20 20 30 78 30 30 30 32 30 30 30 30  der   0x00020000
b4e0: 20 20 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f    /* Reverse uno
b4f0: 72 64 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a  rdered SELECTs *
b500: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b510: 5f 52 65 63 54 72 69 67 67 65 72 73 20 20 20 20  _RecTriggers    
b520: 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 45  0x00040000  /* E
b530: 6e 61 62 6c 65 20 72 65 63 75 72 73 69 76 65 20  nable recursive 
b540: 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66  triggers */.#def
b550: 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69  ine SQLITE_Forei
b560: 67 6e 4b 65 79 73 20 20 20 20 30 78 30 30 30 38  gnKeys    0x0008
b570: 30 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65  0000  /* Enforce
b580: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
b590: 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65  straints  */.#de
b5a0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f  fine SQLITE_Auto
b5b0: 49 6e 64 65 78 20 20 20 20 20 20 30 78 30 30 31  Index      0x001
b5c0: 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  00000  /* Enable
b5d0: 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78   automatic index
b5e0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
b5f0: 4c 49 54 45 5f 50 72 65 66 65 72 42 75 69 6c 74  LITE_PreferBuilt
b600: 69 6e 20 20 30 78 30 30 32 30 30 30 30 30 20 20  in  0x00200000  
b610: 2f 2a 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f  /* Preference to
b620: 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20   built-in funcs 
b630: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b640: 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20  E_LoadExtension 
b650: 20 30 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20   0x00400000  /* 
b660: 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65  Enable load_exte
b670: 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  nsion */.#define
b680: 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72   SQLITE_EnableTr
b690: 69 67 67 65 72 20 20 30 78 30 30 38 30 30 30 30  igger  0x0080000
b6a0: 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e  0  /* True to en
b6b0: 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f  able triggers */
b6c0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b6d0: 44 65 66 65 72 46 4b 73 20 20 20 20 20 20 20 30  DeferFKs       0
b6e0: 78 30 31 30 30 30 30 30 30 20 20 2f 2a 20 44 65  x01000000  /* De
b6f0: 66 65 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74  fer all FK const
b700: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
b710: 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e  e SQLITE_QueryOn
b720: 6c 79 20 20 20 20 20 20 30 78 30 32 30 30 30 30  ly      0x020000
b730: 30 30 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64  00  /* Disable d
b740: 61 74 61 62 61 73 65 20 63 68 61 6e 67 65 73 20  atabase changes 
b750: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b760: 45 5f 56 64 62 65 45 51 50 20 20 20 20 20 20 20  E_VdbeEQP       
b770: 20 30 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20   0x04000000  /* 
b780: 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55  Debug EXPLAIN QU
b790: 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 0a 0a 2f 2a  ERY PLAN */.../*
b7a0: 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20  .** Bits of the 
b7b0: 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61  sqlite3.dbOptFla
b7c0: 67 73 20 66 69 65 6c 64 20 74 68 61 74 20 61 72  gs field that ar
b7d0: 65 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a  e used by the.**
b7e0: 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
b7f0: 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53  ntrol(SQLITE_TES
b800: 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49  TCTRL_OPTIMIZATI
b810: 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61  ONS,...) interfa
b820: 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69  ce to.** selecti
b830: 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72  vely disable var
b840: 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ious optimizatio
b850: 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ns..*/.#define S
b860: 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74  QLITE_QueryFlatt
b870: 65 6e 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a  ener 0x0001   /*
b880: 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e   Query flattenin
b890: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  g */.#define SQL
b8a0: 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20  ITE_ColumnCache 
b8b0: 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a 20 43     0x0002   /* C
b8c0: 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23  olumn cache */.#
b8d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72  define SQLITE_Gr
b8e0: 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30 78 30  oupByOrder   0x0
b8f0: 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59  004   /* GROUPBY
b900: 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42   cover of ORDERB
b910: 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  Y */.#define SQL
b920: 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e  ITE_FactorOutCon
b930: 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43  st 0x0008   /* C
b940: 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e  onstant factorin
b950: 67 20 2a 2f 0a 2f 2a 20 20 20 20 20 20 20 20 20  g */./*         
b960: 20 20 20 20 20 20 20 6e 6f 74 20 75 73 65 64 20         not used 
b970: 20 20 20 30 78 30 30 31 30 20 20 20 2f 2f 20 57     0x0010   // W
b980: 61 73 3a 20 53 51 4c 49 54 45 5f 49 64 78 52 65  as: SQLITE_IdxRe
b990: 61 6c 41 73 49 6e 74 20 2a 2f 0a 23 64 65 66 69  alAsInt */.#defi
b9a0: 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e  ne SQLITE_Distin
b9b0: 63 74 4f 70 74 20 20 20 20 30 78 30 30 32 30 20  ctOpt    0x0020 
b9c0: 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73    /* DISTINCT us
b9d0: 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23  ing indexes */.#
b9e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
b9f0: 76 65 72 49 64 78 53 63 61 6e 20 20 20 30 78 30  verIdxScan   0x0
ba00: 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e  040   /* Coverin
ba10: 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f  g index scans */
ba20: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ba30: 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30  OrderByIdxJoin 0
ba40: 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44 45 52  x0080   /* ORDER
ba50: 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61   BY of joins via
ba60: 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
ba70: 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43 6f 72  e SQLITE_SubqCor
ba80: 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30 20 20  outine  0x0100  
ba90: 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73 75 62   /* Evaluate sub
baa0: 71 75 65 72 69 65 73 20 61 73 20 63 6f 72 6f 75  queries as corou
bab0: 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tines */.#define
bac0: 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69   SQLITE_Transiti
bad0: 76 65 20 20 20 20 20 30 78 30 32 30 30 20 20 20  ve     0x0200   
bae0: 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f  /* Transitive co
baf0: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
bb00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74  fine SQLITE_Omit
bb10: 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30 34 30  NoopJoin   0x040
bb20: 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73  0   /* Omit unus
bb30: 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69  ed tables in joi
bb40: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ns */.#define SQ
bb50: 4c 49 54 45 5f 53 74 61 74 33 34 20 20 20 20 20  LITE_Stat34     
bb60: 20 20 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20      0x0800   /* 
bb70: 55 73 65 20 53 54 41 54 33 20 6f 72 20 53 54 41  Use STAT3 or STA
bb80: 54 34 20 64 61 74 61 20 2a 2f 0a 23 64 65 66 69  T4 data */.#defi
bb90: 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74  ne SQLITE_AllOpt
bba0: 73 20 20 20 20 20 20 20 20 30 78 66 66 66 66 20  s        0xffff 
bbb0: 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a    /* All optimiz
bbc0: 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ations */../*.**
bbd0: 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74   Macros for test
bbe0: 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
bbf0: 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ot optimizations
bc00: 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20   are enabled or 
bc10: 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66  disabled..*/.#if
bc20: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
bc30: 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 64  _BUILTIN_TEST.#d
bc40: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
bc50: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
bc60: 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62  ask)  (((db)->db
bc70: 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29  OptFlags&(mask))
bc80: 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74  !=0).#define Opt
bc90: 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64  imizationEnabled
bca0: 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28  (db, mask)   (((
bcb0: 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26  db)->dbOptFlags&
bcc0: 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c 73  (mask))==0).#els
bcd0: 65 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  e.#define Optimi
bce0: 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64  zationDisabled(d
bcf0: 62 2c 20 6d 61 73 6b 29 20 20 30 0a 23 64 65 66  b, mask)  0.#def
bd00: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
bd10: 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  Enabled(db, mask
bd20: 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  )   1.#endif../*
bd30: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
bd40: 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74  if it OK to fact
bd50: 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72  or constant expr
bd60: 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65  essions into the
bd70: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a   initialization.
bd80: 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67  ** code. The arg
bd90: 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72 73 65  ument is a Parse
bda0: 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20   object for the 
bdb0: 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a  code generator..
bdc0: 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74  */.#define Const
bdd0: 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29  FactorOk(P) ((P)
bde0: 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29  ->okConstFactor)
bdf0: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
be00: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
be10: 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65  sqlite.magic fie
be20: 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ld..** The numbe
be30: 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20  rs are obtained 
be40: 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61  at random and ha
be50: 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65  ve no special me
be60: 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20  aning, other.** 
be70: 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69  than being disti
be80: 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f  nct from one ano
be90: 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ther..*/.#define
bea0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50   SQLITE_MAGIC_OP
beb0: 45 4e 20 20 20 20 20 30 78 61 30 32 39 61 36 39  EN     0xa029a69
bec0: 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69  7  /* Database i
bed0: 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  s open */.#defin
bee0: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43  e SQLITE_MAGIC_C
bef0: 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63 32 64  LOSED   0x9f3c2d
bf00: 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  33  /* Database 
bf10: 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65  is closed */.#de
bf20: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
bf30: 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62 37  C_SICK     0x4b7
bf40: 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20  71290  /* Error 
bf50: 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f  and awaiting clo
bf60: 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  se */.#define SQ
bf70: 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20  LITE_MAGIC_BUSY 
bf80: 20 20 20 20 30 78 66 30 33 62 37 39 30 36 20 20      0xf03b7906  
bf90: 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75 72 72  /* Database curr
bfa0: 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a  ently in use */.
bfb0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
bfc0: 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78  AGIC_ERROR    0x
bfd0: 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20  b5357930  /* An 
bfe0: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72  SQLITE_MISUSE er
bff0: 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a  ror occurred */.
c000: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
c010: 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78  AGIC_ZOMBIE   0x
c020: 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f  64cffc7f  /* Clo
c030: 73 65 20 77 69 74 68 20 6c 61 73 74 20 73 74 61  se with last sta
c040: 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a  tement close */.
c050: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
c060: 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69  function is defi
c070: 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ned by an instan
c080: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
c090: 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  ing.** structure
c0a0: 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  .  A pointer to 
c0b0: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
c0c0: 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
c0d0: 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a 2a 20  sqlite.aFunc.** 
c0e0: 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57 68 65  hash table.  Whe
c0f0: 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e 63 74  n multiple funct
c100: 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20 73 61  ions have the sa
c110: 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68 61 73  me name, the has
c120: 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74  h table.** point
c130: 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20 6c 69  s to a linked li
c140: 73 74 20 6f 66 20 74 68 65 73 65 20 73 74 72 75  st of these stru
c150: 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72 75 63  ctures..*/.struc
c160: 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 31  t FuncDef {.  i1
c170: 36 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20  6 nArg;         
c180: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c190: 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d  arguments.  -1 m
c1a0: 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a  eans unlimited *
c1b0: 2f 0a 20 20 75 31 36 20 66 75 6e 63 46 6c 61 67  /.  u16 funcFlag
c1c0: 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65  s;       /* Some
c1d0: 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
c1e0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f  SQLITE_FUNC_* */
c1f0: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61  .  void *pUserDa
c200: 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20  ta;     /* User 
c210: 64 61 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a  data parameter *
c220: 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65  /.  FuncDef *pNe
c230: 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  xt;      /* Next
c240: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73   function with s
c250: 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f  ame name */.  vo
c260: 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69  id (*xFunc)(sqli
c270: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
c280: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
c290: 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20 66 75  ); /* Regular fu
c2a0: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
c2b0: 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74 65   (*xStep)(sqlite
c2c0: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
c2d0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
c2e0: 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 73 74   /* Aggregate st
c2f0: 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  ep */.  void (*x
c300: 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65  Finalize)(sqlite
c310: 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20  3_context*);    
c320: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
c330: 67 67 72 65 67 61 74 65 20 66 69 6e 61 6c 69 7a  ggregate finaliz
c340: 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e  er */.  char *zN
c350: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ame;         /* 
c360: 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  SQL name of the 
c370: 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 46  function. */.  F
c380: 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20 20  uncDef *pHash;  
c390: 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68      /* Next with
c3a0: 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d   a different nam
c3b0: 65 20 62 75 74 20 74 68 65 20 73 61 6d 65 20 68  e but the same h
c3c0: 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44 65 73  ash */.  FuncDes
c3d0: 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75  tructor *pDestru
c3e0: 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72  ctor;   /* Refer
c3f0: 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73  ence counted des
c400: 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e  tructor function
c410: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
c420: 69 73 20 73 74 72 75 63 74 75 72 65 20 65 6e 63  is structure enc
c430: 61 70 73 75 6c 61 74 65 73 20 61 20 75 73 65 72  apsulates a user
c440: 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75  -function destru
c450: 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61  ctor callback (a
c460: 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
c470: 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e  using create_fun
c480: 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20  ction_v2()) and 
c490: 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e  a reference coun
c4a0: 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65  ter. When.** cre
c4b0: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
c4c0: 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63  ) is called to c
c4d0: 72 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e  reate a function
c4e0: 20 77 69 74 68 20 61 20 64 65 73 74 72 75 63 74   with a destruct
c4f0: 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20  or,.** a single 
c500: 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74  object of this t
c510: 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ype is allocated
c520: 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  . FuncDestructor
c530: 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f 20  .nRef is set to 
c540: 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
c550: 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  f FuncDef object
c560: 73 20 63 72 65 61 74 65 64 20 28 65 69 74 68 65  s created (eithe
c570: 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64  r 1 or 3, depend
c580: 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a  ing on whether.*
c590: 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65  * or not the spe
c5a0: 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20  cified encoding 
c5b0: 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20  is SQLITE_ANY). 
c5c0: 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73  The FuncDef.pDes
c5d0: 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65  tructor.** membe
c5e0: 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65  r of each of the
c5f0: 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a   new FuncDef obj
c600: 65 63 74 73 20 69 73 20 73 65 74 20 74 6f 20 70  ects is set to p
c610: 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f  oint to the allo
c620: 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73  cated.** FuncDes
c630: 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  tructor..**.** T
c640: 68 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20  hereafter, when 
c650: 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44  one of the FuncD
c660: 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65  ef objects is de
c670: 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66 65 72  leted, the refer
c680: 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e  ence.** count on
c690: 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20   this object is 
c6a0: 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65  decremented. Whe
c6b0: 6e 20 69 74 20 72 65 61 63 68 65 73 20 30 2c 20  n it reaches 0, 
c6c0: 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a  the destructor.*
c6d0: 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64  * is invoked and
c6e0: 20 74 68 65 20 46 75 6e 63 44 65 73 74 72 75 63   the FuncDestruc
c6f0: 74 6f 72 20 73 74 72 75 63 74 75 72 65 20 66 72  tor structure fr
c700: 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  eed..*/.struct F
c710: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a  uncDestructor {.
c720: 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f    int nRef;.  vo
c730: 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76  id (*xDestroy)(v
c740: 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a  oid *);.  void *
c750: 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f  pUserData;.};../
c760: 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61  *.** Possible va
c770: 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66  lues for FuncDef
c780: 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68  .flags.  Note th
c790: 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61  at the _LENGTH a
c7a0: 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61  nd _TYPEOF.** va
c7b0: 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73  lues must corres
c7c0: 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c  pond to OPFLAG_L
c7d0: 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46  ENGTHARG and OPF
c7e0: 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20  LAG_TYPEOFARG.  
c7f0: 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73  There.** are ass
c800: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
c810: 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20   in the code to 
c820: 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2f 0a  verify this..*/.
c830: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
c840: 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30  UNC_ENCMASK  0x0
c850: 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46  03 /* SQLITE_UTF
c860: 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42  8, SQLITE_UTF16B
c870: 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a  E or UTF16LE */.
c880: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
c890: 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78 30  UNC_LIKE     0x0
c8a0: 30 34 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20  04 /* Candidate 
c8b0: 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74  for the LIKE opt
c8c0: 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65  imization */.#de
c8d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
c8e0: 5f 43 41 53 45 20 20 20 20 20 30 78 30 30 38 20  _CASE     0x008 
c8f0: 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76  /* Case-sensitiv
c900: 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63  e LIKE-type func
c910: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
c920: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45  SQLITE_FUNC_EPHE
c930: 4d 20 20 20 20 30 78 30 31 30 20 2f 2a 20 45 70  M    0x010 /* Ep
c940: 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65  hemeral.  Delete
c950: 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64   with VDBE */.#d
c960: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
c970: 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 32 30  C_NEEDCOLL 0x020
c980: 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75   /* sqlite3GetFu
c990: 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68  ncCollSeq() migh
c9a0: 74 20 62 65 20 63 61 6c 6c 65 64 20 2a 2f 0a 23  t be called */.#
c9b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
c9c0: 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 34  NC_LENGTH   0x04
c9d0: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65  0 /* Built-in le
c9e0: 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20  ngth() function 
c9f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ca00: 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20  E_FUNC_TYPEOF   
ca10: 30 78 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69  0x080 /* Built-i
ca20: 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  n typeof() funct
ca30: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
ca40: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54  QLITE_FUNC_COUNT
ca50: 20 20 20 20 30 78 31 30 30 20 2f 2a 20 42 75 69      0x100 /* Bui
ca60: 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61  lt-in count(*) a
ca70: 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66  ggregate */.#def
ca80: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
ca90: 43 4f 41 4c 45 53 43 45 20 30 78 32 30 30 20 2f  COALESCE 0x200 /
caa0: 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65  * Built-in coale
cab0: 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28  sce() or ifnull(
cac0: 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ) */.#define SQL
cad0: 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c  ITE_FUNC_UNLIKEL
cae0: 59 20 30 78 34 30 30 20 2f 2a 20 42 75 69 6c 74  Y 0x400 /* Built
caf0: 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66  -in unlikely() f
cb00: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
cb10: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
cb20: 4f 4e 53 54 41 4e 54 20 30 78 38 30 30 20 2f 2a  ONSTANT 0x800 /*
cb30: 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73   Constant inputs
cb40: 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74   give a constant
cb50: 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69   output */.#defi
cb60: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d  ne SQLITE_FUNC_M
cb70: 49 4e 4d 41 58 20 20 30 78 31 30 30 30 20 2f 2a  INMAX  0x1000 /*
cb80: 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28 29 20   True for min() 
cb90: 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72 65 67  and max() aggreg
cba0: 61 74 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  ates */../*.** T
cbb0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72  he following thr
cbc0: 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54  ee macros, FUNCT
cbd0: 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28  ION(), LIKEFUNC(
cbe0: 29 20 61 6e 64 20 41 47 47 52 45 47 41 54 45 28  ) and AGGREGATE(
cbf0: 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f  ) are.** used to
cc00: 20 63 72 65 61 74 65 20 74 68 65 20 69 6e 69 74   create the init
cc10: 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65  ializers for the
cc20: 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75   FuncDef structu
cc30: 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e  res..**.**   FUN
cc40: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
cc50: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
cc60: 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  unc).**     Used
cc70: 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61   to create a sca
cc80: 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  lar function def
cc90: 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e  inition of a fun
cca0: 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20  ction zName .** 
ccb0: 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20      implemented 
ccc0: 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78 46  by C function xF
ccd0: 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74 73  unc that accepts
cce0: 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 2e   nArg arguments.
ccf0: 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75   The.**     valu
cd00: 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72 67  e passed as iArg
cd10: 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76   is cast to a (v
cd20: 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20 61  oid*) and made a
cd30: 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20  vailable.**     
cd40: 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74 61  as the user-data
cd50: 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64   (sqlite3_user_d
cd60: 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20 66  ata()) for the f
cd70: 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a 2a 20  unction. If .** 
cd80: 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43      argument bNC
cd90: 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74   is true, then t
cda0: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  he SQLITE_FUNC_N
cdb0: 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20  EEDCOLL flag is 
cdc0: 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55  set..**.**   VFU
cdd0: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
cde0: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
cdf0: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b  Func).**     Lik
ce00: 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70  e FUNCTION excep
ce10: 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53  t it omits the S
ce20: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
ce30: 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20  ANT flag..**.** 
ce40: 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d    AGGREGATE(zNam
ce50: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
ce60: 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  NC, xStep, xFina
ce70: 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  l).**     Used t
ce80: 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67 72  o create an aggr
ce90: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64  egate function d
cea0: 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d  efinition implem
ceb0: 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20  ented by.**     
cec0: 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20  the C functions 
ced0: 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c  xStep and xFinal
cee0: 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72  . The first four
cef0: 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20   parameters.**  
cf00: 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74     are interpret
cf10: 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ed in the same w
cf20: 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20  ay as the first 
cf30: 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  4 parameters to.
cf40: 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28  **     FUNCTION(
cf50: 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46  )..**.**   LIKEF
cf60: 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
cf70: 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a   pArg, flags).**
cf80: 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
cf90: 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e  ate a scalar fun
cfa0: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
cfb0: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a   of a function z
cfc0: 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68 61  Name .**     tha
cfd0: 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61  t accepts nArg a
cfe0: 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20  rguments and is 
cff0: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61  implemented by a
d000: 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20 20   call to C .**  
d010: 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65     function like
d020: 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70  Func. Argument p
d030: 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
d040: 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61   (void *) and ma
d050: 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61  de.**     availa
d060: 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74  ble as the funct
d070: 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73  ion user-data (s
d080: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
d090: 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  ()). The.**     
d0a0: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61  FuncDef.flags va
d0b0: 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
d0c0: 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65   the value passe
d0d0: 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a  d as the flags.*
d0e0: 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e  *     parameter.
d0f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  .*/.#define FUNC
d100: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
d110: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
d120: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
d130: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
d140: 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
d150: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
d160: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
d170: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
d180: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
d190: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
d1a0: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
d1b0: 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  VFUNCTION(zName,
d1c0: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
d1d0: 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
d1e0: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
d1f0: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
d200: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
d210: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
d220: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
d230: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
d240: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
d250: 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c  FUNCTION2(zName,
d260: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
d270: 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c  , xFunc, extraFl
d280: 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53  ags) \.  {nArg,S
d290: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
d2a0: 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
d2b0: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
d2c0: 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61  _NEEDCOLL)|extra
d2d0: 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54  Flags,\.   SQLIT
d2e0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
d2f0: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
d300: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
d310: 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55  }.#define STR_FU
d320: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
d330: 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78  rg, pArg, bNC, x
d340: 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
d350: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
d360: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
d370: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
d380: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
d390: 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46 75 6e     pArg, 0, xFun
d3a0: 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  c, 0, 0, #zName,
d3b0: 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 4c   0, 0}.#define L
d3c0: 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e  IKEFUNC(zName, n
d3d0: 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29  Arg, arg, flags)
d3e0: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
d3f0: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
d400: 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61  |SQLITE_UTF8|fla
d410: 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a  gs, \.   (void *
d420: 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e  )arg, 0, likeFun
d430: 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  c, 0, 0, #zName,
d440: 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 41   0, 0}.#define A
d450: 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20  GGREGATE(zName, 
d460: 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
d470: 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a  Step, xFinal) \.
d480: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
d490: 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
d4a0: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
d4b0: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
d4c0: 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
d4d0: 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c  0, xStep,xFinal,
d4e0: 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 23 64 65 66  #zName,0,0}.#def
d4f0: 69 6e 65 20 41 47 47 52 45 47 41 54 45 32 28 7a  ine AGGREGATE2(z
d500: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c  Name, nArg, arg,
d510: 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e   nc, xStep, xFin
d520: 61 6c 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20  al, extraFlags) 
d530: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
d540: 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54  E_UTF8|(nc*SQLIT
d550: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
d560: 7c 65 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20  |extraFlags, \. 
d570: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
d580: 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30 2c 20  PTR(arg), 0, 0, 
d590: 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e  xStep,xFinal,#zN
d5a0: 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20  ame,0,0}../*.** 
d5b0: 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65  All current save
d5c0: 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65  points are store
d5d0: 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d in a linked li
d5e0: 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a  st starting at.*
d5f0: 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70  * sqlite3.pSavep
d600: 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20  oint. The first 
d610: 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c  element in the l
d620: 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20  ist is the most 
d630: 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e  recently.** open
d640: 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61  ed savepoint. Sa
d650: 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64  vepoints are add
d660: 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62  ed to the list b
d670: 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50  y the vdbe.** OP
d680: 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
d690: 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  uction..*/.struc
d6a0: 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20  t Savepoint {.  
d6b0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
d6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6d0: 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74      /* Savepoint
d6e0: 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69   name (nul-termi
d6f0: 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20  nated) */.  i64 
d700: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
d710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d720: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66  /* Number of def
d730: 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69  erred fk violati
d740: 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ons */.  i64 nDe
d750: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
d760: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d770: 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
d780: 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20  ed imm fk. */.  
d790: 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74  Savepoint *pNext
d7a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
d7b0: 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73 61      /* Parent sa
d7c0: 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79 29  vepoint (if any)
d7d0: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
d7e0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
d7f0: 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63 6f  used as the seco
d800: 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  nd parameter to 
d810: 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74  sqlite3Savepoint
d820: 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68  (),.** and as th
d830: 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f  e P1 argument to
d840: 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e   the OP_Savepoin
d850: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
d860: 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  /.#define SAVEPO
d870: 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20 30  INT_BEGIN      0
d880: 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
d890: 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31 0a  NT_RELEASE    1.
d8a0: 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e  #define SAVEPOIN
d8b0: 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a  T_ROLLBACK   2..
d8c0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69  ./*.** Each SQLi
d8d0: 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74 75  te module (virtu
d8e0: 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  al table definit
d8f0: 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64 20  ion) is defined 
d900: 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  by an.** instanc
d910: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
d920: 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73 74  ng structure, st
d930: 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
d940: 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68  te3.aModule.** h
d950: 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74  ash table..*/.st
d960: 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20  ruct Module {.  
d970: 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
d980: 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20  dule *pModule;  
d990: 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b       /* Callback
d9a0: 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63   pointers */.  c
d9b0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
d9c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
d9d0: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73      /* Name pass
d9e0: 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64  ed to create_mod
d9f0: 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ule() */.  void 
da00: 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20 20  *pAux;          
da10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da20: 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64 20 74  /* pAux passed t
da30: 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  o create_module(
da40: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44  ) */.  void (*xD
da50: 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b  estroy)(void *);
da60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
da70: 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f 72  odule destructor
da80: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a   function */.};.
da90: 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ./*.** informati
daa0: 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f  on about each co
dab0: 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74  lumn of an SQL t
dac0: 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20  able is held in 
dad0: 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f  an instance.** o
dae0: 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
daf0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75  ..*/.struct Colu
db00: 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  mn {.  char *zNa
db10: 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  me;     /* Name 
db20: 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  of this column *
db30: 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b  /.  Expr *pDflt;
db40: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
db50: 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
db60: 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  lumn */.  char *
db70: 7a 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 4f 72  zDflt;     /* Or
db80: 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74  iginal text of t
db90: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
dba0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 79 70   */.  char *zTyp
dbb0: 65 3b 20 20 20 20 20 2f 2a 20 44 61 74 61 20 74  e;     /* Data t
dbc0: 79 70 65 20 66 6f 72 20 74 68 69 73 20 63 6f 6c  ype for this col
dbd0: 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  umn */.  char *z
dbe0: 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  Coll;     /* Col
dbf0: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e  lating sequence.
dc00: 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74    If NULL, use t
dc10: 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  he default */.  
dc20: 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20  u8 notNull;     
dc30: 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20   /* An OE_ code 
dc40: 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e  for handling a N
dc50: 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
dc60: 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  nt */.  char aff
dc70: 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20  inity;   /* One 
dc80: 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  of the SQLITE_AF
dc90: 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a  F_... values */.
dca0: 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20    u8 szEst;     
dcb0: 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
dcc0: 73 69 7a 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  size of this col
dcd0: 75 6d 6e 2e 20 20 49 4e 54 3d 3d 31 20 2a 2f 0a  umn.  INT==1 */.
dce0: 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20    u8 colFlags;  
dcf0: 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72     /* Boolean pr
dd00: 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65 20 43  operties.  See C
dd10: 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20  OLFLAG_ defines 
dd20: 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20  below */.};../* 
dd30: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
dd40: 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61  or Column.colFla
dd50: 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  gs:.*/.#define C
dd60: 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20  OLFLAG_PRIMKEY  
dd70: 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c  0x0001    /* Col
dd80: 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74  umn is part of t
dd90: 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a  he primary key *
dda0: 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
ddb0: 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30 30  G_HIDDEN   0x000
ddc0: 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e  2    /* A hidden
ddd0: 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72   column in a vir
dde0: 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f  tual table */../
ddf0: 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e  *.** A "Collatin
de00: 67 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64  g Sequence" is d
de10: 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73  efined by an ins
de20: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
de30: 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74  lowing.** struct
de40: 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c  ure. Conceptuall
de50: 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73  y, a collating s
de60: 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73  equence consists
de70: 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a   of a name and.*
de80: 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72  * a comparison r
de90: 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69  outine that defi
dea0: 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66  nes the order of
deb0: 20 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a   that sequence..
dec0: 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71  **.** If CollSeq
ded0: 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69  .xCmp is NULL, i
dee0: 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t means that the
def0: 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  .** collating se
df00: 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69  quence is undefi
df10: 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75  ned.  Indices bu
df20: 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69  ilt on an undefi
df30: 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67  ned.** collating
df40: 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f   sequence may no
df50: 74 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69  t be read or wri
df60: 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tten..*/.struct 
df70: 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72  CollSeq {.  char
df80: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
df90: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
dfa0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
dfb0: 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64  nce, UTF-8 encod
dfc0: 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  ed */.  u8 enc; 
dfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
dfe0: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68   Text encoding h
dff0: 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29  andled by xCmp()
e000: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
e010: 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  r;          /* F
e020: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
e030: 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74   xCmp() */.  int
e040: 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69   (*xCmp)(void*,i
e050: 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  nt, const void*,
e060: 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64   int, const void
e070: 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65  *);.  void (*xDe
e080: 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44  l)(void*);  /* D
e090: 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55  estructor for pU
e0a0: 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ser */.};../*.**
e0b0: 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61   A sort order ca
e0c0: 6e 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20  n be either ASC 
e0d0: 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66  or DESC..*/.#def
e0e0: 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53  ine SQLITE_SO_AS
e0f0: 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f  C       0  /* So
e100: 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  rt in ascending 
e110: 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  order */.#define
e120: 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20   SQLITE_SO_DESC 
e130: 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20       1  /* Sort 
e140: 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64  in ascending ord
e150: 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c  er */../*.** Col
e160: 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70  umn affinity typ
e170: 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20  es..**.** These 
e180: 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65  used to have mne
e190: 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20  monic name like 
e1a0: 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41  'i' for SQLITE_A
e1b0: 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a  FF_INTEGER and.*
e1c0: 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45  * 't' for SQLITE
e1d0: 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20  _AFF_TEXT.  But 
e1e0: 77 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69  we can save a li
e1f0: 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69  ttle space and i
e200: 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70  mprove.** the sp
e210: 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20  eed a little by 
e220: 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61  numbering the va
e230: 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65  lues consecutive
e240: 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42 75 74 20  ly.  .**.** But 
e250: 72 61 74 68 65 72 20 74 68 61 6e 20 73 74 61 72  rather than star
e260: 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77  t with 0 or 1, w
e270: 65 20 62 65 67 69 6e 20 77 69 74 68 20 27 41 27  e begin with 'A'
e280: 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20  .  That way,.** 
e290: 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66  when multiple af
e2a0: 66 69 6e 69 74 79 20 74 79 70 65 73 20 61 72 65  finity types are
e2b0: 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e   concatenated in
e2c0: 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a  to a string and.
e2d0: 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65 20 50  ** used as the P
e2e0: 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20  4 operand, they 
e2f0: 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61  will be more rea
e300: 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  dable..**.** Not
e310: 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20  e also that the 
e320: 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20 61 72  numeric types ar
e330: 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68  e grouped togeth
e340: 65 72 20 73 6f 20 74 68 61 74 20 74 65 73 74 69  er so that testi
e350: 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65  ng.** for a nume
e360: 72 69 63 20 74 79 70 65 20 69 73 20 61 20 73 69  ric type is a si
e370: 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  ngle comparison.
e380: 20 20 41 6e 64 20 74 68 65 20 4e 4f 4e 45 20 74    And the NONE t
e390: 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f  ype is first..*/
e3a0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e3b0: 41 46 46 5f 4e 4f 4e 45 20 20 20 20 20 27 41 27  AFF_NONE     'A'
e3c0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e3d0: 41 46 46 5f 54 45 58 54 20 20 20 20 20 27 42 27  AFF_TEXT     'B'
e3e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e3f0: 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 43 27  AFF_NUMERIC  'C'
e400: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e410: 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27 44 27  AFF_INTEGER  'D'
e420: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e430: 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27 45 27  AFF_REAL     'E'
e440: 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ..#define sqlite
e450: 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  3IsNumericAffini
e460: 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c  ty(X)  ((X)>=SQL
e470: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29  ITE_AFF_NUMERIC)
e480: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
e490: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75  TE_AFF_MASK valu
e4a0: 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65  es masks off the
e4b0: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74   significant bit
e4c0: 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e  s of an.** affin
e4d0: 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23  ity value. .*/.#
e4e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
e4f0: 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34 37 0a  F_MASK     0x47.
e500: 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61  ./*.** Additiona
e510: 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74 68 61  l bit values tha
e520: 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69  t can be ORed wi
e530: 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77  th an affinity w
e540: 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69  ithout.** changi
e550: 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e  ng the affinity.
e560: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  .**.** The SQLIT
e570: 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69  E_NOTNULL flag i
e580: 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  s a combination 
e590: 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55  of NULLEQ and JU
e5a0: 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20  MPIFNULL..** It 
e5b0: 63 61 75 73 65 73 20 61 6e 20 61 73 73 65 72 74  causes an assert
e5c0: 28 29 20 74 6f 20 66 69 72 65 20 69 66 20 65 69  () to fire if ei
e5d0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74 6f 20  ther operand to 
e5e0: 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20  a comparison.** 
e5f0: 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c  operator is NULL
e600: 2e 20 20 49 74 20 69 73 20 61 64 64 65 64 20 74  .  It is added t
e610: 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70 61 72  o certain compar
e620: 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 74  ison operators t
e630: 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61 74 20  o.** prove that 
e640: 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61 72 65  the operands are
e650: 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c   always NOT NULL
e660: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
e670: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20  ITE_JUMPIFNULL  
e680: 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20   0x10  /* jumps 
e690: 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
e6a0: 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65  d is NULL */.#de
e6b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52  fine SQLITE_STOR
e6c0: 45 50 32 20 20 20 20 20 20 30 78 32 30 20 20 2f  EP2      0x20  /
e6d0: 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
e6e0: 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72  n reg[P2] rather
e6f0: 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64   than jump */.#d
e700: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c  efine SQLITE_NUL
e710: 4c 45 51 20 20 20 20 20 20 20 30 78 38 30 20 20  LEQ       0x80  
e720: 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a  /* NULL=NULL */.
e730: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
e740: 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78 39 30  OTNULL      0x90
e750: 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
e760: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 65   operands are ne
e770: 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a  ver NULL */../*.
e780: 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20  ** An object of 
e790: 74 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65  this type is cre
e7a0: 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69  ated for each vi
e7b0: 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73  rtual table pres
e7c0: 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61  ent in.** the da
e7d0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 0a  tabase schema. .
e7e0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74  **.** If the dat
e7f0: 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
e800: 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65  shared, then the
e810: 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e  re is one instan
e820: 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74  ce of this.** st
e830: 72 75 63 74 75 72 65 20 66 6f 72 20 65 61 63 68  ructure for each
e840: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
e850: 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20  tion (sqlite3*) 
e860: 74 68 61 74 20 75 73 65 73 20 74 68 65 20 73 68  that uses the sh
e870: 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20  ared.** schema. 
e880: 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65 20  This is because 
e890: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
e8a0: 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65  nnection require
e8b0: 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65  s its own unique
e8c0: 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
e8d0: 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
e8e0: 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f  * handle used to
e8f0: 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74   access the virt
e900: 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20 69 6d  ual table .** im
e910: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71  plementation. sq
e920: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
e930: 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73  les can not be s
e940: 68 61 72 65 64 20 62 65 74 77 65 65 6e 20 0a 2a  hared between .*
e950: 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * database conne
e960: 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65  ctions, even whe
e970: 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68  n the rest of th
e980: 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61  e in-memory data
e990: 62 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d 61 20  base .** schema 
e9a0: 69 73 20 73 68 61 72 65 64 2c 20 61 73 20 74 68  is shared, as th
e9b0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
e9c0: 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68   often stores th
e9d0: 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
e9e0: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
e9f0: 70 61 73 73 65 64 20 74 6f 20 69 74 20 76 69 61  passed to it via
ea00: 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20   the xConnect() 
ea10: 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d 65 74  or xCreate() met
ea20: 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e  hod.** during in
ea30: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74  itialization int
ea40: 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61  ernally. This da
ea50: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
ea60: 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20  n handle may.** 
ea70: 74 68 65 6e 20 62 65 20 75 73 65 64 20 62 79 20  then be used by 
ea80: 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
ea90: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
eaa0: 20 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20   to access real 
eab0: 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74 68 69  tables .** withi
eac0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  n the database. 
ead0: 53 6f 20 74 68 61 74 20 74 68 65 79 20 61 70 70  So that they app
eae0: 65 61 72 20 61 73 20 70 61 72 74 20 6f 66 20 74  ear as part of t
eaf0: 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a 20 74  he callers .** t
eb00: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73  ransaction, thes
eb10: 65 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20  e accesses need 
eb20: 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74  to be made via t
eb30: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
eb40: 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   .** connection 
eb50: 61 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20  as that used to 
eb60: 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72  execute SQL oper
eb70: 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69  ations on the vi
eb80: 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a  rtual table..**.
eb90: 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62  ** All VTable ob
eba0: 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65  jects that corre
ebb0: 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c  spond to a singl
ebc0: 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61  e table in a sha
ebd0: 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  red.** database 
ebe0: 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69  schema are initi
ebf0: 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61  ally stored in a
ec00: 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69   linked-list poi
ec10: 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68  nted to by.** th
ec20: 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20  e Table.pVTable 
ec30: 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20  member variable 
ec40: 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  of the correspon
ec50: 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63  ding Table objec
ec60: 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71  t..** When an sq
ec70: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
ec80: 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71  operation is req
ec90: 75 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20  uired to access 
eca0: 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  the virtual.** t
ecb0: 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65  able, it searche
ecc0: 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74  s the list for t
ecd0: 68 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63  he VTable that c
ece0: 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
ecf0: 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f  e.** database co
ed00: 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74  nnection doing t
ed10: 68 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20  he preparing so 
ed20: 61 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f  as to use the co
ed30: 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33  rrect.** sqlite3
ed40: 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e  _vtab* handle in
ed50: 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75   the compiled qu
ed60: 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ery..**.** When 
ed70: 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62  an in-memory Tab
ed80: 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c  le object is del
ed90: 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c  eted (for exampl
eda0: 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63  e when the.** sc
edb0: 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65  hema is being re
edc0: 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20  loaded for some 
edd0: 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61  reason), the VTa
ede0: 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ble objects are 
edf0: 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65 64 20  not .** deleted 
ee00: 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f  and the sqlite3_
ee10: 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72  vtab* handles ar
ee20: 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63  e not xDisconnec
ee30: 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65 64 69  t()ed .** immedi
ee40: 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20  ately. Instead, 
ee50: 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66  they are moved f
ee60: 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56  rom the Table.pV
ee70: 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a  Table list to.**
ee80: 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20   another linked 
ee90: 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74  list headed by t
eea0: 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63  he sqlite3.pDisc
eeb0: 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66  onnect member of
eec0: 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
eed0: 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74  nding sqlite3 st
eee0: 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72  ructure. They ar
eef0: 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78  e then deleted/x
ef00: 44 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a  Disconnected .**
ef10: 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61   next time a sta
ef20: 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72  tement is prepar
ef30: 65 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71  ed using said sq
ef40: 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20  lite3*. This is 
ef50: 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64  done.** to avoid
ef60: 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73   deadlock issues
ef70: 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69   involving multi
ef80: 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65  ple sqlite3.mute
ef90: 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65  x mutexes..** Re
efa0: 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20  fer to comments 
efb0: 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73  above function s
efc0: 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
efd0: 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a  List() for an.**
efe0: 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20   explanation as 
eff0: 74 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66  to why it is saf
f000: 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72  e to add an entr
f010: 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e  y to an sqlite3.
f020: 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c  pDisconnect.** l
f030: 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64  ist without hold
f040: 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f  ing the correspo
f050: 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75  nding sqlite3.mu
f060: 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a  tex mutex..**.**
f070: 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20   The memory for 
f080: 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20  objects of this 
f090: 74 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61  type is always a
f0a0: 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a 2a 20  llocated by .** 
f0b0: 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28  sqlite3DbMalloc(
f0c0: 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e  ), using the con
f0d0: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73  nection handle s
f0e0: 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e  tored in VTable.
f0f0: 64 62 20 61 73 20 0a 2a 2a 20 74 68 65 20 66 69  db as .** the fi
f100: 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f  rst argument..*/
f110: 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b  .struct VTable {
f120: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
f130: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f140: 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  Database connect
f150: 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ion associated w
f160: 69 74 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ith this table *
f170: 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64  /.  Module *pMod
f180: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
f190: 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75   Pointer to modu
f1a0: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
f1b0: 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  n */.  sqlite3_v
f1c0: 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20  tab *pVtab;     
f1d0: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76   /* Pointer to v
f1e0: 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a  tab instance */.
f1f0: 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
f200: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
f210: 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72  umber of pointer
f220: 73 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  s to this struct
f230: 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e  ure */.  u8 bCon
f240: 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20  straint;        
f250: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f     /* True if co
f260: 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 73 75  nstraints are su
f270: 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74  pported */.  int
f280: 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20   iSavepoint;    
f290: 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20         /* Depth 
f2a0: 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54  of the SAVEPOINT
f2b0: 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62   stack */.  VTab
f2c0: 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  le *pNext;      
f2d0: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e        /* Next in
f2e0: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65   linked list (se
f2f0: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a  e above) */.};..
f300: 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 74  /*.** Each SQL t
f310: 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e  able is represen
f320: 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79  ted in memory by
f330: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
f340: 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67  the.** following
f350: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
f360: 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d 65 20 69 73  * Table.zName is
f370: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
f380: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 63 61 73   table.  The cas
f390: 65 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61  e of the origina
f3a0: 6c 0a 2a 2a 20 43 52 45 41 54 45 20 54 41 42 4c  l.** CREATE TABL
f3b0: 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73  E statement is s
f3c0: 74 6f 72 65 64 2c 20 62 75 74 20 63 61 73 65 20  tored, but case 
f3d0: 69 73 20 6e 6f 74 20 73 69 67 6e 69 66 69 63 61  is not significa
f3e0: 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70 61 72  nt for.** compar
f3f0: 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 61 62  isons..**.** Tab
f400: 6c 65 2e 6e 43 6f 6c 20 69 73 20 74 68 65 20 6e  le.nCol is the n
f410: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
f420: 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20   in this table. 
f430: 20 54 61 62 6c 65 2e 61 43 6f 6c 20 69 73 20 61   Table.aCol is a
f440: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  .** pointer to a
f450: 6e 20 61 72 72 61 79 20 6f 66 20 43 6f 6c 75 6d  n array of Colum
f460: 6e 20 73 74 72 75 63 74 75 72 65 73 2c 20 6f 6e  n structures, on
f470: 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  e for each colum
f480: 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  n..**.** If the 
f490: 74 61 62 6c 65 20 68 61 73 20 61 6e 20 49 4e 54  table has an INT
f4a0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
f4b0: 2c 20 74 68 65 6e 20 54 61 62 6c 65 2e 69 50 4b  , then Table.iPK
f4c0: 65 79 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  ey is the index 
f4d0: 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6c 75 6d 6e  of.** the column
f4e0: 20 74 68 61 74 20 69 73 20 74 68 61 74 20 6b 65   that is that ke
f4f0: 79 2e 20 20 20 4f 74 68 65 72 77 69 73 65 20 54  y.   Otherwise T
f500: 61 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 6e 65  able.iPKey is ne
f510: 67 61 74 69 76 65 2e 20 20 4e 6f 74 65 0a 2a 2a  gative.  Note.**
f520: 20 74 68 61 74 20 74 68 65 20 64 61 74 61 74 79   that the dataty
f530: 70 65 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52  pe of the PRIMAR
f540: 59 20 4b 45 59 20 6d 75 73 74 20 62 65 20 49 4e  Y KEY must be IN
f550: 54 45 47 45 52 20 66 6f 72 20 74 68 69 73 20 66  TEGER for this f
f560: 69 65 6c 64 20 74 6f 0a 2a 2a 20 62 65 20 73 65  ield to.** be se
f570: 74 2e 20 20 41 6e 20 49 4e 54 45 47 45 52 20 50  t.  An INTEGER P
f580: 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 75 73  RIMARY KEY is us
f590: 65 64 20 61 73 20 74 68 65 20 72 6f 77 69 64 20  ed as the rowid 
f5a0: 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 0a  for each row of.
f5b0: 2a 2a 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49  ** the table.  I
f5c0: 66 20 61 20 74 61 62 6c 65 20 68 61 73 20 6e 6f  f a table has no
f5d0: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
f5e0: 20 4b 45 59 2c 20 74 68 65 6e 20 61 20 72 61 6e   KEY, then a ran
f5f0: 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20 69 73 20  dom rowid.** is 
f600: 67 65 6e 65 72 61 74 65 64 20 66 6f 72 20 65 61  generated for ea
f610: 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74 61  ch row of the ta
f620: 62 6c 65 2e 20 20 54 46 5f 48 61 73 50 72 69 6d  ble.  TF_HasPrim
f630: 61 72 79 4b 65 79 20 69 73 20 73 65 74 20 69 66  aryKey is set if
f640: 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 68 61  .** the table ha
f650: 73 20 61 6e 79 20 50 52 49 4d 41 52 59 20 4b 45  s any PRIMARY KE
f660: 59 2c 20 49 4e 54 45 47 45 52 20 6f 72 20 6f 74  Y, INTEGER or ot
f670: 68 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a 2a 20 54  herwise..**.** T
f680: 61 62 6c 65 2e 74 6e 75 6d 20 69 73 20 74 68 65  able.tnum is the
f690: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72   page number for
f6a0: 20 74 68 65 20 72 6f 6f 74 20 42 54 72 65 65 20   the root BTree 
f6b0: 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c  page of the tabl
f6c0: 65 20 69 6e 20 74 68 65 0a 2a 2a 20 64 61 74 61  e in the.** data
f6d0: 62 61 73 65 20 66 69 6c 65 2e 20 20 49 66 20 54  base file.  If T
f6e0: 61 62 6c 65 2e 69 44 62 20 69 73 20 74 68 65 20  able.iDb is the 
f6f0: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
f700: 61 62 61 73 65 20 74 61 62 6c 65 20 62 61 63 6b  abase table back
f710: 65 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c 69 74 65  end.** in sqlite
f720: 2e 61 44 62 5b 5d 2e 20 20 30 20 69 73 20 66 6f  .aDb[].  0 is fo
f730: 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  r the main datab
f740: 61 73 65 20 61 6e 64 20 31 20 69 73 20 66 6f 72  ase and 1 is for
f750: 20 74 68 65 20 66 69 6c 65 20 74 68 61 74 0a 2a   the file that.*
f760: 2a 20 68 6f 6c 64 73 20 74 65 6d 70 6f 72 61 72  * holds temporar
f770: 79 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  y tables and ind
f780: 69 63 65 73 2e 20 20 49 66 20 54 46 5f 45 70 68  ices.  If TF_Eph
f790: 65 6d 65 72 61 6c 20 69 73 20 73 65 74 0a 2a 2a  emeral is set.**
f7a0: 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
f7b0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 66  is stored in a f
f7c0: 69 6c 65 20 74 68 61 74 20 69 73 20 61 75 74 6f  ile that is auto
f7d0: 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65  matically delete
f7e0: 64 0a 2a 2a 20 77 68 65 6e 20 74 68 65 20 56 44  d.** when the VD
f7f0: 42 45 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65  BE cursor to the
f800: 20 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65 64   table is closed
f810: 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  .  In this case 
f820: 54 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a 2a 20 72  Table.tnum .** r
f830: 65 66 65 72 73 20 56 44 42 45 20 63 75 72 73 6f  efers VDBE curso
f840: 72 20 6e 75 6d 62 65 72 20 74 68 61 74 20 68 6f  r number that ho
f850: 6c 64 73 20 74 68 65 20 74 61 62 6c 65 20 6f 70  lds the table op
f860: 65 6e 2c 20 6e 6f 74 20 74 6f 20 74 68 65 20 72  en, not to the r
f870: 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 6e 75 6d 62  oot.** page numb
f880: 65 72 2e 20 20 54 72 61 6e 73 69 65 6e 74 20 74  er.  Transient t
f890: 61 62 6c 65 73 20 61 72 65 20 75 73 65 64 20 74  ables are used t
f8a0: 6f 20 68 6f 6c 64 20 74 68 65 20 72 65 73 75 6c  o hold the resul
f8b0: 74 73 20 6f 66 20 61 0a 2a 2a 20 73 75 62 2d 71  ts of a.** sub-q
f8c0: 75 65 72 79 20 74 68 61 74 20 61 70 70 65 61 72  uery that appear
f8d0: 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 72  s instead of a r
f8e0: 65 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 20 69  eal table name i
f8f0: 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
f900: 65 20 0a 2a 2a 20 6f 66 20 61 20 53 45 4c 45 43  e .** of a SELEC
f910: 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a  T statement..*/.
f920: 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20  struct Table {. 
f930: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
f940: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
f950: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   the table or vi
f960: 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a  ew */.  Column *
f970: 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20  aCol;        /* 
f980: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
f990: 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  t each column */
f9a0: 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78  .  Index *pIndex
f9b0: 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20  ;       /* List 
f9c0: 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f  of SQL indexes o
f9d0: 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f  n this table. */
f9e0: 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65  .  Select *pSele
f9f0: 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20  ct;     /* NULL 
fa00: 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69  for tables.  Poi
fa10: 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f  nts to definitio
fa20: 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a  n if a view. */.
fa30: 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20    FKey *pFKey;  
fa40: 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64         /* Linked
fa50: 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72   list of all for
fa60: 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69  eign keys in thi
fa70: 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61  s table */.  cha
fa80: 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20  r *zColAff;     
fa90: 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
faa0: 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
fab0: 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
fac0: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
fad0: 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20 20  TE_OMIT_CHECK.  
fae0: 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b  ExprList *pCheck
faf0: 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43  ;    /* All CHEC
fb00: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  K constraints */
fb10: 0a 23 65 6e 64 69 66 0a 20 20 4c 6f 67 45 73 74  .#endif.  LogEst
fb20: 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f   nRowLogEst;   /
fb30: 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73  * Estimated rows
fb40: 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d   in table - from
fb50: 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61   sqlite_stat1 ta
fb60: 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75  ble */.  int tnu
fb70: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
fb80: 20 52 6f 6f 74 20 42 54 72 65 65 20 6e 6f 64 65   Root BTree node
fb90: 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20   for this table 
fba0: 28 73 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 29  (see note above)
fbb0: 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b   */.  i16 iPKey;
fbc0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66             /* If
fbd0: 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75   not negative, u
fbe0: 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61  se aCol[iPKey] a
fbf0: 73 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  s the primary ke
fc00: 79 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b  y */.  i16 nCol;
fc10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
fc20: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
fc30: 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a   in this table *
fc40: 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b 20 20 20  /.  u16 nRef;   
fc50: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
fc60: 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
fc70: 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a  o this Table */.
fc80: 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52 6f    LogEst szTabRo
fc90: 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61  w;     /* Estima
fca0: 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63 68  ted size of each
fcb0: 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62 79   table row in by
fcc0: 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  tes */.#ifdef SQ
fcd0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54  LITE_ENABLE_COST
fce0: 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f  MULT.  LogEst co
fcf0: 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43  stMult;     /* C
fd00: 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72 20 66  ost multiplier f
fd10: 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20 74 61  or using this ta
fd20: 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ble */.#endif.  
fd30: 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20  u8 tabFlags;    
fd40: 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
fd50: 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  TF_* values */. 
fd60: 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20   u8 keyConf;    
fd70: 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f        /* What to
fd80: 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75   do in case of u
fd90: 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69  niqueness confli
fda0: 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23  ct on iPKey */.#
fdb0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
fdc0: 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20  IT_ALTERTABLE.  
fdd0: 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74  int addColOffset
fde0: 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69  ;    /* Offset i
fdf0: 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  n CREATE TABLE s
fe00: 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77  tmt to add a new
fe10: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69   column */.#endi
fe20: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
fe30: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
fe40: 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65  LE.  int nModule
fe50: 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  Arg;      /* Num
fe60: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
fe70: 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a   to the module *
fe80: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64  /.  char **azMod
fe90: 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54 65 78 74  uleArg;  /* Text
fea0: 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c 65 20 61   of all module a
feb0: 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d 6f 64 75  rgs. [0] is modu
fec0: 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 56 54 61  le name */.  VTa
fed0: 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20  ble *pVTable;   
fee0: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61    /* List of VTa
fef0: 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a  ble objects. */.
ff00: 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72  #endif.  Trigger
ff10: 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a   *pTrigger;   /*
ff20: 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   List of trigger
ff30: 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68  s stored in pSch
ff40: 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ema */.  Schema 
ff50: 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  *pSchema;     /*
ff60: 20 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e   Schema that con
ff70: 74 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65  tains this table
ff80: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65   */.  Table *pNe
ff90: 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65  xtZombie;  /* Ne
ffa0: 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e  xt on the Parse.
ffb0: 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20  pZombieTab list 
ffc0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
ffd0: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
ffe0: 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a  Table.tabFlags..
fff0: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65  */.#define TF_Re
10000 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78  adonly        0x
10010 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e  01    /* Read-on
10020 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20  ly system table 
10030 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70  */.#define TF_Ep
10040 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78  hemeral       0x
10050 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65  02    /* An ephe
10060 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23  meral table */.#
10070 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69  define TF_HasPri
10080 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20 20  maryKey   0x04  
10090 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61    /* Table has a
100a0 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a   primary key */.
100b0 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69  #define TF_Autoi
100c0 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38 20  ncrement   0x08 
100d0 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72     /* Integer pr
100e0 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75 74  imary key is aut
100f0 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64  oincrement */.#d
10100 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61 6c  efine TF_Virtual
10110 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20 20           0x10   
10120 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61 6c   /* Is a virtual
10130 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
10140 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69  e TF_WithoutRowi
10150 64 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20  d    0x20    /* 
10160 4e 6f 20 72 6f 77 69 64 20 75 73 65 64 2e 20 50  No rowid used. P
10170 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68  RIMARY KEY is th
10180 65 20 6b 65 79 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  e key */.../*.**
10190 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65   Test to see whe
101a0 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61  ther or not a ta
101b0 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c  ble is a virtual
101c0 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73   table.  This is
101d0 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61  .** done as a ma
101e0 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77  cro so that it w
101f0 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64  ill be optimized
10200 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61   out when virtua
10210 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f  l.** table suppo
10220 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  rt is omitted fr
10230 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f  om the build..*/
10240 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
10250 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
10260 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  E.#  define IsVi
10270 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28  rtual(X)      ((
10280 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20  (X)->tabFlags & 
10290 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29 0a  TF_Virtual)!=0).
102a0 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64  #  define IsHidd
102b0 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58  enColumn(X) (((X
102c0 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  )->colFlags & CO
102d0 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30  LFLAG_HIDDEN)!=0
102e0 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  ).#else.#  defin
102f0 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20  e IsVirtual(X)  
10300 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20      0.#  define 
10310 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  IsHiddenColumn(X
10320 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44  ) 0.#endif../* D
10330 6f 65 73 20 74 68 65 20 74 61 62 6c 65 20 68 61  oes the table ha
10340 76 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64  ve a rowid */.#d
10350 65 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58  efine HasRowid(X
10360 29 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62  )     (((X)->tab
10370 46 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f  Flags & TF_Witho
10380 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a  utRowid)==0)../*
10390 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e  .** Each foreign
103a0 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
103b0 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
103c0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
103d0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
103e0 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69   A foreign key i
103f0 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
10400 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54  h two tables.  T
10410 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20  he "from" table 
10420 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  is.** the table 
10430 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
10440 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
10450 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73  use that creates
10460 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
10470 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74  key.  The "to" t
10480 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c  able is the tabl
10490 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20  e that is named 
104a0 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  in the REFERENCE
104b0 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e  S clause..** Con
104c0 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70  sider this examp
104d0 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  le:.**.**     CR
104e0 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a  EATE TABLE ex1(.
104f0 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47  **       a INTEG
10500 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  ER PRIMARY KEY,.
10510 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47  **       b INTEG
10520 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b  ER CONSTRAINT fk
10530 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32  1 REFERENCES ex2
10540 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a  (x).**     );.**
10550 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20  .** For foreign 
10560 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66  key "fk1", the f
10570 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78  rom-table is "ex
10580 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61  1" and the to-ta
10590 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a  ble is "ex2"..**
105a0 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65   Equivalent name
105b0 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f  s:.**.**     fro
105c0 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64  m-table == child
105d0 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  -table.**       
105e0 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65  to-table == pare
105f0 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45  nt-table.**.** E
10600 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63  ach REFERENCES c
10610 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20  lause generates 
10620 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
10630 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
10640 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20  ucture.** which 
10650 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  is attached to t
10660 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20  he from-table.  
10670 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65  The to-table nee
10680 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e  d not exist when
10690 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62  .** the from-tab
106a0 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20  le is created.  
106b0 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66  The existence of
106c0 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
106d0 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a   not checked..**
106e0 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20  .** The list of 
106f0 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20  all parents for 
10700 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73  child Table X is
10710 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79   held at X.pFKey
10720 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ..**.** A list o
10730 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66  f all children f
10740 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64  or a table named
10750 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74 20   Z (which might 
10760 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a  not even exist).
10770 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63  ** is held in Sc
10780 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69  hema.fkeyHash wi
10790 74 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66  th a hash key of
107a0 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b   Z..*/.struct FK
107b0 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46  ey {.  Table *pF
107c0 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c  rom;     /* Tabl
107d0 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
107e0 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
107f0 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20  se (aka: Child) 
10800 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74  */.  FKey *pNext
10810 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46  From;  /* Next F
10820 4b 65 79 20 77 69 74 68 20 74 68 65 20 73 61 6d  Key with the sam
10830 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74  e in pFrom. Next
10840 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d   parent of pFrom
10850 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b   */.  char *zTo;
10860 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
10870 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68  of table that th
10880 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20  e key points to 
10890 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f  (aka: Parent) */
108a0 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f  .  FKey *pNextTo
108b0 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74  ;    /* Next wit
108c0 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20  h the same zTo. 
108d0 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54  Next child of zT
108e0 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50  o. */.  FKey *pP
108f0 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65  revTo;    /* Pre
10900 76 69 6f 75 73 20 77 69 74 68 20 74 68 65 20 73  vious with the s
10910 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74  ame zTo */.  int
10920 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f   nCol;         /
10930 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
10940 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20  mns in this key 
10950 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30  */.  /* EV: R-30
10960 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75  323-21917 */.  u
10970 38 20 69 73 44 65 66 65 72 72 65 64 3b 20 20 20  8 isDeferred;   
10980 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
10990 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69  onstraint checki
109a0 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74  ng is deferred t
109b0 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20  ill COMMIT */.  
109c0 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20  u8 aAction[2];  
109d0 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45        /* ON DELE
109e0 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45  TE and ON UPDATE
109f0 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63   actions, respec
10a00 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67  tively */.  Trig
10a10 67 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32  ger *apTrigger[2
10a20 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f  ];/* Triggers fo
10a30 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69  r aAction[] acti
10a40 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ons */.  struct 
10a50 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f  sColMap {      /
10a60 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c  * Mapping of col
10a70 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f  umns in pFrom to
10a80 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20   columns in zTo 
10a90 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d  */.    int iFrom
10aa0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
10ab0 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20  Index of column 
10ac0 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20  in pFrom */.    
10ad0 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20  char *zCol;     
10ae0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
10af0 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20   column in zTo. 
10b00 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49   If NULL use PRI
10b10 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20  MARY KEY */.  } 
10b20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20  aCol[1];        
10b30 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
10b40 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f   for each of nCo
10b50 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a  l columns */.};.
10b60 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75  ./*.** SQLite su
10b70 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66  pports many diff
10b80 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65  erent ways to re
10b90 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69  solve a constrai
10ba0 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f  nt.** error.  RO
10bb0 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e  LLBACK processin
10bc0 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63  g means that a c
10bd0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
10be0 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68  ion.** causes th
10bf0 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
10c00 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61  rocess to fail a
10c10 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  nd for the curre
10c20 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
10c30 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  * to be rolled b
10c40 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63  ack.  ABORT proc
10c50 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65  essing means the
10c60 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
10c70 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61  ocess.** fails a
10c80 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61  nd any prior cha
10c90 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f  nges from that o
10ca0 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  ne operation are
10cb0 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20   backed out,.** 
10cc0 62 75 74 20 74 68 65 20 74 72 61 6e 73 61 63 74  but the transact
10cd0 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65  ion is not rolle
10ce0 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72  d back.  FAIL pr
10cf0 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74  ocessing means t
10d00 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61  hat.** the opera
10d10 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
10d20 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72   stops and retur
10d30 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65  ns an error code
10d40 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20  .  But prior.** 
10d50 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74  changes due to t
10d60 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
10d70 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64  n are not backed
10d80 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c   out and no roll
10d90 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20  back.** occurs. 
10da0 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68   IGNORE means th
10db0 61 74 20 74 68 65 20 70 61 72 74 69 63 75 6c 61  at the particula
10dc0 72 20 72 6f 77 20 74 68 61 74 20 63 61 75 73 65  r row that cause
10dd0 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  d the constraint
10de0 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74  .** error is not
10df0 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64   inserted or upd
10e00 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e  ated.  Processin
10e10 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20  g continues and 
10e20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72  no error.** is r
10e30 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43  eturned.  REPLAC
10e40 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65  E means that pre
10e50 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
10e60 65 20 72 6f 77 73 20 74 68 61 74 20 63 61 75 73  e rows that caus
10e70 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63  ed.** a UNIQUE c
10e80 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
10e90 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20  ion are removed 
10ea0 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77 20  so that the new 
10eb0 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64  insert or.** upd
10ec0 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e  ate can proceed.
10ed0 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
10ee0 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
10ef0 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e  ror is reported.
10f00 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c  .**.** RESTRICT,
10f10 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41   SETNULL, and CA
10f20 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70  SCADE actions ap
10f30 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65  ply only to fore
10f40 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53  ign keys..** RES
10f50 54 52 49 43 54 20 69 73 20 74 68 65 20 73 61 6d  TRICT is the sam
10f60 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49  e as ABORT for I
10f70 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e  MMEDIATE foreign
10f80 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a   keys and the.**
10f90 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43   same as ROLLBAC
10fa0 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b  K for DEFERRED k
10fb0 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65  eys.  SETNULL me
10fc0 61 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f 72  ans that the for
10fd0 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73  eign.** key is s
10fe0 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53  et to NULL.  CAS
10ff0 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20  CADE means that 
11000 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  a DELETE or UPDA
11010 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66  TE of the.** ref
11020 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f  erenced table ro
11030 77 20 69 73 20 70 72 6f 70 61 67 61 74 65 64 20  w is propagated 
11040 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61  into the row tha
11050 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66  t holds the.** f
11060 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a  oreign key..** .
11070 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
11080 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73   symbolic values
11090 20 61 72 65 20 75 73 65 64 20 74 6f 20 72 65 63   are used to rec
110a0 6f 72 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a  ord which type.*
110b0 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74  * of action to t
110c0 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ake..*/.#define 
110d0 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20  OE_None     0   
110e0 2f 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63  /* There is no c
110f0 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65  onstraint to che
11100 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  ck */.#define OE
11110 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a  _Rollback 1   /*
11120 20 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74   Fail the operat
11130 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b  ion and rollback
11140 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
11150 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41   */.#define OE_A
11160 62 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42  bort    2   /* B
11170 61 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20  ack out changes 
11180 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61  but do no rollba
11190 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  ck transaction *
111a0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69  /.#define OE_Fai
111b0 6c 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f  l     3   /* Sto
111c0 70 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  p the operation 
111d0 62 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72  but leave all pr
111e0 69 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ior changes */.#
111f0 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65  define OE_Ignore
11200 20 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65     4   /* Ignore
11210 20 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e   the error. Do n
11220 6f 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54  ot do the INSERT
11230 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64   or UPDATE */.#d
11240 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65  efine OE_Replace
11250 20 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20    5   /* Delete 
11260 65 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c  existing record,
11270 20 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20   then do INSERT 
11280 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64  or UPDATE */..#d
11290 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63  efine OE_Restric
112a0 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72  t 6   /* OE_Abor
112b0 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c  t for IMMEDIATE,
112c0 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72   OE_Rollback for
112d0 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65   DEFERRED */.#de
112e0 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20  fine OE_SetNull 
112f0 20 37 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   7   /* Set the 
11300 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
11310 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65  e to NULL */.#de
11320 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20  fine OE_SetDflt 
11330 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   8   /* Set the 
11340 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
11350 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74  e to its default
11360 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43   */.#define OE_C
11370 61 73 63 61 64 65 20 20 39 20 20 20 2f 2a 20 43  ascade  9   /* C
11380 61 73 63 61 64 65 20 74 68 65 20 63 68 61 6e 67  ascade the chang
11390 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f  es */..#define O
113a0 45 5f 44 65 66 61 75 6c 74 20 20 31 30 20 20 2f  E_Default  10  /
113b0 2a 20 44 6f 20 77 68 61 74 65 76 65 72 20 74 68  * Do whatever th
113c0 65 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e  e default action
113d0 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41   is */.../*.** A
113e0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
113f0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
11400 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20  cture is passed 
11410 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  as the first.** 
11420 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69  argument to sqli
11430 74 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72  te3VdbeKeyCompar
11440 65 20 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f  e and is used to
11450 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a 2a   control the .**
11460 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74   comparison of t
11470 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79  he two index key
11480 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68  s..**.** Note th
11490 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20  at aSortOrder[] 
114a0 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65  and aColl[] have
114b0 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e   nField+1 slots.
114c0 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e    There.** are n
114d0 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20  Field slots for 
114e0 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61  the columns of a
114f0 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65  n index then one
11500 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66   extra slot.** f
11510 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61 74 20  or the rowid at 
11520 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
11530 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75  ct KeyInfo {.  u
11540 33 32 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  32 nRef;        
11550 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11560 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68  references to th
11570 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63  is KeyInfo objec
11580 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  t */.  u8 enc;  
11590 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
115a0 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e  xt encoding - on
115b0 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f  e of the SQLITE_
115c0 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  UTF* values */. 
115d0 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20   u16 nField;    
115e0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
115f0 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e  f key columns in
11600 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20   the index */.  
11610 75 31 36 20 6e 58 46 69 65 6c 64 3b 20 20 20 20  u16 nXField;    
11620 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11630 20 63 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e 64 20   columns beyond 
11640 74 68 65 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20  the key columns 
11650 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
11660 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
11670 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
11680 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  ion */.  u8 *aSo
11690 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20  rtOrder;     /* 
116a0 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65  Sort order for e
116b0 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20  ach column. */. 
116c0 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b   CollSeq *aColl[
116d0 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e  1];  /* Collatin
116e0 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65  g sequence for e
116f0 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20  ach term of the 
11700 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  key */.};../*.**
11710 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
11720 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
11730 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e  ructure holds in
11740 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
11750 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69 6e 64 65  a.** single inde
11760 78 20 72 65 63 6f 72 64 20 74 68 61 74 20 68 61  x record that ha
11770 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 70  s already been p
11780 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69  arsed out into i
11790 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 76 61 6c  ndividual.** val
117a0 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63  ues..**.** A rec
117b0 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74  ord is an object
117c0 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f   that contains o
117d0 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64  ne or more field
117e0 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65  s of data..** Re
117f0 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20 74  cords are used t
11800 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74  o store the cont
11810 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72  ent of a table r
11820 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a  ow and to store.
11830 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e  ** the key of an
11840 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20   index.  A blob 
11850 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65  encoding of a re
11860 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64 20  cord is created 
11870 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b  by.** the OP_Mak
11880 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f  eRecord opcode o
11890 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20 69  f the VDBE and i
118a0 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62  s disassembled b
118b0 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75  y the.** OP_Colu
118c0 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  mn opcode..**.**
118d0 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
118e0 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20 74  holds a record t
118f0 68 61 74 20 68 61 73 20 61 6c 72 65 61 64 79 20  hat has already 
11900 62 65 65 6e 20 64 69 73 61 73 73 65 6d 62 6c 65  been disassemble
11910 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73 20 63 6f  d.** into its co
11920 6e 73 74 69 74 75 65 6e 74 20 66 69 65 6c 64 73  nstituent fields
11930 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61  ..**.** The r1 a
11940 6e 64 20 72 32 20 6d 65 6d 62 65 72 20 76 61 72  nd r2 member var
11950 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20  iables are only 
11960 75 73 65 64 20 62 79 20 74 68 65 20 6f 70 74 69  used by the opti
11970 6d 69 7a 65 64 20 63 6f 6d 70 61 72 69 73 6f 6e  mized comparison
11980 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 76 64  .** functions vd
11990 62 65 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 49  beRecordCompareI
119a0 6e 74 28 29 20 61 6e 64 20 76 64 62 65 52 65 63  nt() and vdbeRec
119b0 6f 72 64 43 6f 6d 70 61 72 65 53 74 72 69 6e 67  ordCompareString
119c0 28 29 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e  ()..*/.struct Un
119d0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20  packedRecord {. 
119e0 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
119f0 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f  fo;  /* Collatio
11a00 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72  n and sort-order
11a10 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
11a20 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20    u16 nField;   
11a30 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
11a40 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70  of entries in ap
11a50 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65  Mem[] */.  i8 de
11a60 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f  fault_rc;      /
11a70 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73  * Comparison res
11a80 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65 20  ult if keys are 
11a90 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72  equal */.  u8 er
11aa0 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f  rCode;         /
11ab0 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74 65 64  * Error detected
11ac0 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61   by xRecordCompa
11ad0 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e  re (CORRUPT or N
11ae0 4f 4d 45 4d 29 20 2a 2f 0a 20 20 4d 65 6d 20 2a  OMEM) */.  Mem *
11af0 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  aMem;          /
11b00 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e  * Values */.  in
11b10 74 20 72 31 3b 20 20 20 20 20 20 20 20 20 20 20  t r1;           
11b20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
11b30 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72  turn if (lhs > r
11b40 68 73 29 20 2a 2f 0a 20 20 69 6e 74 20 72 32 3b  hs) */.  int r2;
11b50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11b60 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
11b70 69 66 20 28 72 68 73 20 3c 20 6c 68 73 29 20 2a  if (rhs < lhs) *
11b80 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  /.};.../*.** Eac
11b90 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72  h SQL index is r
11ba0 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
11bb0 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  mory by an.** in
11bc0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
11bd0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
11be0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c  e..**.** The col
11bf0 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c  umns of the tabl
11c00 65 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65  e that are to be
11c10 20 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73   indexed are des
11c20 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65  cribed.** by the
11c30 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c   aiColumn[] fiel
11c40 64 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  d of this struct
11c50 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ure.  For exampl
11c60 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65  e, suppose.** we
11c70 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77   have the follow
11c80 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e  ing table and in
11c90 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43  dex:.**.**     C
11ca0 52 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28  REATE TABLE Ex1(
11cb0 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20  c1 int, c2 int, 
11cc0 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20  c3 text);.**    
11cd0 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78   CREATE INDEX Ex
11ce0 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b  2 ON Ex1(c3,c1);
11cf0 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61  .**.** In the Ta
11d00 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65  ble structure de
11d10 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43  scribing Ex1, nC
11d20 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68  ol==3 because th
11d30 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65  ere are.** three
11d40 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
11d50 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49  table.  In the I
11d60 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64  ndex structure d
11d70 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32  escribing.** Ex2
11d80 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e  , nColumn==2 sin
11d90 63 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f  ce 2 of the 3 co
11da0 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65  lumns of Ex1 are
11db0 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65   indexed..** The
11dc0 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75   value of aiColu
11dd0 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61  mn is {2, 0}.  a
11de0 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65  iColumn[0]==2 be
11df0 63 61 75 73 65 20 74 68 65 20 0a 2a 2a 20 66 69  cause the .** fi
11e00 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  rst column to be
11e10 20 69 6e 64 65 78 65 64 20 28 63 33 29 20 68 61   indexed (c3) ha
11e20 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20  s an index of 2 
11e30 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a  in Ex1.aCol[]..*
11e40 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c  * The second col
11e50 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65  umn to be indexe
11e60 64 20 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e  d (c1) has an in
11e70 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45  dex of 0 in.** E
11e80 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65  x1.aCol[], hence
11e90 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d   Ex2.aiColumn[1]
11ea0 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ==0..**.** The I
11eb0 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65  ndex.onError fie
11ec0 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68  ld determines wh
11ed0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
11ee0 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73   indexed columns
11ef0 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71  .** must be uniq
11f00 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64  ue and what to d
11f10 6f 20 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f  o if they are no
11f20 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f  t.  When Index.o
11f30 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a  nError=OE_None,.
11f40 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73  ** it means this
11f50 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65   is not a unique
11f60 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69   index.  Otherwi
11f70 73 65 20 69 74 20 69 73 20 61 20 75 6e 69 71 75  se it is a uniqu
11f80 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74  e index.** and t
11f90 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65  he value of Inde
11fa0 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61  x.onError indica
11fb0 74 65 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e  te the which con
11fc0 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
11fd0 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74   .** algorithm t
11fe0 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65  o employ wheneve
11ff0 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  r an attempt is 
12000 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61  made to insert a
12010 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65   non-unique.** e
12020 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  lement..*/.struc
12030 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72  t Index {.  char
12040 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
12050 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
12060 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
12070 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20  i16 *aiColumn;  
12080 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
12090 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  h columns are us
120a0 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78  ed by this index
120b0 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20  .  1st is 0 */. 
120c0 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f   LogEst *aiRowLo
120d0 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f  gEst;     /* Fro
120e0 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20  m ANALYZE: Est. 
120f0 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79  rows selected by
12100 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
12110 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b    Table *pTable;
12120 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
12130 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e  e SQL table bein
12140 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63  g indexed */.  c
12150 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20  har *zColAff;   
12160 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e          /* Strin
12170 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
12180 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
12190 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
121a0 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  x *pNext;       
121b0 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74       /* The next
121c0 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65   index associate
121d0 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  d with the same 
121e0 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d  table */.  Schem
121f0 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
12200 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
12210 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e  ntaining this in
12220 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  dex */.  u8 *aSo
12230 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
12240 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f    /* for each co
12250 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43  lumn: True==DESC
12260 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a  , False==ASC */.
12270 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b    char **azColl;
12280 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
12290 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e  ray of collation
122a0 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20   sequence names 
122b0 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45  for index */.  E
122c0 78 70 72 20 2a 70 50 61 72 74 49 64 78 57 68 65  xpr *pPartIdxWhe
122d0 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45  re;     /* WHERE
122e0 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74   clause for part
122f0 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20  ial indices */. 
12300 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
12310 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20            /* DB 
12320 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  Page containing 
12330 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64  root of this ind
12340 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73  ex */.  LogEst s
12350 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20 20 20  zIdxRow;        
12360 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 61 76   /* Estimated av
12370 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65 20 69  erage row size i
12380 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 31 36  n bytes */.  u16
12390 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20 20   nKeyCol;       
123a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
123b0 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69  of columns formi
123c0 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20  ng the key */.  
123d0 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  u16 nColumn;    
123e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
123f0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74  er of columns st
12400 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e 64 65  ored in the inde
12410 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f  x */.  u8 onErro
12420 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
12430 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f  /* OE_Abort, OE_
12440 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61  Ignore, OE_Repla
12450 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a  ce, or OE_None *
12460 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 64 78  /.  unsigned idx
12470 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a 20  Type:2;      /* 
12480 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52  1==UNIQUE, 2==PR
12490 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52  IMARY KEY, 0==CR
124a0 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20  EATE INDEX */.  
124b0 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65  unsigned bUnorde
124c0 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20  red:1;   /* Use 
124d0 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d  this index for =
124e0 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20  = or IN queries 
124f0 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  only */.  unsign
12500 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31  ed uniqNotNull:1
12510 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e  ;  /* True if UN
12520 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c  IQUE and NOT NUL
12530 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e  L for all column
12540 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  s */.  unsigned 
12550 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20  isResized:1;    
12560 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 69 7a  /* True if resiz
12570 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68  eIndexObject() h
12580 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a  as been called *
12590 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43  /.  unsigned isC
125a0 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20  overing:1;   /* 
125b0 54 72 75 65 20 69 66 20 74 68 69 73 20 69 73 20  True if this is 
125c0 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78  a covering index
125d0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e   */.  unsigned n
125e0 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20 2f  oSkipScan:1;   /
125f0 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20  * Do not try to 
12600 75 73 65 20 73 6b 69 70 2d 73 63 61 6e 20 69 66  use skip-scan if
12610 20 74 72 75 65 20 2a 2f 0a 23 69 66 64 65 66 20   true */.#ifdef 
12620 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
12630 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69  AT3_OR_STAT4.  i
12640 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20  nt nSample;     
12650 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
12660 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e  r of elements in
12670 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20   aSample[] */.  
12680 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20  int nSampleCol; 
12690 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
126a0 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e   of IndexSample.
126b0 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e  anEq[] and so on
126c0 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
126d0 41 76 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f  AvgEq;         /
126e0 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20 76 61  * Average nEq va
126f0 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f  lues for keys no
12700 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a  t in aSample */.
12710 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61    IndexSample *a
12720 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61  Sample;    /* Sa
12730 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66  mples of the lef
12740 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20  t-most key */.  
12750 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73  tRowcnt *aiRowEs
12760 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d  t;       /* Non-
12770 6c 6f 67 61 72 69 74 68 6d 69 63 20 73 74 61 74  logarithmic stat
12780 31 20 64 61 74 61 20 66 6f 72 20 74 68 69 73 20  1 data for this 
12790 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63  index */.  tRowc
127a0 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20 20 20 20  nt nRowEst0;    
127b0 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72      /* Non-logar
127c0 69 74 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66  ithmic number of
127d0 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64   rows in the ind
127e0 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a  ex */.#endif.};.
127f0 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
12800 61 6c 75 65 73 20 66 6f 72 20 49 6e 64 65 78 2e  alues for Index.
12810 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69  idxType.*/.#defi
12820 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50  ne SQLITE_IDXTYP
12830 45 5f 41 50 50 44 45 46 20 20 20 20 20 20 30 20  E_APPDEF      0 
12840 20 20 2f 2a 20 43 72 65 61 74 65 64 20 75 73 69    /* Created usi
12850 6e 67 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  ng CREATE INDEX 
12860 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
12870 45 5f 49 44 58 54 59 50 45 5f 55 4e 49 51 55 45  E_IDXTYPE_UNIQUE
12880 20 20 20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70        1   /* Imp
12890 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49 51 55 45  lements a UNIQUE
128a0 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23   constraint */.#
128b0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
128c0 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59  XTYPE_PRIMARYKEY
128d0 20 20 32 20 20 20 2f 2a 20 49 73 20 74 68 65 20    2   /* Is the 
128e0 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20  PRIMARY KEY for 
128f0 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a  the table */../*
12900 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
12910 69 6e 64 65 78 20 58 20 69 73 20 61 20 50 52 49  index X is a PRI
12920 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a  MARY KEY index *
12930 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d  /.#define IsPrim
12940 61 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20  aryKeyIndex(X)  
12950 28 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53  ((X)->idxType==S
12960 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52  QLITE_IDXTYPE_PR
12970 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65  IMARYKEY)../* Re
12980 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64  turn true if ind
12990 65 78 20 58 20 69 73 20 61 20 55 4e 49 51 55 45  ex X is a UNIQUE
129a0 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
129b0 65 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28  e IsUniqueIndex(
129c0 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e  X)      ((X)->on
129d0 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a  Error!=OE_None).
129e0 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70  ./*.** Each samp
129f0 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  le stored in the
12a00 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61   sqlite_stat3 ta
12a10 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e 74  ble is represent
12a20 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 0a 2a 2a  ed in memory .**
12a30 20 75 73 69 6e 67 20 61 20 73 74 72 75 63 74 75   using a structu
12a40 72 65 20 6f 66 20 74 68 69 73 20 74 79 70 65 2e  re of this type.
12a50 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74    See documentat
12a60 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20 6f  ion at the top o
12a70 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65  f the.** analyze
12a80 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66  .c source file f
12a90 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
12aa0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
12ab0 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65  ruct IndexSample
12ac0 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20 20   {.  void *p;   
12ad0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
12ae0 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65 63  r to sampled rec
12af0 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20  ord */.  int n; 
12b00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
12b10 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e 20  ze of record in 
12b20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63  bytes */.  tRowc
12b30 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20  nt *anEq;    /* 
12b40 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72  Est. number of r
12b50 6f 77 73 20 77 68 65 72 65 20 74 68 65 20 6b 65  ows where the ke
12b60 79 20 65 71 75 61 6c 73 20 74 68 69 73 20 73 61  y equals this sa
12b70 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  mple */.  tRowcn
12b80 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45  t *anLt;    /* E
12b90 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  st. number of ro
12ba0 77 73 20 77 68 65 72 65 20 6b 65 79 20 69 73 20  ws where key is 
12bb0 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73  less than this s
12bc0 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63  ample */.  tRowc
12bd0 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20  nt *anDLt;   /* 
12be0 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64  Est. number of d
12bf0 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73  istinct keys les
12c00 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70  s than this samp
12c10 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
12c20 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e  Each token comin
12c30 67 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78  g out of the lex
12c40 65 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  er is an instanc
12c50 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72  e of.** this str
12c60 75 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20  ucture.  Tokens 
12c70 61 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73  are also used as
12c80 20 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72   part of an expr
12c90 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  ession..**.** No
12ca0 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30  te if Token.z==0
12cb0 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20   then Token.dyn 
12cc0 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20  and Token.n are 
12cd0 75 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a  undefined and.**
12ce0 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e   may contain ran
12cf0 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20  dom values.  Do 
12d00 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73  not make any ass
12d10 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74 20 54  umptions about T
12d20 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20  oken.dyn.** and 
12d30 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b  Token.n when Tok
12d40 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75  en.z==0..*/.stru
12d50 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e  ct Token {.  con
12d60 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  st char *z;     
12d70 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 74  /* Text of the t
12d80 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d  oken.  Not NULL-
12d90 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20  terminated! */. 
12da0 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b   unsigned int n;
12db0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
12dc0 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74   characters in t
12dd0 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a  his token */.};.
12de0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
12df0 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
12e00 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e  ture contains in
12e10 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
12e20 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
12e30 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43  code for a SELEC
12e40 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  T that contains 
12e50 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
12e60 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78  ons..**.** If Ex
12e70 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f  pr.op==TK_AGG_CO
12e80 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46  LUMN or TK_AGG_F
12e90 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70  UNCTION then Exp
12ea0 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a  r.pAggInfo is a.
12eb0 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ** pointer to th
12ec0 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
12ed0 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  he Expr.iColumn 
12ee0 66 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64  field is the ind
12ef0 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f  ex in.** AggInfo
12f00 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e  .aCol[] or AggIn
12f10 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e  fo.aFunc[] of in
12f20 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
12f30 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
12f40 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f  code for that no
12f50 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66  de..**.** AggInf
12f60 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41  o.pGroupBy and A
12f70 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78  ggInfo.aFunc.pEx
12f80 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c  pr point to fiel
12f90 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a  ds within the.**
12fa0 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74   original Select
12fb0 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
12fc0 64 65 73 63 72 69 62 65 73 20 74 68 65 20 53 45  describes the SE
12fd0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
12fe0 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73   These.** fields
12ff0 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20   do not need to 
13000 62 65 20 66 72 65 65 64 20 77 68 65 6e 20 64 65  be freed when de
13010 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41  allocating the A
13020 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  ggInfo structure
13030 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49  ..*/.struct AggI
13040 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63  nfo {.  u8 direc
13050 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  tMode;          
13060 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65 72  /* Direct render
13070 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74  ing mode means t
13080 61 6b 65 20 64 61 74 61 20 64 69 72 65 63 74 6c  ake data directl
13090 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y.              
130a0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66              ** f
130b0 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65  rom source table
130c0 73 20 72 61 74 68 65 72 20 74 68 61 6e 20 66 72  s rather than fr
130d0 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20  om accumulators 
130e0 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69  */.  u8 useSorti
130f0 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20  ngIdx;       /* 
13100 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20  In direct mode, 
13110 72 65 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f  reference the so
13120 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68  rting index rath
13130 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  er.             
13140 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
13150 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20  than the source 
13160 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73  table */.  int s
13170 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20  ortingIdx;      
13180 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
13190 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69  ber of the sorti
131a0 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  ng index */.  in
131b0 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62  t sortingIdxPTab
131c0 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20  ;     /* Cursor 
131d0 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f  number of pseudo
131e0 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  -table */.  int 
131f0 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20  nSortingColumn; 
13200 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13210 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
13220 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
13230 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78  .  int mnReg, mx
13240 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61  Reg;       /* Ra
13250 6e 67 65 20 6f 66 20 72 65 67 69 73 74 65 72 73  nge of registers
13260 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61   allocated for a
13270 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f  Col and aFunc */
13280 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
13290 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68  oupBy;     /* Th
132a0 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73  e group by claus
132b0 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  e */.  struct Ag
132c0 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f  gInfo_col {    /
132d0 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  * For each colum
132e0 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65  n used in source
132f0 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54   tables */.    T
13300 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
13310 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63          /* Sourc
13320 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
13330 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
13340 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
13350 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  r number of the 
13360 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
13370 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b      int iColumn;
13380 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13390 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69  Column number wi
133a0 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20  thin the source 
133b0 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
133c0 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20   iSorterColumn; 
133d0 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
133e0 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f  number in the so
133f0 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
13400 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20     int iMem;    
13410 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
13420 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
13430 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75  hat acts as accu
13440 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45  mulator */.    E
13450 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
13460 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f          /* The o
13470 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69  riginal expressi
13480 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b  on */.  } *aCol;
13490 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20  .  int nColumn; 
134a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
134b0 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74  mber of used ent
134c0 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a  ries in aCol[] *
134d0 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c  /.  int nAccumul
134e0 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e  ator;       /* N
134f0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
13500 20 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75   that show throu
13510 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74  gh to the output
13520 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13530 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41              ** A
13540 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e  dditional column
13550 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20  s are used only 
13560 61 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  as parameters to
13570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13580 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67             ** ag
13590 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
135a0 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  s */.  struct Ag
135b0 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f  gInfo_func {   /
135c0 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65  * For each aggre
135d0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  gate function */
135e0 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
135f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
13600 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f   Expression enco
13610 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f  ding the functio
13620 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66  n */.    FuncDef
13630 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20   *pFunc;        
13640 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61    /* The aggrega
13650 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c  te function impl
13660 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ementation */.  
13670 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
13680 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
13690 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
136a0 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d  at acts as accum
136b0 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e  ulator */.    in
136c0 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20  t iDistinct;    
136d0 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65         /* Epheme
136e0 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74  ral table used t
136f0 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e  o enforce DISTIN
13700 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63  CT */.  } *aFunc
13710 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20  ;.  int nFunc;  
13720 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
13730 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
13740 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d   in aFunc[] */.}
13750 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74  ;../*.** The dat
13760 61 74 79 70 65 20 79 6e 56 61 72 20 69 73 20 61  atype ynVar is a
13770 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c   signed integer,
13780 20 65 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f   either 16-bit o
13790 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75  r 32-bit..** Usu
137a0 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69  ally it is 16-bi
137b0 74 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49  ts.  But if SQLI
137c0 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
137d0 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61 74 65  NUMBER is greate
137e0 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20  r.** than 32767 
137f0 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20  we have to make 
13800 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62  it 32-bit.  16-b
13810 69 74 20 69 73 20 70 72 65 66 65 72 72 65 64 20  it is preferred 
13820 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73  because.** it us
13830 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69  es less memory i
13840 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63  n the Expr objec
13850 74 2c 20 77 68 69 63 68 20 69 73 20 61 20 62 69  t, which is a bi
13860 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a  g memory user.**
13870 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   in systems with
13880 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65   lots of prepare
13890 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41  d statements.  A
138a0 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61 74 69  nd few applicati
138b0 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65  ons.** need more
138c0 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f   than about 10 o
138d0 72 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20  r 20 variables. 
138e0 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d   But some extrem
138f0 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20  e users want.** 
13900 74 6f 20 68 61 76 65 20 70 72 65 70 61 72 65 64  to have prepared
13910 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
13920 20 6f 76 65 72 20 33 32 37 36 37 20 76 61 72 69   over 32767 vari
13930 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74  ables, and for t
13940 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f  hem.** the optio
13950 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28  n is available (
13960 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29  at compile-time)
13970 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
13980 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
13990 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64  BER<=32767.typed
139a0 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65  ef i16 ynVar;.#e
139b0 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20  lse.typedef int 
139c0 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ynVar;.#endif../
139d0 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f  *.** Each node o
139e0 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  f an expression 
139f0 69 6e 20 74 68 65 20 70 61 72 73 65 20 74 72 65  in the parse tre
13a00 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  e is an instance
13a10 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
13a20 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70  cture..**.** Exp
13a30 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f  r.op is the opco
13a40 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20  de. The integer 
13a50 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64  parser token cod
13a60 65 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a  es are reused.**
13a70 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65   as opcodes here
13a80 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74  . For example, t
13a90 68 65 20 70 61 72 73 65 72 20 64 65 66 69 6e 65  he parser define
13aa0 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e  s TK_GE to be an
13ab0 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65   integer.** code
13ac0 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
13ad0 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e  e ">=" operator.
13ae0 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67   This same integ
13af0 65 72 20 63 6f 64 65 20 69 73 20 72 65 75 73 65  er code is reuse
13b00 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e  d.** to represen
13b10 74 20 74 68 65 20 67 72 65 61 74 65 72 2d 74 68  t the greater-th
13b20 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f  an-or-equal-to o
13b30 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65  perator in the e
13b40 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65  xpression.** tre
13b50 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
13b60 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
13b70 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b   SQL literal (TK
13b80 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f  _INTEGER, TK_FLO
13b90 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a  AT, TK_BLOB, .**
13ba0 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20   or TK_STRING), 
13bb0 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
13bc0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78  contains the tex
13bd0 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74  t of the SQL lit
13be0 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20  eral. If.** the 
13bf0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
13c00 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52  variable (TK_VAR
13c10 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70  IABLE), then Exp
13c20 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
13c30 20 74 68 65 20 0a 2a 2a 20 76 61 72 69 61 62 6c   the .** variabl
13c40 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c  e name. Finally,
13c50 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69   if the expressi
13c60 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e  on is an SQL fun
13c70 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49  ction (TK_FUNCTI
13c80 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70  ON),.** then Exp
13c90 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
13ca0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
13cb0 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a   function..**.**
13cc0 20 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64   Expr.pRight and
13cd0 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20   Expr.pLeft are 
13ce0 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67  the left and rig
13cf0 68 74 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e  ht subexpression
13d00 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79  s of a.** binary
13d10 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65   operator. Eithe
13d20 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65  r or both may be
13d30 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70   NULL..**.** Exp
13d40 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c  r.x.pList is a l
13d50 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ist of arguments
13d60 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69   if the expressi
13d70 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e  on is an SQL fun
13d80 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45  ction,.** a CASE
13d90 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61   expression or a
13da0 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20  n IN expression 
13db0 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68  of the form "<lh
13dc0 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e  s> IN (<y>, <z>.
13dd0 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e  ..)"..** Expr.x.
13de0 70 53 65 6c 65 63 74 20 69 73 20 75 73 65 64 20  pSelect is used 
13df0 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
13e00 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63  n is a sub-selec
13e10 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69  t or an expressi
13e20 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72  on of.** the for
13e30 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c  m "<lhs> IN (SEL
13e40 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68  ECT ...)". If th
13e50 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62  e EP_xIsSelect b
13e60 69 74 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  it is set in the
13e70 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  .** Expr.flags m
13e80 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78  ask, then Expr.x
13e90 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69  .pSelect is vali
13ea0 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78  d. Otherwise, Ex
13eb0 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 0a 2a  pr.x.pList is .*
13ec0 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41  * valid..**.** A
13ed0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20  n expression of 
13ee0 74 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49  the form ID or I
13ef0 44 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20 61  D.ID refers to a
13f00 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62   column in a tab
13f10 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20  le..** For such 
13f20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70  expressions, Exp
13f30 72 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54  r.op is set to T
13f40 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70  K_COLUMN and Exp
13f50 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74  r.iTable is.** t
13f60 68 65 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f  he integer curso
13f70 72 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44  r number of a VD
13f80 42 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  BE cursor pointi
13f90 6e 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65  ng to that table
13fa0 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f   and.** Expr.iCo
13fb0 6c 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75  lumn is the colu
13fc0 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  mn number for th
13fd0 65 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d  e specific colum
13fe0 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78  n.  If the.** ex
13ff0 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64  pression is used
14000 20 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20   as a result in 
14010 61 6e 20 61 67 67 72 65 67 61 74 65 20 53 45 4c  an aggregate SEL
14020 45 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ECT, then the.**
14030 20 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73   value is also s
14040 74 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78 70  tored in the Exp
14050 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e  r.iAgg column in
14060 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73   the aggregate s
14070 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e  o that.** it can
14080 20 62 65 20 61 63 63 65 73 73 65 64 20 61 66 74   be accessed aft
14090 65 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65  er all aggregate
140a0 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a  s are computed..
140b0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
140c0 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e  ression is an un
140d0 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d  bound variable m
140e0 61 72 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f  arker (a questio
140f0 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63 68 61 72 61  n mark .** chara
14100 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20  cter '?' in the 
14110 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68  original SQL) th
14120 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61 62  en the Expr.iTab
14130 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64  le holds the ind
14140 65 78 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f  ex .** number fo
14150 72 20 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e  r that variable.
14160 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78  .**.** If the ex
14170 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75  pression is a su
14180 62 71 75 65 72 79 20 74 68 65 6e 20 45 78 70 72  bquery then Expr
14190 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61  .iColumn holds a
141a0 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67  n integer.** reg
141b0 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e  ister number con
141c0 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75  taining the resu
141d0 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71 75 65  lt of the subque
141e0 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73  ry.  If the.** s
141f0 75 62 71 75 65 72 79 20 67 69 76 65 73 20 61 20  ubquery gives a 
14200 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c  constant result,
14210 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20   then iTable is 
14220 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75 62 71  -1.  If the subq
14230 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20  uery.** gives a 
14240 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72  different answer
14250 20 61 74 20 64 69 66 66 65 72 65 6e 74 20 74 69   at different ti
14260 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61 74 65  mes during state
14270 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a  ment processing.
14280 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69  ** then iTable i
14290 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  s the address of
142a0 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68   a subroutine th
142b0 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20  at computes the 
142c0 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20  subquery..**.** 
142d0 49 66 20 74 68 65 20 45 78 70 72 20 69 73 20 6f  If the Expr is o
142e0 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e  f type OP_Column
142f0 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20  , and the table 
14300 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20  it is selecting 
14310 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73  from.** is a dis
14320 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22  k table or the "
14330 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61  old.*" pseudo-ta
14340 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70  ble, then pTab p
14350 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20  oints to the.** 
14360 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61  corresponding ta
14370 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a  ble definition..
14380 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e  **.** ALLOCATION
14390 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78   NOTES:.**.** Ex
143a0 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75  pr objects can u
143b0 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f  se a lot of memo
143c0 72 79 20 73 70 61 63 65 20 69 6e 20 64 61 74 61  ry space in data
143d0 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f  base schema.  To
143e0 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20  .** help reduce 
143f0 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65  memory requireme
14400 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61  nts, sometimes a
14410 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69  n Expr object wi
14420 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74  ll be.** truncat
14430 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75  ed.  And to redu
14440 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ce the number of
14450 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
14460 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a  ons, sometimes.*
14470 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78  * two or more Ex
14480 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20  pr objects will 
14490 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73  be stored in a s
144a0 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  ingle memory all
144b0 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65  ocation,.** toge
144c0 74 68 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a  ther with Expr.z
144d0 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a  Token strings..*
144e0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52  *.** If the EP_R
144f0 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f  educed and EP_To
14500 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72  kenOnly flags ar
14510 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e  e set when.** an
14520 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20   Expr object is 
14530 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e  truncated.  When
14540 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73   EP_Reduced is s
14550 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20  et, then all.** 
14560 74 68 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f  the child Expr o
14570 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45 78  bjects in the Ex
14580 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70  pr.pLeft and Exp
14590 72 2e 70 52 69 67 68 74 20 73 75 62 74 72 65 65  r.pRight subtree
145a0 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e  s.** are contain
145b0 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 73 61  ed within the sa
145c0 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  me memory alloca
145d0 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77  tion.  Note, how
145e0 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68  ever, that.** th
145f0 65 20 73 75 62 74 72 65 65 73 20 69 6e 20 45 78  e subtrees in Ex
14600 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78  pr.x.pList or Ex
14610 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65  pr.x.pSelect are
14620 20 61 6c 77 61 79 73 20 73 65 70 61 72 61 74 65   always separate
14630 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c  ly.** allocated,
14640 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   regardless of w
14650 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50  hether or not EP
14660 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2e  _Reduced is set.
14670 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20  .*/.struct Expr 
14680 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  {.  u8 op;      
14690 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70             /* Op
146a0 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65  eration performe
146b0 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a  d by this node *
146c0 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
146d0 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  y;         /* Th
146e0 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68  e affinity of th
146f0 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66  e column or 0 if
14700 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f   not a column */
14710 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20  .  u32 flags;   
14720 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72            /* Var
14730 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f  ious flags.  EP_
14740 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20  * See below */. 
14750 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61   union {.    cha
14760 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20  r *zToken;      
14770 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c      /* Token val
14780 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61  ue. Zero termina
14790 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64  ted and dequoted
147a0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c   */.    int iVal
147b0 75 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ue;            /
147c0 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69  * Non-negative i
147d0 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20  nteger value if 
147e0 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20  EP_IntValue */. 
147f0 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74   } u;..  /* If t
14800 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  he EP_TokenOnly 
14810 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74  flag is set in t
14820 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  he Expr.flags ma
14830 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a  sk, then no.  **
14840 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61   space is alloca
14850 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c  ted for the fiel
14860 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f  ds below this po
14870 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  int. An attempt 
14880 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74  to.  ** access t
14890 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  hem will result 
148a0 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72  in a segfault or
148b0 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a 20   malfunction. . 
148c0 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
148d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
148e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
148f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14900 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20  ******/..  Expr 
14910 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20  *pLeft;         
14920 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64    /* Left subnod
14930 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69  e */.  Expr *pRi
14940 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ght;          /*
14950 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a   Right subnode *
14960 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
14970 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b  ExprList *pList;
14980 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c       /* op = IN,
14990 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 2c   EXISTS, SELECT,
149a0 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c   CASE, FUNCTION,
149b0 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20   BETWEEN */.    
149c0 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
149d0 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53 65       /* EP_xIsSe
149e0 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e  lect and op = IN
149f0 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54  , EXISTS, SELECT
14a00 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a   */.  } x;..  /*
14a10 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63   If the EP_Reduc
14a20 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ed flag is set i
14a30 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
14a40 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20   mask, then no. 
14a50 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c   ** space is all
14a60 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66  ocated for the f
14a70 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73  ields below this
14a80 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d   point. An attem
14a90 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73  pt to.  ** acces
14aa0 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75  s them will resu
14ab0 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74  lt in a segfault
14ac0 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e   or malfunction.
14ad0 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
14ae0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14af0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14b00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14b10 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53  ********/..#if S
14b20 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
14b30 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65  EPTH>0.  int nHe
14b40 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20  ight;           
14b50 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68 65  /* Height of the
14b60 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79 20   tree headed by 
14b70 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e  this node */.#en
14b80 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65  dif.  int iTable
14b90 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
14ba0 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f  TK_COLUMN: curso
14bb0 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  r number of tabl
14bc0 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e  e holding column
14bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14be0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
14bf0 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73 74  REGISTER: regist
14c00 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20  er number.      
14c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52     ** TK_TRIGGER
14c30 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e  : 1 -> new, 0 ->
14c40 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20   old.           
14c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
14c60 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31   EP_Unlikely:  1
14c70 33 34 32 31 37 37 32 38 20 74 69 6d 65 73 20 6c  34217728 times l
14c80 69 6b 65 6c 69 68 6f 6f 64 20 2a 2f 0a 20 20 79  ikelihood */.  y
14c90 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20  nVar iColumn;   
14ca0 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55        /* TK_COLU
14cb0 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78  MN: column index
14cc0 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e  .  -1 for rowid.
14cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14ce0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
14cf0 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61 62  VARIABLE: variab
14d00 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79  le number (alway
14d10 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20 20 69 31  s >= 1). */.  i1
14d20 36 20 69 41 67 67 3b 20 20 20 20 20 20 20 20 20  6 iAgg;         
14d30 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e       /* Which en
14d40 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d  try in pAggInfo-
14d50 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75  >aCol[] or ->aFu
14d60 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52  nc[] */.  i16 iR
14d70 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20  ightJoinTable;  
14d80 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f   /* If EP_FromJo
14d90 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74 61  in, the right ta
14da0 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20  ble of the join 
14db0 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20  */.  u8 op2;    
14dc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
14dd0 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67  K_REGISTER: orig
14de0 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78  inal value of Ex
14df0 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20  pr.op.          
14e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
14e10 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65  * TK_COLUMN: the
14e20 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72   value of p5 for
14e30 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20   OP_Column.     
14e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e50 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55      ** TK_AGG_FU
14e60 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20  NCTION: nesting 
14e70 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e  depth */.  AggIn
14e80 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20  fo *pAggInfo;   
14e90 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f    /* Used by TK_
14ea0 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54  AGG_COLUMN and T
14eb0 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a  K_AGG_FUNCTION *
14ec0 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
14ed0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61             /* Ta
14ee0 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d  ble for TK_COLUM
14ef0 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a  N expressions. *
14f00 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
14f10 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68  following are th
14f20 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69  e meanings of bi
14f30 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  ts in the Expr.f
14f40 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
14f50 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f  define EP_FromJo
14f60 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f 2a 20  in  0x000001 /* 
14f70 4f 72 69 67 69 6e 61 74 65 73 20 69 6e 20 4f 4e  Originates in ON
14f80 2f 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66  /USING clause of
14f90 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
14fa0 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20  define EP_Agg   
14fb0 20 20 20 20 30 78 30 30 30 30 30 32 20 2f 2a 20      0x000002 /* 
14fc0 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  Contains one or 
14fd0 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
14fe0 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  unctions */.#def
14ff0 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76 65 64 20  ine EP_Resolved 
15000 20 30 78 30 30 30 30 30 34 20 2f 2a 20 49 44 73   0x000004 /* IDs
15010 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c   have been resol
15020 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a  ved to COLUMNs *
15030 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 45 72 72  /.#define EP_Err
15040 6f 72 20 20 20 20 20 30 78 30 30 30 30 30 38 20  or     0x000008 
15050 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 63 6f  /* Expression co
15060 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
15070 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65  re errors */.#de
15080 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74  fine EP_Distinct
15090 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20 41 67    0x000010 /* Ag
150a0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
150b0 20 77 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b   with DISTINCT k
150c0 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e  eyword */.#defin
150d0 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20 30  e EP_VarSelect 0
150e0 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65  x000020 /* pSele
150f0 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64  ct is correlated
15100 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a  , not constant *
15110 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c  /.#define EP_Dbl
15120 51 75 6f 74 65 64 20 30 78 30 30 30 30 34 30 20  Quoted 0x000040 
15130 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f  /* token.z was o
15140 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e  riginally in "..
15150 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ." */.#define EP
15160 5f 49 6e 66 69 78 46 75 6e 63 20 30 78 30 30 30  _InfixFunc 0x000
15170 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  080 /* True for 
15180 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f  an infix functio
15190 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65  n: LIKE, GLOB, e
151a0 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  tc */.#define EP
151b0 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78 30 30 30  _Collate   0x000
151c0 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74  100 /* Tree cont
151d0 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54  ains a TK_COLLAT
151e0 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64  E operator */.#d
151f0 65 66 69 6e 65 20 45 50 5f 47 65 6e 65 72 69 63  efine EP_Generic
15200 20 20 20 30 78 30 30 30 32 30 30 20 2f 2a 20 49     0x000200 /* I
15210 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72  gnore COLLATE or
15220 20 61 66 66 69 6e 69 74 79 20 6f 6e 20 74 68 69   affinity on thi
15230 73 20 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e  s tree */.#defin
15240 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 30  e EP_IntValue  0
15250 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65 67  x000400 /* Integ
15260 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e  er value contain
15270 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a  ed in u.iValue *
15280 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73  /.#define EP_xIs
15290 53 65 6c 65 63 74 20 30 78 30 30 30 38 30 30 20  Select 0x000800 
152a0 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20  /* x.pSelect is 
152b0 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65  valid (otherwise
152c0 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a   x.pList is) */.
152d0 23 64 65 66 69 6e 65 20 45 50 5f 53 6b 69 70 20  #define EP_Skip 
152e0 20 20 20 20 20 30 78 30 30 31 30 30 30 20 2f 2a       0x001000 /*
152f0 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72   COLLATE, AS, or
15300 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65   UNLIKELY */.#de
15310 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20  fine EP_Reduced 
15320 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45 78    0x002000 /* Ex
15330 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 52  pr struct EXPR_R
15340 45 44 55 43 45 44 53 49 5a 45 20 62 79 74 65 73  EDUCEDSIZE bytes
15350 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
15360 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78   EP_TokenOnly 0x
15370 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20 73  004000 /* Expr s
15380 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e  truct EXPR_TOKEN
15390 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f  ONLYSIZE bytes o
153a0 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  nly */.#define E
153b0 50 5f 53 74 61 74 69 63 20 20 20 20 30 78 30 30  P_Static    0x00
153c0 38 30 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20  8000 /* Held in 
153d0 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69  memory not obtai
153e0 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ned from malloc(
153f0 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ) */.#define EP_
15400 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30 30  MemToken  0x0100
15410 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71  00 /* Need to sq
15420 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 45 78  lite3DbFree() Ex
15430 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65  pr.zToken */.#de
15440 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63 65  fine EP_NoReduce
15450 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43 61    0x020000 /* Ca
15460 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44  nnot EXPRDUP_RED
15470 55 43 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f  UCE this Expr */
15480 0a 23 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69  .#define EP_Unli
15490 6b 65 6c 79 20 20 30 78 30 34 30 30 30 30 20 2f  kely  0x040000 /
154a0 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20  * unlikely() or 
154b0 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e  likelihood() fun
154c0 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
154d0 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63 20 30 78   EP_ConstFunc 0x
154e0 30 38 30 30 30 30 20 2f 2a 20 4e 6f 64 65 20 69  080000 /* Node i
154f0 73 20 61 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  s a SQLITE_FUNC_
15500 43 4f 4e 53 54 41 4e 54 20 66 75 6e 63 74 69 6f  CONSTANT functio
15510 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
15520 43 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30 30 30  CanBeNull 0x1000
15530 30 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75 6c  00 /* Can be nul
15540 6c 20 64 65 73 70 69 74 65 20 4e 4f 54 20 4e 55  l despite NOT NU
15550 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  LL constraint */
15560 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62 71  .#define EP_Subq
15570 75 65 72 79 20 20 30 78 32 30 30 30 30 30 20 2f  uery  0x200000 /
15580 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20  * Tree contains 
15590 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70 65 72  a TK_SELECT oper
155a0 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43  ator */../*.** C
155b0 6f 6d 62 69 6e 61 74 69 6f 6e 73 20 6f 66 20 74  ombinations of t
155c0 77 6f 20 6f 72 20 6d 6f 72 65 20 45 50 5f 2a 20  wo or more EP_* 
155d0 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  flags.*/.#define
155e0 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20 28 45   EP_Propagate (E
155f0 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53 75 62  P_Collate|EP_Sub
15600 71 75 65 72 79 29 20 2f 2a 20 50 72 6f 70 61 67  query) /* Propag
15610 61 74 65 20 74 68 65 73 65 20 62 69 74 73 20 75  ate these bits u
15620 70 20 74 72 65 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  p tree */../*.**
15630 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61   These macros ca
15640 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73  n be used to tes
15650 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72  t, set, or clear
15660 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a   bits in the .**
15670 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c   Expr.flags fiel
15680 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78  d..*/.#define Ex
15690 70 72 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c  prHasProperty(E,
156a0 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c  P)     (((E)->fl
156b0 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65  ags&(P))!=0).#de
156c0 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c 6c 50  fine ExprHasAllP
156d0 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 28  roperty(E,P)  ((
156e0 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d  (E)->flags&(P))=
156f0 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78  =(P)).#define Ex
15700 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c  prSetProperty(E,
15710 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67  P)     (E)->flag
15720 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45  s|=(P).#define E
15730 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79  xprClearProperty
15740 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61  (E,P)   (E)->fla
15750 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65  gs&=~(P)../* The
15760 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65   ExprSetVVAPrope
15770 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73 20 75  rty() macro is u
15780 73 65 64 20 66 6f 72 20 56 65 72 69 66 69 63 61  sed for Verifica
15790 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e  tion, Validation
157a0 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65 64 69  ,.** and Accredi
157b0 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74  tation only.  It
157c0 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70 72   works like Expr
157d0 53 65 74 50 72 6f 70 65 72 74 79 28 29 20 64 75  SetProperty() du
157e0 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63  ring VVA.** proc
157f0 65 73 73 65 73 20 62 75 74 20 69 73 20 61 20 6e  esses but is a n
15800 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76 65 72  o-op for deliver
15810 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  y..*/.#ifdef SQL
15820 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66 69  ITE_DEBUG.# defi
15830 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  ne ExprSetVVAPro
15840 70 65 72 74 79 28 45 2c 50 29 20 20 28 45 29 2d  perty(E,P)  (E)-
15850 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73  >flags|=(P).#els
15860 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53  e.# define ExprS
15870 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c  etVVAProperty(E,
15880 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  P).#endif../*.**
15890 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72   Macros to deter
158a0 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20  mine the number 
158b0 6f 66 20 62 79 74 65 73 20 72 65 71 75 69 72 65  of bytes require
158c0 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78  d by a normal Ex
158d0 70 72 20 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61  pr .** struct, a
158e0 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69  n Expr struct wi
158f0 74 68 20 74 68 65 20 45 50 5f 52 65 64 75 63 65  th the EP_Reduce
15900 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45 78  d flag set in Ex
15910 70 72 2e 66 6c 61 67 73 20 0a 2a 2a 20 61 6e 64  pr.flags .** and
15920 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20   an Expr struct 
15930 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65  with the EP_Toke
15940 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a  nOnly flag set..
15950 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
15960 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20  FULLSIZE        
15970 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20     sizeof(Expr) 
15980 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c            /* Ful
15990 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e  l size */.#defin
159a0 65 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49  e EXPR_REDUCEDSI
159b0 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73 65 74  ZE        offset
159c0 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20  of(Expr,iTable) 
159d0 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75   /* Common featu
159e0 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  res */.#define E
159f0 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a  XPR_TOKENONLYSIZ
15a00 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28  E      offsetof(
15a10 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a  Expr,pLeft)   /*
15a20 20 46 65 77 65 72 20 66 65 61 74 75 72 65 73 20   Fewer features 
15a30 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20  */../*.** Flags 
15a40 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 73 71  passed to the sq
15a50 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66  lite3ExprDup() f
15a60 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65  unction. See the
15a70 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20   header comment 
15a80 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65  .** above sqlite
15a90 33 45 78 70 72 44 75 70 28 29 20 66 6f 72 20 64  3ExprDup() for d
15aa0 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69  etails..*/.#defi
15ab0 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44 55 43  ne EXPRDUP_REDUC
15ac0 45 20 20 20 20 20 20 20 20 20 30 78 30 30 30 31  E         0x0001
15ad0 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65    /* Used reduce
15ae0 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65  d-size Expr node
15af0 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69  s */../*.** A li
15b00 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
15b10 73 2e 20 20 45 61 63 68 20 65 78 70 72 65 73 73  s.  Each express
15b20 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c  ion may optional
15b30 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d  ly have a.** nam
15b40 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65  e.  An expr/name
15b50 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e   combination can
15b60 20 62 65 20 75 73 65 64 20 69 6e 20 73 65 76 65   be used in seve
15b70 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a  ral ways, such.*
15b80 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66  * as the list of
15b90 20 22 65 78 70 72 20 41 53 20 49 44 22 20 66 69   "expr AS ID" fi
15ba0 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  elds following a
15bb0 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20   "SELECT" or in 
15bc0 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22  the.** list of "
15bd0 49 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73  ID = expr" items
15be0 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20   in an UPDATE.  
15bf0 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  A list of expres
15c00 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73  sions can.** als
15c10 6f 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65  o be used as the
15c20 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66   argument to a f
15c30 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63  unction, in whic
15c40 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61  h case the a.zNa
15c50 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e  me.** field is n
15c60 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42  ot used..**.** B
15c70 79 20 64 65 66 61 75 6c 74 20 74 68 65 20 45 78  y default the Ex
15c80 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68  pr.zSpan field h
15c90 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61  olds a human-rea
15ca0 64 61 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f  dable descriptio
15cb0 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72  n of.** the expr
15cc0 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75  ession that is u
15cd0 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72  sed in the gener
15ce0 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d  ation of error m
15cf0 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63  essages and.** c
15d00 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49  olumn labels.  I
15d10 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45 78 70  n this case, Exp
15d20 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63  r.zSpan is typic
15d30 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66  ally the text of
15d40 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70   a.** column exp
15d50 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78  ression as it ex
15d60 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54  ists in a SELECT
15d70 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77   statement.  How
15d80 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20  ever, if.** the 
15d90 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20  bSpanIsTab flag 
15da0 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70  is set, then zSp
15db0 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64  an is overloaded
15dc0 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d   to mean the nam
15dd0 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75  e.** of the resu
15de0 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  lt column in the
15df0 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e   form: DATABASE.
15e00 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54  TABLE.COLUMN.  T
15e10 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72  his later.** for
15e20 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61  m is used for na
15e30 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69  me resolution wi
15e40 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63  th nested FROM c
15e50 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63  lauses..*/.struc
15e60 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69  t ExprList {.  i
15e70 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20  nt nExpr;       
15e80 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
15e90 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f  of expressions o
15ea0 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20  n the list */.  
15eb0 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f  struct ExprList_
15ec0 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61  item { /* For ea
15ed0 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  ch expression in
15ee0 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20   the list */.   
15ef0 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
15f00 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
15f10 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
15f20 6f 6e 73 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ons */.    char 
15f30 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
15f40 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f     /* Token asso
15f50 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
15f60 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
15f70 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20     char *zSpan; 
15f80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72             /* Or
15f90 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74  iginal text of t
15fa0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  he expression */
15fb0 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65  .    u8 sortOrde
15fc0 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
15fd0 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20  1 for DESC or 0 
15fe0 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75  for ASC */.    u
15ff0 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b  nsigned done :1;
16000 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67         /* A flag
16010 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65   to indicate whe
16020 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20  n processing is 
16030 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20  finished */.    
16040 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73  unsigned bSpanIs
16050 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e  Tab :1; /* zSpan
16060 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e   holds DB.TABLE.
16070 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e  COLUMN */.    un
16080 73 69 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20  signed reusable 
16090 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e  :1;   /* Constan
160a0 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  t expression is 
160b0 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20  reusable */.    
160c0 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 73 74  union {.      st
160d0 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20 20 75  ruct {.        u
160e0 31 36 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20  16 iOrderByCol; 
160f0 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45       /* For ORDE
16100 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d  R BY, column num
16110 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20 73 65  ber in result se
16120 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 75 31 36  t */.        u16
16130 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20   iAlias;        
16140 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f     /* Index into
16150 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20   Parse.aAlias[] 
16160 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20  for zName */.   
16170 20 20 20 7d 20 78 3b 0a 20 20 20 20 20 20 69 6e     } x;.      in
16180 74 20 69 43 6f 6e 73 74 45 78 70 72 52 65 67 3b  t iConstExprReg;
16190 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
161a0 72 20 69 6e 20 77 68 69 63 68 20 45 78 70 72 20  r in which Expr 
161b0 76 61 6c 75 65 20 69 73 20 63 61 63 68 65 64 20  value is cached 
161c0 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20 7d 20  */.    } u;.  } 
161d0 2a 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *a;             
161e0 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 20 61 20       /* Alloc a 
161f0 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 67 72 65  power of two gre
16200 61 74 65 72 20 6f 72 20 65 71 75 61 6c 20 74 6f  ater or equal to
16210 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   nExpr */.};../*
16220 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
16230 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
16240 65 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65  e is used by the
16250 20 70 61 72 73 65 72 20 74 6f 20 72 65 63 6f 72   parser to recor
16260 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61  d both.** the pa
16270 72 73 65 20 74 72 65 65 20 66 6f 72 20 61 6e 20  rse tree for an 
16280 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74  expression and t
16290 68 65 20 73 70 61 6e 20 6f 66 20 69 6e 70 75 74  he span of input
162a0 20 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20   text for an.** 
162b0 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73  expression..*/.s
162c0 74 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 7b  truct ExprSpan {
162d0 0a 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20  .  Expr *pExpr; 
162e0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
162f0 65 78 70 72 65 73 73 69 6f 6e 20 70 61 72 73 65  expression parse
16300 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74   tree */.  const
16310 20 63 68 61 72 20 2a 7a 53 74 61 72 74 3b 20 20   char *zStart;  
16320 20 2f 2a 20 46 69 72 73 74 20 63 68 61 72 61 63   /* First charac
16330 74 65 72 20 6f 66 20 69 6e 70 75 74 20 74 65 78  ter of input tex
16340 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  t */.  const cha
16350 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20  r *zEnd;     /* 
16360 4f 6e 65 20 63 68 61 72 61 63 74 65 72 20 70 61  One character pa
16370 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e  st the end of in
16380 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a  put text */.};..
16390 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
163a0 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
163b0 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73  ure can hold a s
163c0 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64  imple list of id
163d0 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75  entifiers,.** su
163e0 63 68 20 61 73 20 74 68 65 20 6c 69 73 74 20 22  ch as the list "
163f0 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f  a,b,c" in the fo
16400 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e  llowing statemen
16410 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49  ts:.**.**      I
16420 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
16430 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a  ,c) VALUES ...;.
16440 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 49  **      CREATE I
16450 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c  NDEX idx ON t(a,
16460 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52  b,c);.**      CR
16470 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72 69  EATE TRIGGER tri
16480 67 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20  g BEFORE UPDATE 
16490 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b  ON t(a,b,c) ...;
164a0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73  .**.** The IdLis
164b0 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73  t.a.idx field is
164c0 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 49   used when the I
164d0 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74 73  dList represents
164e0 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20   the list of.** 
164f0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74  column names aft
16500 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20  er a table name 
16510 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  in an INSERT sta
16520 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20  tement.  In the 
16530 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20  statement.**.** 
16540 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
16550 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a  t(a,b,c) ....**.
16560 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74 68 65  ** If "a" is the
16570 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   k-th column of 
16580 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20  table "t", then 
16590 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d  IdList.a[0].idx=
165a0 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64  =k..*/.struct Id
165b0 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20  List {.  struct 
165c0 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20  IdList_item {.  
165d0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
165e0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
165f0 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f  he identifier */
16600 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20  .    int idx;   
16610 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
16620 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43  in some Table.aC
16630 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  ol[] of a column
16640 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a   named zName */.
16650 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49    } *a;.  int nI
16660 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
16670 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69  mber of identifi
16680 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ers on the list 
16690 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
166a0 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70   bitmask datatyp
166b0 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20  e defined below 
166c0 69 73 20 75 73 65 64 20 66 6f 72 20 76 61 72 69  is used for vari
166d0 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ous optimization
166e0 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e  s..**.** Changin
166f0 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34  g this from a 64
16700 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74  -bit to a 32-bit
16710 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65   type limits the
16720 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61   number of.** ta
16730 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74  bles in a join t
16740 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20  o 32 instead of 
16750 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f  64.  But it also
16760 20 72 65 64 75 63 65 73 20 74 68 65 20 73 69 7a   reduces the siz
16770 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72  e.** of the libr
16780 61 72 79 20 62 79 20 37 33 38 20 62 79 74 65 73  ary by 738 bytes
16790 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74 79 70   on ix86..*/.typ
167a0 65 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b  edef u64 Bitmask
167b0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d  ;../*.** The num
167c0 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61  ber of bits in a
167d0 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22   Bitmask.  "BMS"
167e0 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20   means "BitMask 
167f0 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e  Size"..*/.#defin
16800 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69  e BMS  ((int)(si
16810 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29  zeof(Bitmask)*8)
16820 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69  )../*.** A bit i
16830 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23  n a Bitmask.*/.#
16840 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e  define MASKBIT(n
16850 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31  )   (((Bitmask)1
16860 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20  )<<(n)).#define 
16870 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28  MASKBIT32(n) (((
16880 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c  unsigned int)1)<
16890 3c 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  <(n))../*.** The
168a0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
168b0 74 75 72 65 20 64 65 73 63 72 69 62 65 73 20 74  ture describes t
168c0 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f  he FROM clause o
168d0 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  f a SELECT state
168e0 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61  ment..** Each ta
168f0 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20  ble or subquery 
16900 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
16910 73 65 20 69 73 20 61 20 73 65 70 61 72 61 74 65  se is a separate
16920 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74   element of.** t
16930 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61  he SrcList.a[] a
16940 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68  rray..**.** With
16950 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66   the addition of
16960 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61   multiple databa
16970 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20  se support, the 
16980 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
16990 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20  ure.** can also 
169a0 62 65 20 75 73 65 64 20 74 6f 20 64 65 73 63 72  be used to descr
169b0 69 62 65 20 61 20 70 61 72 74 69 63 75 6c 61 72  ibe a particular
169c0 20 74 61 62 6c 65 20 73 75 63 68 20 61 73 20 74   table such as t
169d0 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a  he table that.**
169e0 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20   is modified by 
169f0 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54  an INSERT, DELET
16a00 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74 61  E, or UPDATE sta
16a10 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e  tement.  In stan
16a20 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63  dard SQL,.** suc
16a30 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62  h a table must b
16a40 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a  e a simple name:
16a50 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c   ID.  But in SQL
16a60 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63  ite, the table c
16a70 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65  an.** now be ide
16a80 6e 74 69 66 69 65 64 20 62 79 20 61 20 64 61 74  ntified by a dat
16a90 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f  abase name, a do
16aa0 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  t, then the tabl
16ab0 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a  e name: ID.ID..*
16ac0 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70  *.** The jointyp
16ad0 65 20 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f  e starts out sho
16ae0 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79  wing the join ty
16af0 70 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 63  pe between the c
16b00 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20  urrent table.** 
16b10 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61 62  and the next tab
16b20 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20  le on the list. 
16b30 20 54 68 65 20 70 61 72 73 65 72 20 62 75 69 6c   The parser buil
16b40 64 73 20 74 68 65 20 6c 69 73 74 20 74 68 69 73  ds the list this
16b50 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c   way..** But sql
16b60 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74  ite3SrcListShift
16b70 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72  JoinType() later
16b80 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e   shifts the join
16b90 74 79 70 65 73 20 73 6f 20 74 68 61 74 20 65 61  types so that ea
16ba0 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65  ch.** jointype e
16bb0 78 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69  xpresses the joi
16bc0 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 61  n between the ta
16bd0 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76  ble and the prev
16be0 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  ious table..**.*
16bf0 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64  * In the colUsed
16c00 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68   field, the high
16c10 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69 74 20  -order bit (bit 
16c20 36 33 29 20 69 73 20 73 65 74 20 69 66 20 74 68  63) is set if th
16c30 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61  e table.** conta
16c40 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33  ins more than 63
16c50 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65   columns and the
16c60 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20   64-th or later 
16c70 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a  column is used..
16c80 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73  */.struct SrcLis
16c90 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20  t {.  int nSrc; 
16ca0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16cb0 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75   of tables or su
16cc0 62 71 75 65 72 69 65 73 20 69 6e 20 74 68 65 20  bqueries in the 
16cd0 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
16ce0 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20   u32 nAlloc;    
16cf0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
16d00 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64  ntries allocated
16d10 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f   in a[] below */
16d20 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c 69 73  .  struct SrcLis
16d30 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53 63 68  t_item {.    Sch
16d40 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f  ema *pSchema;  /
16d50 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68 69 63  * Schema to whic
16d60 68 20 74 68 69 73 20 69 74 65 6d 20 69 73 20 66  h this item is f
16d70 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72  ixed */.    char
16d80 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a   *zDatabase;  /*
16d90 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73   Name of databas
16da0 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74  e holding this t
16db0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72  able */.    char
16dc0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a   *zName;      /*
16dd0 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   Name of the tab
16de0 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  le */.    char *
16df0 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54  zAlias;     /* T
16e00 68 65 20 22 42 22 20 70 61 72 74 20 6f 66 20 61  he "B" part of a
16e10 20 22 41 20 41 53 20 42 22 20 70 68 72 61 73 65   "A AS B" phrase
16e20 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20  .  zName is the 
16e30 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  "A" */.    Table
16e40 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20   *pTab;      /* 
16e50 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72  An SQL table cor
16e60 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e  responding to zN
16e70 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  ame */.    Selec
16e80 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20  t *pSelect;  /* 
16e90 41 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  A SELECT stateme
16ea0 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65  nt used in place
16eb0 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65   of a table name
16ec0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72   */.    int addr
16ed0 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64  FillSub;  /* Add
16ee0 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75 74 69  ress of subrouti
16ef0 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74 20 61  ne to manifest a
16f00 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20 20 20   subquery */.   
16f10 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20   int regReturn; 
16f20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
16f30 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20 61 64  olding return ad
16f40 64 72 65 73 73 20 6f 66 20 61 64 64 72 46 69 6c  dress of addrFil
16f50 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20  lSub */.    int 
16f60 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a  regResult;    /*
16f70 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69   Registers holdi
16f80 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20  ng results of a 
16f90 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20  co-routine */.  
16fa0 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20    u8 jointype;  
16fb0 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a      /* Type of j
16fc0 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73  oin between this
16fd0 20 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72   able and the pr
16fe0 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 75 6e  evious */.    un
16ff0 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65  signed notIndexe
17000 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65  d :1;    /* True
17010 20 69 66 20 74 68 65 72 65 20 69 73 20 61 20 4e   if there is a N
17020 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73  OT INDEXED claus
17030 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  e */.    unsigne
17040 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a  d isCorrelated :
17050 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73  1;  /* True if s
17060 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72  ub-query is corr
17070 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 75 6e  elated */.    un
17080 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74  signed viaCorout
17090 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c  ine :1;  /* Impl
170a0 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d  emented as a co-
170b0 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 75  routine */.    u
170c0 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75 72 73  nsigned isRecurs
170d0 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75  ive :1;   /* Tru
170e0 65 20 66 6f 72 20 72 65 63 75 72 73 69 76 65 20  e for recursive 
170f0 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57 49 54  reference in WIT
17100 48 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  H */.#ifndef SQL
17110 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
17120 0a 20 20 20 20 75 38 20 69 53 65 6c 65 63 74 49  .    u8 iSelectI
17130 64 3b 20 20 20 20 20 2f 2a 20 49 66 20 70 53 65  d;     /* If pSe
17140 6c 65 63 74 21 3d 30 2c 20 74 68 65 20 69 64 20  lect!=0, the id 
17150 6f 66 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63  of the sub-selec
17160 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64  t in EQP */.#end
17170 69 66 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73  if.    int iCurs
17180 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  or;      /* The 
17190 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62  VDBE cursor numb
171a0 65 72 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  er used to acces
171b0 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  s this table */.
171c0 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20      Expr *pOn;  
171d0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20        /* The ON 
171e0 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
171f0 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a   */.    IdList *
17200 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65  pUsing;   /* The
17210 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66   USING clause of
17220 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42   a join */.    B
17230 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20  itmask colUsed; 
17240 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29   /* Bit N (1<<N)
17250 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e   set if column N
17260 20 6f 66 20 70 54 61 62 20 69 73 20 75 73 65 64   of pTab is used
17270 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 49   */.    char *zI
17280 6e 64 65 78 3b 20 20 20 20 20 2f 2a 20 49 64 65  ndex;     /* Ide
17290 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e  ntifier from "IN
172a0 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78  DEXED BY <zIndex
172b0 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  >" clause */.   
172c0 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20   Index *pIndex; 
172d0 20 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75     /* Index stru
172e0 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64  cture correspond
172f0 69 6e 67 20 74 6f 20 7a 49 6e 64 65 78 2c 20 69  ing to zIndex, i
17300 66 20 61 6e 79 20 2a 2f 0a 20 20 7d 20 61 5b 31  f any */.  } a[1
17310 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ];             /
17320 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * One entry for 
17330 65 61 63 68 20 69 64 65 6e 74 69 66 69 65 72 20  each identifier 
17340 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d  on the list */.}
17350 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74  ;../*.** Permitt
17360 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65  ed values of the
17370 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74   SrcList.a.joint
17380 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65  ype field.*/.#de
17390 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20  fine JT_INNER   
173a0 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41    0x0001    /* A
173b0 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72  ny kind of inner
173c0 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a   or cross join *
173d0 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f  /.#define JT_CRO
173e0 53 53 20 20 20 20 20 30 78 30 30 30 32 20 20 20  SS     0x0002   
173f0 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65   /* Explicit use
17400 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65   of the CROSS ke
17410 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65  yword */.#define
17420 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78   JT_NATURAL   0x
17430 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20  0004    /* True 
17440 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20  for a "natural" 
17450 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
17460 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30  JT_LEFT      0x0
17470 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f  008    /* Left o
17480 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  uter join */.#de
17490 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20  fine JT_RIGHT   
174a0 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52    0x0010    /* R
174b0 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20  ight outer join 
174c0 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55  */.#define JT_OU
174d0 54 45 52 20 20 20 20 20 30 78 30 30 32 30 20 20  TER     0x0020  
174e0 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22    /* The "OUTER"
174f0 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65 73   keyword is pres
17500 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  ent */.#define J
17510 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78 30 30  T_ERROR     0x00
17520 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e  40    /* unknown
17530 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20   or unsupported 
17540 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f  join type */.../
17550 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f  *.** Flags appro
17560 70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 77  priate for the w
17570 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65  ctrlFlags parame
17580 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68  ter of sqlite3Wh
17590 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e  ereBegin().** an
175a0 64 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e  d the WhereInfo.
175b0 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65  wctrlFlags membe
175c0 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  r..*/.#define WH
175d0 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d  ERE_ORDERBY_NORM
175e0 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e  AL   0x0000 /* N
175f0 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  o-op */.#define 
17600 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49  WHERE_ORDERBY_MI
17610 4e 20 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a  N      0x0001 /*
17620 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73   ORDER BY proces
17630 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66  sing for min() f
17640 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  unc */.#define W
17650 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58  HERE_ORDERBY_MAX
17660 20 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20        0x0002 /* 
17670 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73  ORDER BY process
17680 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75  ing for max() fu
17690 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nc */.#define WH
176a0 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49  ERE_ONEPASS_DESI
176b0 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57  RED  0x0004 /* W
176c0 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61  ant to do one-pa
176d0 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45  ss UPDATE/DELETE
176e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
176f0 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20  E_DUPLICATES_OK 
17700 20 20 20 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20     0x0008 /* Ok 
17710 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20  to return a row 
17720 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a  more than once *
17730 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
17740 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20  OMIT_OPEN_CLOSE 
17750 20 30 78 30 30 31 30 20 2f 2a 20 54 61 62 6c 65   0x0010 /* Table
17760 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c 72   cursors are alr
17770 65 61 64 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65  eady open */.#de
17780 66 69 6e 65 20 57 48 45 52 45 5f 46 4f 52 43 45  fine WHERE_FORCE
17790 5f 54 41 42 4c 45 20 20 20 20 20 20 30 78 30 30  _TABLE      0x00
177a0 32 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65  20 /* Do not use
177b0 20 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73   an index-only s
177c0 65 61 72 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65  earch */.#define
177d0 20 57 48 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f   WHERE_ONETABLE_
177e0 4f 4e 4c 59 20 20 20 20 30 78 30 30 34 30 20 2f  ONLY    0x0040 /
177f0 2a 20 4f 6e 6c 79 20 63 6f 64 65 20 74 68 65 20  * Only code the 
17800 31 73 74 20 74 61 62 6c 65 20 69 6e 20 70 54 61  1st table in pTa
17810 62 4c 69 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65  bList */.#define
17820 20 57 48 45 52 45 5f 4e 4f 5f 41 55 54 4f 49 4e   WHERE_NO_AUTOIN
17830 44 45 58 20 20 20 20 20 30 78 30 30 38 30 20 2f  DEX     0x0080 /
17840 2a 20 44 69 73 61 6c 6c 6f 77 20 61 75 74 6f 6d  * Disallow autom
17850 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a  atic indexes */.
17860 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52  #define WHERE_GR
17870 4f 55 50 42 59 20 20 20 20 20 20 20 20 20 20 30  OUPBY          0
17880 78 30 31 30 30 20 2f 2a 20 70 4f 72 64 65 72 42  x0100 /* pOrderB
17890 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52  y is really a GR
178a0 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e  OUP BY */.#defin
178b0 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
178c0 42 59 20 20 20 20 20 20 20 30 78 30 32 30 30 20  BY       0x0200 
178d0 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20 72  /* pOrderby is r
178e0 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54  eally a DISTINCT
178f0 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69   clause */.#defi
17900 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49  ne WHERE_WANT_DI
17910 53 54 49 4e 43 54 20 20 20 20 30 78 30 34 30 30  STINCT    0x0400
17920 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e   /* All output n
17930 65 65 64 73 20 74 6f 20 62 65 20 64 69 73 74 69  eeds to be disti
17940 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  nct */.#define W
17950 48 45 52 45 5f 53 4f 52 54 42 59 47 52 4f 55 50  HERE_SORTBYGROUP
17960 20 20 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20        0x0800 /* 
17970 53 75 70 70 6f 72 74 20 73 71 6c 69 74 65 33 57  Support sqlite3W
17980 68 65 72 65 49 73 53 6f 72 74 65 64 28 29 20 2a  hereIsSorted() *
17990 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
179a0 52 45 4f 50 45 4e 5f 49 44 58 20 20 20 20 20 20  REOPEN_IDX      
179b0 20 30 78 31 30 30 30 20 2f 2a 20 54 72 79 20 74   0x1000 /* Try t
179c0 6f 20 75 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49  o use OP_ReopenI
179d0 64 78 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  dx */../* Allowe
179e0 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20  d return values 
179f0 66 72 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72  from sqlite3Wher
17a00 65 49 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f  eIsDistinct().*/
17a10 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
17a20 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20  ISTINCT_NOOP    
17a30 20 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54    0  /* DISTINCT
17a40 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65   keyword not use
17a50 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  d */.#define WHE
17a60 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51  RE_DISTINCT_UNIQ
17a70 55 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64  UE    1  /* No d
17a80 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65  uplicates */.#de
17a90 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
17aa0 4e 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20  NCT_ORDERED   2 
17ab0 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74   /* All duplicat
17ac0 65 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20  es are adjacent 
17ad0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
17ae0 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45  _DISTINCT_UNORDE
17af0 52 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63  RED 3  /* Duplic
17b00 61 74 65 73 20 61 72 65 20 73 63 61 74 74 65 72  ates are scatter
17b10 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e  ed */../*.** A N
17b20 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e  ameContext defin
17b30 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20  es a context in 
17b40 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65  which to resolve
17b50 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d   table and colum
17b60 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65  n.** names.  The
17b70 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74   context consist
17b80 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74  s of a list of t
17b90 61 62 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c  ables (the pSrcL
17ba0 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a  ist) field and.*
17bb0 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65  * a list of name
17bc0 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45  d expression (pE
17bd0 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65  List).  The name
17be0 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73  d expression lis
17bf0 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c  t may.** be NULL
17c00 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f 72 72  .  The pSrc corr
17c10 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46  esponds to the F
17c20 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ROM clause of a 
17c30 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20  SELECT or.** to 
17c40 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
17c50 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49  operated on by I
17c60 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f  NSERT, UPDATE, o
17c70 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a  r DELETE.  The.*
17c80 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70  * pEList corresp
17c90 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73 75  onds to the resu
17ca0 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45  lt set of a SELE
17cb0 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66  CT and is NULL f
17cc0 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74  or.** other stat
17cd0 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61  ements..**.** Na
17ce0 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62  meContexts can b
17cf0 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20  e nested.  When 
17d00 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c  resolving names,
17d10 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 20   the inner-most 
17d20 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73  .** context is s
17d30 65 61 72 63 68 65 64 20 66 69 72 73 74 2e 20 20  earched first.  
17d40 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66  If no match is f
17d50 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f  ound, the next o
17d60 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20  uter.** context 
17d70 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20  is checked.  If 
17d80 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e  there is still n
17d90 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78  o match, the nex
17da0 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20  t context.** is 
17db0 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70  checked.  This p
17dc0 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73  rocess continues
17dd0 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20   until either a 
17de0 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a  match is found.*
17df0 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74  * or all context
17e00 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68  s are check.  Wh
17e10 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f  en a match is fo
17e20 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65  und, the nRef me
17e30 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63  mber of.** the c
17e40 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e  ontext containin
17e50 67 20 74 68 65 20 6d 61 74 63 68 20 69 73 20 69  g the match is i
17e60 6e 63 72 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a  ncremented. .**.
17e70 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65 72 79  ** Each subquery
17e80 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65   gets a new Name
17e90 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e  Context.  The pN
17ea0 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73  ext field points
17eb0 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43   to the.** NameC
17ec0 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70 61  ontext in the pa
17ed0 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75  rent query.  Thu
17ee0 73 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66  s the process of
17ef0 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a   scanning the.**
17f00 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73   NameContext lis
17f10 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
17f20 20 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75   searching throu
17f30 67 68 20 73 75 63 63 65 73 73 69 76 65 6c 79 20  gh successively 
17f40 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72  outer.** subquer
17f50 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20  ies looking for 
17f60 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75  a match..*/.stru
17f70 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b  ct NameContext {
17f80 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
17f90 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70  ;       /* The p
17fa0 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69  arser */.  SrcLi
17fb0 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20  st *pSrcList;   
17fc0 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74  /* One or more t
17fd0 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65  ables used to re
17fe0 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20  solve names */. 
17ff0 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
18000 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61  t;    /* Optiona
18010 6c 20 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74  l list of result
18020 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a  -set columns */.
18030 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49    AggInfo *pAggI
18040 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d  nfo;   /* Inform
18050 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72  ation about aggr
18060 65 67 61 74 65 73 20 61 74 20 74 68 69 73 20 6c  egates at this l
18070 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f  evel */.  NameCo
18080 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f  ntext *pNext;  /
18090 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d  * Next outer nam
180a0 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c  e context.  NULL
180b0 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a   for outermost *
180c0 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
180d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
180e0 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f  er of names reso
180f0 6c 76 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e  lved by this con
18100 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  text */.  int nE
18110 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
18120 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
18130 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77  rs encountered w
18140 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e  hile resolving n
18150 61 6d 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63  ames */.  u16 nc
18160 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f  Flags;         /
18170 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e  * Zero or more N
18180 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65  C_* flags define
18190 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f  d below */.};../
181a0 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
181b0 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65  ues for the Name
181c0 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73  Context, ncFlags
181d0 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 4e 6f   field..**.** No
181e0 74 65 3a 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67  te:  NC_MinMaxAg
181f0 67 20 6d 75 73 74 20 68 61 76 65 20 74 68 65 20  g must have the 
18200 73 61 6d 65 20 76 61 6c 75 65 20 61 73 20 53 46  same value as SF
18210 5f 4d 69 6e 4d 61 78 41 67 67 20 61 6e 64 0a 2a  _MinMaxAgg and.*
18220 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49  * SQLITE_FUNC_MI
18230 4e 4d 41 58 2e 0a 2a 2a 20 0a 2a 2f 0a 23 64 65  NMAX..** .*/.#de
18240 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67  fine NC_AllowAgg
18250 20 20 30 78 30 30 30 31 20 20 2f 2a 20 41 67 67    0x0001  /* Agg
18260 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
18270 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72   are allowed her
18280 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  e */.#define NC_
18290 48 61 73 41 67 67 20 20 20 20 30 78 30 30 30 32  HasAgg    0x0002
182a0 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65    /* One or more
182b0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
182c0 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65  ions seen */.#de
182d0 66 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20  fine NC_IsCheck 
182e0 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75    0x0004  /* Tru
182f0 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e  e if resolving n
18300 61 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20  ames in a CHECK 
18310 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64  constraint */.#d
18320 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75  efine NC_InAggFu
18330 6e 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72  nc 0x0008  /* Tr
18340 75 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20  ue if analyzing 
18350 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20  arguments to an 
18360 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  agg func */.#def
18370 69 6e 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20  ine NC_PartIdx  
18380 20 30 78 30 30 31 30 20 20 2f 2a 20 54 72 75 65   0x0010  /* True
18390 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20   if resolving a 
183a0 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48  partial index WH
183b0 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  ERE */.#define N
183c0 43 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30  C_MinMaxAgg 0x10
183d0 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61  00  /* min/max a
183e0 67 67 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20  ggregates seen. 
183f0 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20   See note above 
18400 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
18410 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
18420 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
18430 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e   contains all in
18440 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65  formation.** nee
18450 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20  ded to generate 
18460 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c  code for a singl
18470 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
18480 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74  nt..**.** nLimit
18490 20 69 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66   is set to -1 if
184a0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d   there is no LIM
184b0 49 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66  IT clause.  nOff
184c0 73 65 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e  set is set to 0.
184d0 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73 20  .** If there is 
184e0 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20  a LIMIT clause, 
184f0 74 68 65 20 70 61 72 73 65 72 20 73 65 74 73 20  the parser sets 
18500 6e 4c 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61  nLimit to the va
18510 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69  lue of the.** li
18520 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20  mit and nOffset 
18530 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
18540 74 68 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30  the offset (or 0
18550 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74   if there is not
18560 0a 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75  .** offset).  Bu
18570 74 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d  t later on, nLim
18580 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62  it and nOffset b
18590 65 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79  ecome the memory
185a0 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e   locations.** in
185b0 20 74 68 65 20 56 44 42 45 20 74 68 61 74 20 72   the VDBE that r
185c0 65 63 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20  ecord the limit 
185d0 61 6e 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74  and offset count
185e0 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f  ers..**.** addrO
185f0 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65  penEphm[] entrie
18600 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64  s contain the ad
18610 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e  dress of OP_Open
18620 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65  Ephemeral opcode
18630 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72  s..** These addr
18640 65 73 73 65 73 20 6d 75 73 74 20 62 65 20 73 74  esses must be st
18650 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77 65 20  ored so that we 
18660 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20  can go back and 
18670 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50  fill in.** the P
18680 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32  4_KEYINFO and P2
18690 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65   parameters late
186a0 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65 20  r.  Neither the 
186b0 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74  KeyInfo nor.** t
186c0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
186d0 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62  umns in P2 can b
186e0 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68  e computed at th
186f0 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61  e same time.** a
18700 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68  s the OP_OpenEph
18710 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  m instruction is
18720 20 63 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e   coded because n
18730 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66  ot.** enough inf
18740 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
18750 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72  he compound quer
18760 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68  y is known at th
18770 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65  at point..** The
18780 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64   KeyInfo for add
18790 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64  rOpenTran[0] and
187a0 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f   [1] contains co
187b0 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
187c0 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73  s.** for the res
187d0 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65  ult set.  The Ke
187e0 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70  yInfo for addrOp
187f0 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69  enEphm[2] contai
18800 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20  ns collating.** 
18810 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68  sequences for th
18820 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
18830 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c  e..*/.struct Sel
18840 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74  ect {.  ExprList
18850 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f   *pEList;      /
18860 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20  * The fields of 
18870 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20  the result */.  
18880 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
18890 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
188a0 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c  : TK_UNION TK_AL
188b0 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54  L TK_INTERSECT T
188c0 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 75 31  K_EXCEPT */.  u1
188d0 36 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20  6 selFlags;     
188e0 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20       /* Various 
188f0 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  SF_* values */. 
18900 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66   int iLimit, iOf
18910 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72  fset;   /* Memor
18920 79 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64  y registers hold
18930 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53  ing LIMIT & OFFS
18940 45 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 23  ET counters */.#
18950 69 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45  if SELECTTRACE_E
18960 4e 41 42 4c 45 44 0a 20 20 63 68 61 72 20 7a 53  NABLED.  char zS
18970 65 6c 4e 61 6d 65 5b 31 32 5d 3b 20 20 20 20 20  elName[12];     
18980 2f 2a 20 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65  /* Symbolic name
18990 20 6f 66 20 74 68 69 73 20 53 45 4c 45 43 54 20   of this SELECT 
189a0 75 73 65 20 66 6f 72 20 64 65 62 75 67 67 69 6e  use for debuggin
189b0 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  g */.#endif.  in
189c0 74 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32  t addrOpenEphm[2
189d0 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45  ];   /* OP_OpenE
189e0 70 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c  phem opcodes rel
189f0 61 74 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c  ated to this sel
18a00 65 63 74 20 2a 2f 0a 20 20 75 36 34 20 6e 53 65  ect */.  u64 nSe
18a10 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 20 20 20  lectRow;        
18a20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d  /* Estimated num
18a30 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  ber of result ro
18a40 77 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  ws */.  SrcList 
18a50 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f  *pSrc;         /
18a60 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  * The FROM claus
18a70 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  e */.  Expr *pWh
18a80 65 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ere;          /*
18a90 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
18aa0 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
18ab0 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a  *pGroupBy;    /*
18ac0 20 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c   The GROUP BY cl
18ad0 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ause */.  Expr *
18ae0 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20  pHaving;        
18af0 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63   /* The HAVING c
18b00 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
18b10 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20  ist *pOrderBy;  
18b20 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42    /* The ORDER B
18b30 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65  Y clause */.  Se
18b40 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20  lect *pPrior;   
18b50 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65       /* Prior se
18b60 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  lect in a compou
18b70 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d  nd select statem
18b80 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  ent */.  Select 
18b90 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
18ba0 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74  /* Next select t
18bb0 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20  o the left in a 
18bc0 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78  compound */.  Ex
18bd0 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20  pr *pLimit;     
18be0 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78       /* LIMIT ex
18bf0 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d  pression. NULL m
18c00 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a  eans not used. *
18c10 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65  /.  Expr *pOffse
18c20 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46  t;         /* OF
18c30 46 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e  FSET expression.
18c40 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20   NULL means not 
18c50 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20  used. */.  With 
18c60 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20  *pWith;         
18c70 20 20 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65    /* WITH clause
18c80 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 69   attached to thi
18c90 73 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c  s select. Or NUL
18ca0 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  L. */.};../*.** 
18cb0 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
18cc0 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61  or Select.selFla
18cd0 67 73 2e 20 20 54 68 65 20 22 53 46 22 20 70 72  gs.  The "SF" pr
18ce0 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a  efix stands for.
18cf0 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22  ** "Select Flag"
18d00 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  ..*/.#define SF_
18d10 44 69 73 74 69 6e 63 74 20 20 20 20 20 20 20 20  Distinct        
18d20 30 78 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75  0x0001  /* Outpu
18d30 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54  t should be DIST
18d40 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  INCT */.#define 
18d50 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20  SF_Resolved     
18d60 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 64     0x0002  /* Id
18d70 65 6e 74 69 66 69 65 72 73 20 68 61 76 65 20 62  entifiers have b
18d80 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a  een resolved */.
18d90 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65  #define SF_Aggre
18da0 67 61 74 65 20 20 20 20 20 20 20 30 78 30 30 30  gate       0x000
18db0 34 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61  4  /* Contains a
18dc0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
18dd0 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ns */.#define SF
18de0 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20  _UsesEphemeral  
18df0 20 30 78 30 30 30 38 20 20 2f 2a 20 55 73 65 73   0x0008  /* Uses
18e00 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72   the OpenEphemer
18e10 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65  al opcode */.#de
18e20 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64  fine SF_Expanded
18e30 20 20 20 20 20 20 20 20 30 78 30 30 31 30 20 20          0x0010  
18e40 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  /* sqlite3Select
18e50 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20  Expand() called 
18e60 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69  on this */.#defi
18e70 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66  ne SF_HasTypeInf
18e80 6f 20 20 20 20 20 30 78 30 30 32 30 20 20 2f 2a  o     0x0020  /*
18e90 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73   FROM subqueries
18ea0 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61   have Table meta
18eb0 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20  data */.#define 
18ec0 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20  SF_Compound     
18ed0 20 20 20 30 78 30 30 34 30 20 20 2f 2a 20 50 61     0x0040  /* Pa
18ee0 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64  rt of a compound
18ef0 20 71 75 65 72 79 20 2a 2f 0a 23 64 65 66 69 6e   query */.#defin
18f00 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20  e SF_Values     
18f10 20 20 20 20 20 30 78 30 30 38 30 20 20 2f 2a 20       0x0080  /* 
18f20 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d  Synthesized from
18f30 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a   VALUES clause *
18f40 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c  /.#define SF_All
18f50 56 61 6c 75 65 73 20 20 20 20 20 20 20 30 78 30  Values       0x0
18f60 31 30 30 20 20 2f 2a 20 41 6c 6c 20 74 65 72 6d  100  /* All term
18f70 73 20 6f 66 20 63 6f 6d 70 6f 75 6e 64 20 61 72  s of compound ar
18f80 65 20 56 41 4c 55 45 53 20 2a 2f 0a 23 64 65 66  e VALUES */.#def
18f90 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f  ine SF_NestedFro
18fa0 6d 20 20 20 20 20 20 30 78 30 32 30 30 20 20 2f  m      0x0200  /
18fb0 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61 72 65  * Part of a pare
18fc0 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63  nthesized FROM c
18fd0 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
18fe0 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74   SF_MaybeConvert
18ff0 20 20 20 20 30 78 30 34 30 30 20 20 2f 2a 20 4e      0x0400  /* N
19000 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f  eed convertCompo
19010 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
19020 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ery() */.#define
19030 20 53 46 5f 52 65 63 75 72 73 69 76 65 20 20 20   SF_Recursive   
19040 20 20 20 20 30 78 30 38 30 30 20 20 2f 2a 20 54      0x0800  /* T
19050 68 65 20 72 65 63 75 72 73 69 76 65 20 70 61 72  he recursive par
19060 74 20 6f 66 20 61 20 72 65 63 75 72 73 69 76 65  t of a recursive
19070 20 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20   CTE */.#define 
19080 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20  SF_MinMaxAgg    
19090 20 20 20 30 78 31 30 30 30 20 20 2f 2a 20 41 67     0x1000  /* Ag
190a0 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69 6e 69  gregate containi
190b0 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28  ng min() or max(
190c0 29 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ) */.../*.** The
190d0 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45   results of a SE
190e0 4c 45 43 54 20 63 61 6e 20 62 65 20 64 69 73 74  LECT can be dist
190f0 72 69 62 75 74 65 64 20 69 6e 20 73 65 76 65 72  ributed in sever
19100 61 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66 69  al ways, as defi
19110 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66  ned.** by one of
19120 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   the following m
19130 61 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54  acros.  The "SRT
19140 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22  " prefix means "
19150 53 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a  SELECT Result.**
19160 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   Type"..**.**   
19170 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20    SRT_Union     
19180 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
19190 61 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65  as a key in a te
191a0 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 0a 2a  mporary index .*
191b0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
191c0 20 20 20 20 20 20 69 64 65 6e 74 69 66 69 65 64        identified
191d0 20 62 79 20 70 44 65 73 74 2d 3e 69 53 44 50 61   by pDest->iSDPa
191e0 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  rm..**.**     SR
191f0 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 52 65  T_Except      Re
19200 6d 6f 76 65 20 72 65 73 75 6c 74 73 20 66 72 6f  move results fro
19210 6d 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  m the temporary 
19220 69 6e 64 65 78 20 70 44 65 73 74 2d 3e 69 53 44  index pDest->iSD
19230 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Parm..**.**     
19240 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20  SRT_Exists      
19250 53 74 6f 72 65 20 61 20 31 20 69 6e 20 6d 65 6d  Store a 1 in mem
19260 6f 72 79 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e  ory cell pDest->
19270 69 53 44 50 61 72 6d 20 69 66 20 74 68 65 20 72  iSDParm if the r
19280 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20  esult.**        
19290 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
192a0 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a   is not empty..*
192b0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
192c0 63 61 72 64 20 20 20 20 20 54 68 72 6f 77 20 74  card     Throw t
192d0 68 65 20 72 65 73 75 6c 74 73 20 61 77 61 79 2e  he results away.
192e0 20 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62    This is used b
192f0 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20  y SELECT.**     
19300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19310 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
19320 6e 20 74 72 69 67 67 65 72 73 20 77 68 6f 73 65  n triggers whose
19330 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73   only purpose is
19340 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19350 20 20 20 20 20 20 20 20 74 68 65 20 73 69 64 65          the side
19360 2d 65 66 66 65 63 74 73 20 6f 66 20 66 75 6e 63  -effects of func
19370 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  tions..**.** All
19380 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61 72   of the above ar
19390 65 20 66 72 65 65 20 74 6f 20 69 67 6e 6f 72 65  e free to ignore
193a0 20 74 68 65 69 72 20 4f 52 44 45 52 20 42 59 20   their ORDER BY 
193b0 63 6c 61 75 73 65 2e 20 54 68 6f 73 65 20 74 68  clause. Those th
193c0 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73  at.** follow mus
193d0 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45  t honor the ORDE
193e0 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a  R BY clause..**.
193f0 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75 74 70 75  **     SRT_Outpu
19400 74 20 20 20 20 20 20 47 65 6e 65 72 61 74 65 20  t      Generate 
19410 61 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 20  a row of output 
19420 28 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 52 65  (using the OP_Re
19430 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20  sultRow.**      
19440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
19450 70 63 6f 64 65 29 20 66 6f 72 20 65 61 63 68 20  pcode) for each 
19460 72 6f 77 20 69 6e 20 74 68 65 20 72 65 73 75 6c  row in the resul
19470 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  t set..**.**    
19480 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20   SRT_Mem        
19490 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20 74   Only valid if t
194a0 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 20 73  he result is a s
194b0 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a  ingle column..**
194c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194d0 20 20 20 20 20 53 74 6f 72 65 20 74 68 65 20 66       Store the f
194e0 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  irst column of t
194f0 68 65 20 66 69 72 73 74 20 72 65 73 75 6c 74 20  he first result 
19500 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  row.**          
19510 20 20 20 20 20 20 20 20 20 20 20 69 6e 20 72 65             in re
19520 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53  gister pDest->iS
19530 44 50 61 72 6d 20 74 68 65 6e 20 61 62 61 6e 64  DParm then aband
19540 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a 20 20  on the rest.**  
19550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19560 20 20 20 6f 66 20 74 68 65 20 71 75 65 72 79 2e     of the query.
19570 20 20 54 68 69 73 20 64 65 73 74 69 6e 61 74 69    This destinati
19580 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49  on implies "LIMI
19590 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  T 1"..**.**     
195a0 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20  SRT_Set         
195b0 54 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74 20  The result must 
195c0 62 65 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  be a single colu
195d0 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61 63 68 0a  mn.  Store each.
195e0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
195f0 20 20 20 20 20 20 20 72 6f 77 20 6f 66 20 72 65         row of re
19600 73 75 6c 74 20 61 73 20 74 68 65 20 6b 65 79 20  sult as the key 
19610 69 6e 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  in table pDest->
19620 69 53 44 50 61 72 6d 2e 20 0a 2a 2a 20 20 20 20  iSDParm. .**    
19630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19640 20 41 70 70 6c 79 20 74 68 65 20 61 66 66 69 6e   Apply the affin
19650 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66 53 64  ity pDest->affSd
19660 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72 69 6e  st before storin
19670 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  g.**            
19680 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73           results
19690 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70 6c 65  .  Used to imple
196a0 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45 43 54  ment "IN (SELECT
196b0 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   ...)"..**.**   
196c0 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20    SRT_EphemTab  
196d0 20 20 43 72 65 61 74 65 20 61 6e 20 74 65 6d 70    Create an temp
196e0 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
196f0 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64 20 73  t->iSDParm and s
19700 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  tore.**         
19710 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
19720 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20 54 68  result there. Th
19730 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74  e cursor is left
19740 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20   open after.**  
19750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19760 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20 20 54     returning.  T
19770 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f  his is like SRT_
19780 54 61 62 6c 65 20 65 78 63 65 70 74 20 74 68 61  Table except tha
19790 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
197a0 20 20 20 20 20 20 20 20 20 74 68 69 73 20 64 65           this de
197b0 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f  stination uses O
197c0 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
197d0 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20 20 20  to create.**    
197e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197f0 20 74 68 65 20 74 61 62 6c 65 20 66 69 72 73 74   the table first
19800 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
19810 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65 6e 65  Coroutine   Gene
19820 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e  rate a co-routin
19830 65 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 61  e that returns a
19840 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20   new row of.**  
19850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19860 20 20 20 72 65 73 75 6c 74 73 20 65 61 63 68 20     results each 
19870 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76 6f 6b  time it is invok
19880 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79 20 70  ed.  The entry p
19890 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  oint.**         
198a0 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74              of t
198b0 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73  he co-routine is
198c0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
198d0 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ter pDest->iSDPa
198e0 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  rm.**           
198f0 20 20 20 20 20 20 20 20 20 20 61 6e 64 20 74 68            and th
19900 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20  e result row is 
19910 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73 74 2d  stored in pDest-
19920 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65 72 73  >nDest registers
19930 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19940 20 20 20 20 20 20 20 20 73 74 61 72 74 69 6e 67          starting
19950 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69 53 64   with pDest->iSd
19960 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  st..**.**     SR
19970 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 53 74  T_Table       St
19980 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 74  ore results in t
19990 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
199a0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
199b0 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f 20 20  *     SRT_Fifo  
199c0 20 20 20 20 20 20 54 68 69 73 20 69 73 20 6c 69        This is li
199d0 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20  ke SRT_EphemTab 
199e0 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
199f0 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20  table.**        
19a00 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73 20               is 
19a10 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72 65 61  assumed to alrea
19a20 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53 52 54  dy be open.  SRT
19a30 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20  _Fifo has.**    
19a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a50 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20   the additional 
19a60 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65 69 6e  property of bein
19a70 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65  g able to ignore
19a80 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19a90 20 20 20 20 20 20 20 20 74 68 65 20 4f 52 44 45          the ORDE
19aa0 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a  R BY clause..**.
19ab0 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 46  **     SRT_DistF
19ac0 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72 65 73  ifo    Store res
19ad0 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70 6f 72  ults in a tempor
19ae0 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
19af0 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20  >iSDParm..**    
19b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b10 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20 74 65   But also use te
19b20 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
19b30 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61  est->iSDParm+1 a
19b40 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
19b50 20 20 20 20 20 20 20 20 20 61 20 72 65 63 6f 72           a recor
19b60 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20 72  d of all prior r
19b70 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72  esults and ignor
19b80 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74 65 0a  e any duplicate.
19b90 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19ba0 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20 4e 61         rows.  Na
19bb0 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69 73 74  me means:  "Dist
19bc0 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a  inct Fifo"..**.*
19bd0 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75 65 20  *     SRT_Queue 
19be0 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75        Store resu
19bf0 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20  lts in priority 
19c00 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44  queue pDest->iSD
19c10 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20  Parm (really.** 
19c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c30 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e 20 20      an index).  
19c40 41 70 70 65 6e 64 20 61 20 73 65 71 75 65 6e 63  Append a sequenc
19c50 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68 61 74  e number so that
19c60 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20   all entries.** 
19c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c80 20 20 20 20 61 72 65 20 64 69 73 74 69 6e 63 74      are distinct
19c90 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
19ca0 44 69 73 74 51 75 65 75 65 20 20 20 53 74 6f 72  DistQueue   Stor
19cb0 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69  e results in pri
19cc0 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73  ority queue pDes
19cd0 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20  t->iSDParm only 
19ce0 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  if.**           
19cf0 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73 61            the sa
19d00 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20 6e 65  me record has ne
19d10 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65 64 20  ver been stored 
19d20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20  before.  The.** 
19d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d40 20 20 20 20 69 6e 64 65 78 20 61 74 20 70 44 65      index at pDe
19d50 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f  st->iSDParm+1 ho
19d60 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f  ld all prior sto
19d70 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  res..*/.#define 
19d80 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20  SRT_Union       
19d90 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   1  /* Store res
19da0 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61  ult as keys in a
19db0 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  n index */.#defi
19dc0 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20 20  ne SRT_Except   
19dd0 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65      2  /* Remove
19de0 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55   result from a U
19df0 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  NION index */.#d
19e00 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73  efine SRT_Exists
19e10 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f         3  /* Sto
19e20 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73 75  re 1 if the resu
19e30 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20  lt is not empty 
19e40 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44  */.#define SRT_D
19e50 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20 2f  iscard      4  /
19e60 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68  * Do not save th
19e70 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65  e results anywhe
19e80 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  re */.#define SR
19e90 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 20 35  T_Fifo         5
19ea0 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
19eb0 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61  t as data with a
19ec0 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69  n automatic rowi
19ed0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  d */.#define SRT
19ee0 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20 36 20  _DistFifo     6 
19ef0 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69 66   /* Like SRT_Fif
19f00 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65  o, but unique re
19f10 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  sults only */.#d
19f20 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75 65 20  efine SRT_Queue 
19f30 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74 6f         7  /* Sto
19f40 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20  re result in an 
19f50 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65  queue */.#define
19f60 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20   SRT_DistQueue  
19f70 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54    8  /* Like SRT
19f80 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e 69 71  _Queue, but uniq
19f90 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20  ue results only 
19fa0 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52  */../* The ORDER
19fb0 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 69 67   BY clause is ig
19fc0 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66  nored for all of
19fd0 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64   the above */.#d
19fe0 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f  efine IgnorableO
19ff0 72 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e 65  rderby(X) ((X->e
1a000 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 74 51  Dest)<=SRT_DistQ
1a010 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65 20 53  ueue)..#define S
1a020 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20  RT_Output       
1a030 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63  9  /* Output eac
1a040 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20  h row of result 
1a050 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d  */.#define SRT_M
1a060 65 6d 20 20 20 20 20 20 20 20 20 31 30 20 20 2f  em         10  /
1a070 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
1a080 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  n a memory cell 
1a090 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53  */.#define SRT_S
1a0a0 65 74 20 20 20 20 20 20 20 20 20 31 31 20 20 2f  et         11  /
1a0b0 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20  * Store results 
1a0c0 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e  as keys in an in
1a0d0 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
1a0e0 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 31  RT_EphemTab    1
1a0f0 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61  2  /* Create tra
1a100 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73  nsient tab and s
1a110 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61  tore like SRT_Ta
1a120 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ble */.#define S
1a130 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31  RT_Coroutine   1
1a140 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61  3  /* Generate a
1a150 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72   single row of r
1a160 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esult */.#define
1a170 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20   SRT_Table      
1a180 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20 72 65   14  /* Store re
1a190 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74  sult as data wit
1a1a0 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72  h an automatic r
1a1b0 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  owid */../*.** A
1a1c0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
1a1d0 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69  is object descri
1a1e0 62 65 73 20 77 68 65 72 65 20 74 6f 20 70 75 74  bes where to put
1a1f0 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 20   of the results 
1a200 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73  of.** a SELECT s
1a210 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72  tatement..*/.str
1a220 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b  uct SelectDest {
1a230 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20 20 20  .  u8 eDest;    
1a240 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74          /* How t
1a250 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65  o dispose of the
1a260 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66   results.  On of
1a270 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f   SRT_* above. */
1a280 0a 20 20 63 68 61 72 20 61 66 66 53 64 73 74 3b  .  char affSdst;
1a290 20 20 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e          /* Affin
1a2a0 69 74 79 20 75 73 65 64 20 77 68 65 6e 20 65 44  ity used when eD
1a2b0 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a  est==SRT_Set */.
1a2c0 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20    int iSDParm;  
1a2d0 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61         /* A para
1a2e0 6d 65 74 65 72 20 75 73 65 64 20 62 79 20 74 68  meter used by th
1a2f0 65 20 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c  e eDest disposal
1a300 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74   method */.  int
1a310 20 69 53 64 73 74 3b 20 20 20 20 20 20 20 20 20   iSdst;         
1a320 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74    /* Base regist
1a330 65 72 20 77 68 65 72 65 20 72 65 73 75 6c 74 73  er where results
1a340 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a   are written */.
1a350 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20 20    int nSdst;    
1a360 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1a370 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c   of registers al
1a380 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 45 78 70  located */.  Exp
1a390 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b  rList *pOrderBy;
1a3a0 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73    /* Key columns
1a3b0 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65 20 61   for SRT_Queue a
1a3c0 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65 75 65  nd SRT_DistQueue
1a3d0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75   */.};../*.** Du
1a3e0 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61  ring code genera
1a3f0 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e  tion of statemen
1a400 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65 72  ts that do inser
1a410 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52  ts into AUTOINCR
1a420 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62 6c 65 73  EMENT .** tables
1a430 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
1a440 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61  information is a
1a450 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 54  ttached to the T
1a460 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70  able.u.autoInc.p
1a470 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20 65  .** pointer of e
1a480 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e  ach autoincremen
1a490 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f 72  t table to recor
1a4a0 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f  d some side info
1a4b0 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20  rmation that.** 
1a4c0 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
1a4d0 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68 61  or needs.  We ha
1a4e0 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d 74  ve to keep per-t
1a4f0 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d 65  able autoincreme
1a500 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  nt.** informatio
1a510 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72 74  n in case insert
1a520 73 20 61 72 65 20 64 6f 77 6e 20 77 69 74 68 69  s are down withi
1a530 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72 69  n triggers.  Tri
1a540 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20  ggers do not.** 
1a550 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e  normally coordin
1a560 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76 69  ate their activi
1a570 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f 20  ties, but we do 
1a580 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61  need to coordina
1a590 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e  te the.** loadin
1a5a0 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66 20  g and saving of 
1a5b0 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e  autoincrement in
1a5c0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
1a5d0 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f  ruct AutoincInfo
1a5e0 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f   {.  AutoincInfo
1a5f0 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65   *pNext;   /* Ne
1a600 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e  xt info block in
1a610 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d 20   a list of them 
1a620 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  all */.  Table *
1a630 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 2f  pTab;          /
1a640 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e 66  * Table this inf
1a650 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20 74  o block refers t
1a660 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20  o */.  int iDb; 
1a670 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a680 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65 33  Index in sqlite3
1a690 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62 61  .aDb[] of databa
1a6a0 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62 20  se holding pTab 
1a6b0 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72 3b  */.  int regCtr;
1a6c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
1a6d0 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68 6f  mory register ho
1a6e0 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20  lding the rowid 
1a6f0 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f  counter */.};../
1a700 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68 65  *.** Size of the
1a710 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f   column cache.*/
1a720 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1a730 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65 66  N_COLCACHE.# def
1a740 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c  ine SQLITE_N_COL
1a750 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66 0a  CACHE 10.#endif.
1a760 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20  ./*.** At least 
1a770 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  one instance of 
1a780 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1a790 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61 74  ructure is creat
1a7a0 65 64 20 66 6f 72 20 65 61 63 68 20 0a 2a 2a 20  ed for each .** 
1a7b0 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61 79  trigger that may
1a7c0 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65 20   be fired while 
1a7d0 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52  parsing an INSER
1a7e0 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c  T, UPDATE or DEL
1a7f0 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  ETE.** statement
1a800 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63  . All such objec
1a810 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ts are stored in
1a820 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
1a830 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61   headed at.** Pa
1a840 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1a850 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65  and deleted once
1a860 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69   statement compi
1a870 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a  lation has been.
1a880 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a  ** completed..**
1a890 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70  .** A Vdbe sub-p
1a8a0 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c  rogram that impl
1a8b0 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20  ements the body 
1a8c0 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20  and WHEN clause 
1a8d0 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72  of trigger.** Tr
1a8e0 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67 65  iggerPrg.pTrigge
1a8f0 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65  r, assuming a de
1a900 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
1a910 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54  T clause of.** T
1a920 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66  riggerPrg.orconf
1a930 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74  , is stored in t
1a940 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70 50  he TriggerPrg.pP
1a950 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e  rogram variable.
1a960 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54  .** The Parse.pT
1a970 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e  riggerPrg list n
1a980 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77  ever contains tw
1a990 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20 74  o entries with t
1a9a0 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65  he same.** value
1a9b0 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67  s for both pTrig
1a9c0 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a  ger and orconf..
1a9d0 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65  **.** The Trigge
1a9e0 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d  rPrg.aColmask[0]
1a9f0 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
1aa00 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c   to a mask of ol
1aa10 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61  d.* columns.** a
1aa20 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74 20  ccessed (or set 
1aa30 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65 72  to 0 for trigger
1aa40 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65 73  s fired as a res
1aa50 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 20 0a 2a  ult of INSERT .*
1aa60 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53  * statements). S
1aa70 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72  imilarly, the Tr
1aa80 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73  iggerPrg.aColmas
1aa90 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73  k[1] variable is
1aaa0 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73   set to.** a mas
1aab0 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
1aac0 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70  ns used by the p
1aad0 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63  rogram..*/.struc
1aae0 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20  t TriggerPrg {. 
1aaf0 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
1ab00 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67  er;      /* Trig
1ab10 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d  ger this program
1ab20 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20   was coded from 
1ab30 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20  */.  TriggerPrg 
1ab40 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20  *pNext;      /* 
1ab50 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61  Next entry in Pa
1ab60 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1ab70 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f  list */.  SubPro
1ab80 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20  gram *pProgram; 
1ab90 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70    /* Program imp
1aba0 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67  lementing pTrigg
1abb0 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69  er/orconf */.  i
1abc0 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20  nt orconf;      
1abd0 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1abe0 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f  t ON CONFLICT po
1abf0 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43  licy */.  u32 aC
1ac00 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20  olmask[2];      
1ac10 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c    /* Masks of ol
1ac20 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  d.*, new.* colum
1ac30 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d  ns accessed */.}
1ac40 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62  ;../*.** The yDb
1ac50 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f  Mask datatype fo
1ac60 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66  r the bitmask of
1ac70 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
1ac80 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20  tabases..*/.#if 
1ac90 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
1aca0 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66  HED>30.  typedef
1acb0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79   unsigned char y
1acc0 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d  DbMask[(SQLITE_M
1acd0 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38  AX_ATTACHED+9)/8
1ace0 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  ];.# define DbMa
1acf0 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28  skTest(M,I)    (
1ad00 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c  ((M)[(I)/8]&(1<<
1ad10 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20  ((I)&7)))!=0).# 
1ad20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72  define DbMaskZer
1ad30 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74  o(M)      memset
1ad40 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29  ((M),0,sizeof(M)
1ad50 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1ad60 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d  kSet(M,I)     (M
1ad70 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28  )[(I)/8]|=(1<<((
1ad80 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20  I)&7)).# define 
1ad90 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1ada0 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b     sqlite3DbMask
1adb0 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66  AllZero(M).# def
1adc0 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72  ine DbMaskNonZer
1add0 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44  o(M)   (sqlite3D
1ade0 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d  bMaskAllZero(M)=
1adf0 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  =0).#else.  type
1ae00 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  def unsigned int
1ae10 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69   yDbMask;.# defi
1ae20 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c  ne DbMaskTest(M,
1ae30 49 29 20 20 20 20 28 28 28 4d 29 26 28 28 28 79  I)    (((M)&(((y
1ae40 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29  DbMask)1)<<(I)))
1ae50 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62  !=0).# define Db
1ae60 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20  MaskZero(M)     
1ae70 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20   (M)=0.# define 
1ae80 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20  DbMaskSet(M,I)  
1ae90 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61     (M)|=(((yDbMa
1aea0 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65  sk)1)<<(I)).# de
1aeb0 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65  fine DbMaskAllZe
1aec0 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23  ro(M)   (M)==0.#
1aed0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f   define DbMaskNo
1aee0 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d  nZero(M)   (M)!=
1aef0 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
1af00 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f  An SQL parser co
1af10 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f  ntext.  A copy o
1af20 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
1af30 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75   is passed throu
1af40 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72  gh.** the parser
1af50 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61   and down into a
1af60 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63  ll the parser ac
1af70 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20  tion routine in 
1af80 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72  order to.** carr
1af90 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61  y around informa
1afa0 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f  tion that is glo
1afb0 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72  bal to the entir
1afc0 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54  e parse..**.** T
1afd0 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20  he structure is 
1afe0 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f  divided into two
1aff0 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68   parts.  When th
1b000 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64  e parser and cod
1b010 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61  e.** generate ca
1b020 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65  ll themselves re
1b030 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66  cursively, the f
1b040 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65  irst part of the
1b050 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73   structure.** is
1b060 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68   constant but th
1b070 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73  e second part is
1b080 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65   reset at the be
1b090 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20  ginning and end 
1b0a0 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72  of.** each recur
1b0b0 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  sion..**.** The 
1b0c0 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61  nTableLock and a
1b0d0 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62  TableLock variab
1b0e0 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65  les are only use
1b0f0 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d  d if the shared-
1b100 63 61 63 68 65 20 0a 2a 2a 20 66 65 61 74 75 72  cache .** featur
1b110 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66  e is enabled (if
1b120 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75   sqlite3Tsd()->u
1b130 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20  seSharedData is 
1b140 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a  true). They are.
1b150 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  ** used to store
1b160 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c   the set of tabl
1b170 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64  e-locks required
1b180 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e   by the statemen
1b190 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69  t being.** compi
1b1a0 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71  led. Function sq
1b1b0 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29  lite3TableLock()
1b1c0 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20   is used to add 
1b1d0 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a  entries to the.*
1b1e0 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63  * list..*/.struc
1b1f0 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69  t Parse {.  sqli
1b200 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
1b210 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74   /* The main dat
1b220 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20  abase structure 
1b230 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  */.  char *zErrM
1b240 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  sg;       /* An 
1b250 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f  error message */
1b260 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20  .  Vdbe *pVdbe; 
1b270 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e          /* An en
1b280 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69  gine for executi
1b290 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65  ng database byte
1b2a0 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63  code */.  int rc
1b2b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1b2c0 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72  * Return code fr
1b2d0 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  om execution */.
1b2e0 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74    u8 colNamesSet
1b2f0 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61  ;      /* TRUE a
1b300 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61  fter OP_ColumnNa
1b310 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75  me has been issu
1b320 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20  ed to pVdbe */. 
1b330 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b   u8 checkSchema;
1b340 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20        /* Causes 
1b350 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68  schema cookie ch
1b360 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72  eck after an err
1b370 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65  or */.  u8 neste
1b380 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
1b390 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
1b3a0 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61   calls to the pa
1b3b0 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61  rser/code genera
1b3c0 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d  tor */.  u8 nTem
1b3d0 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
1b3e0 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f   Number of tempo
1b3f0 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69  rary registers i
1b400 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a  n aTempReg[] */.
1b410 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74    u8 isMultiWrit
1b420 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  e;     /* True i
1b430 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
1b440 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75  modify/insert mu
1b450 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20  ltiple rows */. 
1b460 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20   u8 mayAbort;   
1b470 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
1b480 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74   statement may t
1b490 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
1b4a0 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  ception */.  u8 
1b4b0 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20  hasCompound;    
1b4c0 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76    /* Need to inv
1b4d0 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f  oke convertCompo
1b4e0 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
1b4f0 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b  ery() */.  u8 ok
1b500 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20  ConstFactor;    
1b510 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20  /* OK to factor 
1b520 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f  out constants */
1b530 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b  .  int aTempReg[
1b540 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69  8];     /* Holdi
1b550 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70  ng area for temp
1b560 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20  orary registers 
1b570 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52  */.  int nRangeR
1b580 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a  eg;       /* Siz
1b590 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  e of the tempora
1b5a0 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63  ry register bloc
1b5b0 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67  k */.  int iRang
1b5c0 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46  eReg;       /* F
1b5d0 69 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e  irst register in
1b5e0 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
1b5f0 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69  ter block */.  i
1b600 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
1b610 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1b620 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a   errors seen */.
1b630 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20    int nTab;     
1b640 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b650 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61   of previously a
1b660 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75  llocated VDBE cu
1b670 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  rsors */.  int n
1b680 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
1b690 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  /* Number of mem
1b6a0 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73  ory cells used s
1b6b0 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
1b6c0 53 65 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Set;            
1b6d0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 65 74  /* Number of set
1b6e0 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f  s used so far */
1b6f0 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20 20 20  .  int nOnce;   
1b700 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1b710 72 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69 6e 73  r of OP_Once ins
1b720 74 72 75 63 74 69 6f 6e 73 20 73 6f 20 66 61 72  tructions so far
1b730 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c   */.  int nOpAll
1b740 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  oc;        /* Nu
1b750 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c  mber of slots al
1b760 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65  located for Vdbe
1b770 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  .aOp[] */.  int 
1b780 69 46 69 78 65 64 4f 70 3b 20 20 20 20 20 20 20  iFixedOp;       
1b790 20 2f 2a 20 4e 65 76 65 72 20 62 61 63 6b 20 6f   /* Never back o
1b7a0 75 74 20 6f 70 63 6f 64 65 73 20 69 46 69 78 65  ut opcodes iFixe
1b7b0 64 4f 70 2d 31 20 6f 72 20 65 61 72 6c 69 65 72  dOp-1 or earlier
1b7c0 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61 73 65   */.  int ckBase
1b7d0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61  ;          /* Ba
1b7e0 73 65 20 72 65 67 69 73 74 65 72 20 6f 66 20 64  se register of d
1b7f0 61 74 61 20 64 75 72 69 6e 67 20 63 68 65 63 6b  ata during check
1b800 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
1b810 20 20 69 6e 74 20 69 50 61 72 74 49 64 78 54 61    int iPartIdxTa
1b820 62 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  b;     /* Table 
1b830 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
1b840 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78   a partial index
1b850 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65   */.  int iCache
1b860 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f  Level;     /* Co
1b870 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77 68 65  lCache valid whe
1b880 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c  n aColCache[].iL
1b890 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65  evel<=iCacheLeve
1b8a0 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68  l */.  int iCach
1b8b0 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 43  eCnt;       /* C
1b8c0 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20 67  ounter used to g
1b8d0 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63 68  enerate aColCach
1b8e0 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a  e[].lru values *
1b8f0 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20  /.  int nLabel; 
1b900 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1b910 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65  er of labels use
1b920 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62  d */.  int *aLab
1b930 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  el;         /* S
1b940 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65  pace to hold the
1b950 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 73 74 72   labels */.  str
1b960 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a  uct yColCache {.
1b970 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20      int iTable; 
1b980 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
1b990 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  le cursor number
1b9a0 20 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f 6c   */.    i16 iCol
1b9b0 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  umn;          /*
1b9c0 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75   Table column nu
1b9d0 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74  mber */.    u8 t
1b9e0 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20  empReg;         
1b9f0 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74    /* iReg is a t
1ba00 65 6d 70 20 72 65 67 69 73 74 65 72 20 74 68 61  emp register tha
1ba10 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72  t needs to be fr
1ba20 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  eed */.    int i
1ba30 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
1ba40 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65   /* Nesting leve
1ba50 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65  l */.    int iRe
1ba60 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  g;             /
1ba70 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c 75 65  * Reg with value
1ba80 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e   of this column.
1ba90 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a   0 means none. *
1baa0 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20  /.    int lru;  
1bab0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
1bac0 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73  east recently us
1bad0 65 64 20 65 6e 74 72 79 20 68 61 73 20 74 68 65  ed entry has the
1bae0 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20   smallest value 
1baf0 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65  */.  } aColCache
1bb00 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43  [SQLITE_N_COLCAC
1bb10 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72  HE];  /* One for
1bb20 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63   each column cac
1bb30 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 45 78  he entry */.  Ex
1bb40 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78  prList *pConstEx
1bb50 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65  pr;/* Constant e
1bb60 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
1bb70 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74  Token constraint
1bb80 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20  Name;/* Name of 
1bb90 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63  the constraint c
1bba0 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70  urrently being p
1bbb0 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61  arsed */.  yDbMa
1bbc0 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20  sk writeMask;   
1bbd0 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65  /* Start a write
1bbe0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
1bbf0 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20  these databases 
1bc00 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f  */.  yDbMask coo
1bc10 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74  kieMask;  /* Bit
1bc20 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76  mask of schema v
1bc30 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65  erified database
1bc40 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69  s */.  int cooki
1bc50 65 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41  eValue[SQLITE_MA
1bc60 58 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20 20  X_ATTACHED+2];  
1bc70 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f  /* Values of coo
1bc80 6b 69 65 73 20 74 6f 20 76 65 72 69 66 79 20 2a  kies to verify *
1bc90 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64  /.  int regRowid
1bca0 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69  ;        /* Regi
1bcb0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77  ster holding row
1bcc0 69 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42  id of CREATE TAB
1bcd0 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e  LE entry */.  in
1bce0 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20  t regRoot;      
1bcf0 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
1bd00 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65  olding root page
1bd10 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20   number for new 
1bd20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74  objects */.  int
1bd30 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20   nMaxArg;       
1bd40 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61    /* Max args pa
1bd50 73 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e  ssed to user fun
1bd60 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f  ction by sub-pro
1bd70 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45  gram */.#if SELE
1bd80 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a  CTTRACE_ENABLED.
1bd90 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20    int nSelect;  
1bda0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1bdb0 20 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74 65   of SELECT state
1bdc0 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20 20  ments seen */.  
1bdd0 69 6e 74 20 6e 53 65 6c 65 63 74 49 6e 64 65 6e  int nSelectInden
1bde0 74 3b 20 20 20 2f 2a 20 48 6f 77 20 66 61 72 20  t;   /* How far 
1bdf0 74 6f 20 69 6e 64 65 6e 74 20 53 45 4c 45 43 54  to indent SELECT
1be00 54 52 41 43 45 28 29 20 6f 75 74 70 75 74 20 2a  TRACE() output *
1be10 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
1be20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
1be30 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20  RED_CACHE.  int 
1be40 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20  nTableLock;     
1be50 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1be60 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c  locks in aTableL
1be70 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f  ock */.  TableLo
1be80 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20  ck *aTableLock; 
1be90 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c  /* Required tabl
1bea0 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72  e locks for shar
1beb0 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f  ed-cache mode */
1bec0 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e  .#endif.  Autoin
1bed0 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f  cInfo *pAinc;  /
1bee0 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
1bef0 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  out AUTOINCREMEN
1bf00 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20  T counters */.. 
1bf10 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
1bf20 75 73 65 64 20 77 68 69 6c 65 20 63 6f 64 69 6e  used while codin
1bf30 67 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  g trigger progra
1bf40 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a  ms. */.  Parse *
1bf50 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a  pToplevel;    /*
1bf60 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
1bf70 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61   for main progra
1bf80 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20  m (or NULL) */. 
1bf90 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72   Table *pTrigger
1bfa0 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74  Tab;  /* Table t
1bfb0 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e  riggers are bein
1bfc0 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20  g coded for */. 
1bfd0 20 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20   int addrCrTab; 
1bfe0 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73        /* Address
1bff0 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 54 61 62   of OP_CreateTab
1c000 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45  le opcode on CRE
1c010 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 69  ATE TABLE */.  i
1c020 6e 74 20 61 64 64 72 53 6b 69 70 50 4b 3b 20 20  nt addrSkipPK;  
1c030 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f      /* Address o
1c040 66 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f  f instruction to
1c050 20 73 6b 69 70 20 50 52 49 4d 41 52 59 20 4b 45   skip PRIMARY KE
1c060 59 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 33 32  Y index */.  u32
1c070 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20   nQueryLoop;    
1c080 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20    /* Est number 
1c090 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66  of iterations of
1c0a0 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67   a query (10*log
1c0b0 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f  2(N)) */.  u32 o
1c0c0 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  ldmask;         
1c0d0 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a  /* Mask of old.*
1c0e0 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e   columns referen
1c0f0 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77  ced */.  u32 new
1c100 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a  mask;         /*
1c110 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63   Mask of new.* c
1c120 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65  olumns reference
1c130 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67  d */.  u8 eTrigg
1c140 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54  erOp;       /* T
1c150 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
1c160 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45  ERT or TK_DELETE
1c170 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66   */.  u8 eOrconf
1c180 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65  ;          /* De
1c190 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
1c1a0 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69  T policy for tri
1c1b0 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20  gger steps */.  
1c1c0 75 38 20 64 69 73 61 62 6c 65 54 72 69 67 67 65  u8 disableTrigge
1c1d0 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  rs;  /* True to 
1c1e0 64 69 73 61 62 6c 65 20 74 72 69 67 67 65 72 73  disable triggers
1c1f0 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a   */..  /********
1c200 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c210 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c220 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c230 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c240 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20 63  .  ** Above is c
1c250 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20  onstant between 
1c260 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c  recursions.  Bel
1c270 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66 6f  ow is reset befo
1c280 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a  re and after.  *
1c290 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e  * each recursion
1c2a0 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20  .  The boundary 
1c2b0 62 65 74 77 65 65 6e 20 74 68 65 73 65 20 74 77  between these tw
1c2c0 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65 74  o regions is det
1c2d0 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69  ermined.  ** usi
1c2e0 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  ng offsetof(Pars
1c2f0 65 2c 6e 56 61 72 29 20 73 6f 20 74 68 65 20 6e  e,nVar) so the n
1c300 56 61 72 20 66 69 65 6c 64 20 6d 75 73 74 20 62  Var field must b
1c310 65 20 74 68 65 20 66 69 72 73 74 20 66 69 65 6c  e the first fiel
1c320 64 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20 72 65  d.  ** in the re
1c330 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a  cursive region..
1c340 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
1c350 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c360 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c370 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c380 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69  **********/..  i
1c390 6e 74 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20  nt nVar;        
1c3a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1c3b0 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62  er of '?' variab
1c3c0 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20  les seen in the 
1c3d0 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  SQL so far */.  
1c3e0 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20 20  int nzVar;      
1c3f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1c400 62 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  ber of available
1c410 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b   slots in azVar[
1c420 5d 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72  ] */.  u8 iPkSor
1c430 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
1c440 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43 20   /* ASC or DESC 
1c450 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d  for INTEGER PRIM
1c460 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20  ARY KEY */.  u8 
1c470 62 46 72 65 65 57 69 74 68 3b 20 20 20 20 20 20  bFreeWith;      
1c480 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
1c490 66 20 70 57 69 74 68 20 73 68 6f 75 6c 64 20 62  f pWith should b
1c4a0 65 20 66 72 65 65 64 20 77 69 74 68 20 70 61 72  e freed with par
1c4b0 73 65 72 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c  ser */.  u8 expl
1c4c0 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ain;            
1c4d0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
1c4e0 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69  e EXPLAIN flag i
1c4f0 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71  s found on the q
1c500 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20  uery */.#ifndef 
1c510 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
1c520 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65  UALTABLE.  u8 de
1c530 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20  clareVtab;      
1c540 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1c550 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64  inside sqlite3_d
1c560 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f  eclare_vtab() */
1c570 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b  .  int nVtabLock
1c580 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1c590 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61  Number of virtua
1c5a0 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b  l tables to lock
1c5b0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
1c5c0 20 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20   nAlias;        
1c5d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1c5e0 20 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73 75   of aliased resu
1c5f0 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a  lt set columns *
1c600 2f 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b  /.  int nHeight;
1c610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1c620 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65   Expression tree
1c630 20 68 65 69 67 68 74 20 6f 66 20 63 75 72 72 65   height of curre
1c640 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f  nt sub-select */
1c650 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1c660 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69  OMIT_EXPLAIN.  i
1c670 6e 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20  nt iSelectId;   
1c680 20 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f           /* ID o
1c690 66 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74  f current select
1c6a0 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74   for EXPLAIN out
1c6b0 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65  put */.  int iNe
1c6c0 78 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20  xtSelectId;     
1c6d0 20 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c     /* Next avail
1c6e0 61 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66  able select ID f
1c6f0 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75  or EXPLAIN outpu
1c700 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68  t */.#endif.  ch
1c710 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20  ar **azVar;     
1c720 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
1c730 65 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20  ers to names of 
1c740 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20  parameters */.  
1c750 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65  Vdbe *pReprepare
1c760 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20  ;         /* VM 
1c770 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64  being reprepared
1c780 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61   (sqlite3Reprepa
1c790 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74  re()) */.  const
1c7a0 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20   char *zTail;   
1c7b0 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20       /* All SQL 
1c7c0 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61  text past the la
1c7d0 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72  st semicolon par
1c7e0 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  sed */.  Table *
1c7f0 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20  pNewTable;      
1c800 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65     /* A table be
1c810 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20  ing constructed 
1c820 62 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  by CREATE TABLE 
1c830 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e  */.  Trigger *pN
1c840 65 77 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f  ewTrigger;     /
1c850 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20  * Trigger under 
1c860 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20 43  construct by a C
1c870 52 45 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f  REATE TRIGGER */
1c880 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1c890 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20  AuthContext; /* 
1c8a0 54 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65  The 6th paramete
1c8b0 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63  r to db->xAuth c
1c8c0 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54 6f  allbacks */.  To
1c8d0 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20  ken sNameToken; 
1c8e0 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
1c8f0 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65   with unqualifie
1c900 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20  d schema object 
1c910 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  name */.  Token 
1c920 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20  sLastToken;     
1c930 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20      /* The last 
1c940 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a  token parsed */.
1c950 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1c960 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
1c970 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20  .  Token sArg;  
1c980 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c990 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66  Complete text of
1c9a0 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65   a module argume
1c9b0 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a  nt */.  Table **
1c9c0 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20  apVtabLock;     
1c9d0 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
1c9e0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e  virtual tables n
1c9f0 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a  eeding locking *
1ca00 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65  /.#endif.  Table
1ca10 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20   *pZombieTab;   
1ca20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
1ca30 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f  Table objects to
1ca40 20 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f   delete after co
1ca50 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67  de gen */.  Trig
1ca60 67 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72  gerPrg *pTrigger
1ca70 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20  Prg;  /* Linked 
1ca80 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72  list of coded tr
1ca90 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68  iggers */.  With
1caa0 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20   *pWith;        
1cab0 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
1cac0 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
1cad0 20 4e 55 4c 4c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   NULL */.};../*.
1cae0 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  ** Return true i
1caf0 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69  f currently insi
1cb00 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65  de an sqlite3_de
1cb10 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c  clare_vtab() cal
1cb20 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  l..*/.#ifdef SQL
1cb30 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
1cb40 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20  TABLE.  #define 
1cb50 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20  IN_DECLARE_VTAB 
1cb60 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  0.#else.  #defin
1cb70 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41  e IN_DECLARE_VTA
1cb80 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61  B (pParse->decla
1cb90 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a  reVtab).#endif..
1cba0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1cbb0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1cbc0 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e  ng structure can
1cbd0 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20   be declared on 
1cbe0 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64  a stack and used
1cbf0 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20  .** to save the 
1cc00 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65  Parse.zAuthConte
1cc10 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74  xt value so that
1cc20 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f   it can be resto
1cc30 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74  red later..*/.st
1cc40 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74  ruct AuthContext
1cc50 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
1cc60 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20  *zAuthContext;  
1cc70 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61   /* Put saved Pa
1cc80 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74  rse.zAuthContext
1cc90 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65   here */.  Parse
1cca0 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
1ccb0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61         /* The Pa
1ccc0 72 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f  rse structure */
1ccd0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69  .};../*.** Bitfi
1cce0 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35  eld flags for P5
1ccf0 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75   value in variou
1cd00 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a  s opcodes..**.**
1cd10 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 76   Note that the v
1cd20 61 6c 75 65 73 20 66 6f 72 20 49 53 4e 4f 4f 50  alues for ISNOOP
1cd30 20 61 6e 64 20 4c 45 4e 47 54 48 41 52 47 20 61   and LENGTHARG a
1cd40 72 65 20 74 68 65 20 73 61 6d 65 2e 20 20 42 75  re the same.  Bu
1cd50 74 20 61 73 20 0a 2a 2a 20 74 68 6f 73 65 20 62  t as .** those b
1cd60 69 74 73 20 61 72 65 20 6e 65 76 65 72 20 75 73  its are never us
1cd70 65 64 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 6f  ed on the same o
1cd80 70 63 6f 64 65 2c 20 74 68 65 20 6f 76 65 72 6c  pcode, the overl
1cd90 61 70 20 69 73 20 68 61 72 6d 6c 65 73 73 2e 0a  ap is harmless..
1cda0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1cdb0 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20  G_NCHANGE       
1cdc0 30 78 30 31 20 20 20 20 2f 2a 20 53 65 74 20 74  0x01    /* Set t
1cdd0 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68  o update db->nCh
1cde0 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ange */.#define 
1cdf0 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20  OPFLAG_EPHEM    
1ce00 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
1ce10 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d  OP_Column: Ephem
1ce20 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f  eral output is o
1ce30 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  k */.#define OPF
1ce40 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20  LAG_LASTROWID   
1ce50 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53 65 74    0x02    /* Set
1ce60 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c   to update db->l
1ce70 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66  astRowid */.#def
1ce80 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  ine OPFLAG_ISUPD
1ce90 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20 20  ATE      0x04   
1cea0 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65   /* This OP_Inse
1ceb0 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44  rt is an sql UPD
1cec0 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
1ced0 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20  PFLAG_APPEND    
1cee0 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54      0x08    /* T
1cef0 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f  his is likely to
1cf00 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f   be an append */
1cf10 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1cf20 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78  USESEEKRESULT 0x
1cf30 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20  10    /* Try to 
1cf40 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20  avoid a seek in 
1cf50 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f  BtreeInsert() */
1cf60 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1cf70 49 53 4e 4f 4f 50 20 20 20 20 20 20 20 20 30 78  ISNOOP        0x
1cf80 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65  40    /* OP_Dele
1cf90 74 65 20 64 6f 65 73 20 70 72 65 2d 75 70 64 61  te does pre-upda
1cfa0 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a  te-hook only */.
1cfb0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c  #define OPFLAG_L
1cfc0 45 4e 47 54 48 41 52 47 20 20 20 20 20 30 78 34  ENGTHARG     0x4
1cfd0 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  0    /* OP_Colum
1cfe0 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20  n only used for 
1cff0 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66  length() */.#def
1d000 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  ine OPFLAG_TYPEO
1d010 46 41 52 47 20 20 20 20 20 30 78 38 30 20 20 20  FARG     0x80   
1d020 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e   /* OP_Column on
1d030 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79 70 65  ly used for type
1d040 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  of() */.#define 
1d050 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20  OPFLAG_BULKCSR  
1d060 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
1d070 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74  OP_Open** used t
1d080 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73  o open bulk curs
1d090 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  or */.#define OP
1d0a0 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20  FLAG_SEEKEQ     
1d0b0 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50     0x02    /* OP
1d0c0 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75  _Open** cursor u
1d0d0 73 65 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79  ses EQ seek only
1d0e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1d0f0 41 47 5f 50 32 49 53 52 45 47 20 20 20 20 20 20  AG_P2ISREG      
1d100 20 30 78 30 34 20 20 20 20 2f 2a 20 50 32 20 74   0x04    /* P2 t
1d110 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61  o OP_Open** is a
1d120 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
1d130 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1d140 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20  AG_PERMUTE      
1d150 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43   0x01    /* OP_C
1d160 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65 20  ompare: use the 
1d170 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a  permutation */..
1d180 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67  /*. * Each trigg
1d190 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68  er present in th
1d1a0 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
1d1b0 61 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61  a is stored as a
1d1c0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a  n instance of. *
1d1d0 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e   struct Trigger.
1d1e0 20 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73   . *. * Pointers
1d1f0 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66   to instances of
1d200 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
1d210 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77  are stored in tw
1d220 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e  o ways.. * 1. In
1d230 20 74 68 65 20 22 74 72 69 67 48 61 73 68 22 20   the "trigHash" 
1d240 68 61 73 68 20 74 61 62 6c 65 20 28 70 61 72 74  hash table (part
1d250 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a   of the sqlite3*
1d260 20 74 68 61 74 20 72 65 70 72 65 73 65 6e 74 73   that represents
1d270 20 74 68 65 20 0a 20 2a 20 20 20 20 64 61 74 61   the . *    data
1d280 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f  base). This allo
1d290 77 73 20 54 72 69 67 67 65 72 20 73 74 72 75 63  ws Trigger struc
1d2a0 74 75 72 65 73 20 74 6f 20 62 65 20 72 65 74 72  tures to be retr
1d2b0 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20  ieved by name.. 
1d2c0 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72  * 2. All trigger
1d2d0 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
1d2e0 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  h a single table
1d2f0 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c   form a linked l
1d300 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20  ist, using the. 
1d310 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65  *    pNext membe
1d320 72 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  r of struct Trig
1d330 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74  ger. A pointer t
1d340 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  o the first elem
1d350 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20  ent of the. *   
1d360 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20   linked list is 
1d370 73 74 6f 72 65 64 20 61 73 20 74 68 65 20 22 70  stored as the "p
1d380 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20  Trigger" member 
1d390 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  of the associate
1d3a0 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20 54  d. *    struct T
1d3b0 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20  able.. *. * The 
1d3c0 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62  "step_list" memb
1d3d0 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  er points to the
1d3e0 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
1d3f0 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a  f a linked list.
1d400 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68   * containing th
1d410 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  e SQL statements
1d420 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68   specified as th
1d430 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
1d440 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72  m.. */.struct Tr
1d450 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a  igger {.  char *
1d460 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
1d470 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66    /* The name of
1d480 20 74 68 65 20 74 72 69 67 67 65 72 20 20 20 20   the trigger    
1d490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4a0 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74      */.  char *t
1d4b0 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
1d4c0 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72   /* The table or
1d4d0 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20 74   view to which t
1d4e0 68 65 20 74 72 69 67 67 65 72 20 61 70 70 6c 69  he trigger appli
1d4f0 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20  es */.  u8 op;  
1d500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d510 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c  /* One of TK_DEL
1d520 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20  ETE, TK_UPDATE, 
1d530 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20  TK_INSERT       
1d540 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b    */.  u8 tr_tm;
1d550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d560 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52  * One of TRIGGER
1d570 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52  _BEFORE, TRIGGER
1d580 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72  _AFTER */.  Expr
1d590 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20   *pWhen;        
1d5a0 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20      /* The WHEN 
1d5b0 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65 78  clause of the ex
1d5c0 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65  pression (may be
1d5d0 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69   NULL) */.  IdLi
1d5e0 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20  st *pColumns;   
1d5f0 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
1d600 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c  s an UPDATE OF <
1d610 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69  column-list> tri
1d620 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20  gger,.          
1d630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d640 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c     the <column-l
1d650 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68  ist> is stored h
1d660 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ere */.  Schema 
1d670 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20  *pSchema;       
1d680 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
1d690 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65  ining the trigge
1d6a0 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  r */.  Schema *p
1d6b0 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f  TabSchema;     /
1d6c0 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
1d6d0 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  ing the table */
1d6e0 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
1d6f0 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69  step_list; /* Li
1d700 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67  nk list of trigg
1d710 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73  er program steps
1d720 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a               */.
1d730 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74    Trigger *pNext
1d740 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  ;         /* Nex
1d750 74 20 74 72 69 67 67 65 72 20 61 73 73 6f 63 69  t trigger associ
1d760 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61  ated with the ta
1d770 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ble */.};../*.**
1d780 20 41 20 74 72 69 67 67 65 72 20 69 73 20 65 69   A trigger is ei
1d790 74 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72  ther a BEFORE or
1d7a0 20 61 6e 20 41 46 54 45 52 20 74 72 69 67 67 65   an AFTER trigge
1d7b0 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  r.  The followin
1d7c0 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64  g constants.** d
1d7d0 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 20  etermine which. 
1d7e0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20  .**.** If there 
1d7f0 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69  are multiple tri
1d800 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74  ggers, you might
1d810 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20   of some BEFORE 
1d820 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a  and some AFTER..
1d830 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65 73  ** In that cases
1d840 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20  , the constants 
1d850 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65  below can be ORe
1d860 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23  d together..*/.#
1d870 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42  define TRIGGER_B
1d880 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65  EFORE  1.#define
1d890 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 20   TRIGGER_AFTER  
1d8a0 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73   2../*. * An ins
1d8b0 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20  tance of struct 
1d8c0 54 72 69 67 67 65 72 53 74 65 70 20 69 73 20 75  TriggerStep is u
1d8d0 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73  sed to store a s
1d8e0 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d  ingle SQL statem
1d8f0 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61  ent. * that is a
1d900 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67   part of a trigg
1d910 65 72 2d 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a  er-program. . *.
1d920 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20   * Instances of 
1d930 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
1d940 65 70 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ep are stored in
1d950 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64   a singly linked
1d960 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a   list (linked. *
1d970 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78   using the "pNex
1d980 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72  t" member) refer
1d990 65 6e 63 65 64 20 62 79 20 74 68 65 20 22 73 74  enced by the "st
1d9a0 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
1d9b0 6f 66 20 74 68 65 20 0a 20 2a 20 61 73 73 6f 63  of the . * assoc
1d9c0 69 61 74 65 64 20 73 74 72 75 63 74 20 54 72 69  iated struct Tri
1d9d0 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54  gger instance. T
1d9e0 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
1d9f0 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c   of the linked l
1da00 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69  ist is. * the fi
1da10 72 73 74 20 73 74 65 70 20 6f 66 20 74 68 65 20  rst step of the 
1da20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e  trigger-program.
1da30 0a 20 2a 20 0a 20 2a 20 54 68 65 20 22 6f 70 22  . * . * The "op"
1da40 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65   member indicate
1da50 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69  s whether this i
1da60 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49  s a "DELETE", "I
1da70 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45 22  NSERT", "UPDATE"
1da80 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20   or. * "SELECT" 
1da90 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d  statement. The m
1daa0 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f  eanings of the o
1dab0 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20  ther members is 
1dac0 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
1dad0 65 20 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22  e . * value of "
1dae0 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  op" as follows:.
1daf0 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
1db00 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e  INSERT). * orcon
1db10 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74  f    -> stores t
1db20 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61  he ON CONFLICT a
1db30 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c  lgorithm. * pSel
1db40 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73  ect   -> If this
1db50 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
1db60 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e  TO ... SELECT ..
1db70 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  . statement, the
1db80 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  n. *            
1db90 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 61 20    this stores a 
1dba0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53  pointer to the S
1dbb0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
1dbc0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
1dbd0 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e  . * target    ->
1dbe0 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67   A token holding
1dbf0 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65   the quoted name
1dc00 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
1dc10 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a   insert into.. *
1dc20 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66   pExprList -> If
1dc30 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
1dc40 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55  RT INTO ... VALU
1dc50 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74  ES ... statement
1dc60 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20  , then. *       
1dc70 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72         this stor
1dc80 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20  es values to be 
1dc90 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77  inserted. Otherw
1dca0 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64  ise NULL.. * pId
1dcb0 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69  List   -> If thi
1dcc0 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
1dcd0 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e  NTO ... (<column
1dce0 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20  -names>) VALUES 
1dcf0 2e 2e 2e 20 0a 20 2a 20 20 20 20 20 20 20 20 20  ... . *         
1dd00 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20       statement, 
1dd10 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73  then this stores
1dd20 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65   the column-name
1dd30 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20  s to be. *      
1dd40 20 20 20 20 20 20 20 20 69 6e 73 65 72 74 65 64          inserted
1dd50 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70   into.. *. * (op
1dd60 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20   == TK_DELETE). 
1dd70 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41  * target    -> A
1dd80 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74   token holding t
1dd90 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f  he quoted name o
1dda0 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64  f the table to d
1ddb0 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70  elete from.. * p
1ddc0 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20  Where    -> The 
1ddd0 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
1dde0 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65  the DELETE state
1ddf0 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73  ment if one is s
1de00 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20  pecified.. *    
1de10 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77            Otherw
1de20 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a  ise NULL.. * . *
1de30 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54   (op == TK_UPDAT
1de40 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20  E). * target    
1de50 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69  -> A token holdi
1de60 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61  ng the quoted na
1de70 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
1de80 74 6f 20 75 70 64 61 74 65 20 72 6f 77 73 20 6f  to update rows o
1de90 66 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20  f.. * pWhere    
1dea0 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  -> The WHERE cla
1deb0 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54  use of the UPDAT
1dec0 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f  E statement if o
1ded0 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ne is specified.
1dee0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1def0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
1df00 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e  . * pExprList ->
1df10 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63   A list of the c
1df20 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65  olumns to update
1df30 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73   and the express
1df40 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20  ions to update. 
1df50 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
1df60 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69  hem to. See sqli
1df70 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75  te3Update() docu
1df80 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43  mentation of "pC
1df90 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20  hanges". *      
1dfa0 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74          argument
1dfb0 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74  .. * . */.struct
1dfc0 20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20   TriggerStep {. 
1dfd0 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
1dfe0 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
1dff0 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50  TK_DELETE, TK_UP
1e000 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c  DATE, TK_INSERT,
1e010 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20   TK_SELECT */.  
1e020 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20  u8 orconf;      
1e030 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62       /* OE_Rollb
1e040 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72  ack etc. */.  Tr
1e050 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20  igger *pTrig;   
1e060 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65     /* The trigge
1e070 72 20 74 68 61 74 20 74 68 69 73 20 73 74 65 70  r that this step
1e080 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f   is a part of */
1e090 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65  .  Select *pSele
1e0a0 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43  ct;     /* SELEC
1e0b0 54 20 73 74 61 74 6d 65 6e 74 20 6f 72 20 52 48  T statment or RH
1e0c0 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f  S of INSERT INTO
1e0d0 20 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a   .. SELECT ... *
1e0e0 2f 0a 20 20 54 6f 6b 65 6e 20 74 61 72 67 65 74  /.  Token target
1e0f0 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67  ;        /* Targ
1e100 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c  et table for DEL
1e110 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53  ETE, UPDATE, INS
1e120 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ERT */.  Expr *p
1e130 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a  Where;        /*
1e140 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
1e150 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20  e for DELETE or 
1e160 55 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a  UPDATE steps */.
1e170 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70    ExprList *pExp
1e180 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c  rList; /* SET cl
1e190 61 75 73 65 20 66 6f 72 20 55 50 44 41 54 45 2e  ause for UPDATE.
1e1a0 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49   */.  IdList *pI
1e1b0 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f  dList;     /* Co
1e1c0 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49  lumn names for I
1e1d0 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67 67  NSERT */.  Trigg
1e1e0 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20  erStep *pNext;  
1e1f0 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c  /* Next in the l
1e200 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72  ink-list */.  Tr
1e210 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74  iggerStep *pLast
1e220 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65  ;  /* Last eleme
1e230 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e  nt in link-list.
1e240 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65   Valid for 1st e
1e250 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a  lem only */.};..
1e260 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
1e270 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f  ing structure co
1e280 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69  ntains informati
1e290 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 73  on used by the s
1e2a0 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72  qliteFix....** r
1e2b0 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79 20  outines as they 
1e2c0 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74  walk the parse t
1e2d0 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61  ree to make data
1e2e0 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a  base references.
1e2f0 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a  ** explicit.  .*
1e300 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
1e310 20 44 62 46 69 78 65 72 20 44 62 46 69 78 65 72   DbFixer DbFixer
1e320 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78 65 72  ;.struct DbFixer
1e330 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
1e340 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  se;      /* The 
1e350 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e  parsing context.
1e360 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73    Error messages
1e370 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f   written here */
1e380 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
1e390 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74  ma;    /* Fix it
1e3a0 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68 65  ems to this sche
1e3b0 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72  ma */.  int bVar
1e3c0 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43  Only;       /* C
1e3d0 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c  heck for variabl
1e3e0 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c  e references onl
1e3f0 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  y */.  const cha
1e400 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61  r *zDb;    /* Ma
1e410 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65  ke sure all obje
1e420 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65  cts are containe
1e430 64 20 69 6e 20 74 68 69 73 20 64 61 74 61 62 61  d in this databa
1e440 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  se */.  const ch
1e450 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54  ar *zType;  /* T
1e460 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61  ype of the conta
1e470 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20  iner - used for 
1e480 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a  error messages *
1e490 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20  /.  const Token 
1e4a0 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20  *pName; /* Name 
1e4b0 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72  of the container
1e4c0 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f   - used for erro
1e4d0 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b  r messages */.};
1e4e0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63  ../*.** An objec
1e4f0 74 65 64 20 75 73 65 64 20 74 6f 20 61 63 63 75  ted used to accu
1e500 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78 74 20  mulate the text 
1e510 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68 65 72  of a string wher
1e520 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e  e we.** do not n
1e530 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20  ecessarily know 
1e540 68 6f 77 20 62 69 67 20 74 68 65 20 73 74 72 69  how big the stri
1e550 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68  ng will be in th
1e560 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  e end..*/.struct
1e570 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71   StrAccum {.  sq
1e580 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
1e590 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64     /* Optional d
1e5a0 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b  atabase for look
1e5b0 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e  aside.  Can be N
1e5c0 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ULL */.  char *z
1e5d0 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Base;         /*
1e5e0 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74 69   A base allocati
1e5f0 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61  on.  Not from ma
1e600 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20  lloc. */.  char 
1e610 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20 20  *zText;         
1e620 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f  /* The string co
1e630 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a  llected so far *
1e640 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61 72 3b 20  /.  int  nChar; 
1e650 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
1e660 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  th of the string
1e670 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1e680 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20    nAlloc;       
1e690 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73    /* Amount of s
1e6a0 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69  pace allocated i
1e6b0 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e 74  n zText */.  int
1e6c0 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20    mxAlloc;      
1e6d0 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c    /* Maximum all
1e6e0 6f 77 65 64 20 73 74 72 69 6e 67 20 6c 65 6e 67  owed string leng
1e6f0 74 68 20 2a 2f 0a 20 20 75 38 20 20 20 75 73 65  th */.  u8   use
1e700 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20  Malloc;      /* 
1e710 30 3a 20 6e 6f 6e 65 2c 20 20 31 3a 20 73 71 6c  0: none,  1: sql
1e720 69 74 65 33 44 62 4d 61 6c 6c 6f 63 2c 20 20 32  ite3DbMalloc,  2
1e730 3a 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  : sqlite3_malloc
1e740 20 2a 2f 0a 20 20 75 38 20 20 20 61 63 63 45 72   */.  u8   accEr
1e750 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 53 54  ror;       /* ST
1e760 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20  RACCUM_NOMEM or 
1e770 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20  STRACCUM_TOOBIG 
1e780 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54  */.};.#define ST
1e790 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31  RACCUM_NOMEM   1
1e7a0 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43 43 55  .#define STRACCU
1e7b0 4d 5f 54 4f 4f 42 49 47 20 20 32 0a 0a 2f 2a 0a  M_TOOBIG  2../*.
1e7c0 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  ** A pointer to 
1e7d0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
1e7e0 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e  s used to commun
1e7f0 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f  icate informatio
1e800 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65  n.** from sqlite
1e810 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72  3Init and OP_Par
1e820 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68  seSchema into th
1e830 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  e sqlite3InitCal
1e840 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65  lback..*/.typede
1e850 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c  f struct {.  sql
1e860 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
1e870 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
1e880 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
1e890 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70  ed */.  char **p
1e8a0 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45  zErrMsg;    /* E
1e8b0 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f  rror message sto
1e8c0 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e  red here */.  in
1e8d0 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  t iDb;          
1e8e0 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20    /* 0 for main 
1e8f0 64 61 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72  database.  1 for
1e900 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41   TEMP, 2.. for A
1e910 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74  TTACHed */.  int
1e920 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   rc;            
1e930 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20   /* Result code 
1e940 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d  stored here */.}
1e950 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a   InitData;../*.*
1e960 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74  * Structure cont
1e970 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f  aining global co
1e980 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61  nfiguration data
1e990 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20   for the SQLite 
1e9a0 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54  library..**.** T
1e9b0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 61 6c  his structure al
1e9c0 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65  so contains some
1e9d0 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69   state informati
1e9e0 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71  on..*/.struct Sq
1e9f0 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20  lite3Config {.  
1ea00 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20  int bMemstat;   
1ea10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
1ea30 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75  ble memory statu
1ea40 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65  s */.  int bCore
1ea50 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
1ea60 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1ea70 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20   to enable core 
1ea80 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e  mutexing */.  in
1ea90 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20  t bFullMutex;   
1eaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eab0 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
1eac0 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20  e full mutexing 
1ead0 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72  */.  int bOpenUr
1eae0 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
1eaf0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
1eb00 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65  o interpret file
1eb10 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f  names as URIs */
1eb20 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20  .  int bUseCis; 
1eb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb40 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65       /* Use cove
1eb50 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72  ring indices for
1eb60 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20   full-scans */. 
1eb70 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20   int mxStrlen;  
1eb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb90 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74     /* Maximum st
1eba0 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20  ring length */. 
1ebb0 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75 70   int neverCorrup
1ebc0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1ebd0 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69     /* Database i
1ebe0 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f  s always well-fo
1ebf0 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  rmed */.  int sz
1ec00 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20  Lookaside;      
1ec10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
1ec20 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65  efault lookaside
1ec30 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a   buffer size */.
1ec40 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65    int nLookaside
1ec50 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ec60 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
1ec70 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20  ookaside buffer 
1ec80 63 6f 75 6e 74 20 2a 2f 0a 20 20 73 71 6c 69 74  count */.  sqlit
1ec90 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d  e3_mem_methods m
1eca0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1ecb0 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79  Low-level memory
1ecc0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65   allocation inte
1ecd0 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74  rface */.  sqlit
1ece0 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
1ecf0 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20   mutex;      /* 
1ed00 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20  Low-level mutex 
1ed10 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  interface */.  s
1ed20 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65  qlite3_pcache_me
1ed30 74 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20  thods2 pcache2; 
1ed40 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61   /* Low-level pa
1ed50 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61  ge-cache interfa
1ed60 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48  ce */.  void *pH
1ed70 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  eap;            
1ed80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61            /* Hea
1ed90 70 20 73 74 6f 72 61 67 65 20 73 70 61 63 65 20  p storage space 
1eda0 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20  */.  int nHeap; 
1edb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edc0 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
1edd0 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69  f pHeap[] */.  i
1ede0 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b  nt mnReq, mxReq;
1edf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee00 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20   /* Min and max 
1ee10 68 65 61 70 20 72 65 71 75 65 73 74 73 20 73 69  heap requests si
1ee20 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  zes */.  sqlite3
1ee30 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20  _int64 szMmap;  
1ee40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d             /* mm
1ee50 61 70 28 29 20 73 70 61 63 65 20 70 65 72 20 6f  ap() space per o
1ee60 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71  pen file */.  sq
1ee70 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d  lite3_int64 mxMm
1ee80 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
1ee90 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65  /* Maximum value
1eea0 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20   for szMmap */. 
1eeb0 20 76 6f 69 64 20 2a 70 53 63 72 61 74 63 68 3b   void *pScratch;
1eec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eed0 20 20 20 2f 2a 20 53 63 72 61 74 63 68 20 6d 65     /* Scratch me
1eee0 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  mory */.  int sz
1eef0 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20  Scratch;        
1ef00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1ef10 69 7a 65 20 6f 66 20 65 61 63 68 20 73 63 72 61  ize of each scra
1ef20 74 63 68 20 62 75 66 66 65 72 20 2a 2f 0a 20 20  tch buffer */.  
1ef30 69 6e 74 20 6e 53 63 72 61 74 63 68 3b 20 20 20  int nScratch;   
1ef40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef50 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
1ef60 63 72 61 74 63 68 20 62 75 66 66 65 72 73 20 2a  cratch buffers *
1ef70 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b  /.  void *pPage;
1ef80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef90 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61        /* Page ca
1efa0 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  che memory */.  
1efb0 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20  int szPage;     
1efc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efd0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
1efe0 68 20 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b  h page in pPage[
1eff0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65  ] */.  int nPage
1f000 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f010 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1f020 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70  er of pages in p
1f030 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Page[] */.  int 
1f040 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20  mxParserStack;  
1f050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f060 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f   maximum depth o
1f070 66 20 74 68 65 20 70 61 72 73 65 72 20 73 74 61  f the parser sta
1f080 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72  ck */.  int shar
1f090 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20  edCacheEnabled; 
1f0a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75            /* tru
1f0b0 65 20 69 66 20 73 68 61 72 65 64 2d 63 61 63 68  e if shared-cach
1f0c0 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a  e mode enabled *
1f0d0 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b 20 20  /.  u32 szPma;  
1f0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0f0 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
1f100 20 53 6f 72 74 65 72 20 50 4d 41 20 73 69 7a 65   Sorter PMA size
1f110 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f   */.  /* The abo
1f120 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74  ve might be init
1f130 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a  ialized to non-z
1f140 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ero.  The follow
1f150 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61  ing need to alwa
1f160 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c  ys.  ** initiall
1f170 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76  y be zero, howev
1f180 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49  er. */.  int isI
1f190 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
1f1a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1f1b0 75 65 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c  ue after initial
1f1c0 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69  ization has fini
1f1d0 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e  shed */.  int in
1f1e0 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20  Progress;       
1f1f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1f200 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61  rue while initia
1f210 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67  lization in prog
1f220 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ress */.  int is
1f230 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20  MutexInit;      
1f240 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1f250 72 75 65 20 61 66 74 65 72 20 6d 75 74 65 78 65  rue after mutexe
1f260 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65  s are initialize
1f270 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c  d */.  int isMal
1f280 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20  locInit;        
1f290 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1f2a0 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73   after malloc is
1f2b0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
1f2c0 20 20 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e    int isPCacheIn
1f2d0 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
1f2e0 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
1f2f0 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
1f300 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
1f310 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20   nRefInitMutex; 
1f320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f330 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72  * Number of user
1f340 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20  s of pInitMutex 
1f350 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
1f360 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20  ex *pInitMutex; 
1f370 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20         /* Mutex 
1f380 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
1f390 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a  initialize() */.
1f3a0 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76    void (*xLog)(v
1f3b0 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
1f3c0 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69  har*); /* Functi
1f3d0 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a  on for logging *
1f3e0 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72  /.  void *pLogAr
1f3f0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
1f400 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
1f410 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c  t argument to xL
1f420 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53  og() */.#ifdef S
1f430 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c  QLITE_ENABLE_SQL
1f440 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c  LOG.  void(*xSql
1f450 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  log)(void*,sqlit
1f460 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
1f470 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
1f480 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69  SqllogArg;.#endi
1f490 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
1f4a0 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20 20  VDBE_COVERAGE.  
1f4b0 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
1f4c0 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f   callback (if no
1f4d0 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b  t NULL) is invok
1f4e0 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42 45  ed on every VDBE
1f4f0 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65   branch.  ** ope
1f500 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68 65  ration.  Set the
1f510 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20   callback using 
1f520 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
1f530 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20  VDBE_COVERAGE.. 
1f540 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 64   */.  void (*xVd
1f550 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c  beBranch)(void*,
1f560 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75 38 20  int iSrcLine,u8 
1f570 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20 20  eThis,u8 eMx);  
1f580 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  /* Callback */. 
1f590 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61 6e   void *pVdbeBran
1f5a0 63 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  chArg;          
1f5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
1f5d0 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65  t argument */.#e
1f5e0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
1f5f0 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
1f600 5f 54 45 53 54 0a 20 20 69 6e 74 20 28 2a 78 54  _TEST.  int (*xT
1f610 65 73 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e 74  estCallback)(int
1f620 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 76  );        /* Inv
1f630 6f 6b 65 64 20 62 79 20 73 71 6c 69 74 65 33 46  oked by sqlite3F
1f640 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65 6e  aultSim() */.#en
1f650 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c  dif.  int bLocal
1f660 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20 20  timeFault;      
1f670 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1f680 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d  to fail localtim
1f690 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 7d 3b 0a  e() calls */.};.
1f6a0 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72  ./*.** This macr
1f6b0 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65  o is used inside
1f6c0 20 6f 66 20 61 73 73 65 72 74 28 29 20 73 74 61   of assert() sta
1f6d0 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69 63  tements to indic
1f6e0 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ate that.** the 
1f6f0 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20 76  assert is only v
1f700 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66  alid on a well-f
1f710 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20  ormed database. 
1f720 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a   Instead of:.**.
1f730 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58  **     assert( X
1f740 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72   );.**.** One wr
1f750 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ites:.**.**     
1f760 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f 52  assert( X || COR
1f770 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a  RUPT_DB );.**.**
1f780 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 74   CORRUPT_DB is t
1f790 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61  rue during norma
1f7a0 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f  l operation.  CO
1f7b0 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f  RRUPT_DB does no
1f7c0 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68  t indicate.** th
1f7d0 61 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  at the database 
1f7e0 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63 6f  is definitely co
1f7f0 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74  rrupt, only that
1f800 20 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f 72   it might be cor
1f810 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73  rupt..** For mos
1f820 74 20 74 65 73 74 20 63 61 73 65 73 2c 20 43 4f  t test cases, CO
1f830 52 52 55 50 54 5f 44 42 20 69 73 20 73 65 74 20  RRUPT_DB is set 
1f840 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20 61  to false using a
1f850 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69   special.** sqli
1f860 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
1f870 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c 65  ().  This enable
1f880 73 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  s assert() state
1f890 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a  ments to prove.*
1f8a0 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20 61 72  * things that ar
1f8b0 65 20 61 6c 77 61 79 73 20 74 72 75 65 20 66 6f  e always true fo
1f8c0 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61  r well-formed da
1f8d0 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66  tabases..*/.#def
1f8e0 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20 20  ine CORRUPT_DB  
1f8f0 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e  (sqlite3Config.n
1f900 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a  everCorrupt==0).
1f910 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70  ./*.** Context p
1f920 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f  ointer passed do
1f930 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20 74  wn through the t
1f940 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72  ree-walk..*/.str
1f950 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 69  uct Walker {.  i
1f960 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61  nt (*xExprCallba
1f970 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  ck)(Walker*, Exp
1f980 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c  r*);     /* Call
1f990 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73 73  back for express
1f9a0 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  ions */.  int (*
1f9b0 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29  xSelectCallback)
1f9c0 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a  (Walker*,Select*
1f9d0 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  );  /* Callback 
1f9e0 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20  for SELECTs */. 
1f9f0 20 76 6f 69 64 20 28 2a 78 53 65 6c 65 63 74 43   void (*xSelectC
1fa00 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65 72  allback2)(Walker
1fa10 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65  *,Select*);/* Se
1fa20 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f  cond callback fo
1fa30 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 50  r SELECTs */.  P
1fa40 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
1fa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa60 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73           /* Pars
1fa70 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a  er context.  */.
1fa80 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74    int walkerDept
1fa90 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
1faa0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1fab0 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65 72  umber of subquer
1fac0 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64  ies */.  u8 eCod
1fad0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1fae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1faf0 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72     /* A small pr
1fb00 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f  ocessing code */
1fb10 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20  .  union {      
1fb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1fb40 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20 63  Extra data for c
1fb50 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e  allback */.    N
1fb60 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b  ameContext *pNC;
1fb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
1fb90 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  ing context */. 
1fba0 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20     int n;       
1fbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1fbd0 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20   A counter */.  
1fbe0 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20    int iCur;     
1fbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1fc10 41 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  A cursor number 
1fc20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a  */.    SrcList *
1fc30 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20  pSrcList;       
1fc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc50 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65    /* FROM clause
1fc60 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53   */.    struct S
1fc70 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75  rcCount *pSrcCou
1fc80 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
1fc90 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63     /* Counting c
1fca0 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73  olumn references
1fcb0 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f   */.  } u;.};../
1fcc0 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72  * Forward declar
1fcd0 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71  ations */.int sq
1fce0 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61  lite3WalkExpr(Wa
1fcf0 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  lker*, Expr*);.i
1fd00 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78  nt sqlite3WalkEx
1fd10 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20  prList(Walker*, 
1fd20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
1fd30 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
1fd40 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  t(Walker*, Selec
1fd50 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1fd60 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57  WalkSelectExpr(W
1fd70 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
1fd80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
1fd90 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b  kSelectFrom(Walk
1fda0 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 0a  er*, Select*);..
1fdb0 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64  /*.** Return cod
1fdc0 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65  e from the parse
1fdd0 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72  -tree walking pr
1fde0 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68 65  imitives and the
1fdf0 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e  ir.** callbacks.
1fe00 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f  .*/.#define WRC_
1fe10 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20  Continue    0   
1fe20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e  /* Continue down
1fe30 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a   into children *
1fe40 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72  /.#define WRC_Pr
1fe50 75 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a  une       1   /*
1fe60 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62   Omit children b
1fe70 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b  ut continue walk
1fe80 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a  ing siblings */.
1fe90 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72  #define WRC_Abor
1fea0 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41  t       2   /* A
1feb0 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20  bandon the tree 
1fec0 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  walk */../*.** A
1fed0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
1fee0 69 73 20 73 74 72 75 63 74 75 72 65 20 72 65 70  is structure rep
1fef0 72 65 73 65 6e 74 73 20 61 20 73 65 74 20 6f 66  resents a set of
1ff00 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43 54 45   one or more CTE
1ff10 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62  s.** (common tab
1ff20 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 29 20  le expressions) 
1ff30 63 72 65 61 74 65 64 20 62 79 20 61 20 73 69 6e  created by a sin
1ff40 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e  gle WITH clause.
1ff50 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 74 68 20  .*/.struct With 
1ff60 7b 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20 20 20  {.  int nCte;   
1ff70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff80 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1ff90 20 43 54 45 73 20 69 6e 20 74 68 65 20 57 49 54   CTEs in the WIT
1ffa0 48 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69  H clause */.  Wi
1ffb0 74 68 20 2a 70 4f 75 74 65 72 3b 20 20 20 20 20  th *pOuter;     
1ffc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ffd0 20 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49 54 48   Containing WITH
1ffe0 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c   clause, or NULL
1fff0 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 43 74 65   */.  struct Cte
20000 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
20010 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63        /* For eac
20020 68 20 43 54 45 20 69 6e 20 74 68 65 20 57 49 54  h CTE in the WIT
20030 48 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a  H clause.... */.
20040 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
20050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20060 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
20070 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 45  his CTE */.    E
20080 78 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20  xprList *pCols; 
20090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
200a0 2a 20 4c 69 73 74 20 6f 66 20 65 78 70 6c 69 63  * List of explic
200b0 69 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c  it column names,
200c0 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20   or NULL */.    
200d0 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
200e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200f0 2f 2a 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f  /* The definitio
20100 6e 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f  n of this CTE */
20110 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
20120 2a 7a 45 72 72 3b 20 20 20 20 20 20 20 20 20 20  *zErr;          
20130 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65       /* Error me
20140 73 73 61 67 65 20 66 6f 72 20 63 69 72 63 75 6c  ssage for circul
20150 61 72 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f  ar references */
20160 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23  .  } a[1];.};..#
20170 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
20180 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  UG./*.** An inst
20190 61 6e 63 65 20 6f 66 20 74 68 65 20 54 72 65 65  ance of the Tree
201a0 56 69 65 77 20 6f 62 6a 65 63 74 20 69 73 20 75  View object is u
201b0 73 65 64 20 66 6f 72 20 70 72 69 6e 74 69 6e 67  sed for printing
201c0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
201d0 2a 2a 20 64 61 74 61 20 73 74 72 75 63 74 75 72  ** data structur
201e0 65 73 20 6f 6e 20 73 71 6c 69 74 65 33 44 65 62  es on sqlite3Deb
201f0 75 67 50 72 69 6e 74 66 28 29 20 75 73 69 6e 67  ugPrintf() using
20200 20 61 20 74 72 65 65 2d 6c 69 6b 65 20 76 69 65   a tree-like vie
20210 77 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 65  w..*/.struct Tre
20220 65 56 69 65 77 20 7b 0a 20 20 69 6e 74 20 69 4c  eView {.  int iL
20230 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20  evel;           
20240 20 20 2f 2a 20 57 68 69 63 68 20 6c 65 76 65 6c    /* Which level
20250 20 6f 66 20 74 68 65 20 74 72 65 65 20 77 65 20   of the tree we 
20260 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 75 38 20 20  are on */.  u8  
20270 62 4c 69 6e 65 5b 31 30 30 5d 3b 20 20 20 20 20  bLine[100];     
20280 20 20 20 20 2f 2a 20 44 72 61 77 20 76 65 72 74      /* Draw vert
20290 69 63 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20 69  ical in column i
202a0 20 69 66 20 62 4c 69 6e 65 5b 69 5d 20 69 73 20   if bLine[i] is 
202b0 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69  true */.};.#endi
202c0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55  f /* SQLITE_DEBU
202d0 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75  G */../*.** Assu
202e0 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20  ming zIn points 
202f0 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74  to the first byt
20300 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61  e of a UTF-8 cha
20310 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e  racter,.** advan
20320 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20  ce zIn to point 
20330 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74  to the first byt
20340 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54  e of the next UT
20350 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a  F-8 character..*
20360 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
20370 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20  _SKIP_UTF8(zIn) 
20380 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
20390 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28           \.  if(
203a0 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63   (*(zIn++))>=0xc
203b0 30 20 29 7b 20 20 20 20 20 20 20 20 20 20 20 20  0 ){            
203c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203d0 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28    \.    while( (
203e0 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78  *zIn & 0xc0)==0x
203f0 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20  80 ){ zIn++; }  
20400 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d             \.  }
20410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20440 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54      \.}../*.** T
20450 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54  he SQLITE_*_BKPT
20460 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62 73   macros are subs
20470 74 69 74 75 74 65 73 20 66 6f 72 20 74 68 65 20  titutes for the 
20480 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74 68  error codes with
20490 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  .** the same nam
204a0 65 20 62 75 74 20 77 69 74 68 6f 75 74 20 74 68  e but without th
204b0 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e 20  e _BKPT suffix. 
204c0 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69 6e   These macros in
204d0 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73  voke.** routines
204e0 20 74 68 61 74 20 72 65 70 6f 72 74 20 74 68 65   that report the
204f0 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20   line-number on 
20500 77 68 69 63 68 20 74 68 65 20 65 72 72 6f 72 20  which the error 
20510 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73  originated.** us
20520 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28  ing sqlite3_log(
20530 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65 73  ).  The routines
20540 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61 20   also provide a 
20550 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65  convenient place
20560 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65 62  .** to set a deb
20570 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74  ugger breakpoint
20580 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
20590 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74  CorruptError(int
205a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69  );.int sqlite3Mi
205b0 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a  suseError(int);.
205c0 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f  int sqlite3Canto
205d0 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23  penError(int);.#
205e0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f  define SQLITE_CO
205f0 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74  RRUPT_BKPT sqlit
20600 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f  e3CorruptError(_
20610 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65  _LINE__).#define
20620 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42   SQLITE_MISUSE_B
20630 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73  KPT sqlite3Misus
20640 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  eError(__LINE__)
20650 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
20660 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71  CANTOPEN_BKPT sq
20670 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72  lite3CantopenErr
20680 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f  or(__LINE__).../
20690 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61  *.** FTS4 is rea
206a0 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e  lly an extension
206b0 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69   for FTS3.  It i
206c0 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20  s enabled using 
206d0 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e  the.** SQLITE_EN
206e0 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e  ABLE_FTS3 macro.
206f0 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63    But to avoid c
20700 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f  onfusion we also
20710 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c   call.** the SQL
20720 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20  ITE_ENABLE_FTS4 
20730 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61  macro to serve a
20740 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 53  s an alias for S
20750 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
20760 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  3..*/.#if define
20770 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
20780 46 54 53 34 29 20 26 26 20 21 64 65 66 69 6e 65  FTS4) && !define
20790 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
207a0 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53  FTS3).# define S
207b0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
207c0 33 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  3 1.#endif../*.*
207d0 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20 68 65  * The ctype.h he
207e0 61 64 65 72 20 69 73 20 6e 65 65 64 65 64 20 66  ader is needed f
207f0 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73  or non-ASCII sys
20800 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73  tems.  It is als
20810 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46  o.** needed by F
20820 54 53 33 20 77 68 65 6e 20 46 54 53 33 20 69 73  TS3 when FTS3 is
20830 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65   included in the
20840 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a   amalgamation..*
20850 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
20860 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20  QLITE_ASCII) || 
20870 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53  \.    (defined(S
20880 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
20890 33 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  3) && defined(SQ
208a0 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
208b0 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63  N)).# include <c
208c0 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a  type.h>.#endif..
208d0 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
208e0 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63  ing macros mimic
208f0 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69   the standard li
20900 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20  brary functions 
20910 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73  toupper(),.** is
20920 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d  space(), isalnum
20930 28 29 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e  (), isdigit() an
20940 64 20 69 73 78 64 69 67 69 74 28 29 2c 20 72 65  d isxdigit(), re
20950 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a  spectively. The.
20960 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f  ** sqlite versio
20970 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72  ns only work for
20980 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
20990 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  s, regardless of
209a0 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64   locale..*/.#ifd
209b0 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a  ef SQLITE_ASCII.
209c0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
209d0 54 6f 75 70 70 65 72 28 78 29 20 20 28 28 78 29  Toupper(x)  ((x)
209e0 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d  &~(sqlite3CtypeM
209f0 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
20a00 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20  r)(x)]&0x20)).# 
20a10 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
20a20 73 70 61 63 65 28 78 29 20 20 20 28 73 71 6c 69  space(x)   (sqli
20a30 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
20a40 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
20a50 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73  0x01).# define s
20a60 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29  qlite3Isalnum(x)
20a70 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
20a80 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
20a90 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20  ar)(x)]&0x06).# 
20aa0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
20ab0 61 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c 69  alpha(x)   (sqli
20ac0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
20ad0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
20ae0 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73  0x02).# define s
20af0 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29  qlite3Isdigit(x)
20b00 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
20b10 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
20b20 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20  ar)(x)]&0x04).# 
20b30 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
20b40 78 64 69 67 69 74 28 78 29 20 20 28 73 71 6c 69  xdigit(x)  (sqli
20b50 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
20b60 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
20b70 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73  0x08).# define s
20b80 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29  qlite3Tolower(x)
20b90 20 20 20 28 73 71 6c 69 74 65 33 55 70 70 65 72     (sqlite3Upper
20ba0 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65  ToLower[(unsigne
20bb0 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23 65 6c  d char)(x)]).#el
20bc0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
20bd0 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20  te3Toupper(x)   
20be0 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65  toupper((unsigne
20bf0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
20c00 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
20c10 61 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65  ace(x)   isspace
20c20 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
20c30 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
20c40 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
20c50 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67    isalnum((unsig
20c60 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
20c70 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
20c80 61 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c 70  alpha(x)   isalp
20c90 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ha((unsigned cha
20ca0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
20cb0 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
20cc0 29 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73  )   isdigit((uns
20cd0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
20ce0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20cf0 49 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78  Isxdigit(x)  isx
20d00 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20  digit((unsigned 
20d10 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
20d20 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  ne sqlite3Tolowe
20d30 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28  r(x)   tolower((
20d40 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
20d50 29 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  )).#endif.int sq
20d60 6c 69 74 65 33 49 73 49 64 43 68 61 72 28 75 38  lite3IsIdChar(u8
20d70 29 3b 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e  );../*.** Intern
20d80 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74  al function prot
20d90 6f 74 79 70 65 73 0a 2a 2f 0a 23 64 65 66 69 6e  otypes.*/.#defin
20da0 65 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  e sqlite3StrICmp
20db0 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70   sqlite3_stricmp
20dc0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c  .int sqlite3Strl
20dd0 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a  en30(const char*
20de0 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  );.#define sqlit
20df0 65 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74  e3StrNICmp sqlit
20e00 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74  e3_strnicmp..int
20e10 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e   sqlite3MallocIn
20e20 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  it(void);.void s
20e30 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28  qlite3MallocEnd(
20e40 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  void);.void *sql
20e50 69 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b  ite3Malloc(u64);
20e60 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
20e70 6c 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76  llocZero(u64);.v
20e80 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
20e90 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33  llocZero(sqlite3
20ea0 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
20eb0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
20ec0 77 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29  w(sqlite3*, u64)
20ed0 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44  ;.char *sqlite3D
20ee0 62 53 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a  bStrDup(sqlite3*
20ef0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63  ,const char*);.c
20f00 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74  har *sqlite3DbSt
20f10 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63  rNDup(sqlite3*,c
20f20 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 36 34 29  onst char*, u64)
20f30 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52  ;.void *sqlite3R
20f40 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36  ealloc(void*, u6
20f50 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
20f60 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65  3DbReallocOrFree
20f70 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64  (sqlite3 *, void
20f80 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a   *, u64);.void *
20f90 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63  sqlite3DbRealloc
20fa0 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64  (sqlite3 *, void
20fb0 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 73   *, u64);.void s
20fc0 71 6c 69 74 65 33 44 62 46 72 65 65 28 73 71 6c  qlite3DbFree(sql
20fd0 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69  ite3*, void*);.i
20fe0 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  nt sqlite3Malloc
20ff0 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74  Size(void*);.int
21000 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
21010 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76  Size(sqlite3*, v
21020 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  oid*);.void *sql
21030 69 74 65 33 53 63 72 61 74 63 68 4d 61 6c 6c 6f  ite3ScratchMallo
21040 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  c(int);.void sql
21050 69 74 65 33 53 63 72 61 74 63 68 46 72 65 65 28  ite3ScratchFree(
21060 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71  void*);.void *sq
21070 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28  lite3PageMalloc(
21080 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21090 65 33 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a  e3PageFree(void*
210a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
210b0 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69  emSetDefault(voi
210c0 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
210d0 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b  BenignMallocHook
210e0 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29  s(void (*)(void)
210f0 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29  , void (*)(void)
21100 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65  );.int sqlite3He
21110 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69  apNearlyFull(voi
21120 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79  d);../*.** On sy
21130 73 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65  stems with ample
21140 20 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64   stack space and
21150 20 74 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c   that support al
21160 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20  loca(), make.** 
21170 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20  use of alloca() 
21180 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20  to obtain space 
21190 66 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61  for large automa
211a0 74 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79  tic objects.  By
211b0 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74   default,.** obt
211c0 61 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d  ain space from m
211d0 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54  alloc()..**.** T
211e0 68 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74  he alloca() rout
211f0 69 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e  ine never return
21200 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69  s NULL.  This wi
21210 6c 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70 61  ll cause code pa
21220 74 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c  ths.** that deal
21230 20 77 69 74 68 20 73 71 6c 69 74 65 33 53 74 61   with sqlite3Sta
21240 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72  ckAlloc() failur
21250 65 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68  es to be unreach
21260 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  able..*/.#ifdef 
21270 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43  SQLITE_USE_ALLOC
21280 41 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  A.# define sqlit
21290 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28  e3StackAllocRaw(
212a0 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29  D,N)   alloca(N)
212b0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
212c0 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28  3StackAllocZero(
212d0 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c  D,N)  memset(all
212e0 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20  oca(N), 0, N).# 
212f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
21300 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20  ackFree(D,P)    
21310 20 20 20 0a 23 65 6c 73 65 0a 23 20 64 65 66 69     .#else.# defi
21320 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
21330 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73  llocRaw(D,N)   s
21340 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
21350 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20  w(D,N).# define 
21360 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
21370 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69  cZero(D,N)  sqli
21380 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
21390 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  D,N).# define sq
213a0 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44  lite3StackFree(D
213b0 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69 74 65  ,P)       sqlite
213c0 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e  3DbFree(D,P).#en
213d0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
213e0 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
213f0 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f  3.const sqlite3_
21400 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c  mem_methods *sql
21410 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73  ite3MemGetMemsys
21420 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  3(void);.#endif.
21430 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
21440 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e  ABLE_MEMSYS5.con
21450 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  st sqlite3_mem_m
21460 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d  ethods *sqlite3M
21470 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69  emGetMemsys5(voi
21480 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66  d);.#endif...#if
21490 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45  ndef SQLITE_MUTE
214a0 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33  X_OMIT.  sqlite3
214b0 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
214c0 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66  onst *sqlite3Def
214d0 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b  aultMutex(void);
214e0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
214f0 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a  _methods const *
21500 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78  sqlite3NoopMutex
21510 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65  (void);.  sqlite
21520 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33  3_mutex *sqlite3
21530 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b  MutexAlloc(int);
21540 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  .  int sqlite3Mu
21550 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20  texInit(void);. 
21560 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65   int sqlite3Mute
21570 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64  xEnd(void);.#end
21580 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36  if..sqlite3_int6
21590 34 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56  4 sqlite3StatusV
215a0 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20  alue(int);.void 
215b0 73 71 6c 69 74 65 33 53 74 61 74 75 73 55 70 28  sqlite3StatusUp(
215c0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
215d0 73 71 6c 69 74 65 33 53 74 61 74 75 73 44 6f 77  sqlite3StatusDow
215e0 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  n(int, int);.voi
215f0 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 53  d sqlite3StatusS
21600 65 74 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 2f  et(int, int);../
21610 2a 20 41 63 63 65 73 73 20 74 6f 20 6d 75 74 65  * Access to mute
21620 78 65 73 20 75 73 65 64 20 62 79 20 73 71 6c 69  xes used by sqli
21630 74 65 33 5f 73 74 61 74 75 73 28 29 20 2a 2f 0a  te3_status() */.
21640 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73  sqlite3_mutex *s
21650 71 6c 69 74 65 33 50 63 61 63 68 65 31 4d 75 74  qlite3Pcache1Mut
21660 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69 74 65  ex(void);.sqlite
21670 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33  3_mutex *sqlite3
21680 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f 69 64  MallocMutex(void
21690 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
216a0 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
216b0 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c  _POINT.  int sql
216c0 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65  ite3IsNaN(double
216d0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
216e0 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58  e sqlite3IsNaN(X
216f0 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  )  0.#endif../*.
21700 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
21710 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
21720 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
21730 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
21740 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f  t SQL.** functio
21750 6e 73 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61  ns arguments tha
21760 74 20 61 72 65 20 74 68 65 20 70 61 72 61 6d 65  t are the parame
21770 74 65 72 73 20 74 6f 20 74 68 65 20 70 72 69 6e  ters to the prin
21780 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  tf() function..*
21790 2f 0a 73 74 72 75 63 74 20 50 72 69 6e 74 66 41  /.struct PrintfA
217a0 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74  rguments {.  int
217b0 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20   nArg;          
217c0 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e        /* Total n
217d0 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
217e0 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65  ts */.  int nUse
217f0 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
21800 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
21810 67 75 6d 65 6e 74 73 20 75 73 65 64 20 73 6f 20  guments used so 
21820 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  far */.  sqlite3
21830 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20  _value **apArg; 
21840 20 20 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e    /* The argumen
21850 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a  t values */.};..
21860 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
21870 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30  RINTF_INTERNAL 0
21880 78 30 31 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  x01.#define SQLI
21890 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e  TE_PRINTF_SQLFUN
218a0 43 20 20 30 78 30 32 0a 76 6f 69 64 20 73 71 6c  C  0x02.void sql
218b0 69 74 65 33 56 58 50 72 69 6e 74 66 28 53 74 72  ite3VXPrintf(Str
218c0 41 63 63 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e  Accum*, u32, con
218d0 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73  st char*, va_lis
218e0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
218f0 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d  XPrintf(StrAccum
21900 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20 63 68  *, u32, const ch
21910 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20  ar*, ...);.char 
21920 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28  *sqlite3MPrintf(
21930 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
21940 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72  har*, ...);.char
21950 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74   *sqlite3VMPrint
21960 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  f(sqlite3*,const
21970 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29   char*, va_list)
21980 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d  ;.char *sqlite3M
21990 41 70 70 65 6e 64 66 28 73 71 6c 69 74 65 33 2a  Appendf(sqlite3*
219a0 2c 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61  ,char*,const cha
219b0 72 2a 2c 2e 2e 2e 29 3b 0a 23 69 66 20 64 65 66  r*,...);.#if def
219c0 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
219d0 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
219e0 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69  ITE_DEBUG).  voi
219f0 64 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72  d sqlite3DebugPr
21a00 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a  intf(const char*
21a10 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23  , ...);.#endif.#
21a20 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
21a30 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a  E_TEST).  void *
21a40 73 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54  sqlite3TestTextT
21a50 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a  oPtr(const char*
21a60 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64  );.#endif..#if d
21a70 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
21a80 42 55 47 29 0a 20 20 54 72 65 65 56 69 65 77 20  BUG).  TreeView 
21a90 2a 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77  *sqlite3TreeView
21aa0 50 75 73 68 28 54 72 65 65 56 69 65 77 2a 2c 75  Push(TreeView*,u
21ab0 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  8);.  void sqlit
21ac0 65 33 54 72 65 65 56 69 65 77 50 6f 70 28 54 72  e3TreeViewPop(Tr
21ad0 65 65 56 69 65 77 2a 29 3b 0a 20 20 76 6f 69 64  eeView*);.  void
21ae0 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
21af0 4c 69 6e 65 28 54 72 65 65 56 69 65 77 2a 2c 20  Line(TreeView*, 
21b00 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
21b10 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
21b20 33 54 72 65 65 56 69 65 77 49 74 65 6d 28 54 72  3TreeViewItem(Tr
21b30 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 63  eeView*, const c
21b40 68 61 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69  har*, u8);.  voi
21b50 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
21b60 77 45 78 70 72 28 54 72 65 65 56 69 65 77 2a 2c  wExpr(TreeView*,
21b70 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75 38   const Expr*, u8
21b80 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
21b90 33 54 72 65 65 56 69 65 77 45 78 70 72 4c 69 73  3TreeViewExprLis
21ba0 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  t(TreeView*, con
21bb0 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 75 38  st ExprList*, u8
21bc0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
21bd0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
21be0 65 65 56 69 65 77 53 65 6c 65 63 74 28 54 72 65  eeViewSelect(Tre
21bf0 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65  eView*, const Se
21c00 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 23 65 6e 64  lect*, u8);.#end
21c10 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  if...void sqlite
21c20 33 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20  3SetString(char 
21c30 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f  **, sqlite3*, co
21c40 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
21c50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
21c60 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f  orMsg(Parse*, co
21c70 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
21c80 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 71 75  .int sqlite3Dequ
21c90 6f 74 65 28 63 68 61 72 2a 29 3b 0a 69 6e 74 20  ote(char*);.int 
21ca0 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f  sqlite3KeywordCo
21cb0 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  de(const unsigne
21cc0 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69  d char*, int);.i
21cd0 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72  nt sqlite3RunPar
21ce0 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  ser(Parse*, cons
21cf0 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a  t char*, char **
21d00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  );.void sqlite3F
21d10 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73  inishCoding(Pars
21d20 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
21d30 47 65 74 54 65 6d 70 52 65 67 28 50 61 72 73 65  GetTempReg(Parse
21d40 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21d50 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50  ReleaseTempReg(P
21d60 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20  arse*,int);.int 
21d70 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61  sqlite3GetTempRa
21d80 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  nge(Parse*,int);
21d90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c  .void sqlite3Rel
21da0 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61  easeTempRange(Pa
21db0 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76  rse*,int,int);.v
21dc0 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72  oid sqlite3Clear
21dd0 54 65 6d 70 52 65 67 43 61 63 68 65 28 50 61 72  TempRegCache(Par
21de0 73 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  se*);.Expr *sqli
21df0 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c  te3ExprAlloc(sql
21e00 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
21e10 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70  Token*,int);.Exp
21e20 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73  r *sqlite3Expr(s
21e30 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
21e40 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
21e50 71 6c 69 74 65 33 45 78 70 72 41 74 74 61 63 68  qlite3ExprAttach
21e60 53 75 62 74 72 65 65 73 28 73 71 6c 69 74 65 33  Subtrees(sqlite3
21e70 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78  *,Expr*,Expr*,Ex
21e80 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
21e90 74 65 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c  te3PExpr(Parse*,
21ea0 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70   int, Expr*, Exp
21eb0 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
21ec0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
21ed0 45 78 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a  ExprAnd(sqlite3*
21ee0 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  ,Expr*, Expr*);.
21ef0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
21f00 72 46 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a  rFunction(Parse*
21f10 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65  ,ExprList*, Toke
21f20 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
21f30 33 45 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75  3ExprAssignVarNu
21f40 6d 62 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70  mber(Parse*, Exp
21f50 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
21f60 33 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69  3ExprDelete(sqli
21f70 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78  te3*, Expr*);.Ex
21f80 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45  prList *sqlite3E
21f90 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61  xprListAppend(Pa
21fa0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  rse*,ExprList*,E
21fb0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
21fc0 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61  te3ExprListSetNa
21fd0 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  me(Parse*,ExprLi
21fe0 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  st*,Token*,int);
21ff0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
22000 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50 61 72  rListSetSpan(Par
22010 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  se*,ExprList*,Ex
22020 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73  prSpan*);.void s
22030 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 65  qlite3ExprListDe
22040 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45  lete(sqlite3*, E
22050 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33 32 20 73  xprList*);.u32 s
22060 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 46 6c  qlite3ExprListFl
22070 61 67 73 28 63 6f 6e 73 74 20 45 78 70 72 4c 69  ags(const ExprLi
22080 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
22090 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20  3Init(sqlite3*, 
220a0 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  char**);.int sql
220b0 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
220c0 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61  (void*, int, cha
220d0 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f  r**, char**);.vo
220e0 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61  id sqlite3Pragma
220f0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
22100 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
22110 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
22120 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66  esetAllSchemasOf
22130 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74  Connection(sqlit
22140 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
22150 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61  e3ResetOneSchema
22160 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
22170 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c  void sqlite3Coll
22180 61 70 73 65 44 61 74 61 62 61 73 65 41 72 72 61  apseDatabaseArra
22190 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  y(sqlite3*);.voi
221a0 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 50 61  d sqlite3BeginPa
221b0 72 73 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  rse(Parse*,int);
221c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
221d0 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67  mitInternalChang
221e0 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 54 61  es(sqlite3*);.Ta
221f0 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75  ble *sqlite3Resu
22200 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61  ltSetOfSelect(Pa
22210 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76  rse*,Select*);.v
22220 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d  oid sqlite3OpenM
22230 61 73 74 65 72 54 61 62 6c 65 28 50 61 72 73 65  asterTable(Parse
22240 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20   *, int);.Index 
22250 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b  *sqlite3PrimaryK
22260 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b  eyIndex(Table*);
22270 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75  .i16 sqlite3Colu
22280 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a  mnOfIndex(Index*
22290 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c  , i16);.void sql
222a0 69 74 65 33 53 74 61 72 74 54 61 62 6c 65 28 50  ite3StartTable(P
222b0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
222c0 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  en*,int,int,int,
222d0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
222e0 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  e3AddColumn(Pars
222f0 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  e*,Token*);.void
22300 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75   sqlite3AddNotNu
22310 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ll(Parse*, int);
22320 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
22330 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65  PrimaryKey(Parse
22340 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
22350 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
22360 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 68 65  id sqlite3AddChe
22370 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ckConstraint(Par
22380 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
22390 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75  d sqlite3AddColu
223a0 6d 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 54 6f  mnType(Parse*,To
223b0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
223c0 74 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c  te3AddDefaultVal
223d0 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72 53 70  ue(Parse*,ExprSp
223e0 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  an*);.void sqlit
223f0 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65  e3AddCollateType
22400 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
22410 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e  ;.void sqlite3En
22420 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f  dTable(Parse*,To
22430 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53  ken*,Token*,u8,S
22440 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
22450 69 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e  ite3ParseUri(con
22460 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
22470 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e  har*,unsigned in
22480 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
22490 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
224a0 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61  vfs**,char**,cha
224b0 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71  r **);.Btree *sq
224c0 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72  lite3DbNameToBtr
224d0 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ee(sqlite3*,cons
224e0 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
224f0 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65 28 50 61  lite3CodeOnce(Pa
22500 72 73 65 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20  rse *);..#ifdef 
22510 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
22520 54 49 4e 5f 54 45 53 54 0a 23 20 64 65 66 69 6e  TIN_TEST.# defin
22530 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  e sqlite3FaultSi
22540 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  m(X) SQLITE_OK.#
22550 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74  else.  int sqlit
22560 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b  e3FaultSim(int);
22570 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20  .#endif..Bitvec 
22580 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 72  *sqlite3BitvecCr
22590 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73  eate(u32);.int s
225a0 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74  qlite3BitvecTest
225b0 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
225c0 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
225d0 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33  cSet(Bitvec*, u3
225e0 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  2);.void sqlite3
225f0 42 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76  BitvecClear(Bitv
22600 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29  ec*, u32, void*)
22610 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69  ;.void sqlite3Bi
22620 74 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76  tvecDestroy(Bitv
22630 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  ec*);.u32 sqlite
22640 33 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76  3BitvecSize(Bitv
22650 65 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ec*);.int sqlite
22660 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65  3BitvecBuiltinTe
22670 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a 52  st(int,int*);..R
22680 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f  owSet *sqlite3Ro
22690 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33  wSetInit(sqlite3
226a0 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e  *, void*, unsign
226b0 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  ed int);.void sq
226c0 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72  lite3RowSetClear
226d0 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20  (RowSet*);.void 
226e0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73  sqlite3RowSetIns
226f0 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34  ert(RowSet*, i64
22700 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
22710 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a  wSetTest(RowSet*
22720 2c 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36  , int iBatch, i6
22730 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
22740 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74  owSetNext(RowSet
22750 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20  *, i64*);..void 
22760 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65  sqlite3CreateVie
22770 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  w(Parse*,Token*,
22780 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65  Token*,Token*,Se
22790 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  lect*,int,int);.
227a0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
227b0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
227c0 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  || !defined(SQLI
227d0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
227e0 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69  ABLE).  int sqli
227f0 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
22800 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62  Names(Parse*,Tab
22810 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  le*);.#else.# de
22820 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77  fine sqlite3View
22830 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41  GetColumnNames(A
22840 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69  ,B) 0.#endif..#i
22850 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  f SQLITE_MAX_ATT
22860 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20 73  ACHED>30.  int s
22870 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
22880 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65  ero(yDbMask);.#e
22890 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
228a0 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  3DropTable(Parse
228b0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
228c0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
228d0 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c  ite3CodeDropTabl
228e0 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  e(Parse*, Table*
228f0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
22900 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
22910 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
22920 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20  able*);.#ifndef 
22930 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
22940 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64  INCREMENT.  void
22950 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
22960 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65  ementBegin(Parse
22970 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69   *pParse);.  voi
22980 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  d sqlite3Autoinc
22990 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20  rementEnd(Parse 
229a0 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a  *pParse);.#else.
229b0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
229c0 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67  AutoincrementBeg
229d0 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73  in(X).# define s
229e0 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
229f0 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66  entEnd(X).#endif
22a00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73  .void sqlite3Ins
22a10 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ert(Parse*, SrcL
22a20 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49  ist*, Select*, I
22a30 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f  dList*, int);.vo
22a40 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79  id *sqlite3Array
22a50 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33  Allocate(sqlite3
22a60 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a  *,void*,int,int*
22a70 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a  ,int*);.IdList *
22a80 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70  sqlite3IdListApp
22a90 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 49 64  end(sqlite3*, Id
22aa0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
22ab0 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73  int sqlite3IdLis
22ac0 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63  tIndex(IdList*,c
22ad0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63  onst char*);.Src
22ae0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
22af0 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71 6c 69  ListEnlarge(sqli
22b00 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  te3*, SrcList*, 
22b10 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69  int, int);.SrcLi
22b20 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
22b30 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33  stAppend(sqlite3
22b40 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
22b50 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72  en*, Token*);.Sr
22b60 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
22b70 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54  cListAppendFromT
22b80 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  erm(Parse*, SrcL
22b90 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
22ba0 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ken*,.          
22bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bc0 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65              Toke
22bd0 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70  n*, Select*, Exp
22be0 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f  r*, IdList*);.vo
22bf0 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
22c00 74 49 6e 64 65 78 65 64 42 79 28 50 61 72 73 65  tIndexedBy(Parse
22c10 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54   *, SrcList *, T
22c20 6f 6b 65 6e 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  oken *);.int sql
22c30 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f  ite3IndexedByLoo
22c40 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72  kup(Parse *, str
22c50 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
22c60 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
22c70 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69  3SrcListShiftJoi
22c80 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b  nType(SrcList*);
22c90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
22ca0 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72  ListAssignCursor
22cb0 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  s(Parse*, SrcLis
22cc0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
22cd0 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71  3IdListDelete(sq
22ce0 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29  lite3*, IdList*)
22cf0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
22d00 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  cListDelete(sqli
22d10 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  te3*, SrcList*);
22d20 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 41  .Index *sqlite3A
22d30 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a 65  llocateIndexObje
22d40 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c  ct(sqlite3*,i16,
22d50 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 49 6e 64  int,char**);.Ind
22d60 65 78 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  ex *sqlite3Creat
22d70 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f  eIndex(Parse*,To
22d80 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c  ken*,Token*,SrcL
22d90 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  ist*,ExprList*,i
22da0 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  nt,Token*,.     
22db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22dc0 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c       Expr*, int,
22dd0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
22de0 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72  te3DropIndex(Par
22df0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
22e00 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
22e10 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53  Select(Parse*, S
22e20 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65  elect*, SelectDe
22e30 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
22e40 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50  lite3SelectNew(P
22e50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
22e60 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
22e70 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20  xprList*,.      
22e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e90 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73     Expr*,ExprLis
22ea0 74 2a 2c 75 31 36 2c 45 78 70 72 2a 2c 45 78 70  t*,u16,Expr*,Exp
22eb0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
22ec0 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71  3SelectDelete(sq
22ed0 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29  lite3*, Select*)
22ee0 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
22ef0 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61  SrcListLookup(Pa
22f00 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  rse*, SrcList*);
22f10 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65  .int sqlite3IsRe
22f20 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54  adOnly(Parse*, T
22f30 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  able*, int);.voi
22f40 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62  d sqlite3OpenTab
22f50 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69  le(Parse*, int i
22f60 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61  Cur, int iDb, Ta
22f70 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20  ble*, int);.#if 
22f80 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
22f90 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c  NABLE_UPDATE_DEL
22fa0 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64  ETE_LIMIT) && !d
22fb0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
22fc0 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70  IT_SUBQUERY).Exp
22fd0 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57  r *sqlite3LimitW
22fe0 68 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c  here(Parse*,SrcL
22ff0 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
23000 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  ist*,Expr*,Expr*
23010 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a  ,char*);.#endif.
23020 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
23030 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53  teFrom(Parse*, S
23040 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b  rcList*, Expr*);
23050 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64  .void sqlite3Upd
23060 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ate(Parse*, SrcL
23070 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ist*, ExprList*,
23080 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68   Expr*, int);.Wh
23090 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  ereInfo *sqlite3
230a0 57 68 65 72 65 42 65 67 69 6e 28 50 61 72 73 65  WhereBegin(Parse
230b0 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
230c0 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c  ,ExprList*,ExprL
230d0 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76  ist*,u16,int);.v
230e0 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65 72 65  oid sqlite3Where
230f0 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  End(WhereInfo*);
23100 0a 75 36 34 20 73 71 6c 69 74 65 33 57 68 65 72  .u64 sqlite3Wher
23110 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28  eOutputRowCount(
23120 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
23130 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44   sqlite3WhereIsD
23140 69 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66  istinct(WhereInf
23150 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
23160 57 68 65 72 65 49 73 4f 72 64 65 72 65 64 28 57  WhereIsOrdered(W
23170 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
23180 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f  sqlite3WhereIsSo
23190 72 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  rted(WhereInfo*)
231a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
231b0 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28  reContinueLabel(
231c0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
231d0 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65   sqlite3WhereBre
231e0 61 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66  akLabel(WhereInf
231f0 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
23200 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57  WhereOkOnePass(W
23210 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29  hereInfo*, int*)
23220 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
23230 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50  rCodeGetColumn(P
23240 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
23250 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  nt, int, int, u8
23260 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
23270 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
23280 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54  OfTable(Vdbe*, T
23290 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
232a0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
232b0 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28  te3ExprCodeMove(
232c0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
232d0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
232e0 69 74 65 33 45 78 70 72 43 61 63 68 65 53 74 6f  ite3ExprCacheSto
232f0 72 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  re(Parse*, int, 
23300 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
23310 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
23320 50 75 73 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f  Push(Parse*);.vo
23330 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
23340 63 68 65 50 6f 70 28 50 61 72 73 65 2a 29 3b 0a  chePop(Parse*);.
23350 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23360 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73  CacheRemove(Pars
23370 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
23380 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
23390 61 63 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a  acheClear(Parse*
233a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
233b0 78 70 72 43 61 63 68 65 41 66 66 69 6e 69 74 79  xprCacheAffinity
233c0 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69  Change(Parse*, i
233d0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
233e0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50  qlite3ExprCode(P
233f0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
23400 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
23410 45 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62  ExprCodeFactorab
23420 6c 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  le(Parse*, Expr*
23430 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
23440 69 74 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e  ite3ExprCodeAtIn
23450 69 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  it(Parse*, Expr*
23460 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
23470 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54  sqlite3ExprCodeT
23480 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72  emp(Parse*, Expr
23490 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
234a0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 61 72  lite3ExprCodeTar
234b0 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  get(Parse*, Expr
234c0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
234d0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64  lite3ExprCodeAnd
234e0 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78  Cache(Parse*, Ex
234f0 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
23500 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45 78  qlite3ExprCodeEx
23510 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45  prList(Parse*, E
23520 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 75  xprList*, int, u
23530 38 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  8);.#define SQLI
23540 54 45 5f 45 43 45 4c 5f 44 55 50 20 20 20 20 20  TE_ECEL_DUP     
23550 20 30 78 30 31 20 20 2f 2a 20 44 65 65 70 2c 20   0x01  /* Deep, 
23560 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69  not shallow copi
23570 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
23580 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52  LITE_ECEL_FACTOR
23590 20 20 20 30 78 30 32 20 20 2f 2a 20 46 61 63 74     0x02  /* Fact
235a0 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20  or out constant 
235b0 74 65 72 6d 73 20 2a 2f 0a 76 6f 69 64 20 73 71  terms */.void sq
235c0 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28  lite3ExprIfTrue(
235d0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
235e0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
235f0 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73  qlite3ExprIfFals
23600 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
23610 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c   int, int);.Tabl
23620 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61  e *sqlite3FindTa
23630 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ble(sqlite3*,con
23640 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
23650 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  char*);.Table *s
23660 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c  qlite3LocateTabl
23670 65 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56  e(Parse*,int isV
23680 69 65 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  iew,const char*,
23690 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54   const char*);.T
236a0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63  able *sqlite3Loc
236b0 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72  ateTableItem(Par
236c0 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 73  se*,int isView,s
236d0 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
236e0 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71  em *);.Index *sq
236f0 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73  lite3FindIndex(s
23700 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
23710 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
23720 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
23730 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61  nlinkAndDeleteTa
23740 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ble(sqlite3*,int
23750 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
23760 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
23770 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28  kAndDeleteIndex(
23780 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
23790 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
237a0 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61  sqlite3Vacuum(Pa
237b0 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
237c0 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72  e3RunVacuum(char
237d0 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63  **, sqlite3*);.c
237e0 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65  har *sqlite3Name
237f0 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65  FromToken(sqlite
23800 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  3*, Token*);.int
23810 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70   sqlite3ExprComp
23820 61 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72 2a  are(Expr*, Expr*
23830 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
23840 74 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61  te3ExprListCompa
23850 72 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  re(ExprList*, Ex
23860 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69  prList*, int);.i
23870 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d  nt sqlite3ExprIm
23880 70 6c 69 65 73 45 78 70 72 28 45 78 70 72 2a 2c  pliesExpr(Expr*,
23890 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
238a0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e  id sqlite3ExprAn
238b0 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65 73 28  alyzeAggregates(
238c0 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
238d0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
238e0 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67  e3ExprAnalyzeAgg
238f0 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74  List(NameContext
23900 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  *,ExprList*);.in
23910 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f  t sqlite3Functio
23920 6e 55 73 65 73 54 68 69 73 53 72 63 28 45 78 70  nUsesThisSrc(Exp
23930 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56  r*, SrcList*);.V
23940 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56  dbe *sqlite3GetV
23950 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  dbe(Parse*);.voi
23960 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76  d sqlite3PrngSav
23970 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f  eState(void);.vo
23980 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65  id sqlite3PrngRe
23990 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29  storeState(void)
239a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
239b0 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65  llbackAll(sqlite
239c0 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
239d0 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
239e0 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e  chema(Parse*, in
239f0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
23a00 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53  CodeVerifyNamedS
23a10 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f  chema(Parse*, co
23a20 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a  nst char *zDb);.
23a30 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
23a40 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  nTransaction(Par
23a50 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
23a60 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72 61  sqlite3CommitTra
23a70 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29  nsaction(Parse*)
23a80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
23a90 6c 6c 62 61 63 6b 54 72 61 6e 73 61 63 74 69 6f  llbackTransactio
23aa0 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  n(Parse*);.void 
23ab0 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74  sqlite3Savepoint
23ac0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f  (Parse*, int, To
23ad0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
23ae0 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e  te3CloseSavepoin
23af0 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76  ts(sqlite3 *);.v
23b00 6f 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65  oid sqlite3Leave
23b10 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d  MutexAndCloseZom
23b20 62 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  bie(sqlite3*);.i
23b30 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
23b40 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b  Constant(Expr*);
23b50 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
23b60 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69  IsConstantNotJoi
23b70 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  n(Expr*);.int sq
23b80 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
23b90 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78  antOrFunction(Ex
23ba0 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  pr*, u8);.int sq
23bb0 6c 69 74 65 33 45 78 70 72 49 73 54 61 62 6c 65  lite3ExprIsTable
23bc0 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69  Constant(Expr*,i
23bd0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
23be0 45 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78  ExprIsInteger(Ex
23bf0 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  pr*, int*);.int 
23c00 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65  sqlite3ExprCanBe
23c10 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a  Null(const Expr*
23c20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
23c30 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74  prNeedsNoAffinit
23c40 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78  yChange(const Ex
23c50 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20  pr*, char);.int 
23c60 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63  sqlite3IsRowid(c
23c70 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
23c80 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
23c90 65 52 6f 77 44 65 6c 65 74 65 28 50 61 72 73 65  eRowDelete(Parse
23ca0 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72  *,Table*,Trigger
23cb0 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31  *,int,int,int,i1
23cc0 36 2c 75 38 2c 75 38 2c 75 38 29 3b 0a 76 6f 69  6,u8,u8,u8);.voi
23cd0 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
23ce0 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28  eRowIndexDelete(
23cf0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
23d00 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b  int, int, int*);
23d10 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65  .int sqlite3Gene
23d20 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72  rateIndexKey(Par
23d30 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74  se*, Index*, int
23d40 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
23d50 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Index*,int);.vo
23d60 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
23d70 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61  ePartIdxLabel(Pa
23d80 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
23d90 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43  sqlite3GenerateC
23da0 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28  onstraintChecks(
23db0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
23dc0 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  t*,int,int,int,i
23dd0 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt,.            
23de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23df0 20 20 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69           u8,u8,i
23e00 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73  nt,int*);.void s
23e10 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e  qlite3CompleteIn
23e20 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54  sertion(Parse*,T
23e30 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  able*,int,int,in
23e40 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69  t,int*,int,int,i
23e50 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
23e60 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69  OpenTableAndIndi
23e70 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ces(Parse*, Tabl
23e80 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  e*, int, int, u8
23e90 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a  *, int*, int*);.
23ea0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
23eb0 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28  nWriteOperation(
23ec0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
23ed0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
23ee0 75 6c 74 69 57 72 69 74 65 28 50 61 72 73 65 2a  ultiWrite(Parse*
23ef0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
23f00 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b  ayAbort(Parse*);
23f10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c  .void sqlite3Hal
23f20 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  tConstraint(Pars
23f30 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68  e*, int, int, ch
23f40 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f  ar*, i8, u8);.vo
23f50 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65  id sqlite3Unique
23f60 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
23f70 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b  *, int, Index*);
23f80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
23f90 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  idConstraint(Par
23fa0 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a  se*, int, Table*
23fb0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
23fc0 45 78 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a  ExprDup(sqlite3*
23fd0 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70  ,Expr*,int);.Exp
23fe0 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
23ff0 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  prListDup(sqlite
24000 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  3*,ExprList*,int
24010 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
24020 74 65 33 53 72 63 4c 69 73 74 44 75 70 28 73 71  te3SrcListDup(sq
24030 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c  lite3*,SrcList*,
24040 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71  int);.IdList *sq
24050 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70 28 73  lite3IdListDup(s
24060 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29  qlite3*,IdList*)
24070 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65  ;.Select *sqlite
24080 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74  3SelectDup(sqlit
24090 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29  e3*,Select*,int)
240a0 3b 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43  ;.#if SELECTTRAC
240b0 45 5f 45 4e 41 42 4c 45 44 0a 76 6f 69 64 20 73  E_ENABLED.void s
240c0 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e  qlite3SelectSetN
240d0 61 6d 65 28 53 65 6c 65 63 74 2a 2c 63 6f 6e 73  ame(Select*,cons
240e0 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a  t char*);.#else.
240f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24100 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 41 2c  SelectSetName(A,
24110 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  B).#endif.void s
24120 71 6c 69 74 65 33 46 75 6e 63 44 65 66 49 6e 73  qlite3FuncDefIns
24130 65 72 74 28 46 75 6e 63 44 65 66 48 61 73 68 2a  ert(FuncDefHash*
24140 2c 20 46 75 6e 63 44 65 66 2a 29 3b 0a 46 75 6e  , FuncDef*);.Fun
24150 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e  cDef *sqlite3Fin
24160 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
24170 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  3*,const char*,i
24180 6e 74 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76  nt,int,u8,u8);.v
24190 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
241a0 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  terBuiltinFuncti
241b0 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ons(sqlite3*);.v
241c0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
241d0 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74  terDateTimeFunct
241e0 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ions(void);.void
241f0 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
24200 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 28  GlobalFunctions(
24210 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74  void);.int sqlit
24220 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28  e3SafetyCheckOk(
24230 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
24240 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
24250 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65  kSickOrOk(sqlite
24260 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
24270 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61  3ChangeCookie(Pa
24280 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66  rse*, int);..#if
24290 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
242a0 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21  _OMIT_VIEW) && !
242b0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
242c0 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69  MIT_TRIGGER).voi
242d0 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61  d sqlite3Materia
242e0 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c  lizeView(Parse*,
242f0 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20   Table*, Expr*, 
24300 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  int);.#endif..#i
24310 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
24320 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64  T_TRIGGER.  void
24330 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69   sqlite3BeginTri
24340 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b  gger(Parse*, Tok
24350 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69  en*,Token*,int,i
24360 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69  nt,IdList*,SrcLi
24370 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
24380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24390 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b  Expr*,int, int);
243a0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
243b0 69 6e 69 73 68 54 72 69 67 67 65 72 28 50 61 72  inishTrigger(Par
243c0 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  se*, TriggerStep
243d0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f  *, Token*);.  vo
243e0 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  id sqlite3DropTr
243f0 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72  igger(Parse*, Sr
24400 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  cList*, int);.  
24410 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
24420 54 72 69 67 67 65 72 50 74 72 28 50 61 72 73 65  TriggerPtr(Parse
24430 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
24440 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33  Trigger *sqlite3
24450 54 72 69 67 67 65 72 73 45 78 69 73 74 28 50 61  TriggersExist(Pa
24460 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  rse *, Table*, i
24470 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  nt, ExprList*, i
24480 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72  nt *pMask);.  Tr
24490 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72  igger *sqlite3Tr
244a0 69 67 67 65 72 4c 69 73 74 28 50 61 72 73 65 20  iggerList(Parse 
244b0 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76  *, Table *);.  v
244c0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52  oid sqlite3CodeR
244d0 6f 77 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  owTrigger(Parse*
244e0 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74  , Trigger *, int
244f0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
24500 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20  , Table *,.     
24510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24520 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c         int, int,
24530 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
24540 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
24550 67 65 72 44 69 72 65 63 74 28 50 61 72 73 65 20  gerDirect(Parse 
24560 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61  *, Trigger *, Ta
24570 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ble *, int, int,
24580 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
24590 6c 69 74 65 56 69 65 77 54 72 69 67 67 65 72 73  liteViewTriggers
245a0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
245b0 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70   Expr*, int, Exp
245c0 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20  rList*);.  void 
245d0 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
245e0 67 67 65 72 53 74 65 70 28 73 71 6c 69 74 65 33  ggerStep(sqlite3
245f0 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29  *, TriggerStep*)
24600 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
24610 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 53  *sqlite3TriggerS
24620 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69 74 65  electStep(sqlite
24630 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54  3*,Select*);.  T
24640 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
24650 74 65 33 54 72 69 67 67 65 72 49 6e 73 65 72 74  te3TriggerInsert
24660 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f  Step(sqlite3*,To
24670 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20  ken*, IdList*,. 
24680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246a0 20 20 20 20 20 20 20 53 65 6c 65 63 74 2a 2c 75         Select*,u
246b0 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  8);.  TriggerSte
246c0 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
246d0 72 55 70 64 61 74 65 53 74 65 70 28 73 71 6c 69  rUpdateStep(sqli
246e0 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  te3*,Token*,Expr
246f0 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38  List*, Expr*, u8
24700 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
24710 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
24720 44 65 6c 65 74 65 53 74 65 70 28 73 71 6c 69 74  DeleteStep(sqlit
24730 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72  e3*,Token*, Expr
24740 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
24750 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  e3DeleteTrigger(
24760 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65  sqlite3*, Trigge
24770 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
24780 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
24790 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65  teTrigger(sqlite
247a0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
247b0 72 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74  r*);.  u32 sqlit
247c0 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b  e3TriggerColmask
247d0 28 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a  (Parse*,Trigger*
247e0 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69  ,ExprList*,int,i
247f0 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a  nt,Table*,int);.
24800 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24810 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29  ParseToplevel(p)
24820 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c   ((p)->pToplevel
24830 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65   ? (p)->pTopleve
24840 6c 20 3a 20 28 70 29 29 0a 23 65 6c 73 65 0a 23  l : (p)).#else.#
24850 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
24860 72 69 67 67 65 72 73 45 78 69 73 74 28 42 2c 43  riggersExist(B,C
24870 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69  ,D,E,F) 0.# defi
24880 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  ne sqlite3Delete
24890 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64  Trigger(A,B).# d
248a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f  efine sqlite3Dro
248b0 70 54 72 69 67 67 65 72 50 74 72 28 41 2c 42 29  pTriggerPtr(A,B)
248c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
248d0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
248e0 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23  Trigger(A,B,C).#
248f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
24900 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c  odeRowTrigger(A,
24910 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29  B,C,D,E,F,G,H,I)
24920 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24930 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44  3CodeRowTriggerD
24940 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c  irect(A,B,C,D,E,
24950 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  F).# define sqli
24960 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 58  te3TriggerList(X
24970 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20  , Y) 0.# define 
24980 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c  sqlite3ParseTopl
24990 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69  evel(p) p.# defi
249a0 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
249b0 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44  rColmask(A,B,C,D
249c0 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66  ,E,F,G) 0.#endif
249d0 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69  ..int sqlite3Joi
249e0 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f  nType(Parse*, To
249f0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ken*, Token*, To
24a00 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
24a10 74 65 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e  te3CreateForeign
24a20 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Key(Parse*, Expr
24a30 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45  List*, Token*, E
24a40 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  xprList*, int);.
24a50 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 65  void sqlite3Defe
24a60 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73  rForeignKey(Pars
24a70 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65  e*, int);.#ifnde
24a80 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
24a90 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f  THORIZATION.  vo
24aa0 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  id sqlite3AuthRe
24ab0 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  ad(Parse*,Expr*,
24ac0 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a  Schema*,SrcList*
24ad0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
24ae0 41 75 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a  AuthCheck(Parse*
24af0 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72  ,int, const char
24b00 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
24b10 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
24b20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
24b30 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72 73  ContextPush(Pars
24b40 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a  e*, AuthContext*
24b50 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
24b60 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
24b70 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74  thContextPop(Aut
24b80 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e  hContext*);.  in
24b90 74 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  t sqlite3AuthRea
24ba0 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e  dCol(Parse*, con
24bb0 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74  st char *, const
24bc0 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23   char *, int);.#
24bd0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
24be0 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 61 2c  lite3AuthRead(a,
24bf0 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20  b,c,d).# define 
24c00 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b  sqlite3AuthCheck
24c10 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53  (a,b,c,d,e)    S
24c20 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e  QLITE_OK.# defin
24c30 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  e sqlite3AuthCon
24c40 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a  textPush(a,b,c).
24c50 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24c60 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61  AuthContextPop(a
24c70 29 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23  )  ((void)(a)).#
24c80 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
24c90 65 33 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c  e3Attach(Parse*,
24ca0 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45   Expr*, Expr*, E
24cb0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
24cc0 74 65 33 44 65 74 61 63 68 28 50 61 72 73 65 2a  te3Detach(Parse*
24cd0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
24ce0 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44 62  qlite3FixInit(Db
24cf0 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20  Fixer*, Parse*, 
24d00 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
24d10 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b  , const Token*);
24d20 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53  .int sqlite3FixS
24d30 72 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c  rcList(DbFixer*,
24d40 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20   SrcList*);.int 
24d50 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74  sqlite3FixSelect
24d60 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63  (DbFixer*, Selec
24d70 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
24d80 46 69 78 45 78 70 72 28 44 62 46 69 78 65 72 2a  FixExpr(DbFixer*
24d90 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
24da0 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69 73 74  lite3FixExprList
24db0 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c  (DbFixer*, ExprL
24dc0 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
24dd0 65 33 46 69 78 54 72 69 67 67 65 72 53 74 65 70  e3FixTriggerStep
24de0 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67  (DbFixer*, Trigg
24df0 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71  erStep*);.int sq
24e00 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20  lite3AtoF(const 
24e10 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a  char *z, double*
24e20 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
24e30 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28  sqlite3GetInt32(
24e40 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
24e50 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
24e60 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a  Atoi(const char*
24e70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74  );.int sqlite3Ut
24e80 66 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74  f16ByteLen(const
24e90 20 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e   void *pData, in
24ea0 74 20 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71  t nChar);.int sq
24eb0 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e  lite3Utf8CharLen
24ec0 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61  (const char *pDa
24ed0 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a  ta, int nByte);.
24ee0 75 33 32 20 73 71 6c 69 74 65 33 55 74 66 38 52  u32 sqlite3Utf8R
24ef0 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b  ead(const u8**);
24f00 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
24f10 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45  ogEst(u64);.LogE
24f20 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  st sqlite3LogEst
24f30 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73  Add(LogEst,LogEs
24f40 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
24f50 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
24f60 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69  ABLE.LogEst sqli
24f70 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75  te3LogEstFromDou
24f80 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e  ble(double);.#en
24f90 64 69 66 0a 75 36 34 20 73 71 6c 69 74 65 33 4c  dif.u64 sqlite3L
24fa0 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73  ogEstToInt(LogEs
24fb0 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69  t);../*.** Routi
24fc0 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20  nes to read and 
24fd0 77 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c  write variable-l
24fe0 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20  ength integers. 
24ff0 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a   These used to.*
25000 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63  * be defined loc
25010 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65  ally, but now we
25020 20 75 73 65 20 74 68 65 20 76 61 72 69 6e 74 20   use the varint 
25030 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20  routines in the 
25040 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a  util.c.** file..
25050 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75  */.int sqlite3Pu
25060 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64  tVarint(unsigned
25070 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38   char*, u64);.u8
25080 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
25090 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  t(const unsigned
250a0 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b   char *, u64 *);
250b0 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61  .u8 sqlite3GetVa
250c0 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73  rint32(const uns
250d0 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33  igned char *, u3
250e0 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  2 *);.int sqlite
250f0 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76  3VarintLen(u64 v
25100 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f  );../*.** The co
25110 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72  mmon case is for
25120 20 61 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20   a varint to be 
25130 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20  a single byte.  
25140 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a  They following.*
25150 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20  * macros handle 
25160 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  the common case 
25170 77 69 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64  without a proced
25180 75 72 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68  ure call, but th
25190 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70  en call.** the p
251a0 72 6f 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72  rocedure for lar
251b0 67 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a  ger varints..*/.
251c0 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e  #define getVarin
251d0 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75  t32(A,B)  \.  (u
251e0 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38  8)((*(A)<(u8)0x8
251f0 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41  0)?((B)=(u32)*(A
25200 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56  )),1:sqlite3GetV
25210 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32  arint32((A),(u32
25220 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e   *)&(B))).#defin
25230 65 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c  e putVarint32(A,
25240 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75  B)  \.  (u8)(((u
25250 33 32 29 28 42 29 3c 28 75 33 32 29 30 78 38 30  32)(B)<(u32)0x80
25260 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65  )?(*(A)=(unsigne
25270 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a  d char)(B)),1:\.
25280 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69    sqlite3PutVari
25290 6e 74 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65  nt((A),(B))).#de
252a0 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20  fine getVarint  
252b0 20 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69    sqlite3GetVari
252c0 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61  nt.#define putVa
252d0 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50  rint    sqlite3P
252e0 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74  utVarint...const
252f0 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e   char *sqlite3In
25300 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 56  dexAffinityStr(V
25310 64 62 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b  dbe *, Index *);
25320 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62  .void sqlite3Tab
25330 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a  leAffinity(Vdbe*
25340 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
25350 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70  char sqlite3Comp
25360 61 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72  areAffinity(Expr
25370 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66   *pExpr, char af
25380 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  f2);.int sqlite3
25390 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28  IndexAffinityOk(
253a0 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61  Expr *pExpr, cha
253b0 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b  r idx_affinity);
253c0 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70  .char sqlite3Exp
253d0 72 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  rAffinity(Expr *
253e0 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69  pExpr);.int sqli
253f0 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20  te3Atoi64(const 
25400 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74  char*, i64*, int
25410 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
25420 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28  e3DecOrHexToI64(
25430 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34  const char*, i64
25440 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25450 45 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c  ErrorWithMsg(sql
25460 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
25470 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f  t char*,...);.vo
25480 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  id sqlite3Error(
25490 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
254a0 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54  oid *sqlite3HexT
254b0 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20  oBlob(sqlite3*, 
254c0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
254d0 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65  nt n);.u8 sqlite
254e0 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29  3HexToInt(int h)
254f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f  ;.int sqlite3Two
25500 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  PartName(Parse *
25510 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e  , Token *, Token
25520 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a   *, Token **);..
25530 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
25540 54 45 5f 54 45 53 54 29 20 0a 63 6f 6e 73 74 20  TE_TEST) .const 
25550 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72  char *sqlite3Err
25560 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69  Name(int);.#endi
25570 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  f..const char *s
25580 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74  qlite3ErrStr(int
25590 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
255a0 61 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a  adSchema(Parse *
255b0 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71  pParse);.CollSeq
255c0 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c   *sqlite3FindCol
255d0 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38  lSeq(sqlite3*,u8
255e0 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72   enc, const char
255f0 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20  *,int);.CollSeq 
25600 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f  *sqlite3LocateCo
25610 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
25620 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  rse, const char*
25630 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20  zName);.CollSeq 
25640 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c  *sqlite3ExprColl
25650 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
25660 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b  e, Expr *pExpr);
25670 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
25680 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65  prAddCollateToke
25690 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  n(Parse *pParse,
256a0 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   Expr*, const To
256b0 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72  ken*, int);.Expr
256c0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
256d0 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61  CollateString(Pa
256e0 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74  rse*,Expr*,const
256f0 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73   char*);.Expr *s
25700 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f  qlite3ExprSkipCo
25710 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e  llate(Expr*);.in
25720 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f  t sqlite3CheckCo
25730 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43  llSeq(Parse *, C
25740 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73  ollSeq *);.int s
25750 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63  qlite3CheckObjec
25760 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63  tName(Parse *, c
25770 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f  onst char *);.vo
25780 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  id sqlite3VdbeSe
25790 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  tChanges(sqlite3
257a0 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71   *, int);.int sq
257b0 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 69 36  lite3AddInt64(i6
257c0 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
257d0 69 74 65 33 53 75 62 49 6e 74 36 34 28 69 36 34  ite3SubInt64(i64
257e0 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
257f0 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a  te3MulInt64(i64*
25800 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
25810 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b  e3AbsInt32(int);
25820 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
25830 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a  NABLE_8_3_NAMES.
25840 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65  void sqlite3File
25850 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68  Suffix3(const ch
25860 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c  ar*, char*);.#el
25870 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
25880 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 58  te3FileSuffix3(X
25890 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71  ,Y).#endif.u8 sq
258a0 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
258b0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75 38  const char *z,u8
258c0 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  );..const void *
258d0 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74  sqlite3ValueText
258e0 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
258f0 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
25900 33 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69  3ValueBytes(sqli
25910 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b  te3_value*, u8);
25920 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
25930 75 65 53 65 74 53 74 72 28 73 71 6c 69 74 65 33  ueSetStr(sqlite3
25940 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f  _value*, int, co
25950 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a  nst void *,u8, .
25960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25970 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28          void(*)(
25980 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71  void*));.void sq
25990 6c 69 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c  lite3ValueSetNul
259a0 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  l(sqlite3_value*
259b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
259c0 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65 33  alueFree(sqlite3
259d0 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65  _value*);.sqlite
259e0 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33  3_value *sqlite3
259f0 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33  ValueNew(sqlite3
25a00 20 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74   *);.char *sqlit
25a10 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74  e3Utf16to8(sqlit
25a20 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64  e3 *, const void
25a30 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
25a40 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f   sqlite3ValueFro
25a50 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  mExpr(sqlite3 *,
25a60 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c   Expr *, u8, u8,
25a70 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
25a80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25a90 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
25aa0 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ty(sqlite3_value
25ab0 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66   *, u8, u8);.#if
25ac0 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  ndef SQLITE_AMAL
25ad0 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20  GAMATION.extern 
25ae0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
25af0 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64  har sqlite3Opcod
25b00 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74  eProperty[];.ext
25b10 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
25b20 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 55  ed char sqlite3U
25b30 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65  pperToLower[];.e
25b40 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
25b50 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
25b60 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74  3CtypeMap[];.ext
25b70 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20  ern const Token 
25b80 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73  sqlite3IntTokens
25b90 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54  [];.extern SQLIT
25ba0 45 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c  E_WSD struct Sql
25bb0 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74  ite3Config sqlit
25bc0 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e  e3Config;.extern
25bd0 20 53 51 4c 49 54 45 5f 57 53 44 20 46 75 6e 63   SQLITE_WSD Func
25be0 44 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 47  DefHash sqlite3G
25bf0 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a  lobalFunctions;.
25c00 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
25c10 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69  MIT_WSD.extern i
25c20 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e  nt sqlite3Pendin
25c30 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65  gByte;.#endif.#e
25c40 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
25c50 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73  3RootPageMoved(s
25c60 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e  qlite3*, int, in
25c70 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
25c80 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50 61 72  lite3Reindex(Par
25c90 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
25ca0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
25cb0 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73  e3AlterFunctions
25cc0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
25cd0 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54  ite3AlterRenameT
25ce0 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
25cf0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
25d00 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f  int sqlite3GetTo
25d10 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ken(const unsign
25d20 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a  ed char *, int *
25d30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e  );.void sqlite3N
25d40 65 73 74 65 64 50 61 72 73 65 28 50 61 72 73 65  estedParse(Parse
25d50 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
25d60 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
25d70 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
25d80 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74  Statements(sqlit
25d90 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
25da0 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50  3CodeSubselect(P
25db0 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
25dc0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
25dd0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65  sqlite3SelectPre
25de0 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  p(Parse*, Select
25df0 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29  *, NameContext*)
25e00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74  ;.int sqlite3Mat
25e10 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74  chSpanName(const
25e20 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
25e30 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
25e40 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
25e50 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
25e60 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65  veExprNames(Name
25e70 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
25e80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
25e90 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73  solveSelectNames
25ea0 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
25eb0 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b  , NameContext*);
25ec0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
25ed0 6f 6c 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63  olveSelfReferenc
25ee0 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  e(Parse*,Table*,
25ef0 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  int,Expr*,ExprLi
25f00 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
25f10 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f  3ResolveOrderGro
25f20 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c  upBy(Parse*, Sel
25f30 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ect*, ExprList*,
25f40 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
25f50 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  oid sqlite3Colum
25f60 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c  nDefault(Vdbe *,
25f70 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69   Table *, int, i
25f80 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25f90 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43  3AlterFinishAddC
25fa0 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54  olumn(Parse *, T
25fb0 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71  oken *);.void sq
25fc0 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41  lite3AlterBeginA
25fd0 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a  ddColumn(Parse *
25fe0 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f  , SrcList *);.Co
25ff0 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65  llSeq *sqlite3Ge
26000 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c  tCollSeq(Parse*,
26010 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20   u8, CollSeq *, 
26020 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
26030 61 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69  ar sqlite3Affini
26040 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61  tyType(const cha
26050 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73  r*, u8*);.void s
26060 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61  qlite3Analyze(Pa
26070 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
26080 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
26090 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64  e3InvokeBusyHand
260a0 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a  ler(BusyHandler*
260b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
260c0 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54  ndDb(sqlite3*, T
260d0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
260e0 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71  te3FindDbName(sq
260f0 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
26100 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
26110 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28  te3AnalysisLoad(
26120 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42  sqlite3*,int iDB
26130 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
26140 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65  eleteIndexSample
26150 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78  s(sqlite3*,Index
26160 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26170 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e  DefaultRowEst(In
26180 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
26190 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46  te3RegisterLikeF
261a0 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33  unctions(sqlite3
261b0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
261c0 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69  ite3IsLikeFuncti
261d0 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  on(sqlite3*,Expr
261e0 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76  *,int*,char*);.v
261f0 6f 69 64 20 73 71 6c 69 74 65 33 4d 69 6e 69 6d  oid sqlite3Minim
26200 75 6d 46 69 6c 65 46 6f 72 6d 61 74 28 50 61 72  umFileFormat(Par
26210 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
26220 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68 65  void sqlite3Sche
26230 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b  maClear(void *);
26240 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33  .Schema *sqlite3
26250 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65  SchemaGet(sqlite
26260 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69  3 *, Btree *);.i
26270 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  nt sqlite3Schema
26280 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20  ToIndex(sqlite3 
26290 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a  *db, Schema *);.
262a0 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
262b0 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c  KeyInfoAlloc(sql
262c0 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  ite3*,int,int);.
262d0 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49  void sqlite3KeyI
262e0 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f  nfoUnref(KeyInfo
262f0 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
26300 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b  ite3KeyInfoRef(K
26310 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66  eyInfo*);.KeyInf
26320 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
26330 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  oOfIndex(Parse*,
26340 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65 66   Index*);.#ifdef
26350 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e   SQLITE_DEBUG.in
26360 74 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f  t sqlite3KeyInfo
26370 49 73 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49  IsWriteable(KeyI
26380 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  nfo*);.#endif.in
26390 74 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46  t sqlite3CreateF
263a0 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  unc(sqlite3 *, c
263b0 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
263c0 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a  , int, void *, .
263d0 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
263e0 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
263f0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
26400 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71  ),.  void (*)(sq
26410 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
26420 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
26430 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73   **), void (*)(s
26440 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
26450 2c 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74  ,.  FuncDestruct
26460 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a  or *pDestructor.
26470 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70  );.int sqlite3Ap
26480 69 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64  iExit(sqlite3 *d
26490 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  b, int);.int sql
264a0 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61  ite3OpenTempData
264b0 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a  base(Parse *);..
264c0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
264d0 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75  ccumInit(StrAccu
264e0 6d 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20  m*, char*, int, 
264f0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
26500 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
26510 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74  (StrAccum*,const
26520 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69   char*,int);.voi
26530 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
26540 6d 41 70 70 65 6e 64 41 6c 6c 28 53 74 72 41 63  mAppendAll(StrAc
26550 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  cum*,const char*
26560 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
26570 70 70 65 6e 64 43 68 61 72 28 53 74 72 41 63 63  ppendChar(StrAcc
26580 75 6d 2a 2c 69 6e 74 2c 63 68 61 72 29 3b 0a 63  um*,int,char);.c
26590 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41  har *sqlite3StrA
265a0 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63  ccumFinish(StrAc
265b0 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
265c0 74 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74  te3StrAccumReset
265d0 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69  (StrAccum*);.voi
265e0 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
265f0 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65  estInit(SelectDe
26600 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78  st*,int,int);.Ex
26610 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  pr *sqlite3Creat
26620 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69  eColumnExpr(sqli
26630 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  te3 *, SrcList *
26640 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f  , int, int);..vo
26650 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70  id sqlite3Backup
26660 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f  Restart(sqlite3_
26670 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20  backup *);.void 
26680 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64  sqlite3BackupUpd
26690 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  ate(sqlite3_back
266a0 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73  up *, Pgno, cons
266b0 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 64 65 66  t u8 *);..#ifdef
266c0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
266d0 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f  TAT3_OR_STAT4.vo
266e0 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a  id sqlite3Analyz
266f0 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  eFunctions(void)
26700 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61  ;.int sqlite3Sta
26710 74 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28  t4ProbeSetValue(
26720 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e  Parse*,Index*,Un
26730 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45  packedRecord**,E
26740 78 70 72 2a 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a  xpr*,u8,int,int*
26750 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
26760 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78 70 72  at4ValueFromExpr
26770 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
26780 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  u8, sqlite3_valu
26790 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e**);.void sqlit
267a0 65 33 53 74 61 74 34 50 72 6f 62 65 46 72 65 65  e3Stat4ProbeFree
267b0 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a  (UnpackedRecord*
267c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
267d0 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65  at4Column(sqlite
267e0 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  3*, const void*,
267f0 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74   int, int, sqlit
26800 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 23 65 6e  e3_value**);.#en
26810 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69  dif../*.** The i
26820 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
26830 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20  LEMON-generated 
26840 70 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a  parser.*/.void *
26850 73 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c  sqlite3ParserAll
26860 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75 36 34 29  oc(void*(*)(u64)
26870 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
26880 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c  arserFree(void*,
26890 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29   void(*)(void*))
268a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
268b0 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  rser(void*, int,
268c0 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b   Token, Parse*);
268d0 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d  .#ifdef YYTRACKM
268e0 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69  AXSTACKDEPTH.  i
268f0 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  nt sqlite3Parser
26900 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29  StackPeak(void*)
26910 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73  ;.#endif..void s
26920 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78  qlite3AutoLoadEx
26930 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33  tensions(sqlite3
26940 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
26950 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54  TE_OMIT_LOAD_EXT
26960 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ENSION.  void sq
26970 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73  lite3CloseExtens
26980 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
26990 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
269a0 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
269b0 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a  sions(X).#endif.
269c0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
269d0 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
269e0 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  E.  void sqlite3
269f0 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20  TableLock(Parse 
26a00 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c  *, int, int, u8,
26a10 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
26a20 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
26a30 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
26a40 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64  (v,w,x,y,z).#end
26a50 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
26a60 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c  E_TEST.  int sql
26a70 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69  ite3Utf8To8(unsi
26a80 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e  gned char*);.#en
26a90 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
26aa0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
26ab0 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73  ABLE.#  define s
26ac0 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28  qlite3VtabClear(
26ad0 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  Y).#  define sql
26ae0 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59  ite3VtabSync(X,Y
26af0 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64  ) SQLITE_OK.#  d
26b00 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
26b10 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20  bRollback(X).#  
26b20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
26b30 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64  abCommit(X).#  d
26b40 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
26b50 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20  bInSync(db) 0.# 
26b60 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
26b70 74 61 62 4c 6f 63 6b 28 58 29 20 0a 23 20 20 64  tabLock(X) .#  d
26b80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
26b90 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65  bUnlock(X).#  de
26ba0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
26bb0 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20  UnlockList(X).# 
26bc0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
26bd0 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20  tabSavepoint(X, 
26be0 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  Y, Z) SQLITE_OK.
26bf0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
26c00 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20  3GetVTable(X,Y) 
26c10 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65   ((VTable*)0).#e
26c20 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  lse.   void sqli
26c30 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c  te3VtabClear(sql
26c40 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a  ite3 *db, Table*
26c50 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
26c60 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74  e3VtabDisconnect
26c70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61  (sqlite3 *db, Ta
26c80 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20  ble *p);.   int 
26c90 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28  sqlite3VtabSync(
26ca0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62  sqlite3 *db, Vdb
26cb0 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  e*);.   int sqli
26cc0 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
26cd0 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
26ce0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
26cf0 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a  Commit(sqlite3 *
26d00 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  db);.   void sql
26d10 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61  ite3VtabLock(VTa
26d20 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
26d30 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
26d40 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
26d50 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
26d60 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74  UnlockList(sqlit
26d70 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  e3*);.   int sql
26d80 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
26d90 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  t(sqlite3 *, int
26da0 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20  , int);.   void 
26db0 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
26dc0 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73  tErrmsg(Vdbe*, s
26dd0 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20  qlite3_vtab*);. 
26de0 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65    VTable *sqlite
26df0 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74  3GetVTable(sqlit
26e00 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 20  e3*, Table*);.# 
26e10 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
26e20 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28  tabInSync(db) ((
26e30 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26  db)->nVTrans>0 &
26e40 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d  & (db)->aVTrans=
26e50 3d 30 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  =0).#endif.void 
26e60 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57  sqlite3VtabMakeW
26e70 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  ritable(Parse*,T
26e80 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  able*);.void sql
26e90 69 74 65 33 56 74 61 62 42 65 67 69 6e 50 61 72  ite3VtabBeginPar
26ea0 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  se(Parse*, Token
26eb0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
26ec0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
26ed0 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73 68 50  lite3VtabFinishP
26ee0 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
26ef0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
26f00 65 33 56 74 61 62 41 72 67 49 6e 69 74 28 50 61  e3VtabArgInit(Pa
26f10 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
26f20 74 65 33 56 74 61 62 41 72 67 45 78 74 65 6e 64  te3VtabArgExtend
26f30 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
26f40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
26f50 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69  bCallCreate(sqli
26f60 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
26f70 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a   char *, char **
26f80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
26f90 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61  abCallConnect(Pa
26fa0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69  rse*, Table*);.i
26fb0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
26fc0 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65  llDestroy(sqlite
26fd0 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
26fe0 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
26ff0 74 65 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c  te3VtabBegin(sql
27000 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a  ite3 *, VTable *
27010 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69  );.FuncDef *sqli
27020 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64 46  te3VtabOverloadF
27030 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 20  unction(sqlite3 
27040 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20  *,FuncDef*, int 
27050 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  nArg, Expr*);.vo
27060 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61 6c 69  id sqlite3Invali
27070 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
27080 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
27090 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
270a0 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73  .sqlite3_int64 s
270b0 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72 65 6e  qlite3StmtCurren
270c0 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f  tTime(sqlite3_co
270d0 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  ntext*);.int sql
270e0 69 74 65 33 56 64 62 65 50 61 72 61 6d 65 74 65  ite3VdbeParamete
270f0 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f  rIndex(Vdbe*, co
27100 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  nst char*, int);
27110 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e  .int sqlite3Tran
27120 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c  sferBindings(sql
27130 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c  ite3_stmt *, sql
27140 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f  ite3_stmt *);.vo
27150 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
27160 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b 0a 69  Reset(Parse*);.i
27170 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65 70  nt sqlite3Reprep
27180 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64  are(Vdbe*);.void
27190 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
271a0 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73  CheckLength(Pars
271b0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  e*, ExprList*, c
271c0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c  onst char*);.Col
271d0 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e  lSeq *sqlite3Bin
271e0 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65  aryCompareCollSe
271f0 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  q(Parse *, Expr 
27200 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20  *, Expr *);.int 
27210 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d  sqlite3TempInMem
27220 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65  ory(const sqlite
27230 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20  3*);.const char 
27240 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d  *sqlite3JournalM
27250 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69  odename(int);.#i
27260 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
27270 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69  T_WAL.  int sqli
27280 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71  te3Checkpoint(sq
27290 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74  lite3*, int, int
272a0 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20  , int*, int*);. 
272b0 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44   int sqlite3WalD
272c0 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a  efaultHook(void*
272d0 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  ,sqlite3*,const 
272e0 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64  char*,int);.#end
272f0 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
27300 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69 74  E_OMIT_CTE.  Wit
27310 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41 64  h *sqlite3WithAd
27320 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54  d(Parse*,With*,T
27330 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
27340 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64  Select*);.  void
27350 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
27360 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74 68  te(sqlite3*,With
27370 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
27380 65 33 57 69 74 68 50 75 73 68 28 50 61 72 73 65  e3WithPush(Parse
27390 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23  *, With*, u8);.#
273a0 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c  else.#define sql
273b0 69 74 65 33 57 69 74 68 50 75 73 68 28 78 2c 79  ite3WithPush(x,y
273c0 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  ,z).#define sqli
273d0 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 78 2c  te3WithDelete(x,
273e0 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65  y).#endif../* De
273f0 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66  clarations for f
27400 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79  unctions in fkey
27410 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65  .c. All of these
27420 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79   are replaced by
27430 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73  .** no-op macros
27440 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e   if OMIT_FOREIGN
27450 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e  _KEY is defined.
27460 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f   In this case no
27470 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20   foreign.** key 
27480 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73  functionality is
27490 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f   available. If O
274a0 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73 20 64  MIT_TRIGGER is d
274b0 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d  efined but.** OM
274c0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
274d0 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65  s not, only some
274e0 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
274f0 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49  s are no-oped. I
27500 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66  n.** this case f
27510 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20  oreign keys are 
27520 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f  parsed, but no o
27530 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69  ther functionali
27540 74 79 20 69 73 20 0a 2a 2a 20 70 72 6f 76 69 64  ty is .** provid
27550 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20  ed (enforcement 
27560 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  of FK constraint
27570 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74  s requires the t
27580 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74  riggers sub-syst
27590 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  em)..*/.#if !def
275a0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
275b0 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26  _FOREIGN_KEY) &&
275c0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
275d0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20  _OMIT_TRIGGER). 
275e0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43   void sqlite3FkC
275f0 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  heck(Parse*, Tab
27600 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
27610 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  nt*, int);.  voi
27620 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54  d sqlite3FkDropT
27630 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
27640 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b  List *, Table*);
27650 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
27660 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c  kActions(Parse*,
27670 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73   Table*, ExprLis
27680 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  t*, int, int*, i
27690 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
276a0 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61 72  e3FkRequired(Par
276b0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
276c0 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73  *, int);.  u32 s
276d0 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
276e0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
276f0 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33  .  FKey *sqlite3
27700 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61 62  FkReferences(Tab
27710 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  le *);.#else.  #
27720 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
27730 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c  Actions(a,b,c,d,
27740 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
27750 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c  qlite3FkCheck(a,
27760 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65  b,c,d,e,f).  #de
27770 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72  fine sqlite3FkDr
27780 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20  opTable(a,b,c). 
27790 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
277a0 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20  FkOldmask(a,b)  
277b0 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66 69         0.  #defi
277c0 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  ne sqlite3FkRequ
277d0 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20  ired(a,b,c,d)   
277e0 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   0.#endif.#ifnde
277f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
27800 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64  REIGN_KEY.  void
27810 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65   sqlite3FkDelete
27820 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c  (sqlite3 *, Tabl
27830 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  e*);.  int sqlit
27840 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
27850 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b  Parse*,Table*,FK
27860 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a  ey*,Index**,int*
27870 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
27880 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65 6c  ine sqlite3FkDel
27890 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66 69  ete(a,b).  #defi
278a0 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61  ne sqlite3FkLoca
278b0 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c  teIndex(a,b,c,d,
278c0 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  e).#endif.../*.*
278d0 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c  * Available faul
278e0 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68  t injectors.  Sh
278f0 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64  ould be numbered
27900 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
27910 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  0..*/.#define SQ
27920 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54  LITE_FAULTINJECT
27930 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a  OR_MALLOC     0.
27940 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
27950 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55  AULTINJECTOR_COU
27960 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a  NT      1../*.**
27970 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74   The interface t
27980 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66 61  o the code in fa
27990 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20 69  ult.c used for i
279a0 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e 69  dentifying "beni
279b0 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61  gn".** malloc fa
279c0 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73 20  ilures. This is 
279d0 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66 20  only present if 
279e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
279f0 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73 20 6e  TIN_TEST.** is n
27a00 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23  ot defined..*/.#
27a10 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
27a20 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
27a30 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65    void sqlite3Be
27a40 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
27a50 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71  void);.  void sq
27a60 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
27a70 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73  lloc(void);.#els
27a80 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
27a90 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
27aa0 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e 65  lloc().  #define
27ab0 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
27ac0 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66  nMalloc().#endif
27ad0 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
27ae0 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72  return values fr
27af0 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  om sqlite3FindIn
27b00 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69  Index().*/.#defi
27b10 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49  ne IN_INDEX_ROWI
27b20 44 20 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20  D        1   /* 
27b30 53 65 61 72 63 68 20 74 68 65 20 72 6f 77 69 64  Search the rowid
27b40 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f   of the table */
27b50 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
27b60 58 5f 45 50 48 20 20 20 20 20 20 20 20 20 20 32  X_EPH          2
27b70 20 20 20 2f 2a 20 53 65 61 72 63 68 20 61 6e 20     /* Search an 
27b80 65 70 68 65 6d 65 72 61 6c 20 62 2d 74 72 65 65  ephemeral b-tree
27b90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
27ba0 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43 20 20  NDEX_INDEX_ASC  
27bb0 20 20 33 20 20 20 2f 2a 20 45 78 69 73 74 69 6e    3   /* Existin
27bc0 67 20 69 6e 64 65 78 20 41 53 43 45 4e 44 49 4e  g index ASCENDIN
27bd0 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  G */.#define IN_
27be0 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45 53 43  INDEX_INDEX_DESC
27bf0 20 20 20 34 20 20 20 2f 2a 20 45 78 69 73 74 69     4   /* Existi
27c00 6e 67 20 69 6e 64 65 78 20 44 45 53 43 45 4e 44  ng index DESCEND
27c10 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ING */.#define I
27c20 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20  N_INDEX_NOOP    
27c30 20 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74       5   /* No t
27c40 61 62 6c 65 20 61 76 61 69 6c 61 62 6c 65 2e 20  able available. 
27c50 55 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20  Use comparisons 
27c60 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  */./*.** Allowed
27c70 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20 33   flags for the 3
27c80 72 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  rd parameter to 
27c90 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
27ca0 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ex()..*/.#define
27cb0 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f   IN_INDEX_NOOP_O
27cc0 4b 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a  K     0x0001  /*
27cd0 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20 49 4e   OK to return IN
27ce0 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23  _INDEX_NOOP */.#
27cf0 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
27d00 4d 45 4d 42 45 52 53 48 49 50 20 20 30 78 30 30  MEMBERSHIP  0x00
27d10 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74  02  /* IN operat
27d20 6f 72 20 75 73 65 64 20 66 6f 72 20 6d 65 6d 62  or used for memb
27d30 65 72 73 68 69 70 20 74 65 73 74 20 2a 2f 0a 23  ership test */.#
27d40 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
27d50 4c 4f 4f 50 20 20 20 20 20 20 20 20 30 78 30 30  LOOP        0x00
27d60 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74  04  /* IN operat
27d70 6f 72 20 75 73 65 64 20 61 73 20 61 20 6c 6f 6f  or used as a loo
27d80 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  p */.int sqlite3
27d90 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72 73  FindInIndex(Pars
27da0 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 33 32  e *, Expr *, u32
27db0 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69 66 64 65 66  , int*);..#ifdef
27dc0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41   SQLITE_ENABLE_A
27dd0 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20 69 6e  TOMIC_WRITE.  in
27de0 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
27df0 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73  Open(sqlite3_vfs
27e00 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
27e10 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  , sqlite3_file *
27e20 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 69  , int, int);.  i
27e30 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
27e40 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f 76 66  lSize(sqlite3_vf
27e50 73 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  s *);.  int sqli
27e60 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65  te3JournalCreate
27e70 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
27e80 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  ;.  int sqlite3J
27e90 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 73 71 6c  ournalExists(sql
27ea0 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 23  ite3_file *p);.#
27eb0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
27ec0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a  qlite3JournalSiz
27ed0 65 28 70 56 66 73 29 20 28 28 70 56 66 73 29 2d  e(pVfs) ((pVfs)-
27ee0 3e 73 7a 4f 73 46 69 6c 65 29 0a 20 20 23 64 65  >szOsFile).  #de
27ef0 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72  fine sqlite3Jour
27f00 6e 61 6c 45 78 69 73 74 73 28 70 29 20 31 0a 23  nalExists(p) 1.#
27f10 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69  endif..void sqli
27f20 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65  te3MemJournalOpe
27f30 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  n(sqlite3_file *
27f40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  );.int sqlite3Me
27f50 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 76 6f 69  mJournalSize(voi
27f60 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  d);.int sqlite3I
27f70 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28 73 71 6c 69  sMemJournal(sqli
27f80 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f  te3_file *);..vo
27f90 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 53 65  id sqlite3ExprSe
27fa0 74 48 65 69 67 68 74 41 6e 64 46 6c 61 67 73 28  tHeightAndFlags(
27fb0 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
27fc0 78 70 72 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c  xpr *p);.#if SQL
27fd0 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
27fe0 54 48 3e 30 0a 20 20 69 6e 74 20 73 71 6c 69 74  TH>0.  int sqlit
27ff0 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67  e3SelectExprHeig
28000 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20  ht(Select *);.  
28010 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
28020 68 65 63 6b 48 65 69 67 68 74 28 50 61 72 73 65  heckHeight(Parse
28030 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20  *, int);.#else. 
28040 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
28050 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
28060 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20  (x) 0.  #define 
28070 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
28080 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64  Height(x,y).#end
28090 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47  if..u32 sqlite3G
280a0 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38  et4byte(const u8
280b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
280c0 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33  Put4byte(u8*, u3
280d0 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  2);..#ifdef SQLI
280e0 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b  TE_ENABLE_UNLOCK
280f0 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73  _NOTIFY.  void s
28100 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
28110 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  Blocked(sqlite3 
28120 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20  *, sqlite3 *);. 
28130 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
28140 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28  nectionUnlocked(
28150 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
28160 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
28170 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c  ectionClosed(sql
28180 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65  ite3 *db);.#else
28190 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
281a0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63  e3ConnectionBloc
281b0 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69  ked(x,y).  #defi
281c0 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
281d0 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a  tionUnlocked(x).
281e0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
281f0 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
28200 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  d(x).#endif..#if
28210 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
28220 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50  .  void sqlite3P
28230 61 72 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a  arserTrace(FILE*
28240 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69  , char *);.#endi
28250 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20  f../*.** If the 
28260 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f  SQLITE_ENABLE IO
28270 54 52 41 43 45 20 65 78 69 73 74 73 20 74 68 65  TRACE exists the
28280 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  n the global var
28290 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33  iable.** sqlite3
282a0 49 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f 69  IoTrace is a poi
282b0 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66  nter to a printf
282c0 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73  -like routine us
282d0 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49  ed to.** print I
282e0 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61  /O tracing messa
282f0 67 65 73 2e 20 0a 2a 2f 0a 23 69 66 64 65 66 20  ges. .*/.#ifdef 
28300 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f  SQLITE_ENABLE_IO
28310 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49  TRACE.# define I
28320 4f 54 52 41 43 45 28 41 29 20 20 69 66 28 20 73  OTRACE(A)  if( s
28330 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b  qlite3IoTrace ){
28340 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
28350 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69  A; }.  void sqli
28360 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
28370 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45  l(Vdbe*);.SQLITE
28380 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 2a 73  _EXTERN void (*s
28390 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29 28 63  qlite3IoTrace)(c
283a0 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
283b0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
283c0 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64 65 66  IOTRACE(A).# def
283d0 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 49  ine sqlite3VdbeI
283e0 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e  OTraceSql(X).#en
283f0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65  dif../*.** These
28400 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76   routines are av
28410 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20  ailable for the 
28420 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67  mem2.c debugging
28430 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f   memory allocato
28440 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79  r.** only.  They
28450 20 61 72 65 20 75 73 65 64 20 74 6f 20 76 65 72   are used to ver
28460 69 66 79 20 74 68 61 74 20 64 69 66 66 65 72 65  ify that differe
28470 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65  nt "types" of me
28480 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69  mory.** allocati
28490 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79  ons are properly
284a0 20 74 72 61 63 6b 65 64 20 62 79 20 74 68 65 20   tracked by the 
284b0 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71  system..**.** sq
284c0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
284d0 54 79 70 65 28 29 20 73 65 74 73 20 74 68 65 20  Type() sets the 
284e0 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c  "type" of an all
284f0 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f  ocation to one o
28500 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45  f.** the MEMTYPE
28510 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65  _* macros define
28520 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79  d below.  The ty
28530 70 65 20 6d 75 73 74 20 62 65 20 61 20 62 69 74  pe must be a bit
28540 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73  mask with.** a s
28550 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a  ingle bit set..*
28560 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
28570 65 62 75 67 48 61 73 54 79 70 65 28 29 20 72 65  ebugHasType() re
28580 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e  turns true if an
28590 79 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  y of the bits in
285a0 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
285b0 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
285c0 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
285d0 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
285e0 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
285f0 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  e()..** sqlite3M
28600 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29  emdebugHasType()
28610 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72   is intended for
28620 20 75 73 65 20 69 6e 73 69 64 65 20 61 73 73 65   use inside asse
28630 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e  rt() statements.
28640 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
28650 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72  mdebugNoType() r
28660 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e  eturns true if n
28670 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74 73 20  one of the bits 
28680 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
28690 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
286a0 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
286b0 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
286c0 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
286d0 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72  ype()..**.** Per
286e0 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d  haps the most im
286f0 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73  portant point is
28700 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   the difference 
28710 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f  between MEMTYPE_
28720 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54  HEAP.** and MEMT
28730 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20  YPE_LOOKASIDE.  
28740 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e  If an allocation
28750 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b   is MEMTYPE_LOOK
28760 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e  ASIDE, that mean
28770 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61  s.** it might ha
28780 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65  ve been allocate
28790 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20  d by lookaside, 
287a0 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63  except the alloc
287b0 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f  ation was.** too
287c0 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73   large or lookas
287d0 69 64 65 20 77 61 73 20 61 6c 72 65 61 64 79 20  ide was already 
287e0 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70  full.  It is imp
287f0 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79  ortant to verify
28800 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74  .** that allocat
28810 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20  ions that might 
28820 68 61 76 65 20 62 65 65 6e 20 73 61 74 69 73 66  have been satisf
28830 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ied by lookaside
28840 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73   are not.** pass
28850 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c  ed back to non-l
28860 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20  ookaside free() 
28870 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72  routines.  Asser
28880 74 73 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a  ts such as the.*
28890 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20  * example above 
288a0 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68  are placed on th
288b0 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20  e non-lookaside 
288c0 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20  free() routines 
288d0 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69  to verify.** thi
288e0 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a  s constraint. .*
288f0 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73  *.** All of this
28900 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20   is no-op for a 
28910 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64  production build
28920 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73  .  It only comes
28930 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68   into.** play wh
28940 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45  en the SQLITE_ME
28950 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74  MDEBUG compile-t
28960 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73  ime option is us
28970 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ed..*/.#ifdef SQ
28980 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20  LITE_MEMDEBUG.  
28990 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64  void sqlite3Memd
289a0 65 62 75 67 53 65 74 54 79 70 65 28 76 6f 69 64  ebugSetType(void
289b0 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c  *,u8);.  int sql
289c0 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
289d0 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20  ype(void*,u8);. 
289e0 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64   int sqlite3Memd
289f0 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a  ebugNoType(void*
28a00 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ,u8);.#else.# de
28a10 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
28a20 65 62 75 67 53 65 74 54 79 70 65 28 58 2c 59 29  ebugSetType(X,Y)
28a30 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20    /* no-op */.# 
28a40 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
28a50 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 58 2c  mdebugHasType(X,
28a60 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65 20 73  Y)  1.# define s
28a70 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
28a80 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a 23 65  Type(X,Y)   1.#e
28a90 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d  ndif.#define MEM
28aa0 54 59 50 45 5f 48 45 41 50 20 20 20 20 20 20 20  TYPE_HEAP       
28ab0 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c  0x01  /* General
28ac0 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e   heap allocation
28ad0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  s */.#define MEM
28ae0 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20  TYPE_LOOKASIDE  
28af0 30 78 30 32 20 20 2f 2a 20 48 65 61 70 20 74 68  0x02  /* Heap th
28b00 61 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  at might have be
28b10 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a  en lookaside */.
28b20 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
28b30 53 43 52 41 54 43 48 20 20 20 20 30 78 30 34 20  SCRATCH    0x04 
28b40 20 2f 2a 20 53 63 72 61 74 63 68 20 61 6c 6c 6f   /* Scratch allo
28b50 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  cations */.#defi
28b60 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48  ne MEMTYPE_PCACH
28b70 45 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20 50  E     0x08  /* P
28b80 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61  age cache alloca
28b90 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tions */../*.** 
28ba0 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65 72 66  Threading interf
28bb0 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  ace.*/.#if SQLIT
28bc0 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
28bd0 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74  EADS>0.int sqlit
28be0 65 33 54 68 72 65 61 64 43 72 65 61 74 65 28 53  e3ThreadCreate(S
28bf0 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f  QLiteThread**,vo
28c00 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f  id*(*)(void*),vo
28c10 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
28c20 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69  3ThreadJoin(SQLi
28c30 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a  teThread*, void*
28c40 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64  *);.#endif..#end
28c50 69 66 20 2f 2a 20 5f 53 51 4c 49 54 45 49 4e 54  if /* _SQLITEINT
28c60 5f 48 5f 20 2a 2f 0a                             _H_ */.