/ Hex Artifact Content
Login

Artifact 823549bbcb0131e09c4a324080309d049a80e258:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 49 6e  INT_H_../*.** In
01e0: 63 6c 75 64 65 20 74 68 65 20 68 65 61 64 65 72  clude the header
01f0: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 63 75   file used to cu
0200: 73 74 6f 6d 69 7a 65 20 74 68 65 20 63 6f 6d 70  stomize the comp
0210: 69 6c 65 72 20 6f 70 74 69 6f 6e 73 20 66 6f 72  iler options for
0220: 20 4d 53 56 43 2e 0a 2a 2a 20 54 68 69 73 20 73   MSVC..** This s
0230: 68 6f 75 6c 64 20 62 65 20 64 6f 6e 65 20 66 69  hould be done fi
0240: 72 73 74 20 73 6f 20 74 68 61 74 20 69 74 20 63  rst so that it c
0250: 61 6e 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20  an successfully 
0260: 70 72 65 76 65 6e 74 20 73 70 75 72 69 6f 75 73  prevent spurious
0270: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  .** compiler war
0280: 6e 69 6e 67 73 20 64 75 65 20 74 6f 20 73 75 62  nings due to sub
0290: 73 65 71 75 65 6e 74 20 63 6f 6e 74 65 6e 74 20  sequent content 
02a0: 69 6e 20 74 68 69 73 20 66 69 6c 65 20 61 6e 64  in this file and
02b0: 20 6f 74 68 65 72 20 66 69 6c 65 73 0a 2a 2a 20   other files.** 
02c0: 74 68 61 74 20 61 72 65 20 69 6e 63 6c 75 64 65  that are include
02d0: 64 20 62 79 20 74 68 69 73 20 66 69 6c 65 2e 0a  d by this file..
02e0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 6d 73 76  */.#include "msv
02f0: 63 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 53 70 65 63  c.h"../*.** Spec
0300: 69 61 6c 20 73 65 74 75 70 20 66 6f 72 20 56 78  ial setup for Vx
0310: 57 6f 72 6b 73 0a 2a 2f 0a 23 69 6e 63 6c 75 64  Works.*/.#includ
0320: 65 20 22 76 78 77 6f 72 6b 73 2e 68 22 0a 0a 2f  e "vxworks.h"../
0330: 2a 0a 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69  *.** These #defi
0340: 6e 65 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c  nes should enabl
0350: 65 20 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70  e >2GB file supp
0360: 6f 72 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20  ort on POSIX if 
0370: 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e  the.** underlyin
0380: 67 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74  g operating syst
0390: 65 6d 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20  em supports it. 
03a0: 20 49 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73   If the OS lacks
03b0: 0a 2a 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73  .** large file s
03c0: 75 70 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68  upport, or if th
03d0: 65 20 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c  e OS is windows,
03e0: 20 74 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65   these should be
03f0: 20 6e 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54   no-ops..**.** T
0400: 69 63 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68  icket #2739:  Th
0410: 65 20 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55  e _LARGEFILE_SOU
0420: 52 43 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61  RCE macro must a
0430: 70 70 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79  ppear before any
0440: 0a 2a 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c  .** system #incl
0450: 75 64 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68  udes.  Hence, th
0460: 69 73 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65  is block of code
0470: 20 6d 75 73 74 20 62 65 20 74 68 65 20 76 65 72   must be the ver
0480: 79 20 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20  y first.** code 
0490: 69 6e 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69  in all source fi
04a0: 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65  les..**.** Large
04b0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61   file support ca
04c0: 6e 20 62 65 20 64 69 73 61 62 6c 65 64 20 75 73  n be disabled us
04d0: 69 6e 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45  ing the -DSQLITE
04e0: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69  _DISABLE_LFS swi
04f0: 74 63 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f  tch.** on the co
0500: 6d 70 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c  mpiler command l
0510: 69 6e 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65  ine.  This is ne
0520: 63 65 73 73 61 72 79 20 69 66 20 79 6f 75 20 61  cessary if you a
0530: 72 65 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20  re compiling.** 
0540: 6f 6e 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68  on a recent mach
0550: 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61 74  ine (ex: Red Hat
0560: 20 37 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61   7.2) but you wa
0570: 6e 74 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20  nt your code to 
0580: 77 6f 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c  work.** on an ol
0590: 64 65 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a  der machine (ex:
05a0: 20 52 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20   Red Hat 6.0).  
05b0: 49 66 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f  If you compile o
05c0: 6e 20 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a  n Red Hat 7.2.**
05d0: 20 77 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70   without this op
05e0: 74 69 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61  tion, LFS is ena
05f0: 62 6c 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f  ble.  But LFS do
0600: 65 73 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20  es not exist in 
0610: 74 68 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e  the kernel.** in
0620: 20 52 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f   Red Hat 6.0, so
0630: 20 74 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20   the code won't 
0640: 77 6f 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f  work.  Hence, fo
0650: 72 20 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79  r maximum binary
0660: 0a 2a 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20  .** portability 
0670: 79 6f 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20  you should omit 
0680: 4c 46 53 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70  LFS..**.** The p
0690: 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61 70  revious paragrap
06a0: 68 20 77 61 73 20 77 72 69 74 74 65 6e 20 69 6e  h was written in
06b0: 20 32 30 30 35 2e 20 20 28 54 68 69 73 20 70 61   2005.  (This pa
06c0: 72 61 67 72 61 70 68 20 69 73 20 77 72 69 74 74  ragraph is writt
06d0: 65 6e 0a 2a 2a 20 6f 6e 20 32 30 30 38 2d 31 31  en.** on 2008-11
06e0: 2d 32 38 2e 29 20 54 68 65 73 65 20 64 61 79 73  -28.) These days
06f0: 2c 20 61 6c 6c 20 4c 69 6e 75 78 20 6b 65 72 6e  , all Linux kern
0700: 65 6c 73 20 73 75 70 70 6f 72 74 20 6c 61 72 67  els support larg
0710: 65 20 66 69 6c 65 73 2c 20 73 6f 0a 2a 2a 20 79  e files, so.** y
0720: 6f 75 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62  ou should probab
0730: 6c 79 20 6c 65 61 76 65 20 4c 46 53 20 65 6e 61  ly leave LFS ena
0740: 62 6c 65 64 2e 20 20 42 75 74 20 73 6f 6d 65 20  bled.  But some 
0750: 65 6d 62 65 64 64 65 64 20 70 6c 61 74 66 6f 72  embedded platfor
0760: 6d 73 20 6d 69 67 68 74 0a 2a 2a 20 6c 61 63 6b  ms might.** lack
0770: 20 4c 46 53 20 69 6e 20 77 68 69 63 68 20 63 61   LFS in which ca
0780: 73 65 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49  se the SQLITE_DI
0790: 53 41 42 4c 45 5f 4c 46 53 20 6d 61 63 72 6f 20  SABLE_LFS macro 
07a0: 6d 69 67 68 74 20 73 74 69 6c 6c 20 62 65 20 75  might still be u
07b0: 73 65 66 75 6c 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d  seful..**.** Sim
07c0: 69 6c 61 72 20 69 73 20 74 72 75 65 20 66 6f 72  ilar is true for
07d0: 20 4d 61 63 20 4f 53 20 58 2e 20 20 4c 46 53 20   Mac OS X.  LFS 
07e0: 69 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65  is only supporte
07f0: 64 20 6f 6e 20 4d 61 63 20 4f 53 20 58 20 39 20  d on Mac OS X 9 
0800: 61 6e 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69  and later..*/.#i
0810: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53  fndef SQLITE_DIS
0820: 41 42 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69 6e  ABLE_LFS.# defin
0830: 65 20 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20 20  e _LARGE_FILE   
0840: 20 20 20 20 31 0a 23 20 69 66 6e 64 65 66 20 5f      1.# ifndef _
0850: 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53  FILE_OFFSET_BITS
0860: 0a 23 20 20 20 64 65 66 69 6e 65 20 5f 46 49 4c  .#   define _FIL
0870: 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34  E_OFFSET_BITS 64
0880: 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e  .# endif.# defin
0890: 65 20 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55  e _LARGEFILE_SOU
08a0: 52 43 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  RCE 1.#endif../*
08b0: 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72 69   Needed for vari
08c0: 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e  ous definitions.
08d0: 2e 2e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  .. */.#if define
08e0: 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21  d(__GNUC__) && !
08f0: 64 65 66 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55  defined(_GNU_SOU
0900: 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 47  RCE).# define _G
0910: 4e 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66  NU_SOURCE.#endif
0920: 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  ..#if defined(__
0930: 4f 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21 64  OpenBSD__) && !d
0940: 65 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52  efined(_BSD_SOUR
0950: 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42 53  CE).# define _BS
0960: 44 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a  D_SOURCE.#endif.
0970: 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57  ./*.** For MinGW
0980: 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20 69  , check to see i
0990: 66 20 77 65 20 63 61 6e 20 69 6e 63 6c 75 64 65  f we can include
09a0: 20 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65   the header file
09b0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a   containing its.
09c0: 2a 2a 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72  ** version infor
09d0: 6d 61 74 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74  mation, among ot
09e0: 68 65 72 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72  her things.  Nor
09f0: 6d 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 74 65  mally, this inte
0a00: 72 6e 61 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65  rnal MinGW.** he
0a10: 61 64 65 72 20 66 69 6c 65 20 77 6f 75 6c 64 20  ader file would 
0a20: 5b 6f 6e 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64  [only] be includ
0a30: 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
0a40: 20 62 79 20 6f 74 68 65 72 20 4d 69 6e 47 57 20   by other MinGW 
0a50: 68 65 61 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b  header.** files;
0a60: 20 68 6f 77 65 76 65 72 2c 20 74 68 65 20 63 6f   however, the co
0a70: 6e 74 61 69 6e 65 64 20 76 65 72 73 69 6f 6e 20  ntained version 
0a80: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e  information is n
0a90: 6f 77 20 72 65 71 75 69 72 65 64 20 62 79 20 74  ow required by t
0aa0: 68 69 73 0a 2a 2a 20 68 65 61 64 65 72 20 66 69  his.** header fi
0ab0: 6c 65 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e  le to work aroun
0ac0: 64 20 62 69 6e 61 72 79 20 63 6f 6d 70 61 74 69  d binary compati
0ad0: 62 69 6c 69 74 79 20 69 73 73 75 65 73 20 28 73  bility issues (s
0ae0: 65 65 20 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a  ee below) and.**
0af0: 20 74 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c   this is the onl
0b00: 79 20 6b 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72  y known way to r
0b10: 65 6c 69 61 62 6c 79 20 6f 62 74 61 69 6e 20 69  eliably obtain i
0b20: 74 2e 20 20 54 68 69 73 20 65 6e 74 69 72 65 20  t.  This entire 
0b30: 23 69 66 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75  #if block.** wou
0b40: 6c 64 20 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79  ld be completely
0b50: 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69 66 20   unnecessary if 
0b60: 74 68 65 72 65 20 77 61 73 20 61 6e 79 20 6f 74  there was any ot
0b70: 68 65 72 20 77 61 79 20 6f 66 20 64 65 74 65 63  her way of detec
0b80: 74 69 6e 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69  ting.** MinGW vi
0b90: 61 20 74 68 65 69 72 20 70 72 65 70 72 6f 63 65  a their preproce
0ba0: 73 73 6f 72 20 28 65 2e 67 2e 20 69 66 20 74 68  ssor (e.g. if th
0bb0: 65 79 20 63 75 73 74 6f 6d 69 7a 65 64 20 74 68  ey customized th
0bc0: 65 69 72 20 47 43 43 20 74 6f 20 64 65 66 69 6e  eir GCC to defin
0bd0: 65 0a 2a 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d  e.** some MinGW-
0be0: 73 70 65 63 69 66 69 63 20 6d 61 63 72 6f 73 29  specific macros)
0bf0: 2e 20 20 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e  .  When compilin
0c00: 67 20 66 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74  g for MinGW, eit
0c10: 68 65 72 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45  her the.** _HAVE
0c20: 5f 4d 49 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56  _MINGW_H or _HAV
0c30: 45 5f 5f 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65  E__MINGW_H (note
0c40: 20 74 68 65 20 65 78 74 72 61 20 75 6e 64 65 72   the extra under
0c50: 73 63 6f 72 65 29 20 6d 61 63 72 6f 20 6d 75 73  score) macro mus
0c60: 74 20 62 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b  t be.** defined;
0c70: 20 6f 74 68 65 72 77 69 73 65 2c 20 64 65 74 65   otherwise, dete
0c80: 63 74 69 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69  ction of conditi
0c90: 6f 6e 73 20 73 70 65 63 69 66 69 63 20 74 6f 20  ons specific to 
0ca0: 4d 69 6e 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a  MinGW will be.**
0cb0: 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69   disabled..*/.#i
0cc0: 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f  f defined(_HAVE_
0cd0: 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75  MINGW_H).# inclu
0ce0: 64 65 20 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c  de "mingw.h".#el
0cf0: 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56 45  if defined(_HAVE
0d00: 5f 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63  __MINGW_H).# inc
0d10: 6c 75 64 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a  lude "_mingw.h".
0d20: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f  #endif../*.** Fo
0d30: 72 20 4d 69 6e 47 57 20 76 65 72 73 69 6f 6e 20  r MinGW version 
0d40: 34 2e 78 20 28 61 6e 64 20 68 69 67 68 65 72 29  4.x (and higher)
0d50: 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20 69  , check to see i
0d60: 66 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54  f the _USE_32BIT
0d70: 5f 54 49 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e  _TIME_T.** defin
0d80: 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f  e is required to
0d90: 20 6d 61 69 6e 74 61 69 6e 20 62 69 6e 61 72 79   maintain binary
0da0: 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77   compatibility w
0db0: 69 74 68 20 74 68 65 20 4d 53 56 43 20 72 75 6e  ith the MSVC run
0dc0: 74 69 6d 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20  time.** library 
0dd0: 69 6e 20 75 73 65 20 28 65 2e 67 2e 20 66 6f 72  in use (e.g. for
0de0: 20 57 69 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f   Windows XP)..*/
0df0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 55  .#if !defined(_U
0e00: 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54 29  SE_32BIT_TIME_T)
0e10: 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 55 53   && !defined(_US
0e20: 45 5f 36 34 42 49 54 5f 54 49 4d 45 5f 54 29 20  E_64BIT_TIME_T) 
0e30: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
0e40: 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65 66  (_WIN32) && !def
0e50: 69 6e 65 64 28 5f 57 49 4e 36 34 29 20 26 26 20  ined(_WIN64) && 
0e60: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f  \.    defined(__
0e70: 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53  MINGW_MAJOR_VERS
0e80: 49 4f 4e 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f  ION) && __MINGW_
0e90: 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d  MAJOR_VERSION >=
0ea0: 20 34 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69   4 && \.    defi
0eb0: 6e 65 64 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a  ned(__MSVCRT__).
0ec0: 23 20 64 65 66 69 6e 65 20 5f 55 53 45 5f 33 32  # define _USE_32
0ed0: 42 49 54 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69  BIT_TIME_T.#endi
0ee0: 66 0a 0a 2f 2a 20 54 68 65 20 70 75 62 6c 69 63  f../* The public
0ef0: 20 53 51 4c 69 74 65 20 69 6e 74 65 72 66 61 63   SQLite interfac
0f00: 65 2e 20 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46  e.  The _FILE_OF
0f10: 46 53 45 54 5f 42 49 54 53 20 6d 61 63 72 6f 20  FSET_BITS macro 
0f20: 6d 75 73 74 20 61 70 70 65 61 72 0a 2a 2a 20 66  must appear.** f
0f30: 69 72 73 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c  irst in QNX.  Al
0f40: 73 6f 2c 20 74 68 65 20 5f 55 53 45 5f 33 32 42  so, the _USE_32B
0f50: 49 54 5f 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20  IT_TIME_T macro 
0f60: 6d 75 73 74 20 61 70 70 65 61 72 20 66 69 72 73  must appear firs
0f70: 74 20 66 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a  t for.** MinGW..
0f80: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c  */.#include "sql
0f90: 69 74 65 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49  ite3.h"../*.** I
0fa0: 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e 66 69  nclude the confi
0fb0: 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65 72 20  guration header 
0fc0: 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e 66 69  output by 'confi
0fd0: 67 75 72 65 27 20 69 66 20 77 65 27 72 65 20 75  gure' if we're u
0fe0: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f  sing the.** auto
0ff0: 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69 6c 64  conf-based build
1000: 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 48 41 56 45  .*/.#ifdef _HAVE
1010: 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48  _SQLITE_CONFIG_H
1020: 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69  .#include "confi
1030: 67 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 23 69 6e  g.h".#endif..#in
1040: 63 6c 75 64 65 20 22 73 71 6c 69 74 65 4c 69 6d  clude "sqliteLim
1050: 69 74 2e 68 22 0a 0a 2f 2a 20 44 69 73 61 62 6c  it.h"../* Disabl
1060: 65 20 6e 75 69 73 61 6e 63 65 20 77 61 72 6e 69  e nuisance warni
1070: 6e 67 73 20 6f 6e 20 42 6f 72 6c 61 6e 64 20 63  ngs on Borland c
1080: 6f 6d 70 69 6c 65 72 73 20 2a 2f 0a 23 69 66 20  ompilers */.#if 
1090: 64 65 66 69 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e  defined(__BORLAN
10a0: 44 43 5f 5f 29 0a 23 70 72 61 67 6d 61 20 77 61  DC__).#pragma wa
10b0: 72 6e 20 2d 72 63 68 20 2f 2a 20 75 6e 72 65 61  rn -rch /* unrea
10c0: 63 68 61 62 6c 65 20 63 6f 64 65 20 2a 2f 0a 23  chable code */.#
10d0: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 63 63  pragma warn -ccc
10e0: 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 20 69 73   /* Condition is
10f0: 20 61 6c 77 61 79 73 20 74 72 75 65 20 6f 72 20   always true or 
1100: 66 61 6c 73 65 20 2a 2f 0a 23 70 72 61 67 6d 61  false */.#pragma
1110: 20 77 61 72 6e 20 2d 61 75 73 20 2f 2a 20 41 73   warn -aus /* As
1120: 73 69 67 6e 65 64 20 76 61 6c 75 65 20 69 73 20  signed value is 
1130: 6e 65 76 65 72 20 75 73 65 64 20 2a 2f 0a 23 70  never used */.#p
1140: 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 73 75 20  ragma warn -csu 
1150: 2f 2a 20 43 6f 6d 70 61 72 69 6e 67 20 73 69 67  /* Comparing sig
1160: 6e 65 64 20 61 6e 64 20 75 6e 73 69 67 6e 65 64  ned and unsigned
1170: 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72 6e   */.#pragma warn
1180: 20 2d 73 70 61 20 2f 2a 20 53 75 73 70 69 63 69   -spa /* Suspici
1190: 6f 75 73 20 70 6f 69 6e 74 65 72 20 61 72 69 74  ous pointer arit
11a0: 68 6d 65 74 69 63 20 2a 2f 0a 23 65 6e 64 69 66  hmetic */.#endif
11b0: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
11c0: 73 74 61 6e 64 61 72 64 20 68 65 61 64 65 72 20  standard header 
11d0: 66 69 6c 65 73 20 61 73 20 6e 65 63 65 73 73 61  files as necessa
11e0: 72 79 0a 2a 2f 0a 23 69 66 64 65 66 20 48 41 56  ry.*/.#ifdef HAV
11f0: 45 5f 53 54 44 49 4e 54 5f 48 0a 23 69 6e 63 6c  E_STDINT_H.#incl
1200: 75 64 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a 23  ude <stdint.h>.#
1210: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41 56  endif.#ifdef HAV
1220: 45 5f 49 4e 54 54 59 50 45 53 5f 48 0a 23 69 6e  E_INTTYPES_H.#in
1230: 63 6c 75 64 65 20 3c 69 6e 74 74 79 70 65 73 2e  clude <inttypes.
1240: 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  h>.#endif../*.**
1250: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
1260: 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20 74  acros are used t
1270: 6f 20 63 61 73 74 20 70 6f 69 6e 74 65 72 73 20  o cast pointers 
1280: 74 6f 20 69 6e 74 65 67 65 72 73 20 61 6e 64 0a  to integers and.
1290: 2a 2a 20 69 6e 74 65 67 65 72 73 20 74 6f 20 70  ** integers to p
12a0: 6f 69 6e 74 65 72 73 2e 20 20 54 68 65 20 77 61  ointers.  The wa
12b0: 79 20 79 6f 75 20 64 6f 20 74 68 69 73 20 76 61  y you do this va
12c0: 72 69 65 73 20 66 72 6f 6d 20 6f 6e 65 20 63 6f  ries from one co
12d0: 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 74 68 65  mpiler.** to the
12e0: 20 6e 65 78 74 2c 20 73 6f 20 77 65 20 68 61 76   next, so we hav
12f0: 65 20 64 65 76 65 6c 6f 70 65 64 20 74 68 65 20  e developed the 
1300: 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 74 20 6f 66  following set of
1310: 20 23 69 66 20 73 74 61 74 65 6d 65 6e 74 73 0a   #if statements.
1320: 2a 2a 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ** to generate a
1330: 70 70 72 6f 70 72 69 61 74 65 20 6d 61 63 72 6f  ppropriate macro
1340: 73 20 66 6f 72 20 61 20 77 69 64 65 20 72 61 6e  s for a wide ran
1350: 67 65 20 6f 66 20 63 6f 6d 70 69 6c 65 72 73 2e  ge of compilers.
1360: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 72 72 65  .**.** The corre
1370: 63 74 20 22 41 4e 53 49 22 20 77 61 79 20 74 6f  ct "ANSI" way to
1380: 20 64 6f 20 74 68 69 73 20 69 73 20 74 6f 20 75   do this is to u
1390: 73 65 20 74 68 65 20 69 6e 74 70 74 72 5f 74 20  se the intptr_t 
13a0: 74 79 70 65 2e 20 0a 2a 2a 20 55 6e 66 6f 72 74  type. .** Unfort
13b0: 75 6e 61 74 65 6c 79 2c 20 74 68 61 74 20 74 79  unately, that ty
13c0: 70 65 64 65 66 20 69 73 20 6e 6f 74 20 61 76 61  pedef is not ava
13d0: 69 6c 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f  ilable on all co
13e0: 6d 70 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69  mpilers, or.** i
13f0: 66 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c  f it is availabl
1400: 65 2c 20 69 74 20 72 65 71 75 69 72 65 73 20 61  e, it requires a
1410: 6e 20 23 69 6e 63 6c 75 64 65 20 6f 66 20 73 70  n #include of sp
1420: 65 63 69 66 69 63 20 68 65 61 64 65 72 73 0a 2a  ecific headers.*
1430: 2a 20 74 68 61 74 20 76 61 72 79 20 66 72 6f 6d  * that vary from
1440: 20 6f 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f 20   one machine to 
1450: 74 68 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  the next..**.** 
1460: 54 69 63 6b 65 74 20 23 33 38 36 30 3a 20 20 54  Ticket #3860:  T
1470: 68 65 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20  he llvm-gcc-4.2 
1480: 63 6f 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41 70  compiler from Ap
1490: 70 6c 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a  ple chokes on.**
14a0: 20 74 68 65 20 28 28 76 6f 69 64 2a 29 26 28 28   the ((void*)&((
14b0: 63 68 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e  char*)0)[X]) con
14c0: 73 74 72 75 63 74 2e 20 20 42 75 74 20 4d 53 56  struct.  But MSV
14d0: 43 20 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f  C chokes on ((vo
14e0: 69 64 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20  id*)(X))..** So 
14f0: 77 65 20 68 61 76 65 20 74 6f 20 64 65 66 69 6e  we have to defin
1500: 65 20 74 68 65 20 6d 61 63 72 6f 73 20 69 6e 20  e the macros in 
1510: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 64  different ways d
1520: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a  epending on the.
1530: 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a  ** compiler..*/.
1540: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 50 54  #if defined(__PT
1550: 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f  RDIFF_TYPE__)  /
1560: 2a 20 54 68 69 73 20 63 61 73 65 20 73 68 6f 75  * This case shou
1570: 6c 64 20 77 6f 72 6b 20 66 6f 72 20 47 43 43 20  ld work for GCC 
1580: 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  */.# define SQLI
1590: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29  TE_INT_TO_PTR(X)
15a0: 20 20 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52    ((void*)(__PTR
15b0: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
15c0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
15d0: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
15e0: 28 28 69 6e 74 29 28 5f 5f 50 54 52 44 49 46 46  ((int)(__PTRDIFF
15f0: 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c  _TYPE__)(X)).#el
1600: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e  if !defined(__GN
1610: 55 43 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20 57  UC__)       /* W
1620: 6f 72 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65  orks for compile
1630: 72 73 20 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c  rs other than LL
1640: 56 4d 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53  VM */.# define S
1650: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
1660: 28 58 29 20 20 28 28 76 6f 69 64 2a 29 26 28 28  (X)  ((void*)&((
1670: 63 68 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64  char*)0)[X]).# d
1680: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
1690: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
16a0: 74 29 28 28 28 63 68 61 72 2a 29 58 29 2d 28 63  t)(((char*)X)-(c
16b0: 68 61 72 2a 29 30 29 29 0a 23 65 6c 69 66 20 64  har*)0)).#elif d
16c0: 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49  efined(HAVE_STDI
16d0: 4e 54 5f 48 29 20 20 20 2f 2a 20 55 73 65 20 74  NT_H)   /* Use t
16e0: 68 69 73 20 63 61 73 65 20 69 66 20 77 65 20 68  his case if we h
16f0: 61 76 65 20 41 4e 53 49 20 68 65 61 64 65 72 73  ave ANSI headers
1700: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
1710: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
1720: 29 20 20 28 28 76 6f 69 64 2a 29 28 69 6e 74 70  )  ((void*)(intp
1730: 74 72 5f 74 29 28 58 29 29 0a 23 20 64 65 66 69  tr_t)(X)).# defi
1740: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
1750: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
1760: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 65  intptr_t)(X)).#e
1770: 6c 73 65 20 20 20 20 20 20 20 20 20 20 20 20 20  lse             
1780: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1790: 47 65 6e 65 72 61 74 65 73 20 61 20 77 61 72 6e  Generates a warn
17a0: 69 6e 67 20 2d 20 62 75 74 20 69 74 20 61 6c 77  ing - but it alw
17b0: 61 79 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64  ays works */.# d
17c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
17d0: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
17e0: 69 64 2a 29 28 58 29 29 0a 23 20 64 65 66 69 6e  id*)(X)).# defin
17f0: 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f  e SQLITE_PTR_TO_
1800: 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 58  INT(X)  ((int)(X
1810: 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  )).#endif../*.**
1820: 20 41 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e 74   A macro to hint
1830: 20 74 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   to the compiler
1840: 20 74 68 61 74 20 61 20 66 75 6e 63 74 69 6f 6e   that a function
1850: 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a   should not be.*
1860: 2a 20 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23 69  * inlined..*/.#i
1870: 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43  f defined(__GNUC
1880: 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 53 51  __).#  define SQ
1890: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f  LITE_NOINLINE  _
18a0: 5f 61 74 74 72 69 62 75 74 65 5f 5f 28 28 6e 6f  _attribute__((no
18b0: 69 6e 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20 64  inline)).#elif d
18c0: 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29  efined(_MSC_VER)
18d0: 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33   && _MSC_VER>=13
18e0: 31 30 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c  10.#  define SQL
18f0: 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f  ITE_NOINLINE  __
1900: 64 65 63 6c 73 70 65 63 28 6e 6f 69 6e 6c 69 6e  declspec(noinlin
1910: 65 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  e).#else.#  defi
1920: 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49  ne SQLITE_NOINLI
1930: 4e 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  NE.#endif../*.**
1940: 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48 52 45   The SQLITE_THRE
1950: 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d 75 73  ADSAFE macro mus
1960: 74 20 62 65 20 64 65 66 69 6e 65 64 20 61 73 20  t be defined as 
1970: 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a 20 30  0, 1, or 2..** 0
1980: 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73 20 61   means mutexes a
1990: 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64  re permanently d
19a0: 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65 20 6c  isable and the l
19b0: 69 62 72 61 72 79 20 69 73 20 6e 65 76 65 72 0a  ibrary is never.
19c0: 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e 20 20  ** threadsafe.  
19d0: 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72  1 means the libr
19e0: 61 72 79 20 69 73 20 73 65 72 69 61 6c 69 7a 65  ary is serialize
19f0: 64 20 77 68 69 63 68 20 69 73 20 74 68 65 20 68  d which is the h
1a00: 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65 6c 20  ighest.** level 
1a10: 6f 66 20 74 68 72 65 61 64 73 61 66 65 74 79 2e  of threadsafety.
1a20: 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    2 means the li
1a30: 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69 74 68  brary is multith
1a40: 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69 70 6c  readed - multipl
1a50: 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63 61 6e  e.** threads can
1a60: 20 75 73 65 20 53 51 4c 69 74 65 20 61 73 20 6c   use SQLite as l
1a70: 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20 74 68  ong as no two th
1a80: 72 65 61 64 73 20 74 72 79 20 74 6f 20 75 73 65  reads try to use
1a90: 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64 61 74   the same.** dat
1aa0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
1ab0: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
1ac0: 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72 20 76  e..**.** Older v
1ad0: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
1ae0: 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69 6f 6e  e used an option
1af0: 61 6c 20 54 48 52 45 41 44 53 41 46 45 20 6d 61  al THREADSAFE ma
1b00: 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70 70 6f  cro..** We suppo
1b10: 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65 67 61  rt that for lega
1b20: 63 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  cy..*/.#if !defi
1b30: 6e 65 64 28 53 51 4c 49 54 45 5f 54 48 52 45 41  ned(SQLITE_THREA
1b40: 44 53 41 46 45 29 0a 23 20 69 66 20 64 65 66 69  DSAFE).# if defi
1b50: 6e 65 64 28 54 48 52 45 41 44 53 41 46 45 29 0a  ned(THREADSAFE).
1b60: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
1b70: 45 5f 54 48 52 45 41 44 53 41 46 45 20 54 48 52  E_THREADSAFE THR
1b80: 45 41 44 53 41 46 45 0a 23 20 65 6c 73 65 0a 23  EADSAFE.# else.#
1b90: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
1ba0: 5f 54 48 52 45 41 44 53 41 46 45 20 31 20 2f 2a  _THREADSAFE 1 /*
1bb0: 20 49 4d 50 3a 20 52 2d 30 37 32 37 32 2d 32 32   IMP: R-07272-22
1bc0: 33 30 39 20 2a 2f 0a 23 20 65 6e 64 69 66 0a 23  309 */.# endif.#
1bd0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77  endif../*.** Pow
1be0: 65 72 73 61 66 65 20 6f 76 65 72 77 72 69 74 65  ersafe overwrite
1bf0: 20 69 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c   is on by defaul
1c00: 74 2e 20 20 42 75 74 20 63 61 6e 20 62 65 20 74  t.  But can be t
1c10: 75 72 6e 65 64 20 6f 66 66 20 75 73 69 6e 67 0a  urned off using.
1c20: 2a 2a 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f  ** the -DSQLITE_
1c30: 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52  POWERSAFE_OVERWR
1c40: 49 54 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69  ITE=0 command-li
1c50: 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69  ne option..*/.#i
1c60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 50 4f 57  fndef SQLITE_POW
1c70: 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45  ERSAFE_OVERWRITE
1c80: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1c90: 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57  _POWERSAFE_OVERW
1ca0: 52 49 54 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  RITE 1.#endif../
1cb0: 2a 0a 2a 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46  *.** EVIDENCE-OF
1cc0: 3a 20 52 2d 32 35 37 31 35 2d 33 37 30 37 32 20  : R-25715-37072 
1cd0: 4d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  Memory allocatio
1ce0: 6e 20 73 74 61 74 69 73 74 69 63 73 20 61 72 65  n statistics are
1cf0: 20 65 6e 61 62 6c 65 64 20 62 79 0a 2a 2a 20 64   enabled by.** d
1d00: 65 66 61 75 6c 74 20 75 6e 6c 65 73 73 20 53 51  efault unless SQ
1d10: 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64  Lite is compiled
1d20: 20 77 69 74 68 20 53 51 4c 49 54 45 5f 44 45 46   with SQLITE_DEF
1d30: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 3d 30  AULT_MEMSTATUS=0
1d40: 20 69 6e 0a 2a 2a 20 77 68 69 63 68 20 63 61 73   in.** which cas
1d50: 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
1d60: 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20 61  ion statistics a
1d70: 72 65 20 64 69 73 61 62 6c 65 64 20 62 79 20 64  re disabled by d
1d80: 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 21  efault..*/.#if !
1d90: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
1da0: 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53  EFAULT_MEMSTATUS
1db0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
1dc0: 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41  E_DEFAULT_MEMSTA
1dd0: 54 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  TUS 1.#endif../*
1de0: 0a 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20  .** Exactly one 
1df0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1e00: 20 6d 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20   macros must be 
1e10: 64 65 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72  defined in order
1e20: 20 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77   to.** specify w
1e30: 68 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  hich memory allo
1e40: 63 61 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d  cation subsystem
1e50: 20 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   to use..**.**  
1e60: 20 20 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d     SQLITE_SYSTEM
1e70: 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20  _MALLOC         
1e80: 20 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73   // Use normal s
1e90: 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a  ystem malloc().*
1ea0: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e  *     SQLITE_WIN
1eb0: 33 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20  32_MALLOC       
1ec0: 20 20 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32      // Use Win32
1ed0: 20 6e 61 74 69 76 65 20 68 65 61 70 20 41 50 49   native heap API
1ee0: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a  .**     SQLITE_Z
1ef0: 45 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20  ERO_MALLOC      
1f00: 20 20 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73        // Use a s
1f10: 74 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68  tub allocator th
1f20: 61 74 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a  at always fails.
1f30: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45  **     SQLITE_ME
1f40: 4d 44 45 42 55 47 20 20 20 20 20 20 20 20 20 20  MDEBUG          
1f50: 20 20 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e       // Debuggin
1f60: 67 20 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73  g version of sys
1f70: 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a  tem malloc().**.
1f80: 2a 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69  ** On Windows, i
1f90: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e  f the SQLITE_WIN
1fa0: 33 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41  32_MALLOC_VALIDA
1fb0: 54 45 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69  TE macro is defi
1fc0: 6e 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61  ned and the.** a
1fd0: 73 73 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73  ssert() macro is
1fe0: 20 65 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63   enabled, each c
1ff0: 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e  all into the Win
2000: 33 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 73  32 native heap s
2010: 75 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c  ubsystem.** will
2020: 20 63 61 75 73 65 20 48 65 61 70 56 61 6c 69 64   cause HeapValid
2030: 61 74 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64  ate to be called
2040: 2e 20 20 49 66 20 68 65 61 70 20 76 61 6c 69 64  .  If heap valid
2050: 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69  ation should fai
2060: 6c 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69  l, an.** asserti
2070: 6f 6e 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67  on will be trigg
2080: 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e  ered..**.** If n
2090: 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65  one of the above
20a0: 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68   are defined, th
20b0: 65 6e 20 73 65 74 20 53 51 4c 49 54 45 5f 53 59  en set SQLITE_SY
20c0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a  STEM_MALLOC as.*
20d0: 2a 20 74 68 65 20 64 65 66 61 75 6c 74 2e 0a 2a  * the default..*
20e0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
20f0: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
2100: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
2110: 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d  d(SQLITE_WIN32_M
2120: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2130: 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f  ined(SQLITE_ZERO
2140: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
2150: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45  efined(SQLITE_ME
2160: 4d 44 45 42 55 47 29 3e 31 0a 23 20 65 72 72 6f  MDEBUG)>1.# erro
2170: 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20 6f  r "Two or more o
2180: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
2190: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e  compile-time con
21a0: 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f  figuration optio
21b0: 6e 73 5c 0a 20 61 72 65 20 64 65 66 69 6e 65 64  ns\. are defined
21c0: 20 62 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e 65   but at most one
21d0: 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53   is allowed:\. S
21e0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
21f0: 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e 33  LOC, SQLITE_WIN3
2200: 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45  2_MALLOC, SQLITE
2210: 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51 4c  _MEMDEBUG,\. SQL
2220: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22  ITE_ZERO_MALLOC"
2230: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
2240: 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45  ned(SQLITE_SYSTE
2250: 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  M_MALLOC) \.  + 
2260: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57  defined(SQLITE_W
2270: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  IN32_MALLOC) \. 
2280: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
2290: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c  E_ZERO_MALLOC) \
22a0: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
22b0: 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d 30  ITE_MEMDEBUG)==0
22c0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
22d0: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31  _SYSTEM_MALLOC 1
22e0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
22f0: 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f  f SQLITE_MALLOC_
2300: 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f  SOFT_LIMIT is no
2310: 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79  t zero, then try
2320: 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20   to keep the.** 
2330: 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20  sizes of memory 
2340: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f  allocations belo
2350: 77 20 74 68 69 73 20 76 61 6c 75 65 20 77 68 65  w this value whe
2360: 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a  re possible..*/.
2370: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2380: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
2390: 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20  LIMIT).# define 
23a0: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
23b0: 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65  FT_LIMIT 1024.#e
23c0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e  ndif../*.** We n
23d0: 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58  eed to define _X
23e0: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66  OPEN_SOURCE as f
23f0: 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20  ollows in order 
2400: 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63  to enable.** rec
2410: 75 72 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f  ursive mutexes o
2420: 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74  n most Unix syst
2430: 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64 28 29  ems and fchmod()
2440: 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20   on OpenBSD..** 
2450: 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  But _XOPEN_SOURC
2460: 45 20 64 65 66 69 6e 65 20 63 61 75 73 65 73 20  E define causes 
2470: 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63  problems for Mac
2480: 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a   OS X, so omit.*
2490: 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  * it..*/.#if !de
24a0: 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55  fined(_XOPEN_SOU
24b0: 52 43 45 29 20 26 26 20 21 64 65 66 69 6e 65 64  RCE) && !defined
24c0: 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20  (__DARWIN__) && 
24d0: 21 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45  !defined(__APPLE
24e0: 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 5f 58  __).#  define _X
24f0: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a  OPEN_SOURCE 600.
2500: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44  #endif../*.** ND
2510: 45 42 55 47 20 61 6e 64 20 53 51 4c 49 54 45 5f  EBUG and SQLITE_
2520: 44 45 42 55 47 20 61 72 65 20 6f 70 70 6f 73 69  DEBUG are opposi
2530: 74 65 73 2e 20 20 49 74 20 73 68 6f 75 6c 64 20  tes.  It should 
2540: 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20 74  always be true t
2550: 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e  hat.** defined(N
2560: 44 45 42 55 47 29 3d 3d 21 64 65 66 69 6e 65 64  DEBUG)==!defined
2570: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 2e 20  (SQLITE_DEBUG). 
2580: 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20   If this is not 
2590: 63 75 72 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a  currently true,.
25a0: 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72 75 65 20  ** make it true 
25b0: 62 79 20 64 65 66 69 6e 69 6e 67 20 6f 72 20 75  by defining or u
25c0: 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45 42 55 47  ndefining NDEBUG
25d0: 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20  ..**.** Setting 
25e0: 4e 44 45 42 55 47 20 6d 61 6b 65 73 20 74 68 65  NDEBUG makes the
25f0: 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e   code smaller an
2600: 64 20 66 61 73 74 65 72 20 62 79 20 64 69 73 61  d faster by disa
2610: 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73  bling the.** ass
2620: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
2630: 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53   in the code.  S
2640: 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20 64 65  o we want the de
2650: 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20  fault action.** 
2660: 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47  to be for NDEBUG
2670: 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e   to be set and N
2680: 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65  DEBUG to be unde
2690: 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51  fined only if SQ
26a0: 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73  LITE_DEBUG.** is
26b0: 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42   set.  Thus NDEB
26c0: 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70  UG becomes an op
26d0: 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e  t-in rather than
26e0: 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66   an opt-out.** f
26f0: 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21  eature..*/.#if !
2700: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20  defined(NDEBUG) 
2710: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
2720: 54 45 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66  TE_DEBUG) .# def
2730: 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e  ine NDEBUG 1.#en
2740: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
2750: 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e  NDEBUG) && defin
2760: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
2770: 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a  .# undef NDEBUG.
2780: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e  #endif../*.** En
2790: 61 62 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  able SQLITE_ENAB
27a0: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
27b0: 4e 54 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45  NTS if SQLITE_DE
27c0: 42 55 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e  BUG is turned on
27d0: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
27e0: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
27f0: 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53  EXPLAIN_COMMENTS
2800: 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
2810: 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66  ITE_DEBUG).# def
2820: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
2830: 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e  E_EXPLAIN_COMMEN
2840: 54 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  TS 1.#endif../*.
2850: 2a 2a 20 54 68 65 20 74 65 73 74 63 61 73 65 28  ** The testcase(
2860: 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  ) macro is used 
2870: 74 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61  to aid in covera
2880: 67 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65  ge testing.  Whe
2890: 6e 20 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65  n .** doing cove
28a0: 72 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68  rage testing, th
28b0: 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69  e condition insi
28c0: 64 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  de the argument 
28d0: 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29  to.** testcase()
28e0: 20 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61 74   must be evaluat
28f0: 65 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64  ed both true and
2900: 20 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20   false in order 
2910: 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62  to.** get full b
2920: 72 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20  ranch coverage. 
2930: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
2940: 6d 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65  macro is inserte
2950: 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73  d.** to help ens
2960: 75 72 65 20 61 64 65 71 75 61 74 65 20 74 65 73  ure adequate tes
2970: 74 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c  t coverage in pl
2980: 61 63 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c  aces where simpl
2990: 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64  e.** condition/d
29a0: 65 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65  ecision coverage
29b0: 20 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20   is inadequate. 
29c0: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65   For example, te
29d0: 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20  stcase().** can 
29e0: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
29f0: 73 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61  sure boundary va
2a00: 6c 75 65 73 20 61 72 65 20 74 65 73 74 65 64 2e  lues are tested.
2a10: 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b    For.** bitmask
2a20: 20 74 65 73 74 73 2c 20 74 65 73 74 63 61 73 65   tests, testcase
2a30: 28 29 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  () can be used t
2a40: 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68  o make sure each
2a50: 20 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69   bit.** is signi
2a60: 66 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20  ficant and used 
2a70: 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20  at least once.  
2a80: 4f 6e 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  On switch statem
2a90: 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75  ents.** where mu
2aa0: 6c 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20  ltiple cases go 
2ab0: 74 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63  to the same bloc
2ac0: 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63  k of code, testc
2ad0: 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73  ase().** can ins
2ae0: 75 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73  ure that all cas
2af0: 65 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  es are evaluated
2b00: 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ..**.*/.#ifdef S
2b10: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
2b20: 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  EST.  void sqlit
2b30: 65 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b  e3Coverage(int);
2b40: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
2b50: 73 65 28 58 29 20 20 69 66 28 20 58 20 29 7b 20  se(X)  if( X ){ 
2b60: 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28  sqlite3Coverage(
2b70: 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c  __LINE__); }.#el
2b80: 73 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74  se.# define test
2b90: 63 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a  case(X).#endif..
2ba0: 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e  /*.** The TESTON
2bb0: 4c 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  LY macro is used
2bc0: 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69   to enclose vari
2bd0: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
2be0: 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69  s or.** other bi
2bf0: 74 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  ts of code that 
2c00: 61 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75  are needed to su
2c10: 70 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65  pport the argume
2c20: 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65  nts.** within te
2c30: 73 74 63 61 73 65 28 29 20 61 6e 64 20 61 73 73  stcase() and ass
2c40: 65 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f  ert() macros..*/
2c50: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  .#if !defined(ND
2c60: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
2c70: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
2c80: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
2c90: 54 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23  TESTONLY(X)  X.#
2ca0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45  else.# define TE
2cb0: 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66  STONLY(X).#endif
2cc0: 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65  ../*.** Sometime
2cd0: 73 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c  s we need a smal
2ce0: 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65  l amount of code
2cf0: 20 73 75 63 68 20 61 73 20 61 20 76 61 72 69 61   such as a varia
2d00: 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ble initializati
2d10: 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66  on.** to setup f
2d20: 6f 72 20 61 20 6c 61 74 65 72 20 61 73 73 65 72  or a later asser
2d30: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  t() statement.  
2d40: 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  We do not want t
2d50: 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61  his code to.** a
2d60: 70 70 65 61 72 20 77 68 65 6e 20 61 73 73 65 72  ppear when asser
2d70: 74 28 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e  t() is disabled.
2d80: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
2d90: 6d 61 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f  macro is therefo
2da0: 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f  re.** used to co
2db0: 6e 74 61 69 6e 20 74 68 61 74 20 73 65 74 75 70  ntain that setup
2dc0: 20 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41   code.  The "VVA
2dd0: 22 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73  " acronym stands
2de0: 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63   for.** "Verific
2df0: 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f  ation, Validatio
2e00: 6e 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74 61  n, and Accredita
2e10: 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72  tion".  In other
2e20: 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63   words, the.** c
2e30: 6f 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f  ode within VVA_O
2e40: 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20  NLY() will only 
2e50: 72 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66  run during verif
2e60: 69 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65  ication processe
2e70: 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44  s..*/.#ifndef ND
2e80: 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56  EBUG.# define VV
2e90: 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  A_ONLY(X)  X.#el
2ea0: 73 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  se.# define VVA_
2eb0: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
2ec0: 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53  /*.** The ALWAYS
2ed0: 20 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f   and NEVER macro
2ee0: 73 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65  s surround boole
2ef0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77  an expressions w
2f00: 68 69 63 68 20 0a 2a 2a 20 61 72 65 20 69 6e 74  hich .** are int
2f10: 65 6e 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20  ended to always 
2f20: 62 65 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  be true or false
2f30: 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
2f40: 20 53 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73   Such.** express
2f50: 69 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d  ions could be om
2f60: 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63  itted from the c
2f70: 6f 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20  ode completely. 
2f80: 20 42 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65   But they.** are
2f90: 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66   included in a f
2fa0: 65 77 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65  ew cases in orde
2fb0: 72 20 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65  r to enhance the
2fc0: 20 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f   resilience.** o
2fd0: 66 20 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78  f SQLite to unex
2fe0: 70 65 63 74 65 64 20 62 65 68 61 76 69 6f 72 20  pected behavior 
2ff0: 2d 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f  - to make the co
3000: 64 65 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67  de "self-healing
3010: 22 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65  ".** or "ductile
3020: 22 20 72 61 74 68 65 72 20 74 68 61 6e 20 62 65  " rather than be
3030: 69 6e 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e  ing "brittle" an
3040: 64 20 63 72 61 73 68 69 6e 67 20 61 74 20 74 68  d crashing at th
3050: 65 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20  e first.** hint 
3060: 6f 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68  of unplanned beh
3070: 61 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  avior..**.** In 
3080: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57  other words, ALW
3090: 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72  AYS and NEVER ar
30a0: 65 20 61 64 64 65 64 20 66 6f 72 20 64 65 66 65  e added for defe
30b0: 6e 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a  nsive code..**.*
30c0: 2a 20 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76  * When doing cov
30d0: 65 72 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c  erage testing AL
30e0: 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61  WAYS and NEVER a
30f0: 72 65 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f  re hard-coded to
3100: 0a 2a 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20  .** be true and 
3110: 66 61 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68  false so that th
3120: 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f  e unreachable co
3130: 64 65 20 74 68 65 79 20 73 70 65 63 69 66 79 20  de they specify 
3140: 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63  will.** not be c
3150: 6f 75 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74  ounted as untest
3160: 65 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20  ed code..*/.#if 
3170: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43  defined(SQLITE_C
3180: 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20  OVERAGE_TEST).# 
3190: 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29  define ALWAYS(X)
31a0: 20 20 20 20 20 20 28 31 29 0a 23 20 64 65 66 69        (1).# defi
31b0: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
31c0: 20 20 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66    (0).#elif !def
31d0: 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64  ined(NDEBUG).# d
31e0: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
31f0: 20 20 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73       ((X)?1:(ass
3200: 65 72 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66  ert(0),0)).# def
3210: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
3220: 20 20 20 28 28 58 29 3f 28 61 73 73 65 72 74 28     ((X)?(assert(
3230: 30 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23  0),1):0).#else.#
3240: 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58   define ALWAYS(X
3250: 29 20 20 20 20 20 20 28 58 29 0a 23 20 64 65 66  )      (X).# def
3260: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
3270: 20 20 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f     (X).#endif../
3280: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
3290: 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74   (non-zero) if t
32a0: 68 65 20 69 6e 70 75 74 20 69 73 20 61 6e 20 69  he input is an i
32b0: 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20 74  nteger that is t
32c0: 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66  oo large.** to f
32d0: 69 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20  it in 32-bits.  
32e0: 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73  This macro is us
32f0: 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72  ed inside of var
3300: 69 6f 75 73 20 74 65 73 74 63 61 73 65 28 29 0a  ious testcase().
3310: 2a 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72  ** macros to ver
3320: 69 66 79 20 74 68 61 74 20 77 65 20 68 61 76 65  ify that we have
3330: 20 74 65 73 74 65 64 20 53 51 4c 69 74 65 20 66   tested SQLite f
3340: 6f 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75  or large-file su
3350: 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  pport..*/.#defin
3360: 65 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20  e IS_BIG_INT(X) 
3370: 20 28 28 28 58 29 26 7e 28 69 36 34 29 30 78 66   (((X)&~(i64)0xf
3380: 66 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a  fffffff)!=0)../*
3390: 0a 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e  .** The macro un
33a0: 6c 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69  likely() is a hi
33b0: 6e 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64  nt that surround
33c0: 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65  s a boolean.** e
33d0: 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
33e0: 73 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e  s usually false.
33f0: 20 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29    Macro likely()
3400: 20 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20   surrounds.** a 
3410: 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
3420: 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c  on that is usual
3430: 6c 79 20 74 72 75 65 2e 20 20 54 68 65 73 65 20  ly true.  These 
3440: 68 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20  hints could,.** 
3450: 69 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73  in theory, be us
3460: 65 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c  ed by the compil
3470: 65 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62  er to generate b
3480: 65 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a  etter code, but.
3490: 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65  ** currently the
34a0: 79 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65  y are just comme
34b0: 6e 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65  nts for human re
34c0: 61 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  aders..*/.#defin
34d0: 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28  e likely(X)    (
34e0: 58 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b  X).#define unlik
34f0: 65 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e  ely(X)  (X)..#in
3500: 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23  clude "hash.h".#
3510: 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68  include "parse.h
3520: 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69  ".#include <stdi
3530: 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73  o.h>.#include <s
3540: 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64  tdlib.h>.#includ
3550: 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e  e <string.h>.#in
3560: 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e  clude <assert.h>
3570: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65  .#include <stdde
3580: 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63  f.h>../*.** If c
3590: 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70  ompiling for a p
35a0: 72 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61  rocessor that la
35b0: 63 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  cks floating poi
35c0: 6e 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73  nt support,.** s
35d0: 75 62 73 74 69 74 75 74 65 20 69 6e 74 65 67 65  ubstitute intege
35e0: 72 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70  r for floating-p
35f0: 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53  oint.*/.#ifdef S
3600: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
3610: 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69  ING_POINT.# defi
3620: 6e 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65  ne double sqlite
3630: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
3640: 66 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74  float sqlite_int
3650: 36 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47  64.# define LONG
3660: 44 4f 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69  DOUBLE_TYPE sqli
3670: 74 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65  te_int64.# ifnde
3680: 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c  f SQLITE_BIG_DBL
3690: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
36a0: 54 45 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71  TE_BIG_DBL (((sq
36b0: 6c 69 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c  lite3_int64)1)<<
36c0: 35 30 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65  50).# endif.# de
36d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fine SQLITE_OMIT
36e0: 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20  _DATETIME_FUNCS 
36f0: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
3700: 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23  E_OMIT_TRACE 1.#
3710: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49   undef SQLITE_MI
3720: 58 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54  XED_ENDIAN_64BIT
3730: 5f 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53  _FLOAT.# undef S
3740: 51 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e  QLITE_HAVE_ISNAN
3750: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
3760: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23  SQLITE_BIG_DBL.#
3770: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
3780: 49 47 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65  IG_DBL (1e99).#e
3790: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54  ndif../*.** OMIT
37a0: 5f 54 45 4d 50 44 42 20 69 73 20 73 65 74 20 74  _TEMPDB is set t
37b0: 6f 20 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d  o 1 if SQLITE_OM
37c0: 49 54 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66  IT_TEMPDB is def
37d0: 69 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66  ined, or 0.** af
37e0: 74 65 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20  terward. Having 
37f0: 74 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77  this macro allow
3800: 73 20 75 73 20 74 6f 20 63 61 75 73 65 20 74 68  s us to cause th
3810: 65 20 43 20 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a  e C compiler .**
3820: 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75 73   to omit code us
3830: 65 64 20 62 79 20 54 45 4d 50 20 74 61 62 6c 65  ed by TEMP table
3840: 73 20 77 69 74 68 6f 75 74 20 6d 65 73 73 79 20  s without messy 
3850: 23 69 66 6e 64 65 66 20 73 74 61 74 65 6d 65 6e  #ifndef statemen
3860: 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ts..*/.#ifdef SQ
3870: 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42  LITE_OMIT_TEMPDB
3880: 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45  .#define OMIT_TE
3890: 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a 23 64 65  MPDB 1.#else.#de
38a0: 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42  fine OMIT_TEMPDB
38b0: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
38c0: 20 54 68 65 20 22 66 69 6c 65 20 66 6f 72 6d 61   The "file forma
38d0: 74 22 20 6e 75 6d 62 65 72 20 69 73 20 61 6e 20  t" number is an 
38e0: 69 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20  integer that is 
38f0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e  incremented when
3900: 65 76 65 72 0a 2a 2a 20 74 68 65 20 56 44 42 45  ever.** the VDBE
3910: 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d  -level file form
3920: 61 74 20 63 68 61 6e 67 65 73 2e 20 20 54 68 65  at changes.  The
3930: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
3940: 73 20 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20  s define the.** 
3950: 74 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65  the default file
3960: 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77 20   format for new 
3970: 64 61 74 61 62 61 73 65 73 20 61 6e 64 20 74 68  databases and th
3980: 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 66  e maximum file f
3990: 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74 68  ormat.** that th
39a0: 65 20 6c 69 62 72 61 72 79 20 63 61 6e 20 72 65  e library can re
39b0: 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ad..*/.#define S
39c0: 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46  QLITE_MAX_FILE_F
39d0: 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64 65 66 20  ORMAT 4.#ifndef 
39e0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46  SQLITE_DEFAULT_F
39f0: 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66  ILE_FORMAT.# def
3a00: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
3a10: 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34  LT_FILE_FORMAT 4
3a20: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
3a30: 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
3a40: 20 74 72 69 67 67 65 72 73 20 61 72 65 20 72 65   triggers are re
3a50: 63 75 72 73 69 76 65 20 62 79 20 64 65 66 61 75  cursive by defau
3a60: 6c 74 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65  lt.  This can be
3a70: 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61 74 20 72  .** changed at r
3a80: 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67 20 61 20  un-time using a 
3a90: 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64  pragma..*/.#ifnd
3aa0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
3ab0: 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47  T_RECURSIVE_TRIG
3ac0: 47 45 52 53 0a 23 20 64 65 66 69 6e 65 20 53 51  GERS.# define SQ
3ad0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43  LITE_DEFAULT_REC
3ae0: 55 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 20  URSIVE_TRIGGERS 
3af0: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
3b00: 50 72 6f 76 69 64 65 20 61 20 64 65 66 61 75 6c  Provide a defaul
3b10: 74 20 76 61 6c 75 65 20 66 6f 72 20 53 51 4c 49  t value for SQLI
3b20: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e  TE_TEMP_STORE in
3b30: 20 63 61 73 65 20 69 74 20 69 73 20 6e 6f 74 20   case it is not 
3b40: 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20  specified.** on 
3b50: 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  the command-line
3b60: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
3b70: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20  TE_TEMP_STORE.# 
3b80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45  define SQLITE_TE
3b90: 4d 50 5f 53 54 4f 52 45 20 31 0a 23 20 64 65 66  MP_STORE 1.# def
3ba0: 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  ine SQLITE_TEMP_
3bb0: 53 54 4f 52 45 5f 78 63 20 31 20 20 2f 2a 20 45  STORE_xc 1  /* E
3bc0: 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d  xclude from ctim
3bd0: 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  e.c */.#endif../
3be0: 2a 0a 2a 2a 20 49 66 20 6e 6f 20 76 61 6c 75 65  *.** If no value
3bf0: 20 68 61 73 20 62 65 65 6e 20 70 72 6f 76 69 64   has been provid
3c00: 65 64 20 66 6f 72 20 53 51 4c 49 54 45 5f 4d 41  ed for SQLITE_MA
3c10: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
3c20: 2c 20 6f 72 20 69 66 0a 2a 2a 20 53 51 4c 49 54  , or if.** SQLIT
3c30: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 73 20  E_TEMP_STORE is 
3c40: 73 65 74 20 74 6f 20 33 20 28 6e 65 76 65 72 20  set to 3 (never 
3c50: 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69  use temporary fi
3c60: 6c 65 73 29 2c 20 73 65 74 20 69 74 20 0a 2a 2a  les), set it .**
3c70: 20 74 6f 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66   to zero..*/.#if
3c80: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
3c90: 52 45 3d 3d 33 20 7c 7c 20 53 51 4c 49 54 45 5f  RE==3 || SQLITE_
3ca0: 54 48 52 45 41 44 53 41 46 45 3d 3d 30 0a 23 20  THREADSAFE==0.# 
3cb0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58  undef SQLITE_MAX
3cc0: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a  _WORKER_THREADS.
3cd0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3ce0: 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
3cf0: 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e  DS 0.#endif.#ifn
3d00: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  def SQLITE_MAX_W
3d10: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
3d20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
3d30: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
3d40: 20 38 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   8.#endif.#ifnde
3d50: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
3d60: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a  _WORKER_THREADS.
3d70: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3d80: 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54  DEFAULT_WORKER_T
3d90: 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69 66 0a  HREADS 0.#endif.
3da0: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  #if SQLITE_DEFAU
3db0: 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  LT_WORKER_THREAD
3dc0: 53 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  S>SQLITE_MAX_WOR
3dd0: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 75 6e  KER_THREADS.# un
3de0: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  def SQLITE_MAX_W
3df0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
3e00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
3e10: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
3e20: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
3e30: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23  WORKER_THREADS.#
3e40: 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 47 43  endif.../*.** GC
3e50: 43 20 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e  C does not defin
3e60: 65 20 74 68 65 20 6f 66 66 73 65 74 6f 66 28 29  e the offsetof()
3e70: 20 6d 61 63 72 6f 20 73 6f 20 77 65 27 6c 6c 20   macro so we'll 
3e80: 68 61 76 65 20 74 6f 20 64 6f 20 69 74 0a 2a 2a  have to do it.**
3e90: 20 6f 75 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23   ourselves..*/.#
3ea0: 69 66 6e 64 65 66 20 6f 66 66 73 65 74 6f 66 0a  ifndef offsetof.
3eb0: 23 64 65 66 69 6e 65 20 6f 66 66 73 65 74 6f 66  #define offsetof
3ec0: 28 53 54 52 55 43 54 55 52 45 2c 46 49 45 4c 44  (STRUCTURE,FIELD
3ed0: 29 20 28 28 69 6e 74 29 28 28 63 68 61 72 2a 29  ) ((int)((char*)
3ee0: 26 28 28 53 54 52 55 43 54 55 52 45 2a 29 30 29  &((STRUCTURE*)0)
3ef0: 2d 3e 46 49 45 4c 44 29 29 0a 23 65 6e 64 69 66  ->FIELD)).#endif
3f00: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
3f10: 6f 20 63 6f 6d 70 75 74 65 20 6d 69 6e 69 6d 75  o compute minimu
3f20: 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d 20 6f 66  m and maximum of
3f30: 20 74 77 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f   two numbers..*/
3f40: 0a 23 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c 42  .#define MIN(A,B
3f50: 29 20 28 28 41 29 3c 28 42 29 3f 28 41 29 3a 28  ) ((A)<(B)?(A):(
3f60: 42 29 29 0a 23 64 65 66 69 6e 65 20 4d 41 58 28  B)).#define MAX(
3f70: 41 2c 42 29 20 28 28 41 29 3e 28 42 29 3f 28 41  A,B) ((A)>(B)?(A
3f80: 29 3a 28 42 29 29 0a 0a 2f 2a 0a 2a 2a 20 53 77  ):(B))../*.** Sw
3f90: 61 70 20 74 77 6f 20 6f 62 6a 65 63 74 73 20 6f  ap two objects o
3fa0: 66 20 74 79 70 65 20 54 59 50 45 2e 0a 2a 2f 0a  f type TYPE..*/.
3fb0: 23 64 65 66 69 6e 65 20 53 57 41 50 28 54 59 50  #define SWAP(TYP
3fc0: 45 2c 41 2c 42 29 20 7b 54 59 50 45 20 74 3d 41  E,A,B) {TYPE t=A
3fd0: 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a  ; A=B; B=t;}../*
3fe0: 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65  .** Check to see
3ff0: 20 69 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65   if this machine
4000: 20 75 73 65 73 20 45 42 43 44 49 43 2e 20 20 28   uses EBCDIC.  (
4010: 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20  Yes, believe it 
4020: 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65  or.** not, there
4030: 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69   are still machi
4040: 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20 74 68  nes out there th
4050: 61 74 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a  at use EBCDIC.).
4060: 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c  */.#if 'A' == '\
4070: 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51  301'.# define SQ
4080: 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65  LITE_EBCDIC 1.#e
4090: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  lse.# define SQL
40a0: 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64  ITE_ASCII 1.#end
40b0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65  if../*.** Intege
40c0: 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65  rs of known size
40d0: 73 2e 20 20 54 68 65 73 65 20 74 79 70 65 64 65  s.  These typede
40e0: 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  fs might change 
40f0: 66 6f 72 20 61 72 63 68 69 74 65 63 74 75 72 65  for architecture
4100: 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73  s.** where the s
4110: 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72 65 70  izes very.  Prep
4120: 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20  rocessor macros 
4130: 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f  are available so
4140: 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70   that the.** typ
4150: 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e  es can be conven
4160: 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64  iently redefined
4170: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65   at compile-type
4180: 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a  .  Like this:.**
4190: 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63 20 27  .**         cc '
41a0: 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c  -DUINTPTR_TYPE=l
41b0: 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e  ong long int' ..
41c0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e  ..*/.#ifndef UIN
41d0: 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T32_TYPE.# ifdef
41e0: 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23   HAVE_UINT32_T.#
41f0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f    define UINT32_
4200: 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20  TYPE uint32_t.# 
4210: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
4220: 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67  INT32_TYPE unsig
4230: 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ned int.# endif.
4240: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
4250: 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64  INT16_TYPE.# ifd
4260: 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54  ef HAVE_UINT16_T
4270: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31  .#  define UINT1
4280: 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a  6_TYPE uint16_t.
4290: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
42a0: 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73   UINT16_TYPE uns
42b0: 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a  igned short int.
42c0: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
42d0: 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50  ifndef INT16_TYP
42e0: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 49  E.# ifdef HAVE_I
42f0: 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65  NT16_T.#  define
4300: 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31   INT16_TYPE int1
4310: 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  6_t.# else.#  de
4320: 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20  fine INT16_TYPE 
4330: 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69  short int.# endi
4340: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
4350: 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66   UINT8_TYPE.# if
4360: 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54  def HAVE_UINT8_T
4370: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38  .#  define UINT8
4380: 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20  _TYPE uint8_t.# 
4390: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
43a0: 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e  INT8_TYPE unsign
43b0: 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a  ed char.# endif.
43c0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49  #endif.#ifndef I
43d0: 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66  NT8_TYPE.# ifdef
43e0: 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20   HAVE_INT8_T.#  
43f0: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
4400: 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23   int8_t.# else.#
4410: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
4420: 50 45 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23  PE signed char.#
4430: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
4440: 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45  fndef LONGDOUBLE
4450: 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c  _TYPE.# define L
4460: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c  ONGDOUBLE_TYPE l
4470: 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69  ong double.#endi
4480: 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65  f.typedef sqlite
4490: 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20  _int64 i64;     
44a0: 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73       /* 8-byte s
44b0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
44c0: 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f  .typedef sqlite_
44d0: 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20  uint64 u64;     
44e0: 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e      /* 8-byte un
44f0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
4500: 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 33 32  /.typedef UINT32
4510: 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20 20 20  _TYPE u32;      
4520: 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75       /* 4-byte u
4530: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
4540: 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31  */.typedef UINT1
4550: 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20 20 20  6_TYPE u16;     
4560: 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20        /* 2-byte 
4570: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
4580: 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31   */.typedef INT1
4590: 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20 20 20  6_TYPE i16;     
45a0: 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65         /* 2-byte
45b0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
45c0: 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38  */.typedef UINT8
45d0: 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20 20 20  _TYPE u8;       
45e0: 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20        /* 1-byte 
45f0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
4600: 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38   */.typedef INT8
4610: 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20 20 20  _TYPE i8;       
4620: 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65         /* 1-byte
4630: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
4640: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45  */../*.** SQLITE
4650: 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20 75 36  _MAX_U32 is a u6
4660: 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20  4 constant that 
4670: 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75  is the maximum u
4680: 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74  64 value.** that
4690: 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69   can be stored i
46a0: 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75 74 20  n a u32 without 
46b0: 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54  loss of data.  T
46c0: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30  he value.** is 0
46d0: 78 30 30 30 30 30 30 30 30 66 66 66 66 66 66 66  x00000000fffffff
46e0: 66 2e 20 20 42 75 74 20 62 65 63 61 75 73 65 20  f.  But because 
46f0: 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d  of quirks of som
4700: 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a  e compilers, we.
4710: 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65 63 69  ** have to speci
4720: 66 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  fy the value in 
4730: 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69  the less intuiti
4740: 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a  ve manner shown:
4750: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
4760: 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28  TE_MAX_U32  ((((
4770: 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a  u64)1)<<32)-1)..
4780: 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79  /*.** The dataty
4790: 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  pe used to store
47a0: 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68   estimates of th
47b0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
47c0: 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f   in a.** table o
47d0: 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69  r index.  This i
47e0: 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e  s an unsigned in
47f0: 74 65 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72  teger type.  For
4800: 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65   99.9% of.** the
4810: 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74   world, a 32-bit
4820: 20 69 6e 74 65 67 65 72 20 69 73 20 73 75 66 66   integer is suff
4830: 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36  icient.  But a 6
4840: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a  4-bit integer.**
4850: 20 63 61 6e 20 62 65 20 75 73 65 64 20 61 74 20   can be used at 
4860: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20  compile-time if 
4870: 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64  desired..*/.#ifd
4880: 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f  ef SQLITE_64BIT_
4890: 53 54 41 54 53 0a 20 74 79 70 65 64 65 66 20 75  STATS. typedef u
48a0: 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  64 tRowcnt;    /
48b0: 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66  * 64-bit only if
48c0: 20 72 65 71 75 65 73 74 65 64 20 61 74 20 63 6f   requested at co
48d0: 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65  mpile-time */.#e
48e0: 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75 33 32  lse. typedef u32
48f0: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
4900: 33 32 2d 62 69 74 20 69 73 20 74 68 65 20 64 65  32-bit is the de
4910: 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  fault */.#endif.
4920: 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64  ./*.** Estimated
4930: 20 71 75 61 6e 74 69 74 69 65 73 20 75 73 65 64   quantities used
4940: 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61 6e 6e   for query plann
4950: 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64 20 61  ing are stored a
4960: 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61  s 16-bit.** loga
4970: 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71 75 61  rithms.  For qua
4980: 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76 61 6c  ntity X, the val
4990: 75 65 20 73 74 6f 72 65 64 20 69 73 20 31 30 2a  ue stored is 10*
49a0: 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73 0a 2a  log2(X).  This.*
49b0: 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73 69 62  * gives a possib
49c0: 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61 6c 75  le range of valu
49d0: 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74  es of approximat
49e0: 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f 20 31  ely 1.0e986 to 1
49f0: 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68  e-986..** But th
4a00: 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  e allowed values
4a10: 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e 20 20   are "grainy".  
4a20: 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75 65 20  Not every value 
4a30: 69 73 20 72 65 70 72 65 73 65 6e 74 61 62 6c 65  is representable
4a40: 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65  ..** For example
4a50: 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31 36 20  , quantities 16 
4a60: 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74 68 20  and 17 are both 
4a70: 72 65 70 72 65 73 65 6e 74 65 64 20 62 79 20 61  represented by a
4a80: 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30   LogEst.** of 40
4a90: 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69 6e 63  .  However, sinc
4aa0: 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74 69 74  e LogEst quantit
4ab0: 69 65 73 20 61 72 65 20 73 75 70 70 6f 73 65 20  ies are suppose 
4ac0: 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65 73 2c  to be estimates,
4ad0: 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20 76 61  .** not exact va
4ae0: 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70 72 65  lues, this impre
4af0: 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20  cision is not a 
4b00: 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22  problem..**.** "
4b10: 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f 72 74  LogEst" is short
4b20: 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68 6d 69   for "Logarithmi
4b30: 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a  c Estimate"..**.
4b40: 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20  ** Examples:.** 
4b50: 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20 20 20       1 -> 0     
4b60: 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e 20 34           20 -> 4
4b70: 33 20 20 20 20 20 20 20 20 20 20 31 30 30 30 30  3          10000
4b80: 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20 20 20   -> 132.**      
4b90: 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20 20 20  2 -> 10         
4ba0: 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20 20 20      25 -> 46    
4bb0: 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e 20 31        25000 -> 1
4bc0: 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20  46.**      3 -> 
4bd0: 31 36 20 20 20 20 20 20 20 20 20 20 20 20 31 30  16            10
4be0: 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20 20 31  0 -> 66        1
4bf0: 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a  000000 -> 199.**
4c00: 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20 20 20        4 -> 20   
4c10: 20 20 20 20 20 20 20 20 31 30 30 30 20 2d 3e 20          1000 -> 
4c20: 39 39 20 20 20 20 20 20 20 20 31 30 34 38 35 37  99        104857
4c30: 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20  6 -> 200.**     
4c40: 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20 20 20  10 -> 33        
4c50: 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30 20 20     1024 -> 100  
4c60: 20 20 34 32 39 34 39 36 37 32 39 36 20 2d 3e 20    4294967296 -> 
4c70: 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f  320.**.** The Lo
4c80: 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65 67 61  gEst can be nega
4c90: 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61 74 65  tive to indicate
4ca0: 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75   fractional valu
4cb0: 65 73 2e 20 0a 2a 2a 20 45 78 61 6d 70 6c 65 73  es. .** Examples
4cc0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d  :.**.**    0.5 -
4cd0: 3e 20 2d 31 30 20 20 20 20 20 20 20 20 20 20 20  > -10           
4ce0: 30 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20 20  0.1 -> -33      
4cf0: 20 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a    0.0625 -> -40.
4d00: 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36  */.typedef INT16
4d10: 5f 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f  _TYPE LogEst;../
4d20: 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 51 4c  *.** Set the SQL
4d30: 49 54 45 5f 50 54 52 53 49 5a 45 20 6d 61 63 72  ITE_PTRSIZE macr
4d40: 6f 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  o to the number 
4d50: 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 70 6f  of bytes in a po
4d60: 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66  inter.*/.#ifndef
4d70: 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 0a   SQLITE_PTRSIZE.
4d80: 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 53  # if defined(__S
4d90: 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 29  IZEOF_POINTER__)
4da0: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
4db0: 54 45 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49 5a  TE_PTRSIZE __SIZ
4dc0: 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23 20  EOF_POINTER__.# 
4dd0: 65 6c 69 66 20 64 65 66 69 6e 65 64 28 69 33 38  elif defined(i38
4de0: 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  6)     || define
4df0: 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c  d(__i386__)   ||
4e00: 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36   defined(_M_IX86
4e10: 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 20  ) ||    \.      
4e20: 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29   defined(_M_ARM)
4e30: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
4e40: 61 72 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65 66  arm__)    || def
4e50: 69 6e 65 64 28 5f 5f 78 38 36 29 0a 23 20 20 20  ined(__x86).#   
4e60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
4e70: 52 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23  RSIZE 4.# else.#
4e80: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
4e90: 5f 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64  _PTRSIZE 8.# end
4ea0: 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  if.#endif../*.**
4eb0: 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72   Macros to deter
4ec0: 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68 65  mine whether the
4ed0: 20 6d 61 63 68 69 6e 65 20 69 73 20 62 69 67 20   machine is big 
4ee0: 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e  or little endian
4ef0: 2c 0a 2a 2a 20 61 6e 64 20 77 68 65 74 68 65 72  ,.** and whether
4f00: 20 6f 72 20 6e 6f 74 20 74 68 61 74 20 64 65 74   or not that det
4f10: 65 72 6d 69 6e 61 74 69 6f 6e 20 69 73 20 72 75  ermination is ru
4f20: 6e 2d 74 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c  n-time or compil
4f30: 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f  e-time..**.** Fo
4f40: 72 20 62 65 73 74 20 70 65 72 66 6f 72 6d 61 6e  r best performan
4f50: 63 65 2c 20 61 6e 20 61 74 74 65 6d 70 74 20 69  ce, an attempt i
4f60: 73 20 6d 61 64 65 20 74 6f 20 67 75 65 73 73 20  s made to guess 
4f70: 61 74 20 74 68 65 20 62 79 74 65 2d 6f 72 64 65  at the byte-orde
4f80: 72 0a 2a 2a 20 75 73 69 6e 67 20 43 2d 70 72 65  r.** using C-pre
4f90: 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73  processor macros
4fa0: 2e 20 20 49 66 20 74 68 61 74 20 69 73 20 75 6e  .  If that is un
4fb0: 73 75 63 63 65 73 73 66 75 6c 2c 20 6f 72 20 69  successful, or i
4fc0: 66 0a 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 52 55  f.** -DSQLITE_RU
4fd0: 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 3d  NTIME_BYTEORDER=
4fe0: 31 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 62  1 is set, then b
4ff0: 79 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65 74  yte-order is det
5000: 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72 75  ermined.** at ru
5010: 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65  n-time..*/.#ifde
5020: 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
5030: 41 54 49 4f 4e 0a 63 6f 6e 73 74 20 69 6e 74 20  ATION.const int 
5040: 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a  sqlite3one = 1;.
5050: 23 65 6c 73 65 0a 65 78 74 65 72 6e 20 63 6f 6e  #else.extern con
5060: 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e  st int sqlite3on
5070: 65 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 28 64  e;.#endif.#if (d
5080: 65 66 69 6e 65 64 28 69 33 38 36 29 20 20 20 20  efined(i386)    
5090: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33   || defined(__i3
50a0: 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e  86__)   || defin
50b0: 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20  ed(_M_IX86) ||  
50c0: 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64    \.     defined
50d0: 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64 65  (__x86_64) || de
50e0: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f  fined(__x86_64__
50f0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f  ) || defined(_M_
5100: 58 36 34 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20  X64)  ||    \.  
5110: 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d     defined(_M_AM
5120: 44 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  D64) || defined(
5130: 5f 4d 5f 41 52 4d 29 20 20 20 20 20 7c 7c 20 64  _M_ARM)     || d
5140: 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20  efined(__x86)   
5150: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66  ||    \.     def
5160: 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 29 20 26  ined(__arm__)) &
5170: 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
5180: 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52  E_RUNTIME_BYTEOR
5190: 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51  DER).# define SQ
51a0: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20  LITE_BYTEORDER  
51b0: 20 20 31 32 33 34 0a 23 20 64 65 66 69 6e 65 20    1234.# define 
51c0: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
51d0: 20 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53      0.# define S
51e0: 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49  QLITE_LITTLEENDI
51f0: 41 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51  AN 1.# define SQ
5200: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
5210: 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45    SQLITE_UTF16LE
5220: 0a 23 65 6e 64 69 66 0a 23 69 66 20 28 64 65 66  .#endif.#if (def
5230: 69 6e 65 64 28 73 70 61 72 63 29 20 20 20 20 7c  ined(sparc)    |
5240: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f  | defined(__ppc_
5250: 5f 29 29 20 20 5c 0a 20 20 20 20 26 26 20 21 64  _))  \.    && !d
5260: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 52 55  efined(SQLITE_RU
5270: 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 29  NTIME_BYTEORDER)
5280: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5290: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 34 33  _BYTEORDER    43
52a0: 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  21.# define SQLI
52b0: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
52c0: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
52d0: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30  E_LITTLEENDIAN 0
52e0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
52f0: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51  _UTF16NATIVE  SQ
5300: 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6e  LITE_UTF16BE.#en
5310: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
5320: 28 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45  (SQLITE_BYTEORDE
5330: 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  R).# define SQLI
5340: 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20  TE_BYTEORDER    
5350: 30 20 20 20 20 20 2f 2a 20 30 20 6d 65 61 6e 73  0     /* 0 means
5360: 20 22 75 6e 6b 6e 6f 77 6e 20 61 74 20 63 6f 6d   "unknown at com
5370: 70 69 6c 65 2d 74 69 6d 65 22 20 2a 2f 0a 23 20  pile-time" */.# 
5380: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
5390: 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68  GENDIAN    (*(ch
53a0: 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e  ar *)(&sqlite3on
53b0: 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  e)==0).# define 
53c0: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
53d0: 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26  IAN (*(char *)(&
53e0: 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a  sqlite3one)==1).
53f0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5400: 55 54 46 31 36 4e 41 54 49 56 45 20 20 28 53 51  UTF16NATIVE  (SQ
5410: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53  LITE_BIGENDIAN?S
5420: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51  QLITE_UTF16BE:SQ
5430: 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65  LITE_UTF16LE).#e
5440: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73  ndif../*.** Cons
5450: 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61  tants for the la
5460: 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65  rgest and smalle
5470: 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62  st possible 64-b
5480: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
5490: 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  rs..** These mac
54a0: 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e 65 64  ros are designed
54b0: 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74   to work correct
54c0: 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69  ly on both 32-bi
54d0: 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20  t and 64-bit.** 
54e0: 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64  compilers..*/.#d
54f0: 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e  efine LARGEST_IN
5500: 54 36 34 20 20 28 30 78 66 66 66 66 66 66 66 66  T64  (0xffffffff
5510: 7c 28 28 28 69 36 34 29 30 78 37 66 66 66 66 66  |(((i64)0x7fffff
5520: 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e  ff)<<32)).#defin
5530: 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  e SMALLEST_INT64
5540: 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41   (((i64)-1) - LA
5550: 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a  RGEST_INT64)../*
5560: 20 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20   .** Round up a 
5570: 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65  number to the ne
5580: 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70  xt larger multip
5590: 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69  le of 8.  This i
55a0: 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72  s used.** to for
55b0: 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d  ce 8-byte alignm
55c0: 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72  ent on 64-bit ar
55d0: 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a  chitectures..*/.
55e0: 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78  #define ROUND8(x
55f0: 29 20 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e  )     (((x)+7)&~
5600: 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20  7)../*.** Round 
5610: 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72  down to the near
5620: 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20  est multiple of 
5630: 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55  8.*/.#define ROU
5640: 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26  NDDOWN8(x) ((x)&
5650: 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72  ~7)../*.** Asser
5660: 74 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74  t that the point
5670: 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20  er X is aligned 
5680: 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75  to an 8-byte bou
5690: 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20  ndary.  This.** 
56a0: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e  macro is used on
56b0: 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65 72 74  ly within assert
56c0: 28 29 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  () to verify tha
56d0: 74 20 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a  t the code gets.
56e0: 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74  ** all alignment
56f0: 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f   restrictions co
5700: 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63  rrect..**.** Exc
5710: 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34  ept, if SQLITE_4
5720: 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41  _BYTE_ALIGNED_MA
5730: 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c  LLOC is defined,
5740: 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64   then the.** und
5750: 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29  erlying malloc()
5760: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
5770: 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75 73 20  might return us 
5780: 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a  4-byte aligned.*
5790: 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20  * pointers.  In 
57a0: 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20  that case, only 
57b0: 76 65 72 69 66 79 20 34 2d 62 79 74 65 20 61 6c  verify 4-byte al
57c0: 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64  ignment..*/.#ifd
57d0: 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45  ef SQLITE_4_BYTE
57e0: 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a  _ALIGNED_MALLOC.
57f0: 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42  # define EIGHT_B
5800: 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29  YTE_ALIGNMENT(X)
5810: 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29     ((((char*)(X)
5820: 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29 3d   - (char*)0)&3)=
5830: 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  =0).#else.# defi
5840: 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c  ne EIGHT_BYTE_AL
5850: 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28  IGNMENT(X)   (((
5860: 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68  (char*)(X) - (ch
5870: 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23 65  ar*)0)&7)==0).#e
5880: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61  ndif../*.** Disa
5890: 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74  ble MMAP on plat
58a0: 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20 69  forms where it i
58b0: 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77  s known to not w
58c0: 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ork.*/.#if defin
58d0: 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20  ed(__OpenBSD__) 
58e0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58  || defined(__QNX
58f0: 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53  NTO__).# undef S
5900: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
5910: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
5920: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
5930: 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  E 0.#endif../*.*
5940: 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d 75  * Default maximu
5950: 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79  m size of memory
5960: 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d   used by memory-
5970: 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74 68  mapped I/O in th
5980: 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20  e VFS.*/.#ifdef 
5990: 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c  __APPLE__.# incl
59a0: 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64 69  ude <TargetCondi
59b0: 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 20 69 66 20  tionals.h>.# if 
59c0: 54 41 52 47 45 54 5f 4f 53 5f 49 50 48 4f 4e 45  TARGET_OS_IPHONE
59d0: 0a 23 20 20 20 75 6e 64 65 66 20 53 51 4c 49 54  .#   undef SQLIT
59e0: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
59f0: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
5a00: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
5a10: 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  0.# endif.#endif
5a20: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5a30: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
5a40: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e  if defined(__lin
5a50: 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66  ux__) \.  || def
5a60: 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20  ined(_WIN32) \. 
5a70: 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 41   || (defined(__A
5a80: 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66 69 6e  PPLE__) && defin
5a90: 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a  ed(__MACH__)) \.
5aa0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73    || defined(__s
5ab0: 75 6e 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  un).#   define S
5ac0: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
5ad0: 49 5a 45 20 30 78 37 66 66 66 30 30 30 30 20 20  IZE 0x7fff0000  
5ae0: 2f 2a 20 32 31 34 37 34 31 38 31 31 32 20 2a 2f  /* 2147418112 */
5af0: 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69  .# else.#   defi
5b00: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
5b10: 41 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64 69  AP_SIZE 0.# endi
5b20: 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  f.# define SQLIT
5b30: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f  E_MAX_MMAP_SIZE_
5b40: 78 63 20 31 20 2f 2a 20 65 78 63 6c 75 64 65 20  xc 1 /* exclude 
5b50: 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a  from ctime.c */.
5b60: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
5b70: 65 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53  e default MMAP_S
5b80: 49 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61  IZE is zero on a
5b90: 6c 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f  ll platforms.  O
5ba0: 72 2c 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72  r, even if a lar
5bb0: 67 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d  ger.** default M
5bc0: 4d 41 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63  MAP_SIZE is spec
5bd0: 69 66 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65  ified at compile
5be0: 2d 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65  -time, make sure
5bf0: 20 74 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a   that it does.**
5c00: 20 6e 6f 74 20 65 78 63 65 65 64 20 74 68 65 20   not exceed the 
5c10: 6d 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a  maximum mmap siz
5c20: 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  e..*/.#ifndef SQ
5c30: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
5c40: 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20  P_SIZE.# define 
5c50: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
5c60: 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 64 65 66  MAP_SIZE 0.# def
5c70: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
5c80: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20  LT_MMAP_SIZE_xc 
5c90: 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20 66 72  1  /* Exclude fr
5ca0: 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65  om ctime.c */.#e
5cb0: 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f  ndif.#if SQLITE_
5cc0: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
5cd0: 45 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  E>SQLITE_MAX_MMA
5ce0: 50 5f 53 49 5a 45 0a 23 20 75 6e 64 65 66 20 53  P_SIZE.# undef S
5cf0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
5d00: 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65  AP_SIZE.# define
5d10: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
5d20: 4d 4d 41 50 5f 53 49 5a 45 20 53 51 4c 49 54 45  MMAP_SIZE SQLITE
5d30: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
5d40: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c  endif../*.** Onl
5d50: 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f  y one of SQLITE_
5d60: 45 4e 41 42 4c 45 5f 53 54 41 54 33 20 6f 72 20  ENABLE_STAT3 or 
5d70: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
5d80: 41 54 34 20 63 61 6e 20 62 65 20 64 65 66 69 6e  AT4 can be defin
5d90: 65 64 2e 0a 2a 2a 20 50 72 69 6f 72 69 74 79 20  ed..** Priority 
5da0: 69 73 20 67 69 76 65 6e 20 74 6f 20 53 51 4c 49  is given to SQLI
5db0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 2e  TE_ENABLE_STAT4.
5dc0: 20 20 49 66 20 65 69 74 68 65 72 20 61 72 65 20    If either are 
5dd0: 64 65 66 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a  defined, also.**
5de0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
5df0: 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
5e00: 54 41 54 34 0a 2a 2f 0a 23 69 66 64 65 66 20 53  TAT4.*/.#ifdef S
5e10: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
5e20: 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  T4.# undef SQLIT
5e30: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23  E_ENABLE_STAT3.#
5e40: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
5e50: 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
5e60: 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c  TAT4 1.#elif SQL
5e70: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
5e80: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5e90: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
5ea0: 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53  _STAT4 1.#elif S
5eb0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
5ec0: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 20 75 6e  T3_OR_STAT4.# un
5ed0: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
5ee0: 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
5ef0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53  .#endif../*.** S
5f00: 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
5f10: 45 44 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65  ED will be eithe
5f20: 72 20 31 20 6f 72 20 30 20 64 65 70 65 6e 64 69  r 1 or 0 dependi
5f30: 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72  ng on whether or
5f40: 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 53 65 6c 65   not.** the Sele
5f50: 63 74 20 71 75 65 72 79 20 67 65 6e 65 72 61 74  ct query generat
5f60: 6f 72 20 74 72 61 63 69 6e 67 20 6c 6f 67 69 63  or tracing logic
5f70: 20 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a   is turned on..*
5f80: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
5f90: 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64  LITE_DEBUG) || d
5fa0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
5fb0: 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45  ABLE_SELECTTRACE
5fc0: 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43  ).# define SELEC
5fd0: 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 31  TTRACE_ENABLED 1
5fe0: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
5ff0: 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42  SELECTTRACE_ENAB
6000: 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  LED 0.#endif../*
6010: 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
6020: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
6030: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
6040: 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
6050: 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20  busy-handler.** 
6060: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67  callback for a g
6070: 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64  iven sqlite hand
6080: 6c 65 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  le. .**.** The s
6090: 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65  qlite.busyHandle
60a0: 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  r member of the 
60b0: 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f  sqlite struct co
60c0: 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a  ntains the busy.
60d0: 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  ** callback for 
60e0: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
60f0: 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20  dle. Each pager 
6100: 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73  opened via the s
6110: 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20  qlite.** handle 
6120: 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e  is passed a poin
6130: 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75  ter to sqlite.bu
6140: 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62  syHandler. The b
6150: 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63  usy-handler.** c
6160: 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65  allback is curre
6170: 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c  ntly invoked onl
6180: 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61  y from within pa
6190: 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65  ger.c..*/.typede
61a0: 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  f struct BusyHan
61b0: 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72  dler BusyHandler
61c0: 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  ;.struct BusyHan
61d0: 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78  dler {.  int (*x
61e0: 46 75 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74  Func)(void *,int
61f0: 29 3b 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20  );  /* The busy 
6200: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  callback */.  vo
6210: 69 64 20 2a 70 41 72 67 3b 20 20 20 20 20 20 20  id *pArg;       
6220: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
6230: 74 20 61 72 67 20 74 6f 20 62 75 73 79 20 63 61  t arg to busy ca
6240: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20  llback */.  int 
6250: 6e 42 75 73 79 3b 20 20 20 20 20 20 20 20 20 20  nBusy;          
6260: 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d         /* Increm
6270: 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20  ented with each 
6280: 62 75 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a  busy call */.};.
6290: 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74  ./*.** Name of t
62a0: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
62b0: 73 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d  se table.  The m
62c0: 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74  aster database t
62d0: 61 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65  able.** is a spe
62e0: 63 69 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20  cial table that 
62f0: 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20  holds the names 
6300: 61 6e 64 20 61 74 74 72 69 62 75 74 65 73 20 6f  and attributes o
6310: 66 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61  f all.** user ta
6320: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
6330: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  ..*/.#define MAS
6340: 54 45 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22  TER_NAME       "
6350: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23  sqlite_master".#
6360: 64 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54  define TEMP_MAST
6370: 45 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65  ER_NAME  "sqlite
6380: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f  _temp_master"../
6390: 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61  *.** The root-pa
63a0: 67 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72  ge of the master
63b0: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e   database table.
63c0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54  .*/.#define MAST
63d0: 45 52 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a  ER_ROOT       1.
63e0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20  ./*.** The name 
63f0: 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 74 61  of the schema ta
6400: 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ble..*/.#define 
6410: 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20  SCHEMA_TABLE(x) 
6420: 20 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29   ((!OMIT_TEMPDB)
6430: 26 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41  &&(x==1)?TEMP_MA
6440: 53 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52  STER_NAME:MASTER
6450: 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20  _NAME)../*.** A 
6460: 63 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63 72  convenience macr
6470: 6f 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 74  o that returns t
6480: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65  he number of ele
6490: 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61  ments in.** an a
64a0: 72 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  rray..*/.#define
64b0: 20 41 72 72 61 79 53 69 7a 65 28 58 29 20 20 20   ArraySize(X)   
64c0: 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 58   ((int)(sizeof(X
64d0: 29 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29  )/sizeof(X[0])))
64e0: 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e  ../*.** Determin
64f0: 65 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e  e if the argumen
6500: 74 20 69 73 20 61 20 70 6f 77 65 72 20 6f 66 20  t is a power of 
6510: 74 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  two.*/.#define I
6520: 73 50 6f 77 65 72 4f 66 54 77 6f 28 58 29 20 28  sPowerOfTwo(X) (
6530: 28 28 58 29 26 28 28 58 29 2d 31 29 29 3d 3d 30  ((X)&((X)-1))==0
6540: 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  )../*.** The fol
6550: 6c 6f 77 69 6e 67 20 76 61 6c 75 65 20 61 73 20  lowing value as 
6560: 61 20 64 65 73 74 72 75 63 74 6f 72 20 6d 65 61  a destructor mea
6570: 6e 73 20 74 6f 20 75 73 65 20 73 71 6c 69 74 65  ns to use sqlite
6580: 33 44 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68  3DbFree()..** Th
6590: 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  e sqlite3DbFree(
65a0: 29 20 72 6f 75 74 69 6e 65 20 72 65 71 75 69 72  ) routine requir
65b0: 65 73 20 74 77 6f 20 70 61 72 61 6d 65 74 65 72  es two parameter
65c0: 73 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65  s instead of the
65d0: 20 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74   .** one paramet
65e0: 65 72 20 74 68 61 74 20 64 65 73 74 72 75 63 74  er that destruct
65f0: 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e  ors normally wan
6600: 74 2e 20 20 53 6f 20 77 65 20 68 61 76 65 20 74  t.  So we have t
6610: 6f 20 69 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20  o introduce .** 
6620: 74 68 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65  this magic value
6630: 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b   that the code k
6640: 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64  nows to handle d
6650: 69 66 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79  ifferently.  Any
6660: 20 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c   .** pointer wil
6670: 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c  l work here as l
6680: 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64 69 73  ong as it is dis
6690: 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54  tinct from SQLIT
66a0: 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20  E_STATIC.** and 
66b0: 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
66c0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
66d0: 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28  ITE_DYNAMIC   ((
66e0: 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74  sqlite3_destruct
66f0: 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d  or_type)sqlite3M
6700: 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a  allocSize)../*.*
6710: 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d  * When SQLITE_OM
6720: 49 54 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65  IT_WSD is define
6730: 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  d, it means that
6740: 20 74 68 65 20 74 61 72 67 65 74 20 70 6c 61 74   the target plat
6750: 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74  form does.** not
6760: 20 73 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c   support Writabl
6770: 65 20 53 74 61 74 69 63 20 44 61 74 61 20 28 57  e Static Data (W
6780: 53 44 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62  SD) such as glob
6790: 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20 76 61  al and static va
67a0: 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20  riables..** All 
67b0: 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65  variables must e
67c0: 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20  ither be on the 
67d0: 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63  stack or dynamic
67e0: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66  ally allocated f
67f0: 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e  rom.** the heap.
6800: 20 20 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e    When WSD is un
6810: 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76  supported, the v
6820: 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74  ariable declarat
6830: 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a  ions scattered.*
6840: 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65  * throughout the
6850: 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73   SQLite code mus
6860: 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e  t become constan
6870: 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65  ts instead.  The
6880: 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d   SQLITE_WSD.** m
6890: 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72  acro is used for
68a0: 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20   this purpose.  
68b0: 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72  And instead of r
68c0: 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76  eferencing the v
68d0: 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63  ariable.** direc
68e0: 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74 73 20  tly, we use its 
68f0: 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65  constant as a ke
6900: 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20  y to lookup the 
6910: 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74  run-time allocat
6920: 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61  ed.** buffer tha
6930: 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72  t holds real var
6940: 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73  iable.  The cons
6950: 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65  tant is also the
6960: 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20   initializer.** 
6970: 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65  for the run-time
6980: 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65   allocated buffe
6990: 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20  r..**.** In the 
69a0: 75 73 75 61 6c 20 63 61 73 65 20 77 68 65 72 65  usual case where
69b0: 20 57 53 44 20 69 73 20 73 75 70 70 6f 72 74 65   WSD is supporte
69c0: 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53  d, the SQLITE_WS
69d0: 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20  D and GLOBAL.** 
69e0: 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f  macros become no
69f0: 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65  -ops and have ze
6a00: 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69  ro performance i
6a10: 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66  mpact..*/.#ifdef
6a20: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
6a30: 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54  .  #define SQLIT
6a40: 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64  E_WSD const.  #d
6a50: 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76  efine GLOBAL(t,v
6a60: 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f  ) (*(t*)sqlite3_
6a70: 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29  wsd_find((void*)
6a80: 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29  &(v), sizeof(v))
6a90: 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
6aa0: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20  te3GlobalConfig 
6ab0: 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71  GLOBAL(struct Sq
6ac0: 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c  lite3Config, sql
6ad0: 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e  ite3Config).  in
6ae0: 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e  t sqlite3_wsd_in
6af0: 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29  it(int N, int J)
6b00: 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  ;.  void *sqlite
6b10: 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20  3_wsd_find(void 
6b20: 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73  *K, int L);.#els
6b30: 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49  e.  #define SQLI
6b40: 54 45 5f 57 53 44 20 0a 20 20 23 64 65 66 69 6e  TE_WSD .  #defin
6b50: 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a  e GLOBAL(t,v) v.
6b60: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
6b70: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71  3GlobalConfig sq
6b80: 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64  lite3Config.#end
6b90: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
6ba0: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61  llowing macros a
6bb0: 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  re used to suppr
6bc0: 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  ess compiler war
6bd0: 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20  nings and to.** 
6be0: 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f  make it clear to
6bf0: 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77   human readers w
6c00: 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70  hen a function p
6c10: 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69  arameter is deli
6c20: 62 65 72 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66  berately .** lef
6c30: 74 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20  t unused within 
6c40: 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75  the body of a fu
6c50: 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75  nction. This usu
6c60: 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65  ally happens whe
6c70: 6e 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20  n.** a function 
6c80: 69 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20  is called via a 
6c90: 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
6ca0: 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68  . For example th
6cb0: 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61  e .** implementa
6cc0: 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61  tion of an SQL a
6cd0: 67 67 72 65 67 61 74 65 20 73 74 65 70 20 63 61  ggregate step ca
6ce0: 6c 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75  llback may not u
6cf0: 73 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65  se the.** parame
6d00: 74 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74  ter indicating t
6d10: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  he number of arg
6d20: 75 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f  uments passed to
6d30: 20 74 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a   the aggregate,.
6d40: 2a 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74  ** if it knows t
6d50: 68 61 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f  hat this is enfo
6d60: 72 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a  rced elsewhere..
6d70: 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e  **.** When a fun
6d80: 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20  ction parameter 
6d90: 69 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61  is not used at a
6da0: 6c 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f  ll within the bo
6db0: 64 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  dy of a function
6dc0: 2c 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72  ,.** it is gener
6dd0: 61 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55  ally named "NotU
6de0: 73 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64  sed" or "NotUsed
6df0: 32 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67  2" to make thing
6e00: 73 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a  s even clearer..
6e10: 2a 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73  ** However, thes
6e20: 65 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73  e macros may als
6e30: 6f 20 62 65 20 75 73 65 64 20 74 6f 20 73 75 70  o be used to sup
6e40: 70 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72  press warnings r
6e50: 65 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72  elated to.** par
6e60: 61 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79  ameters that may
6e70: 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75   or may not be u
6e80: 73 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  sed depending on
6e90: 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74   compilation opt
6ea0: 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61  ions..** For exa
6eb0: 6d 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d  mple those param
6ec0: 65 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20  eters only used 
6ed0: 69 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74  in assert() stat
6ee0: 65 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65  ements. In these
6ef0: 0a 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70 61  .** cases the pa
6f00: 72 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d  rameters are nam
6f10: 65 64 20 61 73 20 70 65 72 20 74 68 65 20 75 73  ed as per the us
6f20: 75 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e  ual conventions.
6f30: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53  .*/.#define UNUS
6f40: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20  ED_PARAMETER(x) 
6f50: 28 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e  (void)(x).#defin
6f60: 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54  e UNUSED_PARAMET
6f70: 45 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f  ER2(x,y) UNUSED_
6f80: 50 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55  PARAMETER(x),UNU
6f90: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29  SED_PARAMETER(y)
6fa0: 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20  ../*.** Forward 
6fb0: 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74  references to st
6fc0: 72 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65  ructures.*/.type
6fd0: 64 65 66 20 73 74 72 75 63 74 20 41 67 67 49 6e  def struct AggIn
6fe0: 66 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65  fo AggInfo;.type
6ff0: 64 65 66 20 73 74 72 75 63 74 20 41 75 74 68 43  def struct AuthC
7000: 6f 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65  ontext AuthConte
7010: 78 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  xt;.typedef stru
7020: 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41  ct AutoincInfo A
7030: 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65  utoincInfo;.type
7040: 64 65 66 20 73 74 72 75 63 74 20 42 69 74 76 65  def struct Bitve
7050: 63 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65  c Bitvec;.typede
7060: 66 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71  f struct CollSeq
7070: 20 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65   CollSeq;.typede
7080: 66 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20  f struct Column 
7090: 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20  Column;.typedef 
70a0: 73 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79  struct Db Db;.ty
70b0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 63 68  pedef struct Sch
70c0: 65 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65  ema Schema;.type
70d0: 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20  def struct Expr 
70e0: 45 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74  Expr;.typedef st
70f0: 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78  ruct ExprList Ex
7100: 70 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20  prList;.typedef 
7110: 73 74 72 75 63 74 20 45 78 70 72 53 70 61 6e 20  struct ExprSpan 
7120: 45 78 70 72 53 70 61 6e 3b 0a 74 79 70 65 64 65  ExprSpan;.typede
7130: 66 20 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b  f struct FKey FK
7140: 65 79 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ey;.typedef stru
7150: 63 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  ct FuncDestructo
7160: 72 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  r FuncDestructor
7170: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7180: 20 46 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66   FuncDef FuncDef
7190: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
71a0: 20 46 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e   FuncDefHash Fun
71b0: 63 44 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65  cDefHash;.typede
71c0: 66 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 20  f struct IdList 
71d0: 49 64 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20  IdList;.typedef 
71e0: 73 74 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64  struct Index Ind
71f0: 65 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ex;.typedef stru
7200: 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49  ct IndexSample I
7210: 6e 64 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65  ndexSample;.type
7220: 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c  def struct KeyCl
7230: 61 73 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79  ass KeyClass;.ty
7240: 70 65 64 65 66 20 73 74 72 75 63 74 20 4b 65 79  pedef struct Key
7250: 49 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79  Info KeyInfo;.ty
7260: 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f  pedef struct Loo
7270: 6b 61 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65  kaside Lookaside
7280: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7290: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c   LookasideSlot L
72a0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79  ookasideSlot;.ty
72b0: 70 65 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64  pedef struct Mod
72c0: 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65  ule Module;.type
72d0: 64 65 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43  def struct NameC
72e0: 6f 6e 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65  ontext NameConte
72f0: 78 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  xt;.typedef stru
7300: 63 74 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a  ct Parse Parse;.
7310: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50  typedef struct P
7320: 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50  rintfArguments P
7330: 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a  rintfArguments;.
7340: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 52  typedef struct R
7350: 6f 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79  owSet RowSet;.ty
7360: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 61 76  pedef struct Sav
7370: 65 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74  epoint Savepoint
7380: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7390: 20 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a   Select Select;.
73a0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
73b0: 51 4c 69 74 65 54 68 72 65 61 64 20 53 51 4c 69  QLiteThread SQLi
73c0: 74 65 54 68 72 65 61 64 3b 0a 74 79 70 65 64 65  teThread;.typede
73d0: 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 44  f struct SelectD
73e0: 65 73 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a  est SelectDest;.
73f0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
7400: 72 63 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a  rcList SrcList;.
7410: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
7420: 74 72 41 63 63 75 6d 20 53 74 72 41 63 63 75 6d  trAccum StrAccum
7430: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7440: 20 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79   Table Table;.ty
7450: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62  pedef struct Tab
7460: 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b  leLock TableLock
7470: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7480: 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79   Token Token;.ty
7490: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 65  pedef struct Tre
74a0: 65 56 69 65 77 20 54 72 65 65 56 69 65 77 3b 0a  eView TreeView;.
74b0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
74c0: 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a  rigger Trigger;.
74d0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
74e0: 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67 65  riggerPrg Trigge
74f0: 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74  rPrg;.typedef st
7500: 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
7510: 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79   TriggerStep;.ty
7520: 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e 70  pedef struct Unp
7530: 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61  ackedRecord Unpa
7540: 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65  ckedRecord;.type
7550: 64 65 66 20 73 74 72 75 63 74 20 56 54 61 62 6c  def struct VTabl
7560: 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65  e VTable;.typede
7570: 66 20 73 74 72 75 63 74 20 56 74 61 62 43 74 78  f struct VtabCtx
7580: 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65   VtabCtx;.typede
7590: 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20  f struct Walker 
75a0: 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20  Walker;.typedef 
75b0: 73 74 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f  struct WhereInfo
75c0: 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65   WhereInfo;.type
75d0: 64 65 66 20 73 74 72 75 63 74 20 57 69 74 68 20  def struct With 
75e0: 57 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  With;../*.** Def
75f0: 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65  er sourcing vdbe
7600: 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75  .h and btree.h u
7610: 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65 20 22  ntil after the "
7620: 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73  u8" and .** "Bus
7630: 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64 65  yHandler" typede
7640: 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f 20  fs. vdbe.h also 
7650: 72 65 71 75 69 72 65 73 20 61 20 66 65 77 20 6f  requires a few o
7660: 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20  f the opaque.** 
7670: 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28 69  pointer types (i
7680: 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65 66  .e. FuncDef) def
7690: 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23  ined above..*/.#
76a0: 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e 68  include "btree.h
76b0: 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62 65  ".#include "vdbe
76c0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61  .h".#include "pa
76d0: 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  ger.h".#include 
76e0: 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e 63  "pcache.h"..#inc
76f0: 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63  lude "os.h".#inc
7700: 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a  lude "mutex.h"..
7710: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61  ./*.** Each data
7720: 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20  base file to be 
7730: 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65 20  accessed by the 
7740: 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73  system is an ins
7750: 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20  tance.** of the 
7760: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
7770: 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65 20  ure.  There are 
7780: 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20  normally two of 
7790: 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73  these structures
77a0: 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74  .** in the sqlit
77b0: 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20  e.aDb[] array.  
77c0: 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61  aDb[0] is the ma
77d0: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
77e0: 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69   and.** aDb[1] i
77f0: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
7800: 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64  ile used to hold
7810: 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
7820: 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a  s.  Additional.*
7830: 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79 20  * databases may 
7840: 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a  be attached..*/.
7850: 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68  struct Db {.  ch
7860: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
7870: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
7880: 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  is database */. 
7890: 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20   Btree *pBt;    
78a0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54        /* The B*T
78b0: 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66 6f  ree structure fo
78c0: 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  r this database 
78d0: 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66  file */.  u8 saf
78e0: 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f  ety_level;     /
78f0: 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65  * How aggressive
7900: 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61   at syncing data
7910: 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63   to disk */.  Sc
7920: 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
7930: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
7940: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
7950: 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65   (possibly share
7960: 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  d) */.};../*.** 
7970: 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
7980: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
7990: 75 63 74 75 72 65 20 73 74 6f 72 65 73 20 61 20  ucture stores a 
79a0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
79b0: 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65  .**.** Most Sche
79c0: 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61  ma objects are a
79d0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
79e0: 20 42 74 72 65 65 2e 20 20 54 68 65 20 65 78 63   Btree.  The exc
79f0: 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65  eption is.** the
7a00: 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20   Schema for the 
7a10: 54 45 4d 50 20 64 61 74 61 62 61 65 73 20 28 73  TEMP databaes (s
7a20: 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77  qlite3.aDb[1]) w
7a30: 68 69 63 68 20 69 73 20 66 72 65 65 2d 73 74 61  hich is free-sta
7a40: 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61  nding..** In sha
7a50: 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20  red cache mode, 
7a60: 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20  a single Schema 
7a70: 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68  object can be sh
7a80: 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65  ared by multiple
7a90: 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74 20  .** Btrees that 
7aa0: 72 65 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d  refer to the sam
7ab0: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53  e underlying BtS
7ac0: 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a  hared object..**
7ad0: 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65   .** Schema obje
7ae0: 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69  cts are automati
7af0: 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65  cally deallocate
7b00: 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20  d when the last 
7b10: 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65  Btree that.** re
7b20: 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73  ferences them is
7b30: 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68   destroyed.   Th
7b40: 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73  e TEMP Schema is
7b50: 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20   manually freed 
7b60: 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c  by.** sqlite3_cl
7b70: 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68  ose()..*.** A th
7b80: 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c  read must be hol
7b90: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
7ba0: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
7bb0: 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72  g Btree in order
7bc0: 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63  .** to access Sc
7bd0: 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54  hema content.  T
7be0: 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74  his implies that
7bf0: 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73 74   the thread must
7c00: 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64   also be.** hold
7c10: 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74  ing a mutex on t
7c20: 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65  he sqlite3 conne
7c30: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68  ction pointer th
7c40: 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65  at owns the Btre
7c50: 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50  e..** For a TEMP
7c60: 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68   Schema, only th
7c70: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74  e connection mut
7c80: 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a  ex is required..
7c90: 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61  */.struct Schema
7ca0: 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f   {.  int schema_
7cb0: 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74  cookie;   /* Dat
7cc0: 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65 72  abase schema ver
7cd0: 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20  sion number for 
7ce0: 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69  this file */.  i
7cf0: 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20  nt iGeneration; 
7d00: 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f      /* Generatio
7d10: 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72  n counter.  Incr
7d20: 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63  emented with eac
7d30: 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61  h change */.  Ha
7d40: 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20  sh tblHash;     
7d50: 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73     /* All tables
7d60: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
7d70: 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61   */.  Hash idxHa
7d80: 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  sh;        /* Al
7d90: 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65  l (named) indice
7da0: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
7db0: 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67  e */.  Hash trig
7dc0: 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41  Hash;       /* A
7dd0: 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64 65  ll triggers inde
7de0: 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20  xed by name */. 
7df0: 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20   Hash fkeyHash; 
7e00: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72        /* All for
7e10: 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66  eign keys by ref
7e20: 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61  erenced table na
7e30: 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  me */.  Table *p
7e40: 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20  SeqTab;      /* 
7e50: 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  The sqlite_seque
7e60: 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20 62  nce table used b
7e70: 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  y AUTOINCREMENT 
7e80: 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72  */.  u8 file_for
7e90: 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68  mat;      /* Sch
7ea0: 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69  ema format versi
7eb0: 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65  on for this file
7ec0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
7ed0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
7ee0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64  xt encoding used
7ef0: 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61 73   by this databas
7f00: 65 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65 6d  e */.  u16 schem
7f10: 61 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46  aFlags;     /* F
7f20: 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20  lags associated 
7f30: 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d 61  with this schema
7f40: 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f   */.  int cache_
7f50: 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75  size;      /* Nu
7f60: 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f  mber of pages to
7f70: 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63 68   use in the cach
7f80: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  e */.};../*.** T
7f90: 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20  hese macros can 
7fa0: 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c  be used to test,
7fb0: 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62   set, or clear b
7fc0: 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44  its in the .** D
7fd0: 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73  b.pSchema->flags
7fe0: 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
7ff0: 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  ne DbHasProperty
8000: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44  (D,I,P)     (((D
8010: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
8020: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28  a->schemaFlags&(
8030: 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e  P))==(P)).#defin
8040: 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72  e DbHasAnyProper
8050: 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29  ty(D,I,P)  (((D)
8060: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
8070: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50  ->schemaFlags&(P
8080: 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 44  ))!=0).#define D
8090: 62 53 65 74 50 72 6f 70 65 72 74 79 28 44 2c 49  bSetProperty(D,I
80a0: 2c 50 29 20 20 20 20 20 28 44 29 2d 3e 61 44 62  ,P)     (D)->aDb
80b0: 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68  [I].pSchema->sch
80c0: 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64  emaFlags|=(P).#d
80d0: 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f  efine DbClearPro
80e0: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28  perty(D,I,P)   (
80f0: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
8100: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26  ma->schemaFlags&
8110: 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  =~(P)../*.** All
8120: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
8130: 74 68 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e  the DB.pSchema->
8140: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a  flags field..**.
8150: 2a 2a 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61  ** The DB_Schema
8160: 4c 6f 61 64 65 64 20 66 6c 61 67 20 69 73 20 73  Loaded flag is s
8170: 65 74 20 61 66 74 65 72 20 74 68 65 20 64 61 74  et after the dat
8180: 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
8190: 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e   been.** read in
81a0: 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68  to internal hash
81b0: 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44   tables..**.** D
81c0: 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d  B_UnresetViews m
81d0: 65 61 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72  eans that one or
81e0: 20 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76 65   more views have
81f0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68   column names th
8200: 61 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20  at.** have been 
8210: 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20  filled out.  If 
8220: 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  the schema chang
8230: 65 73 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e  es, these column
8240: 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20   names might.** 
8250: 63 68 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74  changes and so t
8260: 68 65 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65  he view will nee
8270: 64 20 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a  d to be reset..*
8280: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68  /.#define DB_Sch
8290: 65 6d 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30  emaLoaded    0x0
82a0: 30 30 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65  001  /* The sche
82b0: 6d 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64  ma has been load
82c0: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  ed */.#define DB
82d0: 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 20 20  _UnresetViews   
82e0: 20 30 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65   0x0002  /* Some
82f0: 20 76 69 65 77 73 20 68 61 76 65 20 64 65 66 69   views have defi
8300: 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ned column names
8310: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45   */.#define DB_E
8320: 6d 70 74 79 20 20 20 20 20 20 20 20 20 20 20 30  mpty           0
8330: 78 30 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69  x0004  /* The fi
8340: 6c 65 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e  le is empty (len
8350: 67 74 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a  gth 0 bytes) */.
8360: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
8370: 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b  r of different k
8380: 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74  inds of things t
8390: 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74  hat can be limit
83a0: 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20  ed.** using the 
83b0: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20  sqlite3_limit() 
83c0: 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64  interface..*/.#d
83d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c  efine SQLITE_N_L
83e0: 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d  IMIT (SQLITE_LIM
83f0: 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  IT_WORKER_THREAD
8400: 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b  S+1)../*.** Look
8410: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20  aside malloc is 
8420: 61 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73  a set of fixed-s
8430: 69 7a 65 20 62 75 66 66 65 72 73 20 74 68 61 74  ize buffers that
8440: 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20   can be used.** 
8450: 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c  to satisfy small
8460: 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72   transient memor
8470: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71  y allocation req
8480: 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74  uests for object
8490: 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20  s.** associated 
84a0: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
84b0: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
84c0: 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20  ction.  The use 
84d0: 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  of.** lookaside 
84e0: 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20  malloc provides 
84f0: 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65  a significant pe
8500: 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63  rformance enhanc
8510: 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78  ement.** (approx
8520: 20 31 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e   10%) by avoidin
8530: 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f  g numerous mallo
8540: 63 2f 66 72 65 65 20 72 65 71 75 65 73 74 73 20  c/free requests 
8550: 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a  while parsing.**
8560: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e   SQL statements.
8570: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61  .**.** The Looka
8580: 73 69 64 65 20 73 74 72 75 63 74 75 72 65 20 68  side structure h
8590: 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69  olds configurati
85a0: 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  on information a
85b0: 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b  bout the.** look
85c0: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62  aside malloc sub
85d0: 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76  system.  Each av
85e0: 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61  ailable memory a
85f0: 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20  llocation in.** 
8600: 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75  the lookaside su
8610: 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65  bsystem is store
8620: 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d on a linked li
8630: 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53  st of LookasideS
8640: 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a  lot.** objects..
8650: 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20  **.** Lookaside 
8660: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
8670: 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72  only allowed for
8680: 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61 72   objects that ar
8690: 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20  e associated.** 
86a0: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
86b0: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
86c0: 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73  ction.  Hence, s
86d0: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
86e0: 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73  n cannot.** be s
86f0: 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69  tored in lookasi
8700: 64 65 20 62 65 63 61 75 73 65 20 69 6e 20 73 68  de because in sh
8710: 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20  ared cache mode 
8720: 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  the schema infor
8730: 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61  mation.** is sha
8740: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20  red by multiple 
8750: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
8760: 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65  ions.  Therefore
8770: 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a  , while parsing.
8780: 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  ** schema inform
8790: 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61  ation, the Looka
87a0: 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c  side.bEnabled fl
87b0: 61 67 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f  ag is cleared so
87c0: 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69   that.** lookasi
87d0: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  de allocations a
87e0: 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63  re not used to c
87f0: 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73 63 68  onstruct the sch
8800: 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a  ema objects..*/.
8810: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
8820: 20 7b 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20   {.  u16 sz;    
8830: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8840: 53 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66  Size of each buf
8850: 66 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  fer in bytes */.
8860: 20 20 75 38 20 62 45 6e 61 62 6c 65 64 3b 20 20    u8 bEnabled;  
8870: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 61 6c            /* Fal
8880: 73 65 20 74 6f 20 64 69 73 61 62 6c 65 20 6e 65  se to disable ne
8890: 77 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f  w lookaside allo
88a0: 63 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20  cations */.  u8 
88b0: 62 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20  bMalloced;      
88c0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
88d0: 70 53 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20  pStart obtained 
88e0: 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c  from sqlite3_mal
88f0: 6c 6f 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  loc() */.  int n
8900: 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Out;            
8910: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
8920: 62 75 66 66 65 72 73 20 63 75 72 72 65 6e 74 6c  buffers currentl
8930: 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f  y checked out */
8940: 0a 20 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20  .  int mxOut;   
8950: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 69             /* Hi
8960: 67 68 77 61 74 65 72 20 6d 61 72 6b 20 66 6f 72  ghwater mark for
8970: 20 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61   nOut */.  int a
8980: 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20  nStat[3];       
8990: 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20     /* 0: hits.  
89a0: 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20  1: size misses. 
89b0: 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20   2: full misses 
89c0: 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  */.  LookasideSl
89d0: 6f 74 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20  ot *pFree;   /* 
89e0: 4c 69 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c  List of availabl
89f0: 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76  e buffers */.  v
8a00: 6f 69 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20  oid *pStart;    
8a10: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
8a20: 62 79 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c  byte of availabl
8a30: 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a  e memory space *
8a40: 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20  /.  void *pEnd; 
8a50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
8a60: 69 72 73 74 20 62 79 74 65 20 70 61 73 74 20 65  irst byte past e
8a70: 6e 64 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  nd of available 
8a80: 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75  space */.};.stru
8a90: 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  ct LookasideSlot
8aa0: 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c   {.  LookasideSl
8ab0: 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a  ot *pNext;    /*
8ac0: 20 4e 65 78 74 20 62 75 66 66 65 72 20 69 6e 20   Next buffer in 
8ad0: 74 68 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65  the list of free
8ae0: 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a   buffers */.};..
8af0: 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74 61 62  /*.** A hash tab
8b00: 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20  le for function 
8b10: 64 65 66 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a  definitions..**.
8b20: 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75 6e  ** Hash each Fun
8b30: 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20 69  cDef structure i
8b40: 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 46  nto one of the F
8b50: 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20 73  uncDefHash.a[] s
8b60: 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69  lots..** Collisi
8b70: 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20 46  ons are on the F
8b80: 75 6e 63 44 65 66 2e 70 48 61 73 68 20 63 68 61  uncDef.pHash cha
8b90: 69 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  in..*/.struct Fu
8ba0: 6e 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75  ncDefHash {.  Fu
8bb0: 6e 63 44 65 66 20 2a 61 5b 32 33 5d 3b 20 20 20  ncDef *a[23];   
8bc0: 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c      /* Hash tabl
8bd0: 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  e for functions 
8be0: 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51  */.};..#ifdef SQ
8bf0: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
8c00: 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49  TICATION./*.** I
8c10: 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20  nformation held 
8c20: 69 6e 20 74 68 65 20 22 73 71 6c 69 74 65 33 22  in the "sqlite3"
8c30: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
8c40: 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20  tion object and 
8c50: 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67  used.** to manag
8c60: 65 20 75 73 65 72 20 61 75 74 68 65 6e 74 69 63  e user authentic
8c70: 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65  ation..*/.typede
8c80: 66 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  f struct sqlite3
8c90: 5f 75 73 65 72 61 75 74 68 20 73 71 6c 69 74 65  _userauth sqlite
8ca0: 33 5f 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75  3_userauth;.stru
8cb0: 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  ct sqlite3_usera
8cc0: 75 74 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c  uth {.  u8 authL
8cd0: 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20  evel;           
8ce0: 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
8cf0: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   authentication 
8d00: 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e  level */.  int n
8d10: 41 75 74 68 50 57 3b 20 20 20 20 20 20 20 20 20  AuthPW;         
8d20: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
8d30: 20 6f 66 20 74 68 65 20 7a 41 75 74 68 50 57 20   of the zAuthPW 
8d40: 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68  in bytes */.  ch
8d50: 61 72 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20  ar *zAuthPW;    
8d60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
8d70: 61 73 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20  assword used to 
8d80: 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a  authenticate */.
8d90: 20 20 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65    char *zAuthUse
8da0: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
8db0: 2f 2a 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65  /* User name use
8dc0: 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74  d to authenticat
8dd0: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f  e */.};../* Allo
8de0: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73  wed values for s
8df0: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e  qlite3_userauth.
8e00: 61 75 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65  authLevel */.#de
8e10: 66 69 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f  fine UAUTH_Unkno
8e20: 77 6e 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20  wn     0     /* 
8e30: 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e  Authentication n
8e40: 6f 74 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a  ot yet checked *
8e50: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
8e60: 46 61 69 6c 20 20 20 20 20 20 20 20 31 20 20 20  Fail        1   
8e70: 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e    /* User authen
8e80: 74 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20  tication failed 
8e90: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48  */.#define UAUTH
8ea0: 5f 55 73 65 72 20 20 20 20 20 20 20 20 32 20 20  _User        2  
8eb0: 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61     /* Authentica
8ec0: 74 65 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20  ted as a normal 
8ed0: 75 73 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  user */.#define 
8ee0: 55 41 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20  UAUTH_Admin     
8ef0: 20 20 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65    3     /* Authe
8f00: 6e 74 69 63 61 74 65 64 20 61 73 20 61 6e 20 61  nticated as an a
8f10: 64 6d 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a  dministrator */.
8f20: 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73  ./* Functions us
8f30: 65 64 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20  ed only by user 
8f40: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f  authorization lo
8f50: 67 69 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  gic */.int sqlit
8f60: 65 33 55 73 65 72 41 75 74 68 54 61 62 6c 65 28  e3UserAuthTable(
8f70: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
8f80: 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74  t sqlite3UserAut
8f90: 68 43 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69  hCheckLogin(sqli
8fa0: 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
8fb0: 2c 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,u8*);.void sqli
8fc0: 74 65 33 55 73 65 72 41 75 74 68 49 6e 69 74 28  te3UserAuthInit(
8fd0: 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
8fe0: 73 71 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63  sqlite3CryptFunc
8ff0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
9000: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
9010: 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20  lue**);..#endif 
9020: 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  /* SQLITE_USER_A
9030: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f  UTHENTICATION */
9040: 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20  ../*.** typedef 
9050: 66 6f 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a  for the authoriz
9060: 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66  ation callback f
9070: 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64  unction..*/.#ifd
9080: 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  ef SQLITE_USER_A
9090: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20  UTHENTICATION.  
90a0: 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71  typedef int (*sq
90b0: 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69  lite3_xauth)(voi
90c0: 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  d*,int,const cha
90d0: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  r*,const char*,c
90e0: 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20  onst char*,.    
90f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9100: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74             const
9110: 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
9120: 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79  ar*);.#else.  ty
9130: 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69  pedef int (*sqli
9140: 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a  te3_xauth)(void*
9150: 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
9160: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
9170: 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20  st char*,.      
9180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9190: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
91a0: 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a  har*);.#endif...
91b0: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
91c0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ase connection i
91d0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
91e0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
91f0: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
9200: 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20  uct sqlite3 {.  
9210: 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66  sqlite3_vfs *pVf
9220: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
9230: 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f   OS Interface */
9240: 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a  .  struct Vdbe *
9250: 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20  pVdbe;          
9260: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69   /* List of acti
9270: 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ve virtual machi
9280: 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71  nes */.  CollSeq
9290: 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20   *pDfltColl;    
92a0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
92b0: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20  fault collating 
92c0: 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59  sequence (BINARY
92d0: 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  ) */.  sqlite3_m
92e0: 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20  utex *mutex;    
92f0: 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69       /* Connecti
9300: 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62  on mutex */.  Db
9310: 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20   *aDb;          
9320: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
9330: 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  ll backends */. 
9340: 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20   int nDb;       
9350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9360: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b  * Number of back
9370: 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69  ends currently i
9380: 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66  n use */.  int f
9390: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
93a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63           /* Misc
93b0: 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e  ellaneous flags.
93c0: 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
93d0: 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20  i64 lastRowid;  
93e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
93f0: 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72   ROWID of most r
9400: 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65  ecent insert (se
9410: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36  e above) */.  i6
9420: 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 szMmap;       
9430: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
9440: 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65  efault mmap_size
9450: 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e   setting */.  un
9460: 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46  signed int openF
9470: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46  lags;       /* F
9480: 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73  lags passed to s
9490: 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e  qlite3_vfs.xOpen
94a0: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43  () */.  int errC
94b0: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
94c0: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
94d0: 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20  cent error code 
94e0: 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20  (SQLITE_*) */.  
94f0: 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20  int errMask;    
9500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9510: 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20   & result codes 
9520: 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65  with this before
9530: 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20   returning */.  
9540: 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20  u16 dbOptFlags; 
9550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9560: 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65   Flags to enable
9570: 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a  /disable optimiz
9580: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 65  ations */.  u8 e
9590: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
95a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
95b0: 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  t encoding */.  
95c0: 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20  u8 autoCommit;  
95d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
95e0: 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74   The auto-commit
95f0: 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74   flag. */.  u8 t
9600: 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20  emp_store;      
9610: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20            /* 1: 
9620: 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30  file 2: memory 0
9630: 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75  : default */.  u
9640: 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20  8 mallocFailed; 
9650: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9660: 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65 20  True if we have 
9670: 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61  seen a malloc fa
9680: 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 64 66  ilure */.  u8 df
9690: 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20  ltLockMode;     
96a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
96b0: 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65  ult locking-mode
96c0: 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64 62   for attached db
96d0: 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68  s */.  signed ch
96e0: 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20  ar nextAutovac; 
96f0: 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20       /* Autovac 
9700: 73 65 74 74 69 6e 67 20 61 66 74 65 72 20 56 41  setting after VA
9710: 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20  CUUM if >=0 */. 
9720: 20 75 38 20 73 75 70 70 72 65 73 73 45 72 72 3b   u8 suppressErr;
9730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9740: 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65  * Do not issue e
9750: 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66  rror messages if
9760: 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74   true */.  u8 vt
9770: 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20  abOnConflict;   
9780: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
9790: 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20  e to return for 
97a0: 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c  s3_vtab_on_confl
97b0: 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73  ict() */.  u8 is
97c0: 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
97d0: 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65  oint;    /* True
97e0: 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73   if the outermos
97f0: 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61  t savepoint is a
9800: 20 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78   TS */.  int nex
9810: 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20  tPagesize;      
9820: 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69         /* Pagesi
9830: 7a 65 20 61 66 74 65 72 20 56 41 43 55 55 4d 20  ze after VACUUM 
9840: 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d  if >0 */.  u32 m
9850: 61 67 69 63 3b 20 20 20 20 20 20 20 20 20 20 20  agic;           
9860: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69           /* Magi
9870: 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74  c number for det
9880: 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75  ect library misu
9890: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61  se */.  int nCha
98a0: 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nge;            
98b0: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72        /* Value r
98c0: 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
98d0: 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a  e3_changes() */.
98e0: 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e    int nTotalChan
98f0: 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
9900: 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65  /* Value returne
9910: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74  d by sqlite3_tot
9920: 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a  al_changes() */.
9930: 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c    int aLimit[SQL
9940: 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20  ITE_N_LIMIT];   
9950: 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69  /* Limits */.  i
9960: 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61  nt nMaxSorterMma
9970: 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p;           /* 
9980: 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20  Maximum size of 
9990: 72 65 67 69 6f 6e 73 20 6d 61 70 70 65 64 20 62  regions mapped b
99a0: 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74  y sorter */.  st
99b0: 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74  ruct sqlite3Init
99c0: 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49  Info {      /* I
99d0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
99e0: 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a  during initializ
99f0: 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74  ation */.    int
9a00: 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20   newTnum;       
9a10: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74           /* Root
9a20: 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65  page of table be
9a30: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
9a40: 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20  */.    u8 iDb;  
9a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a60: 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66     /* Which db f
9a70: 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69  ile is being ini
9a80: 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20  tialized */.    
9a90: 75 38 20 62 75 73 79 3b 20 20 20 20 20 20 20 20  u8 busy;        
9aa0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
9ab0: 52 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79  RUE if currently
9ac0: 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f   initializing */
9ad0: 0a 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54 72  .    u8 orphanTr
9ae0: 69 67 67 65 72 3b 20 20 20 20 20 20 20 20 20 20  igger;          
9af0: 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65   /* Last stateme
9b00: 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54  nt is orphaned T
9b10: 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20  EMP trigger */. 
9b20: 20 20 20 75 38 20 69 6d 70 6f 73 74 65 72 54 61     u8 imposterTa
9b30: 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ble;           /
9b40: 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d  * Building an im
9b50: 70 6f 73 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a  poster table */.
9b60: 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20    } init;.  int 
9b70: 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20 20 20  nVdbeActive;    
9b80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
9b90: 62 65 72 20 6f 66 20 56 44 42 45 73 20 63 75 72  ber of VDBEs cur
9ba0: 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a  rently running *
9bb0: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61  /.  int nVdbeRea
9bc0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
9bd0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
9be0: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
9bf0: 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a   read or write *
9c00: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69  /.  int nVdbeWri
9c10: 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
9c20: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
9c30: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
9c40: 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20   read and write 
9c50: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78  */.  int nVdbeEx
9c60: 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ec;             
9c70: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
9c80: 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20  nested calls to 
9c90: 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20  VdbeExec() */.  
9ca0: 69 6e 74 20 6e 56 44 65 73 74 72 6f 79 3b 20 20  int nVDestroy;  
9cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9cc0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
9cd0: 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f 70  e OP_VDestroy op
9ce0: 65 72 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e  erations */.  in
9cf0: 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20  t nExtension;   
9d00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
9d10: 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20  umber of loaded 
9d20: 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20  extensions */.  
9d30: 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f  void **aExtensio
9d40: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
9d50: 20 41 72 72 61 79 20 6f 66 20 73 68 61 72 65 64   Array of shared
9d60: 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73   library handles
9d70: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54 72   */.  void (*xTr
9d80: 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74  ace)(void*,const
9d90: 20 63 68 61 72 2a 29 3b 20 20 20 20 20 20 20 20   char*);        
9da0: 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f  /* Trace functio
9db0: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72  n */.  void *pTr
9dc0: 61 63 65 41 72 67 3b 20 20 20 20 20 20 20 20 20  aceArg;         
9dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9de0: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
9df0: 74 68 65 20 74 72 61 63 65 20 66 75 6e 63 74 69  the trace functi
9e00: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  on */.  void (*x
9e10: 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63  Profile)(void*,c
9e20: 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b  onst char*,u64);
9e30: 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66    /* Profiling f
9e40: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
9e50: 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20  d *pProfileArg; 
9e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e70: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
9e80: 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75  nt to profile fu
9e90: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
9ea0: 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20   *pCommitArg;   
9eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9ec0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f   Argument to xCo
9ed0: 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a  mmitCallback() *
9ee0: 2f 20 20 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f  /   .  int (*xCo
9ef0: 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f  mmitCallback)(vo
9f00: 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f  id*);    /* Invo
9f10: 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d  ked at every com
9f20: 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mit. */.  void *
9f30: 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20  pRollbackArg;   
9f40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
9f50: 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c  rgument to xRoll
9f60: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a  backCallback() *
9f70: 2f 20 20 20 0a 20 20 76 6f 69 64 20 28 2a 78 52  /   .  void (*xR
9f80: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29  ollbackCallback)
9f90: 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f  (void*); /* Invo
9fa0: 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d  ked at every com
9fb0: 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mit. */.  void *
9fc0: 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f  pUpdateArg;.  vo
9fd0: 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c  id (*xUpdateCall
9fe0: 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  back)(void*,int,
9ff0: 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e   const char*,con
a000: 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f  st char*,sqlite_
a010: 69 6e 74 36 34 29 3b 0a 23 69 66 6e 64 65 66 20  int64);.#ifndef 
a020: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
a030: 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c    int (*xWalCall
a040: 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71  back)(void *, sq
a050: 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
a060: 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76  har *, int);.  v
a070: 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65  oid *pWalArg;.#e
a080: 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f  ndif.  void(*xCo
a090: 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c  llNeeded)(void*,
a0a0: 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65  sqlite3*,int eTe
a0b0: 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72  xtRep,const char
a0c0: 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c  *);.  void(*xCol
a0d0: 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a  lNeeded16)(void*
a0e0: 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54  ,sqlite3*,int eT
a0f0: 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69  extRep,const voi
a100: 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f  d*);.  void *pCo
a110: 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73  llNeededArg;.  s
a120: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45  qlite3_value *pE
a130: 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  rr;          /* 
a140: 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f  Most recent erro
a150: 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75  r message */.  u
a160: 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74  nion {.    volat
a170: 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72  ile int isInterr
a180: 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69  upted; /* True i
a190: 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  f sqlite3_interr
a1a0: 75 70 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c  upt has been cal
a1b0: 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c  led */.    doubl
a1c0: 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20  e notUsed1;     
a1d0: 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72         /* Spacer
a1e0: 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f   */.  } u1;.  Lo
a1f0: 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64  okaside lookasid
a200: 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  e;          /* L
a210: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
a220: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f  configuration */
a230: 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28  .  void (*xLog)(
a240: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
a250: 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74  char*); /* Funct
a260: 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20  ion for logging 
a270: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41  */.  void *pLogA
a280: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
a290: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
a2a0: 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78  st argument to x
a2b0: 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 6e 64 65 66  Log() */.#ifndef
a2c0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
a2d0: 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c  HORIZATION.  sql
a2e0: 69 74 65 33 5f 78 61 75 74 68 20 78 41 75 74 68  ite3_xauth xAuth
a2f0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63  ;          /* Ac
a300: 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69  cess authorizati
a310: 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  on function */. 
a320: 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b   void *pAuthArg;
a330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a340: 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74  * 1st argument t
a350: 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74  o the access aut
a360: 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65  h function */.#e
a370: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
a380: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
a390: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74  S_CALLBACK.  int
a3a0: 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f   (*xProgress)(vo
a3b0: 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68  id *);     /* Th
a3c0: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
a3d0: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
a3e0: 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20  ProgressArg;    
a3f0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
a400: 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65  nt to the progre
a410: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ss callback */. 
a420: 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72   unsigned nProgr
a430: 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f  essOps;        /
a440: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f  * Number of opco
a450: 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73  des for progress
a460: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e   callback */.#en
a470: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
a480: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
a490: 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61  ABLE.  int nVTra
a4a0: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
a4b0: 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65       /* Allocate
a4c0: 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e  d size of aVTran
a4d0: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64  s */.  Hash aMod
a4e0: 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ule;            
a4f0: 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65       /* populate
a500: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65  d by sqlite3_cre
a510: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
a520: 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62    VtabCtx *pVtab
a530: 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ctx;            
a540: 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61  /* Context for a
a550: 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65  ctive vtab conne
a560: 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56  ct/create */.  V
a570: 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b  Table **aVTrans;
a580: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a590: 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77  Virtual tables w
a5a0: 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63  ith open transac
a5b0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c  tions */.  VTabl
a5c0: 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20  e *pDisconnect; 
a5d0: 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74     /* Disconnect
a5e0: 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73   these in next s
a5f0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
a600: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e   */.#endif.  Fun
a610: 63 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b 20  cDefHash aFunc; 
a620: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61             /* Ha
a630: 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e  sh table of conn
a640: 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  ection functions
a650: 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c   */.  Hash aColl
a660: 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Seq;            
a670: 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61      /* All colla
a680: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a  ting sequences *
a690: 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20  /.  BusyHandler 
a6a0: 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20  busyHandler;    
a6b0: 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61    /* Busy callba
a6c0: 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74  ck */.  Db aDbSt
a6d0: 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20  atic[2];        
a6e0: 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20        /* Static 
a6f0: 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20  space for the 2 
a700: 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73  default backends
a710: 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
a720: 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20  *pSavepoint;    
a730: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
a740: 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73  ctive savepoints
a750: 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69   */.  int busyTi
a760: 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20  meout;          
a770: 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64      /* Busy hand
a780: 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20  ler timeout, in 
a790: 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  msec */.  int nS
a7a0: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
a7b0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
a7c0: 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63  r of non-transac
a7d0: 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  tion savepoints 
a7e0: 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d  */.  int nStatem
a7f0: 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ent;            
a800: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
a810: 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74  nested statement
a820: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a  -transactions  *
a830: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
a840: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
a850: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
a860: 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68  d constraints th
a870: 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  is transaction. 
a880: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
a890: 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
a8a0: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
a8b0: 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e  ed immediate con
a8c0: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  straints */.  in
a8d0: 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b  t *pnBytesFreed;
a8e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
a8f0: 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72  f not NULL, incr
a900: 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62  ement this in Db
a910: 46 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65 66  Free() */.#ifdef
a920: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
a930: 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f  NLOCK_NOTIFY.  /
a940: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
a950: 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c  variables are al
a960: 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 74  l protected by t
a970: 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52  he STATIC_MASTER
a980: 20 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f   .  ** mutex, no
a990: 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74  t by sqlite3.mut
a9a0: 65 78 2e 20 54 68 65 79 20 61 72 65 20 75 73 65  ex. They are use
a9b0: 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74  d by code in not
a9c0: 69 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20 20 2a  ify.c. .  **.  *
a9d0: 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b  * When X.pUnlock
a9e0: 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74  Connection==Y, t
a9f0: 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58  hat means that X
aa00: 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20   is waiting for 
aa10: 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b  Y to.  ** unlock
aa20: 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20   so that it can 
aa30: 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20  proceed..  **.  
aa40: 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b  ** When X.pBlock
aa50: 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59  ingConnection==Y
aa60: 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
aa70: 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74  t something that
aa80: 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72   X tried.  ** tr
aa90: 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74  ied to do recent
aaa0: 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68 20 61  ly failed with a
aab0: 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  n SQLITE_LOCKED 
aac0: 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63  error due to loc
aad0: 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20  ks.  ** held by 
aae0: 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  Y..  */.  sqlite
aaf0: 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e  3 *pBlockingConn
ab00: 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65  ection; /* Conne
ab10: 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65  ction that cause
ab20: 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  d SQLITE_LOCKED 
ab30: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55  */.  sqlite3 *pU
ab40: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b  nlockConnection;
ab50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
ab60: 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63  nnection to watc
ab70: 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a  h for unlock */.
ab80: 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41    void *pUnlockA
ab90: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
aba0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
abb0: 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f  ent to xUnlockNo
abc0: 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tify */.  void (
abd0: 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28  *xUnlockNotify)(
abe0: 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20  void **, int);  
abf0: 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79  /* Unlock notify
ac00: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73   callback */.  s
ac10: 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f  qlite3 *pNextBlo
ac20: 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  cked;        /* 
ac30: 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20  Next in list of 
ac40: 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e  all blocked conn
ac50: 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69  ections */.#endi
ac60: 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
ac70: 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54  USER_AUTHENTICAT
ac80: 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 75 73  ION.  sqlite3_us
ac90: 65 72 61 75 74 68 20 61 75 74 68 3b 20 20 20 20  erauth auth;    
aca0: 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68      /* User auth
acb0: 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72  entication infor
acc0: 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66  mation */.#endif
acd0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63  .};../*.** A mac
ace0: 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74  ro to discover t
acf0: 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61  he encoding of a
ad00: 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64   database..*/.#d
ad10: 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43  efine SCHEMA_ENC
ad20: 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b  (db) ((db)->aDb[
ad30: 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29  0].pSchema->enc)
ad40: 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29  .#define ENC(db)
ad50: 20 20 20 20 20 20 20 20 28 28 64 62 29 2d 3e 65          ((db)->e
ad60: 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  nc)../*.** Possi
ad70: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74  ble values for t
ad80: 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73  he sqlite3.flags
ad90: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
ada0: 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 20 20  ITE_VdbeTrace   
adb0: 20 20 20 30 78 30 30 30 30 30 30 30 31 20 20 2f     0x00000001  /
adc0: 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63 65 20  * True to trace 
add0: 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a  VDBE execution *
ade0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
adf0: 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20  _InternChanges  
ae00: 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20 55  0x00000002  /* U
ae10: 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20  ncommitted Hash 
ae20: 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f  table changes */
ae30: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ae40: 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30  FullFSync      0
ae50: 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20 55 73  x00000004  /* Us
ae60: 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20  e full fsync on 
ae70: 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23  the backend */.#
ae80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b  define SQLITE_Ck
ae90: 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30  ptFullFSync  0x0
aea0: 30 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20  0000008  /* Use 
aeb0: 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63  full fsync for c
aec0: 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65  heckpoint */.#de
aed0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68  fine SQLITE_Cach
aee0: 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30  eSpill     0x000
aef0: 30 30 30 31 30 20 20 2f 2a 20 4f 4b 20 74 6f 20  00010  /* OK to 
af00: 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68  spill pager cach
af10: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
af20: 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73  ITE_FullColNames
af30: 20 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f     0x00000020  /
af40: 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75  * Show full colu
af50: 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45  mn names on SELE
af60: 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  CT */.#define SQ
af70: 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d  LITE_ShortColNam
af80: 65 73 20 20 30 78 30 30 30 30 30 30 34 30 20 20  es  0x00000040  
af90: 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f  /* Show short co
afa0: 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23  lumns names */.#
afb0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
afc0: 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78 30  untRows      0x0
afd0: 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e  0000080  /* Coun
afe0: 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62  t rows changed b
aff0: 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20  y INSERT, */.   
b000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b020: 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45         /*   DELE
b030: 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e  TE, or UPDATE an
b040: 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20  d return */.    
b050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b070: 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63        /*   the c
b080: 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c  ount using a cal
b090: 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e  lback. */.#defin
b0a0: 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c  e SQLITE_NullCal
b0b0: 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30 30 31  lback   0x000001
b0c0: 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  00  /* Invoke th
b0d0: 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20  e callback once 
b0e0: 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20  if the */.      
b0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b110: 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20      /*   result 
b120: 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a  set is empty */.
b130: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
b140: 71 6c 54 72 61 63 65 20 20 20 20 20 20 20 30 78  qlTrace       0x
b150: 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44 65 62  00000200  /* Deb
b160: 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20  ug print SQL as 
b170: 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23  it executes */.#
b180: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
b190: 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30 78 30  beListing    0x0
b1a0: 30 30 30 30 34 30 30 20 20 2f 2a 20 44 65 62 75  0000400  /* Debu
b1b0: 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44  g listings of VD
b1c0: 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23  BE programs */.#
b1d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72  define SQLITE_Wr
b1e0: 69 74 65 53 63 68 65 6d 61 20 20 20 20 30 78 30  iteSchema    0x0
b1f0: 30 30 30 30 38 30 30 20 20 2f 2a 20 4f 4b 20 74  0000800  /* OK t
b200: 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f  o update SQLITE_
b210: 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e  MASTER */.#defin
b220: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64  e SQLITE_VdbeAdd
b230: 6f 70 54 72 61 63 65 20 30 78 30 30 30 30 31 30  opTrace 0x000010
b240: 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c  00  /* Trace sql
b250: 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 29 20  ite3VdbeAddOp() 
b260: 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65  calls */.#define
b270: 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68   SQLITE_IgnoreCh
b280: 65 63 6b 73 20 20 20 30 78 30 30 30 30 32 30 30  ecks   0x0000200
b290: 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66  0  /* Do not enf
b2a0: 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74  orce check const
b2b0: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
b2c0: 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63  e SQLITE_ReadUnc
b2d0: 6f 6d 6d 69 74 74 65 64 20 30 78 30 30 30 34 30  ommitted 0x00040
b2e0: 30 30 20 20 2f 2a 20 46 6f 72 20 73 68 61 72 65  00  /* For share
b2f0: 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a  d-cache mode */.
b300: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
b310: 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78  egacyFileFmt  0x
b320: 30 30 30 30 38 30 30 30 20 20 2f 2a 20 43 72 65  00008000  /* Cre
b330: 61 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65  ate new database
b340: 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f  s in format 1 */
b350: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b360: 52 65 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30  RecoveryMode   0
b370: 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20 49 67  x00010000  /* Ig
b380: 6e 6f 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f  nore schema erro
b390: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
b3a0: 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65  LITE_ReverseOrde
b3b0: 72 20 20 20 30 78 30 30 30 32 30 30 30 30 20 20  r   0x00020000  
b3c0: 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64  /* Reverse unord
b3d0: 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a  ered SELECTs */.
b3e0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
b3f0: 65 63 54 72 69 67 67 65 72 73 20 20 20 20 30 78  ecTriggers    0x
b400: 30 30 30 34 30 30 30 30 20 20 2f 2a 20 45 6e 61  00040000  /* Ena
b410: 62 6c 65 20 72 65 63 75 72 73 69 76 65 20 74 72  ble recursive tr
b420: 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e  iggers */.#defin
b430: 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e  e SQLITE_Foreign
b440: 4b 65 79 73 20 20 20 20 30 78 30 30 30 38 30 30  Keys    0x000800
b450: 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66  00  /* Enforce f
b460: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
b470: 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69  raints  */.#defi
b480: 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e  ne SQLITE_AutoIn
b490: 64 65 78 20 20 20 20 20 20 30 78 30 30 31 30 30  dex      0x00100
b4a0: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61  000  /* Enable a
b4b0: 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73  utomatic indexes
b4c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b4d0: 54 45 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e  TE_PreferBuiltin
b4e0: 20 20 30 78 30 30 32 30 30 30 30 30 20 20 2f 2a    0x00200000  /*
b4f0: 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62   Preference to b
b500: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f  uilt-in funcs */
b510: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b520: 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30  LoadExtension  0
b530: 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e  x00400000  /* En
b540: 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  able load_extens
b550: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
b560: 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67  QLITE_EnableTrig
b570: 67 65 72 20 20 30 78 30 30 38 30 30 30 30 30 20  ger  0x00800000 
b580: 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
b590: 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  le triggers */.#
b5a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65  define SQLITE_De
b5b0: 66 65 72 46 4b 73 20 20 20 20 20 20 20 30 78 30  ferFKs       0x0
b5c0: 31 30 30 30 30 30 30 20 20 2f 2a 20 44 65 66 65  1000000  /* Defe
b5d0: 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61  r all FK constra
b5e0: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
b5f0: 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79  SQLITE_QueryOnly
b600: 20 20 20 20 20 20 30 78 30 32 30 30 30 30 30 30        0x02000000
b610: 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74    /* Disable dat
b620: 61 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f  abase changes */
b630: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b640: 56 64 62 65 45 51 50 20 20 20 20 20 20 20 20 30  VdbeEQP        0
b650: 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20 44 65  x04000000  /* De
b660: 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55 45 52  bug EXPLAIN QUER
b670: 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e  Y PLAN */.#defin
b680: 65 20 53 51 4c 49 54 45 5f 56 61 63 75 75 6d 20  e SQLITE_Vacuum 
b690: 20 20 20 20 20 20 20 20 30 78 30 38 30 30 30 30          0x080000
b6a0: 30 30 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79  00  /* Currently
b6b0: 20 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a   in a VACUUM */.
b6c0: 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20  ../*.** Bits of 
b6d0: 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70  the sqlite3.dbOp
b6e0: 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61  tFlags field tha
b6f0: 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  t are used by th
b700: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73  e.** sqlite3_tes
b710: 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45  t_control(SQLITE
b720: 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49  _TESTCTRL_OPTIMI
b730: 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74  ZATIONS,...) int
b740: 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c  erface to.** sel
b750: 65 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65  ectively disable
b760: 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a   various optimiz
b770: 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ations..*/.#defi
b780: 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46  ne SQLITE_QueryF
b790: 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30 31 20  lattener 0x0001 
b7a0: 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74    /* Query flatt
b7b0: 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65  ening */.#define
b7c0: 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61   SQLITE_ColumnCa
b7d0: 63 68 65 20 20 20 20 30 78 30 30 30 32 20 20 20  che    0x0002   
b7e0: 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20  /* Column cache 
b7f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b800: 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20  E_GroupByOrder  
b810: 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f   0x0004   /* GRO
b820: 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52  UPBY cover of OR
b830: 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65  DERBY */.#define
b840: 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75   SQLITE_FactorOu
b850: 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20  tConst 0x0008   
b860: 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74  /* Constant fact
b870: 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20 20  oring */./*     
b880: 20 20 20 20 20 20 20 20 20 20 20 6e 6f 74 20 75             not u
b890: 73 65 64 20 20 20 20 30 78 30 30 31 30 20 20 20  sed    0x0010   
b8a0: 2f 2f 20 57 61 73 3a 20 53 51 4c 49 54 45 5f 49  // Was: SQLITE_I
b8b0: 64 78 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a 23  dxRealAsInt */.#
b8c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69  define SQLITE_Di
b8d0: 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30  stinctOpt    0x0
b8e0: 30 32 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43  020   /* DISTINC
b8f0: 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20  T using indexes 
b900: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b910: 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20  E_CoverIdxScan  
b920: 20 30 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76   0x0040   /* Cov
b930: 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e  ering index scan
b940: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b950: 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f  ITE_OrderByIdxJo
b960: 69 6e 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f  in 0x0080   /* O
b970: 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73  RDER BY of joins
b980: 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64   via index */.#d
b990: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62  efine SQLITE_Sub
b9a0: 71 43 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31  qCoroutine  0x01
b9b0: 30 30 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65  00   /* Evaluate
b9c0: 20 73 75 62 71 75 65 72 69 65 73 20 61 73 20 63   subqueries as c
b9d0: 6f 72 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65  oroutines */.#de
b9e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e  fine SQLITE_Tran
b9f0: 73 69 74 69 76 65 20 20 20 20 20 30 78 30 32 30  sitive     0x020
ba00: 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76  0   /* Transitiv
ba10: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
ba20: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ba30: 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30  OmitNoopJoin   0
ba40: 78 30 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20  x0400   /* Omit 
ba50: 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e  unused tables in
ba60: 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e   joins */.#defin
ba70: 65 20 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20  e SQLITE_Stat34 
ba80: 20 20 20 20 20 20 20 20 30 78 30 38 30 30 20 20          0x0800  
ba90: 20 2f 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72   /* Use STAT3 or
baa0: 20 53 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 23   STAT4 data */.#
bab0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c  define SQLITE_Al
bac0: 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30 78 66  lOpts        0xf
bad0: 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74  fff   /* All opt
bae0: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f  imizations */../
baf0: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20  *.** Macros for 
bb00: 74 65 73 74 69 6e 67 20 77 68 65 74 68 65 72 20  testing whether 
bb10: 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74  or not optimizat
bb20: 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65 64  ions are enabled
bb30: 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f   or disabled..*/
bb40: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
bb50: 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
bb60: 54 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  T.#define Optimi
bb70: 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64  zationDisabled(d
bb80: 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62 29  b, mask)  (((db)
bb90: 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61  ->dbOptFlags&(ma
bba0: 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  sk))!=0).#define
bbb0: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61   OptimizationEna
bbc0: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
bbd0: 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c   (((db)->dbOptFl
bbe0: 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a  ags&(mask))==0).
bbf0: 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f 70  #else.#define Op
bc00: 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c  timizationDisabl
bc10: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 30 0a  ed(db, mask)  0.
bc20: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
bc30: 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20  tionEnabled(db, 
bc40: 6d 61 73 6b 29 20 20 20 31 0a 23 65 6e 64 69 66  mask)   1.#endif
bc50: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
bc60: 72 75 65 20 69 66 20 69 74 20 4f 4b 20 74 6f 20  rue if it OK to 
bc70: 66 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20  factor constant 
bc80: 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f  expressions into
bc90: 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74   the initializat
bca0: 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65  ion.** code. The
bcb0: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50   argument is a P
bcc0: 61 72 73 65 20 6f 62 6a 65 63 74 20 66 6f 72 20  arse object for 
bcd0: 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
bce0: 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  or..*/.#define C
bcf0: 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50 29 20  onstFactorOk(P) 
bd00: 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63  ((P)->okConstFac
bd10: 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73  tor)../*.** Poss
bd20: 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20  ible values for 
bd30: 74 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63  the sqlite.magic
bd40: 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e   field..** The n
bd50: 75 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61 69  umbers are obtai
bd60: 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e  ned at random an
bd70: 64 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61  d have no specia
bd80: 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72  l meaning, other
bd90: 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64  .** than being d
bda0: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65  istinct from one
bdb0: 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65   another..*/.#de
bdc0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
bdd0: 43 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32  C_OPEN     0xa02
bde0: 39 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61  9a697  /* Databa
bdf0: 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64  se is open */.#d
be00: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
be10: 49 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66  IC_CLOSED   0x9f
be20: 33 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62  3c2d33  /* Datab
be30: 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f  ase is closed */
be40: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
be50: 4d 41 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30  MAGIC_SICK     0
be60: 78 34 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72  x4b771290  /* Er
be70: 72 6f 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67  ror and awaiting
be80: 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e   close */.#defin
be90: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42  e SQLITE_MAGIC_B
bea0: 55 53 59 20 20 20 20 20 30 78 66 30 33 62 37 39  USY     0xf03b79
beb0: 30 36 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  06  /* Database 
bec0: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
bed0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
bee0: 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20  TE_MAGIC_ERROR  
bef0: 20 20 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a    0xb5357930  /*
bf00: 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53   An SQLITE_MISUS
bf10: 45 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64  E error occurred
bf20: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
bf30: 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20  TE_MAGIC_ZOMBIE 
bf40: 20 20 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a    0x64cffc7f  /*
bf50: 20 43 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74   Close with last
bf60: 20 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65   statement close
bf70: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   */../*.** Each 
bf80: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  SQL function is 
bf90: 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e  defined by an in
bfa0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
bfb0: 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63  llowing.** struc
bfc0: 74 75 72 65 2e 20 20 41 20 70 6f 69 6e 74 65 72  ture.  A pointer
bfd0: 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
bfe0: 72 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  re is stored in 
bff0: 74 68 65 20 73 71 6c 69 74 65 2e 61 46 75 6e 63  the sqlite.aFunc
c000: 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 20  .** hash table. 
c010: 20 57 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 66   When multiple f
c020: 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 74 68  unctions have th
c030: 65 20 73 61 6d 65 20 6e 61 6d 65 2c 20 74 68 65  e same name, the
c040: 20 68 61 73 68 20 74 61 62 6c 65 0a 2a 2a 20 70   hash table.** p
c050: 6f 69 6e 74 73 20 74 6f 20 61 20 6c 69 6e 6b 65  oints to a linke
c060: 64 20 6c 69 73 74 20 6f 66 20 74 68 65 73 65 20  d list of these 
c070: 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73  structures..*/.s
c080: 74 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a  truct FuncDef {.
c090: 20 20 69 31 36 20 6e 41 72 67 3b 20 20 20 20 20    i16 nArg;     
c0a0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
c0b0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   of arguments.  
c0c0: 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74  -1 means unlimit
c0d0: 65 64 20 2a 2f 0a 20 20 75 31 36 20 66 75 6e 63  ed */.  u16 func
c0e0: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20  Flags;       /* 
c0f0: 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  Some combination
c100: 20 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f   of SQLITE_FUNC_
c110: 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73  * */.  void *pUs
c120: 65 72 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55  erData;     /* U
c130: 73 65 72 20 64 61 74 61 20 70 61 72 61 6d 65 74  ser data paramet
c140: 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20  er */.  FuncDef 
c150: 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20  *pNext;      /* 
c160: 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69  Next function wi
c170: 74 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a  th same name */.
c180: 20 20 76 6f 69 64 20 28 2a 78 46 75 6e 63 29 28    void (*xFunc)(
c190: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
c1a0: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
c1b0: 75 65 2a 2a 29 3b 20 2f 2a 20 52 65 67 75 6c 61  ue**); /* Regula
c1c0: 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  r function */.  
c1d0: 76 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73 71  void (*xStep)(sq
c1e0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
c1f0: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
c200: 2a 2a 29 3b 20 2f 2a 20 41 67 67 72 65 67 61 74  **); /* Aggregat
c210: 65 20 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64  e step */.  void
c220: 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71   (*xFinalize)(sq
c230: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b  lite3_context*);
c240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c250: 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 69 6e  /* Aggregate fin
c260: 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63 68 61 72  alizer */.  char
c270: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
c280: 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20   /* SQL name of 
c290: 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f  the function. */
c2a0: 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73  .  FuncDef *pHas
c2b0: 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  h;      /* Next 
c2c0: 77 69 74 68 20 61 20 64 69 66 66 65 72 65 6e 74  with a different
c2d0: 20 6e 61 6d 65 20 62 75 74 20 74 68 65 20 73 61   name but the sa
c2e0: 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20 46 75 6e  me hash */.  Fun
c2f0: 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65  cDestructor *pDe
c300: 73 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52  structor;   /* R
c310: 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64  eference counted
c320: 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63   destructor func
c330: 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  tion */.};../*.*
c340: 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65  * This structure
c350: 20 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20   encapsulates a 
c360: 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65  user-function de
c370: 73 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63  structor callbac
c380: 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  k (as.** configu
c390: 72 65 64 20 75 73 69 6e 67 20 63 72 65 61 74 65  red using create
c3a0: 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20  _function_v2()) 
c3b0: 61 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65 20  and a reference 
c3c0: 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a  counter. When.**
c3d0: 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e   create_function
c3e0: 5f 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20  _v2() is called 
c3f0: 74 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63  to create a func
c400: 74 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74  tion with a dest
c410: 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e  ructor,.** a sin
c420: 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68  gle object of th
c430: 69 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63  is type is alloc
c440: 61 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75  ated. FuncDestru
c450: 63 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74  ctor.nRef is set
c460: 20 74 6f 20 0a 2a 2a 20 74 68 65 20 6e 75 6d 62   to .** the numb
c470: 65 72 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62  er of FuncDef ob
c480: 6a 65 63 74 73 20 63 72 65 61 74 65 64 20 28 65  jects created (e
c490: 69 74 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65  ither 1 or 3, de
c4a0: 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
c4b0: 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65  er.** or not the
c4c0: 20 73 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64   specified encod
c4d0: 69 6e 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e  ing is SQLITE_AN
c4e0: 59 29 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e  Y). The FuncDef.
c4f0: 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d  pDestructor.** m
c500: 65 6d 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66  ember of each of
c510: 20 74 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66   the new FuncDef
c520: 20 6f 62 6a 65 63 74 73 20 69 73 20 73 65 74 20   objects is set 
c530: 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20  to point to the 
c540: 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e  allocated.** Fun
c550: 63 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a  cDestructor..**.
c560: 2a 2a 20 54 68 65 72 65 61 66 74 65 72 2c 20 77  ** Thereafter, w
c570: 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46  hen one of the F
c580: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69  uncDef objects i
c590: 73 20 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72  s deleted, the r
c5a0: 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e  eference.** coun
c5b0: 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74  t on this object
c5c0: 20 69 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e   is decremented.
c5d0: 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65 73   When it reaches
c5e0: 20 30 2c 20 74 68 65 20 64 65 73 74 72 75 63 74   0, the destruct
c5f0: 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64  or.** is invoked
c600: 20 61 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73   and the FuncDes
c610: 74 72 75 63 74 6f 72 20 73 74 72 75 63 74 75 72  tructor structur
c620: 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75  e freed..*/.stru
c630: 63 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  ct FuncDestructo
c640: 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a  r {.  int nRef;.
c650: 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f    void (*xDestro
c660: 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f  y)(void *);.  vo
c670: 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d  id *pUserData;.}
c680: 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  ;../*.** Possibl
c690: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e  e values for Fun
c6a0: 63 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74  cDef.flags.  Not
c6b0: 65 20 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47  e that the _LENG
c6c0: 54 48 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a  TH and _TYPEOF.*
c6d0: 2a 20 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f  * values must co
c6e0: 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c  rrespond to OPFL
c6f0: 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64  AG_LENGTHARG and
c700: 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
c710: 47 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65  G.  There.** are
c720: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
c730: 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65  ents in the code
c740: 20 74 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e   to verify this.
c750: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
c760: 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20  TE_FUNC_ENCMASK 
c770: 20 30 78 30 30 33 20 2f 2a 20 53 51 4c 49 54 45   0x003 /* SQLITE
c780: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54  _UTF8, SQLITE_UT
c790: 46 31 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45  F16BE or UTF16LE
c7a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
c7b0: 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20  TE_FUNC_LIKE    
c7c0: 20 30 78 30 30 34 20 2f 2a 20 43 61 6e 64 69 64   0x004 /* Candid
c7d0: 61 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45  ate for the LIKE
c7e0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f   optimization */
c7f0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c800: 46 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78  FUNC_CASE     0x
c810: 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73  008 /* Case-sens
c820: 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20  itive LIKE-type 
c830: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
c840: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
c850: 45 50 48 45 4d 20 20 20 20 30 78 30 31 30 20 2f  EPHEM    0x010 /
c860: 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65  * Ephemeral.  De
c870: 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20 2a  lete with VDBE *
c880: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c890: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30  _FUNC_NEEDCOLL 0
c8a0: 78 30 32 30 20 2f 2a 20 73 71 6c 69 74 65 33 47  x020 /* sqlite3G
c8b0: 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20  etFuncCollSeq() 
c8c0: 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64 20  might be called 
c8d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c8e0: 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20  E_FUNC_LENGTH   
c8f0: 30 78 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69  0x040 /* Built-i
c900: 6e 20 6c 65 6e 67 74 68 28 29 20 66 75 6e 63 74  n length() funct
c910: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
c920: 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f  QLITE_FUNC_TYPEO
c930: 46 20 20 20 30 78 30 38 30 20 2f 2a 20 42 75 69  F   0x080 /* Bui
c940: 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28 29 20 66  lt-in typeof() f
c950: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
c960: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
c970: 4f 55 4e 54 20 20 20 20 30 78 31 30 30 20 2f 2a  OUNT    0x100 /*
c980: 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28   Built-in count(
c990: 2a 29 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a  *) aggregate */.
c9a0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
c9b0: 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 32  UNC_COALESCE 0x2
c9c0: 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63  00 /* Built-in c
c9d0: 6f 61 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e  oalesce() or ifn
c9e0: 75 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ull() */.#define
c9f0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c   SQLITE_FUNC_UNL
ca00: 49 4b 45 4c 59 20 30 78 34 30 30 20 2f 2a 20 42  IKELY 0x400 /* B
ca10: 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79  uilt-in unlikely
ca20: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
ca30: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
ca40: 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 38 30  NC_CONSTANT 0x80
ca50: 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e  0 /* Constant in
ca60: 70 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73  puts give a cons
ca70: 74 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23  tant output */.#
ca80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
ca90: 4e 43 5f 4d 49 4e 4d 41 58 20 20 30 78 31 30 30  NC_MINMAX  0x100
caa0: 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69  0 /* True for mi
cab0: 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67  n() and max() ag
cac0: 67 72 65 67 61 74 65 73 20 2a 2f 0a 0a 2f 2a 0a  gregates */../*.
cad0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
cae0: 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46   three macros, F
caf0: 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46  UNCTION(), LIKEF
cb00: 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45 47  UNC() and AGGREG
cb10: 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65  ATE() are.** use
cb20: 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65 20  d to create the 
cb30: 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72  initializers for
cb40: 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74 72   the FuncDef str
cb50: 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20  uctures..**.**  
cb60: 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c   FUNCTION(zName,
cb70: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
cb80: 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
cb90: 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  Used to create a
cba0: 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e   scalar function
cbb0: 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61   definition of a
cbc0: 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20   function zName 
cbd0: 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e  .**     implemen
cbe0: 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f  ted by C functio
cbf0: 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63 63  n xFunc that acc
cc00: 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65  epts nArg argume
cc10: 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  nts. The.**     
cc20: 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20  value passed as 
cc30: 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20  iArg is cast to 
cc40: 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61  a (void*) and ma
cc50: 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20  de available.** 
cc60: 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72 2d      as the user-
cc70: 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73  data (sqlite3_us
cc80: 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74  er_data()) for t
cc90: 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20  he function. If 
cca0: 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74  .**     argument
ccb0: 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68   bNC is true, th
ccc0: 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  en the SQLITE_FU
ccd0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67  NC_NEEDCOLL flag
cce0: 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20   is set..**.**  
ccf0: 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65   VFUNCTION(zName
cd00: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
cd10: 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
cd20: 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65   Like FUNCTION e
cd30: 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74  xcept it omits t
cd40: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  he SQLITE_FUNC_C
cd50: 4f 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a  ONSTANT flag..**
cd60: 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45 28  .**   AGGREGATE(
cd70: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
cd80: 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78  g, bNC, xStep, x
cd90: 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73  Final).**     Us
cda0: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20  ed to create an 
cdb0: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
cdc0: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d  on definition im
cdd0: 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20  plemented by.** 
cde0: 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69      the C functi
cdf0: 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46  ons xStep and xF
ce00: 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20  inal. The first 
ce10: 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a  four parameters.
ce20: 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72  **     are inter
ce30: 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61  preted in the sa
ce40: 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69  me way as the fi
ce50: 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73  rst 4 parameters
ce60: 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54   to.**     FUNCT
ce70: 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c  ION()..**.**   L
ce80: 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e  IKEFUNC(zName, n
ce90: 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73  Arg, pArg, flags
cea0: 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
ceb0: 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72   create a scalar
cec0: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
ced0: 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69  tion of a functi
cee0: 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20  on zName .**    
cef0: 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41   that accepts nA
cf00: 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64  rg arguments and
cf10: 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20   is implemented 
cf20: 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 20 0a  by a call to C .
cf30: 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20  **     function 
cf40: 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65  likeFunc. Argume
cf50: 6e 74 20 70 41 72 67 20 69 73 20 63 61 73 74 20  nt pArg is cast 
cf60: 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e  to a (void *) an
cf70: 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76  d made.**     av
cf80: 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66  ailable as the f
cf90: 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74  unction user-dat
cfa0: 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
cfb0: 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20  data()). The.** 
cfc0: 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67      FuncDef.flag
cfd0: 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  s variable is se
cfe0: 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70  t to the value p
cff0: 61 73 73 65 64 20 61 73 20 74 68 65 20 66 6c 61  assed as the fla
d000: 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65  gs.**     parame
d010: 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ter..*/.#define 
d020: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
d030: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
d040: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
d050: 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  g, SQLITE_FUNC_C
d060: 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55  ONSTANT|SQLITE_U
d070: 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
d080: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
d090: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
d0a0: 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
d0b0: 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a   xFunc, 0, 0, #z
d0c0: 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66  Name, 0, 0}.#def
d0d0: 69 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e  ine VFUNCTION(zN
d0e0: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
d0f0: 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
d100: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
d110: 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
d120: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
d130: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
d140: 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
d150: 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a   xFunc, 0, 0, #z
d160: 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66  Name, 0, 0}.#def
d170: 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e  ine FUNCTION2(zN
d180: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
d190: 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74   bNC, xFunc, ext
d1a0: 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  raFlags) \.  {nA
d1b0: 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  rg,SQLITE_FUNC_C
d1c0: 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55  ONSTANT|SQLITE_U
d1d0: 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
d1e0: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65  FUNC_NEEDCOLL)|e
d1f0: 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53  xtraFlags,\.   S
d200: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
d210: 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63  (iArg), 0, xFunc
d220: 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
d230: 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 53 54  0, 0}.#define ST
d240: 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  R_FUNCTION(zName
d250: 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e  , nArg, pArg, bN
d260: 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
d270: 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
d280: 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
d290: 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
d2a0: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
d2b0: 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20  , \.   pArg, 0, 
d2c0: 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e  xFunc, 0, 0, #zN
d2d0: 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69  ame, 0, 0}.#defi
d2e0: 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d  ne LIKEFUNC(zNam
d2f0: 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c  e, nArg, arg, fl
d300: 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  ags) \.  {nArg, 
d310: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
d320: 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
d330: 7c 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f  |flags, \.   (vo
d340: 69 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b  id *)arg, 0, lik
d350: 65 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e  eFunc, 0, 0, #zN
d360: 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69  ame, 0, 0}.#defi
d370: 6e 65 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61  ne AGGREGATE(zNa
d380: 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e  me, nArg, arg, n
d390: 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  c, xStep, xFinal
d3a0: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
d3b0: 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c  ITE_UTF8|(nc*SQL
d3c0: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
d3d0: 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
d3e0: 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c  INT_TO_PTR(arg),
d3f0: 20 30 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69   0, 0, xStep,xFi
d400: 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a  nal,#zName,0,0}.
d410: 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54  #define AGGREGAT
d420: 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  E2(zName, nArg, 
d430: 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20  arg, nc, xStep, 
d440: 78 46 69 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61  xFinal, extraFla
d450: 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  gs) \.  {nArg, S
d460: 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53  QLITE_UTF8|(nc*S
d470: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
d480: 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c  OLL)|extraFlags,
d490: 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
d4a0: 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c  _TO_PTR(arg), 0,
d4b0: 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c   0, xStep,xFinal
d4c0: 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a  ,#zName,0,0}../*
d4d0: 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20  .** All current 
d4e0: 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73  savepoints are s
d4f0: 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65  tored in a linke
d500: 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20  d list starting 
d510: 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53  at.** sqlite3.pS
d520: 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69  avepoint. The fi
d530: 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74  rst element in t
d540: 68 65 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d  he list is the m
d550: 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20  ost recently.** 
d560: 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74  opened savepoint
d570: 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65  . Savepoints are
d580: 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69   added to the li
d590: 73 74 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a  st by the vdbe.*
d5a0: 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69  * OP_Savepoint i
d5b0: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73  nstruction..*/.s
d5c0: 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20  truct Savepoint 
d5d0: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
d5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5f0: 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70          /* Savep
d600: 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74  oint name (nul-t
d610: 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20  erminated) */.  
d620: 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e  i64 nDeferredCon
d630: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
d640: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
d650: 20 64 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f   deferred fk vio
d660: 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34  lations */.  i64
d670: 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e   nDeferredImmCon
d680: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
d690: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65   /* Number of de
d6a0: 66 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a  ferred imm fk. *
d6b0: 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  /.  Savepoint *p
d6c0: 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
d6d0: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e          /* Paren
d6e0: 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20  t savepoint (if 
d6f0: 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  any) */.};../*.*
d700: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
d710: 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20  are used as the 
d720: 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72  second parameter
d730: 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70   to sqlite3Savep
d740: 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61  oint(),.** and a
d750: 73 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e  s the P1 argumen
d760: 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65  t to the OP_Save
d770: 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  point instructio
d780: 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41  n..*/.#define SA
d790: 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20  VEPOINT_BEGIN   
d7a0: 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56     0.#define SAV
d7b0: 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20  EPOINT_RELEASE  
d7c0: 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45    1.#define SAVE
d7d0: 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20  POINT_ROLLBACK  
d7e0: 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20   2.../*.** Each 
d7f0: 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76  SQLite module (v
d800: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66  irtual table def
d810: 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69  inition) is defi
d820: 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73  ned by an.** ins
d830: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
d840: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
d850: 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  , stored in the 
d860: 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a  sqlite3.aModule.
d870: 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a  ** hash table..*
d880: 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20  /.struct Module 
d890: 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  {.  const sqlite
d8a0: 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
d8b0: 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c  e;       /* Call
d8c0: 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f  back pointers */
d8d0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
d8e0: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
d8f0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
d900: 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65  passed to create
d910: 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76  _module() */.  v
d920: 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20  oid *pAux;      
d930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d940: 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73      /* pAux pass
d950: 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64  ed to create_mod
d960: 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ule() */.  void 
d970: 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64  (*xDestroy)(void
d980: 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20   *);            
d990: 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75  /* Module destru
d9a0: 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ctor function */
d9b0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72  .};../*.** infor
d9c0: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
d9d0: 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53  h column of an S
d9e0: 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64  QL table is held
d9f0: 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a   in an instance.
da00: 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ** of this struc
da10: 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
da20: 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20  Column {.  char 
da30: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e  *zName;     /* N
da40: 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75  ame of this colu
da50: 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44  mn */.  Expr *pD
da60: 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61  flt;     /* Defa
da70: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69  ult value of thi
da80: 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68  s column */.  ch
da90: 61 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20 20 2f  ar *zDflt;     /
daa0: 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20  * Original text 
dab0: 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  of the default v
dac0: 61 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  alue */.  char *
dad0: 7a 54 79 70 65 3b 20 20 20 20 20 2f 2a 20 44 61  zType;     /* Da
dae0: 74 61 20 74 79 70 65 20 66 6f 72 20 74 68 69 73  ta type for this
daf0: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61   column */.  cha
db00: 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a  r *zColl;     /*
db10: 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
db20: 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75  nce.  If NULL, u
db30: 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a  se the default *
db40: 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20  /.  u8 notNull; 
db50: 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63       /* An OE_ c
db60: 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67  ode for handling
db70: 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73   a NOT NULL cons
db80: 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72  traint */.  char
db90: 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20   affinity;   /* 
dba0: 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54  One of the SQLIT
dbb0: 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73  E_AFF_... values
dbc0: 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b 20   */.  u8 szEst; 
dbd0: 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
dbe0: 74 65 64 20 73 69 7a 65 20 6f 66 20 74 68 69 73  ted size of this
dbf0: 20 63 6f 6c 75 6d 6e 2e 20 20 49 4e 54 3d 3d 31   column.  INT==1
dc00: 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67   */.  u8 colFlag
dc10: 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61  s;     /* Boolea
dc20: 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20 53  n properties.  S
dc30: 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69  ee COLFLAG_ defi
dc40: 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a  nes below */.};.
dc50: 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  ./* Allowed valu
dc60: 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f  es for Column.co
dc70: 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69  lFlags:.*/.#defi
dc80: 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b  ne COLFLAG_PRIMK
dc90: 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a  EY  0x0001    /*
dca0: 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74 20   Column is part 
dcb0: 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  of the primary k
dcc0: 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  ey */.#define CO
dcd0: 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20 30  LFLAG_HIDDEN   0
dce0: 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68 69  x0002    /* A hi
dcf0: 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  dden column in a
dd00: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
dd10: 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c  /../*.** A "Coll
dd20: 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20  ating Sequence" 
dd30: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
dd40: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
dd50: 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74   following.** st
dd60: 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74  ructure. Concept
dd70: 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69  ually, a collati
dd80: 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73  ng sequence cons
dd90: 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61  ists of a name a
dda0: 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73  nd.** a comparis
ddb0: 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20  on routine that 
ddc0: 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65  defines the orde
ddd0: 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e  r of that sequen
dde0: 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c  ce..**.** If Col
ddf0: 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c  lSeq.xCmp is NUL
de00: 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  L, it means that
de10: 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e   the.** collatin
de20: 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 6e  g sequence is un
de30: 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63 65  defined.  Indice
de40: 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e  s built on an un
de50: 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61  defined.** colla
de60: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d 61  ting sequence ma
de70: 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72  y not be read or
de80: 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72   written..*/.str
de90: 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20  uct CollSeq {.  
dea0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
deb0: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
dec0: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73   the collating s
ded0: 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20 65  equence, UTF-8 e
dee0: 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 65  ncoded */.  u8 e
def0: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
df00: 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
df10: 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43  ng handled by xC
df20: 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mp() */.  void *
df30: 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20  pUser;          
df40: 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
df50: 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20  t to xCmp() */. 
df60: 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69   int (*xCmp)(voi
df70: 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f  d*,int, const vo
df80: 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  id*, int, const 
df90: 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28  void*);.  void (
dfa0: 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20  *xDel)(void*);  
dfb0: 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f  /* Destructor fo
dfc0: 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f  r pUser */.};../
dfd0: 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65  *.** A sort orde
dfe0: 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20  r can be either 
dff0: 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a  ASC or DESC..*/.
e000: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
e010: 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20 2f  O_ASC       0  /
e020: 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64  * Sort in ascend
e030: 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65  ing order */.#de
e040: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44  fine SQLITE_SO_D
e050: 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53  ESC      1  /* S
e060: 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ort in ascending
e070: 20 6f 72 64 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   order */../*.**
e080: 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   Column affinity
e090: 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68   types..**.** Th
e0a0: 65 73 65 20 75 73 65 64 20 74 6f 20 68 61 76 65  ese used to have
e0b0: 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c   mnemonic name l
e0c0: 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49  ike 'i' for SQLI
e0d0: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61  TE_AFF_INTEGER a
e0e0: 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51  nd.** 't' for SQ
e0f0: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20  LITE_AFF_TEXT.  
e100: 42 75 74 20 77 65 20 63 61 6e 20 73 61 76 65 20  But we can save 
e110: 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61  a little space a
e120: 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68  nd improve.** th
e130: 65 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65  e speed a little
e140: 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68   by numbering th
e150: 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75  e values consecu
e160: 74 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20  tively.  .**.** 
e170: 42 75 74 20 72 61 74 68 65 72 20 74 68 61 6e 20  But rather than 
e180: 73 74 61 72 74 20 77 69 74 68 20 30 20 6f 72 20  start with 0 or 
e190: 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69 74 68  1, we begin with
e1a0: 20 27 41 27 2e 20 20 54 68 61 74 20 77 61 79 2c   'A'.  That way,
e1b0: 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c  .** when multipl
e1c0: 65 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73  e affinity types
e1d0: 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65   are concatenate
e1e0: 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20  d into a string 
e1f0: 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74  and.** used as t
e200: 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74  he P4 operand, t
e210: 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65  hey will be more
e220: 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a   readable..**.**
e230: 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20   Note also that 
e240: 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65  the numeric type
e250: 73 20 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f  s are grouped to
e260: 67 65 74 68 65 72 20 73 6f 20 74 68 61 74 20 74  gether so that t
e270: 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20  esting.** for a 
e280: 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69 73 20  numeric type is 
e290: 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69  a single compari
e2a0: 73 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20 4e 4f  son.  And the NO
e2b0: 4e 45 20 74 79 70 65 20 69 73 20 66 69 72 73 74  NE type is first
e2c0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
e2d0: 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 20 20 20  ITE_AFF_NONE    
e2e0: 20 27 41 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'A'.#define SQL
e2f0: 49 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20  ITE_AFF_TEXT    
e300: 20 27 42 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'B'.#define SQL
e310: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
e320: 20 27 43 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'C'.#define SQL
e330: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
e340: 20 27 44 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'D'.#define SQL
e350: 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20  ITE_AFF_REAL    
e360: 20 27 45 27 0a 0a 23 64 65 66 69 6e 65 20 73 71   'E'..#define sq
e370: 6c 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66  lite3IsNumericAf
e380: 66 69 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e  finity(X)  ((X)>
e390: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45  =SQLITE_AFF_NUME
e3a0: 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  RIC)../*.** The 
e3b0: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
e3c0: 76 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66  values masks off
e3d0: 20 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74   the significant
e3e0: 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61   bits of an.** a
e3f0: 66 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 20 0a  ffinity value. .
e400: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e410: 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30  E_AFF_MASK     0
e420: 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74  x47../*.** Addit
e430: 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73  ional bit values
e440: 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65   that can be ORe
e450: 64 20 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69  d with an affini
e460: 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68  ty without.** ch
e470: 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e  anging the affin
e480: 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53  ity..**.** The S
e490: 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c  QLITE_NOTNULL fl
e4a0: 61 67 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74  ag is a combinat
e4b0: 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e  ion of NULLEQ an
e4c0: 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a  d JUMPIFNULL..**
e4d0: 20 49 74 20 63 61 75 73 65 73 20 61 6e 20 61 73   It causes an as
e4e0: 73 65 72 74 28 29 20 74 6f 20 66 69 72 65 20 69  sert() to fire i
e4f0: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
e500: 20 74 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e   to a comparison
e510: 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20  .** operator is 
e520: 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64  NULL.  It is add
e530: 65 64 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f  ed to certain co
e540: 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f  mparison operato
e550: 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74  rs to.** prove t
e560: 68 61 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73  hat the operands
e570: 20 61 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20   are always NOT 
e580: 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  NULL..*/.#define
e590: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
e5a0: 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a 20 6a 75  LL   0x10  /* ju
e5b0: 6d 70 73 20 69 66 20 65 69 74 68 65 72 20 6f 70  mps if either op
e5c0: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f  erand is NULL */
e5d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e5e0: 53 54 4f 52 45 50 32 20 20 20 20 20 20 30 78 32  STOREP2      0x2
e5f0: 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  0  /* Store resu
e600: 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61  lt in reg[P2] ra
e610: 74 68 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a  ther than jump *
e620: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e630: 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78  _NULLEQ       0x
e640: 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c  80  /* NULL=NULL
e650: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e660: 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20  TE_NOTNULL      
e670: 30 78 39 30 20 20 2f 2a 20 41 73 73 65 72 74 20  0x90  /* Assert 
e680: 74 68 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72  that operands ar
e690: 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a  e never NULL */.
e6a0: 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74  ./*.** An object
e6b0: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
e6c0: 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63   created for eac
e6d0: 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  h virtual table 
e6e0: 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68  present in.** th
e6f0: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
e700: 61 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  a. .**.** If the
e710: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
e720: 20 69 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e   is shared, then
e730: 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e   there is one in
e740: 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a  stance of this.*
e750: 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  * structure for 
e760: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
e770: 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65  nnection (sqlite
e780: 33 2a 29 20 74 68 61 74 20 75 73 65 73 20 74 68  3*) that uses th
e790: 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65  e shared.** sche
e7a0: 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65 63 61  ma. This is beca
e7b0: 75 73 65 20 65 61 63 68 20 64 61 74 61 62 61 73  use each databas
e7c0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71  e connection req
e7d0: 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e  uires its own un
e7e0: 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  ique.** instance
e7f0: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   of the sqlite3_
e800: 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65  vtab* handle use
e810: 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  d to access the 
e820: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a  virtual table .*
e830: 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  * implementation
e840: 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  . sqlite3_vtab* 
e850: 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20  handles can not 
e860: 62 65 20 73 68 61 72 65 64 20 62 65 74 77 65 65  be shared betwee
e870: 6e 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  n .** database c
e880: 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e  onnections, even
e890: 20 77 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f   when the rest o
e8a0: 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20  f the in-memory 
e8b0: 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 73 63 68  database .** sch
e8c0: 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 61  ema is shared, a
e8d0: 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  s the implementa
e8e0: 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65  tion often store
e8f0: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  s the database.*
e900: 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  * connection han
e910: 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69 74  dle passed to it
e920: 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63   via the xConnec
e930: 74 28 29 20 6f 72 20 78 43 72 65 61 74 65 28 29  t() or xCreate()
e940: 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e   method.** durin
e950: 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  g initialization
e960: 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69   internally. Thi
e970: 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  s database conne
e980: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79  ction handle may
e990: 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64  .** then be used
e9a0: 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c 20   by the virtual 
e9b0: 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  table implementa
e9c0: 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72  tion to access r
e9d0: 65 61 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77  eal tables .** w
e9e0: 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61  ithin the databa
e9f0: 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79  se. So that they
ea00: 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20   appear as part 
ea10: 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 20 0a  of the callers .
ea20: 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ** transaction, 
ea30: 74 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e  these accesses n
ea40: 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76  eed to be made v
ea50: 69 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  ia the same data
ea60: 62 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74  base .** connect
ea70: 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65 64  ion as that used
ea80: 20 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20   to execute SQL 
ea90: 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68  operations on th
eaa0: 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
eab0: 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c  .**.** All VTabl
eac0: 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63  e objects that c
ead0: 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73  orrespond to a s
eae0: 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61  ingle table in a
eaf0: 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62   shared.** datab
eb00: 61 73 65 20 73 63 68 65 6d 61 20 61 72 65 20 69  ase schema are i
eb10: 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20  nitially stored 
eb20: 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74  in a linked-list
eb30: 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a   pointed to by.*
eb40: 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61  * the Table.pVTa
eb50: 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61  ble member varia
eb60: 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65  ble of the corre
eb70: 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f  sponding Table o
eb80: 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61  bject..** When a
eb90: 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  n sqlite3_prepar
eba0: 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  e() operation is
ebb0: 20 72 65 71 75 69 72 65 64 20 74 6f 20 61 63 63   required to acc
ebc0: 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a  ess the virtual.
ebd0: 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61  ** table, it sea
ebe0: 72 63 68 65 73 20 74 68 65 20 6c 69 73 74 20 66  rches the list f
ebf0: 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20 74 68  or the VTable th
ec00: 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  at corresponds t
ec10: 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73  o the.** databas
ec20: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69  e connection doi
ec30: 6e 67 20 74 68 65 20 70 72 65 70 61 72 69 6e 67  ng the preparing
ec40: 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68   so as to use th
ec50: 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c  e correct.** sql
ec60: 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
ec70: 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65  e in the compile
ec80: 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57  d query..**.** W
ec90: 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79  hen an in-memory
eca0: 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73   Table object is
ecb0: 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78   deleted (for ex
ecc0: 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a  ample when the.*
ecd0: 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e  * schema is bein
ece0: 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73  g reloaded for s
ecf0: 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65  ome reason), the
ed00: 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20   VTable objects 
ed10: 61 72 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65  are not .** dele
ed20: 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69  ted and the sqli
ed30: 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
ed40: 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f  s are not xDisco
ed50: 6e 6e 65 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d  nnect()ed .** im
ed60: 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65  mediately. Inste
ed70: 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76  ad, they are mov
ed80: 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c  ed from the Tabl
ed90: 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74  e.pVTable list t
eda0: 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e  o.** another lin
edb0: 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20  ked list headed 
edc0: 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70  by the sqlite3.p
edd0: 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65  Disconnect membe
ede0: 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72  r of the.** corr
edf0: 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65  esponding sqlite
ee00: 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65  3 structure. The
ee10: 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74  y are then delet
ee20: 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64  ed/xDisconnected
ee30: 20 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61   .** next time a
ee40: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72   statement is pr
ee50: 65 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69  epared using sai
ee60: 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73  d sqlite3*. This
ee70: 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61   is done.** to a
ee80: 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73  void deadlock is
ee90: 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d  sues involving m
eea0: 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e  ultiple sqlite3.
eeb0: 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a  mutex mutexes..*
eec0: 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65  * Refer to comme
eed0: 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69  nts above functi
eee0: 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  on sqlite3VtabUn
eef0: 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61  lockList() for a
ef00: 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e  n.** explanation
ef10: 20 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73   as to why it is
ef20: 20 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20   safe to add an 
ef30: 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69  entry to an sqli
ef40: 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a  te3.pDisconnect.
ef50: 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20  ** list without 
ef60: 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72  holding the corr
ef70: 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65  esponding sqlite
ef80: 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a  3.mutex mutex..*
ef90: 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20  *.** The memory 
efa0: 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74  for objects of t
efb0: 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61  his type is alwa
efc0: 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20  ys allocated by 
efd0: 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  .** sqlite3DbMal
efe0: 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65  loc(), using the
eff0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
f000: 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61  le stored in VTa
f010: 62 6c 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68  ble.db as .** th
f020: 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
f030: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62  ..*/.struct VTab
f040: 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  le {.  sqlite3 *
f050: 64 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  db;             
f060: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e   /* Database con
f070: 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74  nection associat
f080: 65 64 20 77 69 74 68 20 74 68 69 73 20 74 61 62  ed with this tab
f090: 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a  le */.  Module *
f0a0: 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20  pMod;           
f0b0: 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
f0c0: 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  module implement
f0d0: 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  ation */.  sqlit
f0e0: 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20  e3_vtab *pVtab; 
f0f0: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
f100: 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65  to vtab instance
f110: 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20   */.  int nRef; 
f120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f130: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69  /* Number of poi
f140: 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 73 74  nters to this st
f150: 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20  ructure */.  u8 
f160: 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20  bConstraint;    
f170: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
f180: 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72  f constraints ar
f190: 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20  e supported */. 
f1a0: 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b   int iSavepoint;
f1b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
f1c0: 70 74 68 20 6f 66 20 74 68 65 20 53 41 56 45 50  pth of the SAVEP
f1d0: 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20  OINT stack */.  
f1e0: 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20  VTable *pNext;  
f1f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78            /* Nex
f200: 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74  t in linked list
f210: 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a   (see above) */.
f220: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  };../*.** Each S
f230: 51 4c 20 74 61 62 6c 65 20 69 73 20 72 65 70 72  QL table is repr
f240: 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
f250: 79 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  y by an instance
f260: 20 6f 66 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f   of the.** follo
f270: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
f280: 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d  **.** Table.zNam
f290: 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  e is the name of
f2a0: 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68 65   the table.  The
f2b0: 20 63 61 73 65 20 6f 66 20 74 68 65 20 6f 72 69   case of the ori
f2c0: 67 69 6e 61 6c 0a 2a 2a 20 43 52 45 41 54 45 20  ginal.** CREATE 
f2d0: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20  TABLE statement 
f2e0: 69 73 20 73 74 6f 72 65 64 2c 20 62 75 74 20 63  is stored, but c
f2f0: 61 73 65 20 69 73 20 6e 6f 74 20 73 69 67 6e 69  ase is not signi
f300: 66 69 63 61 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f  ficant for.** co
f310: 6d 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  mparisons..**.**
f320: 20 54 61 62 6c 65 2e 6e 43 6f 6c 20 69 73 20 74   Table.nCol is t
f330: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
f340: 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62  umns in this tab
f350: 6c 65 2e 20 20 54 61 62 6c 65 2e 61 43 6f 6c 20  le.  Table.aCol 
f360: 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  is a.** pointer 
f370: 74 6f 20 61 6e 20 61 72 72 61 79 20 6f 66 20 43  to an array of C
f380: 6f 6c 75 6d 6e 20 73 74 72 75 63 74 75 72 65 73  olumn structures
f390: 2c 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20 63  , one for each c
f3a0: 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  olumn..**.** If 
f3b0: 74 68 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e  the table has an
f3c0: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
f3d0: 20 4b 45 59 2c 20 74 68 65 6e 20 54 61 62 6c 65   KEY, then Table
f3e0: 2e 69 50 4b 65 79 20 69 73 20 74 68 65 20 69 6e  .iPKey is the in
f3f0: 64 65 78 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f  dex of.** the co
f400: 6c 75 6d 6e 20 74 68 61 74 20 69 73 20 74 68 61  lumn that is tha
f410: 74 20 6b 65 79 2e 20 20 20 4f 74 68 65 72 77 69  t key.   Otherwi
f420: 73 65 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69  se Table.iPKey i
f430: 73 20 6e 65 67 61 74 69 76 65 2e 20 20 4e 6f 74  s negative.  Not
f440: 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61  e.** that the da
f450: 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 50 52  tatype of the PR
f460: 49 4d 41 52 59 20 4b 45 59 20 6d 75 73 74 20 62  IMARY KEY must b
f470: 65 20 49 4e 54 45 47 45 52 20 66 6f 72 20 74 68  e INTEGER for th
f480: 69 73 20 66 69 65 6c 64 20 74 6f 0a 2a 2a 20 62  is field to.** b
f490: 65 20 73 65 74 2e 20 20 41 6e 20 49 4e 54 45 47  e set.  An INTEG
f4a0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69  ER PRIMARY KEY i
f4b0: 73 20 75 73 65 64 20 61 73 20 74 68 65 20 72 6f  s used as the ro
f4c0: 77 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77  wid for each row
f4d0: 20 6f 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65   of.** the table
f4e0: 2e 20 20 49 66 20 61 20 74 61 62 6c 65 20 68 61  .  If a table ha
f4f0: 73 20 6e 6f 20 49 4e 54 45 47 45 52 20 50 52 49  s no INTEGER PRI
f500: 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 61  MARY KEY, then a
f510: 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a   random rowid.**
f520: 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 66 6f   is generated fo
f530: 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68  r each row of th
f540: 65 20 74 61 62 6c 65 2e 20 20 54 46 5f 48 61 73  e table.  TF_Has
f550: 50 72 69 6d 61 72 79 4b 65 79 20 69 73 20 73 65  PrimaryKey is se
f560: 74 20 69 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c  t if.** the tabl
f570: 65 20 68 61 73 20 61 6e 79 20 50 52 49 4d 41 52  e has any PRIMAR
f580: 59 20 4b 45 59 2c 20 49 4e 54 45 47 45 52 20 6f  Y KEY, INTEGER o
f590: 72 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2a 0a  r otherwise..**.
f5a0: 2a 2a 20 54 61 62 6c 65 2e 74 6e 75 6d 20 69 73  ** Table.tnum is
f5b0: 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72   the page number
f5c0: 20 66 6f 72 20 74 68 65 20 72 6f 6f 74 20 42 54   for the root BT
f5d0: 72 65 65 20 70 61 67 65 20 6f 66 20 74 68 65 20  ree page of the 
f5e0: 74 61 62 6c 65 20 69 6e 20 74 68 65 0a 2a 2a 20  table in the.** 
f5f0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20  database file.  
f600: 49 66 20 54 61 62 6c 65 2e 69 44 62 20 69 73 20  If Table.iDb is 
f610: 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
f620: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
f630: 62 61 63 6b 65 6e 64 0a 2a 2a 20 69 6e 20 73 71  backend.** in sq
f640: 6c 69 74 65 2e 61 44 62 5b 5d 2e 20 20 30 20 69  lite.aDb[].  0 i
f650: 73 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64  s for the main d
f660: 61 74 61 62 61 73 65 20 61 6e 64 20 31 20 69 73  atabase and 1 is
f670: 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20 74 68   for the file th
f680: 61 74 0a 2a 2a 20 68 6f 6c 64 73 20 74 65 6d 70  at.** holds temp
f690: 6f 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64  orary tables and
f6a0: 20 69 6e 64 69 63 65 73 2e 20 20 49 66 20 54 46   indices.  If TF
f6b0: 5f 45 70 68 65 6d 65 72 61 6c 20 69 73 20 73 65  _Ephemeral is se
f6c0: 74 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 74 61  t.** then the ta
f6d0: 62 6c 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ble is stored in
f6e0: 20 61 20 66 69 6c 65 20 74 68 61 74 20 69 73 20   a file that is 
f6f0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
f700: 6c 65 74 65 64 0a 2a 2a 20 77 68 65 6e 20 74 68  leted.** when th
f710: 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 74 6f  e VDBE cursor to
f720: 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 63 6c   the table is cl
f730: 6f 73 65 64 2e 20 20 49 6e 20 74 68 69 73 20 63  osed.  In this c
f740: 61 73 65 20 54 61 62 6c 65 2e 74 6e 75 6d 20 0a  ase Table.tnum .
f750: 2a 2a 20 72 65 66 65 72 73 20 56 44 42 45 20 63  ** refers VDBE c
f760: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 74 68 61  ursor number tha
f770: 74 20 68 6f 6c 64 73 20 74 68 65 20 74 61 62 6c  t holds the tabl
f780: 65 20 6f 70 65 6e 2c 20 6e 6f 74 20 74 6f 20 74  e open, not to t
f790: 68 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20  he root.** page 
f7a0: 6e 75 6d 62 65 72 2e 20 20 54 72 61 6e 73 69 65  number.  Transie
f7b0: 6e 74 20 74 61 62 6c 65 73 20 61 72 65 20 75 73  nt tables are us
f7c0: 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 72  ed to hold the r
f7d0: 65 73 75 6c 74 73 20 6f 66 20 61 0a 2a 2a 20 73  esults of a.** s
f7e0: 75 62 2d 71 75 65 72 79 20 74 68 61 74 20 61 70  ub-query that ap
f7f0: 70 65 61 72 73 20 69 6e 73 74 65 61 64 20 6f 66  pears instead of
f800: 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20 6e 61   a real table na
f810: 6d 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  me in the FROM c
f820: 6c 61 75 73 65 20 0a 2a 2a 20 6f 66 20 61 20 53  lause .** of a S
f830: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
f840: 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65  .*/.struct Table
f850: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
f860: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ;         /* Nam
f870: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f  e of the table o
f880: 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75  r view */.  Colu
f890: 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20  mn *aCol;       
f8a0: 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
f8b0: 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d  about each colum
f8c0: 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49  n */.  Index *pI
f8d0: 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c  ndex;       /* L
f8e0: 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78  ist of SQL index
f8f0: 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65  es on this table
f900: 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  . */.  Select *p
f910: 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e  Select;     /* N
f920: 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20  ULL for tables. 
f930: 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e   Points to defin
f940: 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e  ition if a view.
f950: 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65   */.  FKey *pFKe
f960: 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  y;         /* Li
f970: 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c  nked list of all
f980: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e   foreign keys in
f990: 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
f9a0: 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
f9b0: 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
f9c0: 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66  defining the aff
f9d0: 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f  inity of each co
f9e0: 6c 75 6d 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20  lumn */.#ifndef 
f9f0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43  SQLITE_OMIT_CHEC
fa00: 4b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43  K.  ExprList *pC
fa10: 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20  heck;    /* All 
fa20: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
fa30: 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4c 6f  s */.#endif.  Lo
fa40: 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b  gEst nRowLogEst;
fa50: 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
fa60: 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20  rows in table - 
fa70: 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74  from sqlite_stat
fa80: 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  1 table */.  int
fa90: 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20   tnum;          
faa0: 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20    /* Root BTree 
fab0: 6e 6f 64 65 20 66 6f 72 20 74 68 69 73 20 74 61  node for this ta
fac0: 62 6c 65 20 28 73 65 65 20 6e 6f 74 65 20 61 62  ble (see note ab
fad0: 6f 76 65 29 20 2a 2f 0a 20 20 69 31 36 20 69 50  ove) */.  i16 iP
fae0: 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Key;           /
faf0: 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76  * If not negativ
fb00: 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65  e, use aCol[iPKe
fb10: 79 5d 20 61 73 20 74 68 65 20 70 72 69 6d 61 72  y] as the primar
fb20: 79 20 6b 65 79 20 2a 2f 0a 20 20 69 31 36 20 6e  y key */.  i16 n
fb30: 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
fb40: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
fb50: 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62  umns in this tab
fb60: 6c 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66  le */.  u16 nRef
fb70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
fb80: 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
fb90: 72 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65  rs to this Table
fba0: 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54   */.  LogEst szT
fbb0: 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73  abRow;     /* Es
fbc0: 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20  timated size of 
fbd0: 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77 20 69  each table row i
fbe0: 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69 66 64 65  n bytes */.#ifde
fbf0: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
fc00: 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73  COSTMULT.  LogEs
fc10: 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20  t costMult;     
fc20: 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69  /* Cost multipli
fc30: 65 72 20 66 6f 72 20 75 73 69 6e 67 20 74 68 69  er for using thi
fc40: 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69  s table */.#endi
fc50: 66 0a 20 20 75 38 20 74 61 62 46 6c 61 67 73 3b  f.  u8 tabFlags;
fc60: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b           /* Mask
fc70: 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20   of TF_* values 
fc80: 2a 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b  */.  u8 keyConf;
fc90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61            /* Wha
fca0: 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20  t to do in case 
fcb0: 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f  of uniqueness co
fcc0: 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20  nflict on iPKey 
fcd0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
fce0: 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c  E_OMIT_ALTERTABL
fcf0: 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66  E.  int addColOf
fd00: 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73  fset;    /* Offs
fd10: 65 74 20 69 6e 20 43 52 45 41 54 45 20 54 41 42  et in CREATE TAB
fd20: 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61  LE stmt to add a
fd30: 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23   new column */.#
fd40: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
fd50: 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
fd60: 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f  LTABLE.  int nMo
fd70: 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a  duleArg;      /*
fd80: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
fd90: 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75  ents to the modu
fda0: 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  le */.  char **a
fdb0: 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20  zModuleArg;  /* 
fdc0: 54 65 78 74 20 6f 66 20 61 6c 6c 20 6d 6f 64 75  Text of all modu
fdd0: 6c 65 20 61 72 67 73 2e 20 5b 30 5d 20 69 73 20  le args. [0] is 
fde0: 6d 6f 64 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20  module name */. 
fdf0: 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65   VTable *pVTable
fe00: 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  ;     /* List of
fe10: 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e   VTable objects.
fe20: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69   */.#endif.  Tri
fe30: 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20  gger *pTrigger; 
fe40: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69    /* List of tri
fe50: 67 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20  ggers stored in 
fe60: 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68  pSchema */.  Sch
fe70: 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
fe80: 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74    /* Schema that
fe90: 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74   contains this t
fea0: 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20  able */.  Table 
feb0: 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f  *pNextZombie;  /
fec0: 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61  * Next on the Pa
fed0: 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c  rse.pZombieTab l
fee0: 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
fef0: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
ff00: 66 6f 72 20 54 61 62 6c 65 2e 74 61 62 46 6c 61  for Table.tabFla
ff10: 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f  gs..**.** TF_OOO
ff20: 48 69 64 64 65 6e 20 61 70 70 6c 69 65 73 20 74  Hidden applies t
ff30: 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  o virtual tables
ff40: 20 74 68 61 74 20 68 61 76 65 20 68 69 64 64 65   that have hidde
ff50: 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61  n columns that a
ff60: 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20 62  re.** followed b
ff70: 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c  y non-hidden col
ff80: 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65 3a 20  umns.  Example: 
ff90: 20 22 43 52 45 41 54 45 20 56 49 52 54 55 41 4c   "CREATE VIRTUAL
ffa0: 20 54 41 42 4c 45 20 78 20 55 53 49 4e 47 0a 2a   TABLE x USING.*
ffb0: 2a 20 76 74 61 62 31 28 61 20 48 49 44 44 45 4e  * vtab1(a HIDDEN
ffc0: 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63 65 20 22  , b);".  Since "
ffd0: 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69 64 64  b" is a non-hidd
ffe0: 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20 22 61  en column but "a
fff0: 22 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a 2a 20  " is hidden,.** 
10000 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e  the TF_OOOHidden
10010 20 61 74 74 72 69 62 75 74 65 20 77 6f 75 6c 64   attribute would
10020 20 61 70 70 6c 79 20 69 6e 20 74 68 69 73 20 63   apply in this c
10030 61 73 65 2e 20 20 53 75 63 68 20 74 61 62 6c 65  ase.  Such table
10040 73 20 72 65 71 75 69 72 65 0a 2a 2a 20 73 70 65  s require.** spe
10050 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 64 75  cial handling du
10060 72 69 6e 67 20 49 4e 53 45 52 54 20 70 72 6f 63  ring INSERT proc
10070 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69  essing..*/.#defi
10080 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20  ne TF_Readonly  
10090 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
100a0 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65   Read-only syste
100b0 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  m table */.#defi
100c0 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20  ne TF_Ephemeral 
100d0 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a        0x02    /*
100e0 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61   An ephemeral ta
100f0 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
10100 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20  F_HasPrimaryKey 
10110 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 61 62    0x04    /* Tab
10120 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61 72 79  le has a primary
10130 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
10140 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  TF_Autoincrement
10150 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 49 6e     0x08    /* In
10160 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
10170 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65  y is autoincreme
10180 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  nt */.#define TF
10190 5f 56 69 72 74 75 61 6c 20 20 20 20 20 20 20 20  _Virtual        
101a0 20 30 78 31 30 20 20 20 20 2f 2a 20 49 73 20 61   0x10    /* Is a
101b0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
101c0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74  /.#define TF_Wit
101d0 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78 32  houtRowid    0x2
101e0 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64  0    /* No rowid
101f0 20 75 73 65 64 2e 20 50 52 49 4d 41 52 59 20 4b   used. PRIMARY K
10200 45 59 20 69 73 20 74 68 65 20 6b 65 79 20 2a 2f  EY is the key */
10210 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48  .#define TF_OOOH
10220 69 64 64 65 6e 20 20 20 20 20 20 20 30 78 34 30  idden       0x40
10230 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72      /* Out-of-Or
10240 64 65 72 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  der hidden colum
10250 6e 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65  ns */.../*.** Te
10260 73 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65  st to see whethe
10270 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65  r or not a table
10280 20 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61   is a virtual ta
10290 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a  ble.  This is.**
102a0 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f   done as a macro
102b0 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c   so that it will
102c0 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75   be optimized ou
102d0 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a  t when virtual.*
102e0 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20  * table support 
102f0 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
10300 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69  the build..*/.#i
10310 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
10320 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23  T_VIRTUALTABLE.#
10330 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75    define IsVirtu
10340 61 6c 28 58 29 20 20 20 20 20 20 28 28 28 58 29  al(X)      (((X)
10350 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f  ->tabFlags & TF_
10360 56 69 72 74 75 61 6c 29 21 3d 30 29 0a 23 20 20  Virtual)!=0).#  
10370 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43  define IsHiddenC
10380 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e  olumn(X) (((X)->
10390 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c  colFlags & COLFL
103a0 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23  AG_HIDDEN)!=0).#
103b0 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
103c0 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
103d0 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48   0.#  define IsH
103e0 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30  iddenColumn(X) 0
103f0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 65 73  .#endif../* Does
10400 20 74 68 65 20 74 61 62 6c 65 20 68 61 76 65 20   the table have 
10410 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  a rowid */.#defi
10420 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29 20 20  ne HasRowid(X)  
10430 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61     (((X)->tabFla
10440 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52  gs & TF_WithoutR
10450 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a  owid)==0)../*.**
10460 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65   Each foreign ke
10470 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20  y constraint is 
10480 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
10490 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
104a0 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20  ucture..**.** A 
104b0 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61  foreign key is a
104c0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
104d0 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20  wo tables.  The 
104e0 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a  "from" table is.
104f0 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  ** the table tha
10500 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52  t contains the R
10510 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
10520 20 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68   that creates th
10530 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  e foreign.** key
10540 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c  .  The "to" tabl
10550 65 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74  e is the table t
10560 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20  hat is named in 
10570 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
10580 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64  lause..** Consid
10590 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a  er this example:
105a0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  .**.**     CREAT
105b0 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20  E TABLE ex1(.** 
105c0 20 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20        a INTEGER 
105d0 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20  PRIMARY KEY,.** 
105e0 20 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20        b INTEGER 
105f0 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52  CONSTRAINT fk1 R
10600 45 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29  EFERENCES ex2(x)
10610 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a  .**     );.**.**
10620 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79   For foreign key
10630 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d   "fk1", the from
10640 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20  -table is "ex1" 
10650 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65  and the to-table
10660 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71   is "ex2"..** Eq
10670 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a  uivalent names:.
10680 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74  **.**     from-t
10690 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61  able == child-ta
106a0 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d  ble.**       to-
106b0 74 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d  table == parent-
106c0 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68  table.**.** Each
106d0 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
106e0 73 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20  se generates an 
106f0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
10700 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
10710 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20  ure.** which is 
10720 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
10730 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65  from-table.  The
10740 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e   to-table need n
10750 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a  ot exist when.**
10760 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20   the from-table 
10770 69 73 20 63 72 65 61 74 65 64 2e 20 20 54 68 65  is created.  The
10780 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68   existence of th
10790 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f  e to-table is no
107a0 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a  t checked..**.**
107b0 20 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c   The list of all
107c0 20 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69   parents for chi
107d0 6c 64 20 54 61 62 6c 65 20 58 20 69 73 20 68 65  ld Table X is he
107e0 6c 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a  ld at X.pFKey..*
107f0 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61  *.** A list of a
10800 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20  ll children for 
10810 61 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20  a table named Z 
10820 28 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74  (which might not
10830 20 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20   even exist).** 
10840 69 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d  is held in Schem
10850 61 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68 20  a.fkeyHash with 
10860 61 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e  a hash key of Z.
10870 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20  .*/.struct FKey 
10880 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d  {.  Table *pFrom
10890 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63  ;     /* Table c
108a0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45  ontaining the RE
108b0 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
108c0 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a  (aka: Child) */.
108d0 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f    FKey *pNextFro
108e0 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79  m;  /* Next FKey
108f0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 69   with the same i
10900 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61  n pFrom. Next pa
10910 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f  rent of pFrom */
10920 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20  .  char *zTo;   
10930 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
10940 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b  table that the k
10950 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b  ey points to (ak
10960 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20  a: Parent) */.  
10970 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20  FKey *pNextTo;  
10980 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74    /* Next with t
10990 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78  he same zTo. Nex
109a0 74 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20  t child of zTo. 
109b0 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76  */.  FKey *pPrev
109c0 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f  To;    /* Previo
109d0 75 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  us with the same
109e0 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43   zTo */.  int nC
109f0 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ol;         /* N
10a00 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
10a10 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a   in this key */.
10a20 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33    /* EV: R-30323
10a30 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69  -21917 */.  u8 i
10a40 73 44 65 66 65 72 72 65 64 3b 20 20 20 20 20 20  sDeferred;      
10a50 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73   /* True if cons
10a60 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20  traint checking 
10a70 69 73 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c  is deferred till
10a80 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20   COMMIT */.  u8 
10a90 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20  aAction[2];     
10aa0 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20     /* ON DELETE 
10ab0 61 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63  and ON UPDATE ac
10ac0 74 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76  tions, respectiv
10ad0 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ely */.  Trigger
10ae0 20 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f   *apTrigger[2];/
10af0 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72 20 61  * Triggers for a
10b00 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73  Action[] actions
10b10 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f   */.  struct sCo
10b20 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d  lMap {      /* M
10b30 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e  apping of column
10b40 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f  s in pFrom to co
10b50 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a  lumns in zTo */.
10b60 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20      int iFrom;  
10b70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
10b80 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20  ex of column in 
10b90 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61  pFrom */.    cha
10ba0 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20  r *zCol;        
10bb0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f     /* Name of co
10bc0 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66  lumn in zTo.  If
10bd0 20 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52   NULL use PRIMAR
10be0 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f  Y KEY */.  } aCo
10bf0 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20  l[1];           
10c00 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f   /* One entry fo
10c10 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63  r each of nCol c
10c20 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  olumns */.};../*
10c30 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f  .** SQLite suppo
10c40 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65  rts many differe
10c50 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c  nt ways to resol
10c60 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a  ve a constraint.
10c70 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42  ** error.  ROLLB
10c80 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  ACK processing m
10c90 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73  eans that a cons
10ca0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
10cb0 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f  .** causes the o
10cc0 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63  peration in proc
10cd0 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20  ess to fail and 
10ce0 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
10cf0 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74  transaction.** t
10d00 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
10d10 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73  .  ABORT process
10d20 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70  ing means the op
10d30 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
10d40 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20  ss.** fails and 
10d50 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65  any prior change
10d60 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20  s from that one 
10d70 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61  operation are ba
10d80 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74  cked out,.** but
10d90 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
10da0 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62   is not rolled b
10db0 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65  ack.  FAIL proce
10dc0 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74  ssing means that
10dd0 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f  .** the operatio
10de0 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74  n in progress st
10df0 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20  ops and returns 
10e00 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20  an error code.  
10e10 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61  But prior.** cha
10e20 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20  nges due to the 
10e30 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61  same operation a
10e40 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75  re not backed ou
10e50 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63  t and no rollbac
10e60 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47  k.** occurs.  IG
10e70 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20  NORE means that 
10e80 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72  the particular r
10e90 6f 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74  ow that caused t
10ea0 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a  he constraint.**
10eb0 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e   error is not in
10ec0 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65  serted or update
10ed0 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63  d.  Processing c
10ee0 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20  ontinues and no 
10ef0 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75  error.** is retu
10f00 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d  rned.  REPLACE m
10f10 65 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69  eans that preexi
10f20 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72  sting database r
10f30 6f 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a  ows that caused.
10f40 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73  ** a UNIQUE cons
10f50 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
10f60 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20   are removed so 
10f70 74 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73  that the new ins
10f80 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65  ert or.** update
10f90 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50   can proceed.  P
10fa0 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e  rocessing contin
10fb0 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ues and no error
10fc0 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a   is reported..**
10fd0 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45  .** RESTRICT, SE
10fe0 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41  TNULL, and CASCA
10ff0 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79  DE actions apply
11000 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e   only to foreign
11010 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49   keys..** RESTRI
11020 43 54 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  CT is the same a
11030 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45  s ABORT for IMME
11040 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65  DIATE foreign ke
11050 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61  ys and the.** sa
11060 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66  me as ROLLBACK f
11070 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65 79 73  or DEFERRED keys
11080 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73  .  SETNULL means
11090 20 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67   that the foreig
110a0 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20  n.** key is set 
110b0 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44  to NULL.  CASCAD
110c0 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44  E means that a D
110d0 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
110e0 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65  of the.** refere
110f0 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69  nced table row i
11100 73 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74  s propagated int
11110 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68  o the row that h
11120 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65  olds the.** fore
11130 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20  ign key..** .** 
11140 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  The following sy
11150 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72  mbolic values ar
11160 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64  e used to record
11170 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f   which type.** o
11180 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65  f action to take
11190 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  ..*/.#define OE_
111a0 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20  None     0   /* 
111b0 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73  There is no cons
111c0 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20  traint to check 
111d0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f  */.#define OE_Ro
111e0 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61  llback 1   /* Fa
111f0 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  il the operation
11200 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68   and rollback th
11210 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f  e transaction */
11220 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72  .#define OE_Abor
11230 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b  t    2   /* Back
11240 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75 74   out changes but
11250 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20   do no rollback 
11260 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23  transaction */.#
11270 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20  define OE_Fail  
11280 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74     3   /* Stop t
11290 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74  he operation but
112a0 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72   leave all prior
112b0 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66   changes */.#def
112c0 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20  ine OE_Ignore   
112d0 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68  4   /* Ignore th
112e0 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20  e error. Do not 
112f0 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72  do the INSERT or
11300 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69   UPDATE */.#defi
11310 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35  ne OE_Replace  5
11320 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69     /* Delete exi
11330 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68  sting record, th
11340 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20  en do INSERT or 
11350 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69  UPDATE */..#defi
11360 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20 36  ne OE_Restrict 6
11370 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66     /* OE_Abort f
11380 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45  or IMMEDIATE, OE
11390 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45  _Rollback for DE
113a0 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e  FERRED */.#defin
113b0 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20  e OE_SetNull  7 
113c0 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72    /* Set the for
113d0 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74  eign key value t
113e0 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  o NULL */.#defin
113f0 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 38 20  e OE_SetDflt  8 
11400 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72    /* Set the for
11410 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74  eign key value t
11420 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f  o its default */
11430 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63  .#define OE_Casc
11440 61 64 65 20 20 39 20 20 20 2f 2a 20 43 61 73 63  ade  9   /* Casc
11450 61 64 65 20 74 68 65 20 63 68 61 6e 67 65 73 20  ade the changes 
11460 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44  */..#define OE_D
11470 65 66 61 75 6c 74 20 20 31 30 20 20 2f 2a 20 44  efault  10  /* D
11480 6f 20 77 68 61 74 65 76 65 72 20 74 68 65 20 64  o whatever the d
11490 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73  efault action is
114a0 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69   */.../*.** An i
114b0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
114c0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
114d0 72 65 20 69 73 20 70 61 73 73 65 64 20 61 73 20  re is passed as 
114e0 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67  the first.** arg
114f0 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33  ument to sqlite3
11500 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61  VdbeKeyCompare a
11510 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  nd is used to co
11520 6e 74 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63 6f  ntrol the .** co
11530 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20  mparison of the 
11540 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a  two index keys..
11550 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20  **.** Note that 
11560 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64  aSortOrder[] and
11570 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46   aColl[] have nF
11580 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54  ield+1 slots.  T
11590 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65  here.** are nFie
115a0 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68 65  ld slots for the
115b0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69   columns of an i
115c0 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65 78  ndex then one ex
115d0 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20  tra slot.** for 
115e0 74 68 65 20 72 6f 77 69 64 20 61 74 20 74 68 65  the rowid at the
115f0 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   end..*/.struct 
11600 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20  KeyInfo {.  u32 
11610 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
11620 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 66  /* Number of ref
11630 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73 20  erences to this 
11640 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a  KeyInfo object *
11650 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
11660 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
11670 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f  encoding - one o
11680 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46  f the SQLITE_UTF
11690 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31  * values */.  u1
116a0 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  6 nField;       
116b0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b    /* Number of k
116c0 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  ey columns in th
116d0 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36  e index */.  u16
116e0 20 6e 58 46 69 65 6c 64 3b 20 20 20 20 20 20 20   nXField;       
116f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
11700 6c 75 6d 6e 73 20 62 65 79 6f 6e 64 20 74 68 65  lumns beyond the
11710 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a   key columns */.
11720 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
11730 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
11740 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
11750 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f   */.  u8 *aSortO
11760 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72  rder;     /* Sor
11770 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68  t order for each
11780 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f   column. */.  Co
11790 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b  llSeq *aColl[1];
117a0 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
117b0 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68  equence for each
117c0 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79   term of the key
117d0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
117e0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
117f0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
11800 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72  ture holds infor
11810 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 0a 2a  mation about a.*
11820 2a 20 73 69 6e 67 6c 65 20 69 6e 64 65 78 20 72  * single index r
11830 65 63 6f 72 64 20 74 68 61 74 20 68 61 73 20 61  ecord that has a
11840 6c 72 65 61 64 79 20 62 65 65 6e 20 70 61 72 73  lready been pars
11850 65 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69  ed out into indi
11860 76 69 64 75 61 6c 0a 2a 2a 20 76 61 6c 75 65 73  vidual.** values
11870 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64  ..**.** A record
11880 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68   is an object th
11890 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  at contains one 
118a0 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f  or more fields o
118b0 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72  f data..** Recor
118c0 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73  ds are used to s
118d0 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74  tore the content
118e0 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20   of a table row 
118f0 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  and to store.** 
11900 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e  the key of an in
11910 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63  dex.  A blob enc
11920 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72  oding of a recor
11930 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a  d is created by.
11940 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65  ** the OP_MakeRe
11950 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74  cord opcode of t
11960 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64  he VDBE and is d
11970 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74  isassembled by t
11980 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20  he.** OP_Column 
11990 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  opcode..**.** Th
119a0 69 73 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  is structure hol
119b0 64 73 20 61 20 72 65 63 6f 72 64 20 74 68 61 74  ds a record that
119c0 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
119d0 6e 20 64 69 73 61 73 73 65 6d 62 6c 65 64 0a 2a  n disassembled.*
119e0 2a 20 69 6e 74 6f 20 69 74 73 20 63 6f 6e 73 74  * into its const
119f0 69 74 75 65 6e 74 20 66 69 65 6c 64 73 2e 0a 2a  ituent fields..*
11a00 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64 20  *.** The r1 and 
11a10 72 32 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62  r2 member variab
11a20 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65  les are only use
11a30 64 20 62 79 20 74 68 65 20 6f 70 74 69 6d 69 7a  d by the optimiz
11a40 65 64 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a  ed comparison.**
11a50 20 66 75 6e 63 74 69 6f 6e 73 20 76 64 62 65 52   functions vdbeR
11a60 65 63 6f 72 64 43 6f 6d 70 61 72 65 49 6e 74 28  ecordCompareInt(
11a70 29 20 61 6e 64 20 76 64 62 65 52 65 63 6f 72 64  ) and vdbeRecord
11a80 43 6f 6d 70 61 72 65 53 74 72 69 6e 67 28 29 2e  CompareString().
11a90 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63  .*/.struct Unpac
11aa0 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65  kedRecord {.  Ke
11ab0 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
11ac0 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61    /* Collation a
11ad0 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e  nd sort-order in
11ae0 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 75  formation */.  u
11af0 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  16 nField;      
11b00 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11b10 65 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65 6d  entries in apMem
11b20 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65 66 61 75  [] */.  i8 defau
11b30 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20 43  lt_rc;      /* C
11b40 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c 74  omparison result
11b50 20 69 66 20 6b 65 79 73 20 61 72 65 20 65 71 75   if keys are equ
11b60 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72 72 43 6f  al */.  u8 errCo
11b70 64 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45  de;         /* E
11b80 72 72 6f 72 20 64 65 74 65 63 74 65 64 20 62 79  rror detected by
11b90 20 78 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 20   xRecordCompare 
11ba0 28 43 4f 52 52 55 50 54 20 6f 72 20 4e 4f 4d 45  (CORRUPT or NOME
11bb0 4d 29 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65  M) */.  Mem *aMe
11bc0 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  m;          /* V
11bd0 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72  alues */.  int r
11be0 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  1;             /
11bf0 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
11c00 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29  n if (lhs > rhs)
11c10 20 2a 2f 0a 20 20 69 6e 74 20 72 32 3b 20 20 20   */.  int r2;   
11c20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
11c30 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20  ue to return if 
11c40 28 72 68 73 20 3c 20 6c 68 73 29 20 2a 2f 0a 7d  (rhs < lhs) */.}
11c50 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  ;.../*.** Each S
11c60 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70 72  QL index is repr
11c70 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
11c80 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  y by an.** insta
11c90 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
11ca0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
11cb0 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e  **.** The column
11cc0 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  s of the table t
11cd0 68 61 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e  hat are to be in
11ce0 64 65 78 65 64 20 61 72 65 20 64 65 73 63 72 69  dexed are descri
11cf0 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69  bed.** by the ai
11d00 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f  Column[] field o
11d10 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
11d20 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
11d30 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61  suppose.** we ha
11d40 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ve the following
11d50 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78   table and index
11d60 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41  :.**.**     CREA
11d70 54 45 20 54 41 42 4c 45 20 45 78 31 28 63 31 20  TE TABLE Ex1(c1 
11d80 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20  int, c2 int, c3 
11d90 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52  text);.**     CR
11da0 45 41 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f  EATE INDEX Ex2 O
11db0 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a  N Ex1(c3,c1);.**
11dc0 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65  .** In the Table
11dd0 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
11de0 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d  ibing Ex1, nCol=
11df0 3d 33 20 62 65 63 61 75 73 65 20 74 68 65 72 65  =3 because there
11e00 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f   are.** three co
11e10 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
11e20 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65  le.  In the Inde
11e30 78 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  x structure desc
11e40 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e  ribing.** Ex2, n
11e50 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20  Column==2 since 
11e60 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d  2 of the 3 colum
11e70 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e  ns of Ex1 are in
11e80 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61  dexed..** The va
11e90 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20  lue of aiColumn 
11ea0 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f  is {2, 0}.  aiCo
11eb0 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75  lumn[0]==2 becau
11ec0 73 65 20 74 68 65 20 0a 2a 2a 20 66 69 72 73 74  se the .** first
11ed0 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e   column to be in
11ee0 64 65 78 65 64 20 28 63 33 29 20 68 61 73 20 61  dexed (c3) has a
11ef0 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20  n index of 2 in 
11f00 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54  Ex1.aCol[]..** T
11f10 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e  he second column
11f20 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28   to be indexed (
11f30 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78  c1) has an index
11f40 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e   of 0 in.** Ex1.
11f50 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78  aCol[], hence Ex
11f60 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30  2.aiColumn[1]==0
11f70 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65  ..**.** The Inde
11f80 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20  x.onError field 
11f90 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68  determines wheth
11fa0 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e  er or not the in
11fb0 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a  dexed columns.**
11fc0 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65 20   must be unique 
11fd0 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69  and what to do i
11fe0 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20  f they are not. 
11ff0 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72   When Index.onEr
12000 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20  ror=OE_None,.** 
12010 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73  it means this is
12020 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e   not a unique in
12030 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20  dex.  Otherwise 
12040 69 74 20 69 73 20 61 20 75 6e 69 71 75 65 20 69  it is a unique i
12050 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20  ndex.** and the 
12060 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f  value of Index.o
12070 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20  nError indicate 
12080 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69  the which confli
12090 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a  ct resolution .*
120a0 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65  * algorithm to e
120b0 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61  mploy whenever a
120c0 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
120d0 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f  e to insert a no
120e0 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d  n-unique.** elem
120f0 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ent..*/.struct I
12100 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ndex {.  char *z
12110 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
12120 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
12130 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36  s index */.  i16
12140 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20   *aiColumn;     
12150 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63        /* Which c
12160 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20  olumns are used 
12170 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20  by this index.  
12180 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f  1st is 0 */.  Lo
12190 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73  gEst *aiRowLogEs
121a0 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41  t;     /* From A
121b0 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77  NALYZE: Est. row
121c0 73 20 73 65 6c 65 63 74 65 64 20 62 79 20 65 61  s selected by ea
121d0 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54  ch column */.  T
121e0 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20  able *pTable;   
121f0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53          /* The S
12200 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69  QL table being i
12210 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72  ndexed */.  char
12220 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20   *zColAff;      
12230 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64       /* String d
12240 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69  efining the affi
12250 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c  nity of each col
12260 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a  umn */.  Index *
12270 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
12280 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e    /* The next in
12290 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77  dex associated w
122a0 69 74 68 20 74 68 65 20 73 61 6d 65 20 74 61 62  ith the same tab
122b0 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  le */.  Schema *
122c0 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20  pSchema;        
122d0 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
122e0 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78  ining this index
122f0 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f   */.  u8 *aSortO
12300 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  rder;          /
12310 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  * for each colum
12320 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46  n: True==DESC, F
12330 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63  alse==ASC */.  c
12340 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20  har **azColl;   
12350 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79          /* Array
12360 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65   of collation se
12370 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72  quence names for
12380 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72   index */.  Expr
12390 20 2a 70 50 61 72 74 49 64 78 57 68 65 72 65 3b   *pPartIdxWhere;
123a0 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c       /* WHERE cl
123b0 61 75 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c  ause for partial
123c0 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 69 6e   indices */.  in
123d0 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  t tnum;         
123e0 20 20 20 20 20 20 20 2f 2a 20 44 42 20 50 61 67         /* DB Pag
123f0 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f  e containing roo
12400 74 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20  t of this index 
12410 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49 64  */.  LogEst szId
12420 78 52 6f 77 3b 20 20 20 20 20 20 20 20 20 2f 2a  xRow;         /*
12430 20 45 73 74 69 6d 61 74 65 64 20 61 76 65 72 61   Estimated avera
12440 67 65 20 72 6f 77 20 73 69 7a 65 20 69 6e 20 62  ge row size in b
12450 79 74 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b  ytes */.  u16 nK
12460 65 79 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  eyCol;          
12470 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
12480 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20  columns forming 
12490 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36  the key */.  u16
124a0 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   nColumn;       
124b0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
124c0 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65  of columns store
124d0 64 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a  d in the index *
124e0 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20  /.  u8 onError; 
124f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12500 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e  OE_Abort, OE_Ign
12510 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c  ore, OE_Replace,
12520 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20   or OE_None */. 
12530 20 75 6e 73 69 67 6e 65 64 20 69 64 78 54 79 70   unsigned idxTyp
12540 65 3a 32 3b 20 20 20 20 20 20 2f 2a 20 31 3d 3d  e:2;      /* 1==
12550 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41  UNIQUE, 2==PRIMA
12560 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54  RY KEY, 0==CREAT
12570 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73  E INDEX */.  uns
12580 69 67 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64  igned bUnordered
12590 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69  :1;   /* Use thi
125a0 73 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f  s index for == o
125b0 72 20 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c  r IN queries onl
125c0 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  y */.  unsigned 
125d0 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20  uniqNotNull:1;  
125e0 2f 2a 20 54 72 75 65 20 69 66 20 55 4e 49 51 55  /* True if UNIQU
125f0 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66  E and NOT NULL f
12600 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a  or all columns *
12610 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52  /.  unsigned isR
12620 65 73 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20  esized:1;    /* 
12630 54 72 75 65 20 69 66 20 72 65 73 69 7a 65 49 6e  True if resizeIn
12640 64 65 78 4f 62 6a 65 63 74 28 29 20 68 61 73 20  dexObject() has 
12650 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20  been called */. 
12660 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 76 65   unsigned isCove
12670 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75  ring:1;   /* Tru
12680 65 20 69 66 20 74 68 69 73 20 69 73 20 61 20 63  e if this is a c
12690 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f  overing index */
126a0 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 53 6b  .  unsigned noSk
126b0 69 70 53 63 61 6e 3a 31 3b 20 20 20 2f 2a 20 44  ipScan:1;   /* D
126c0 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20 75 73 65  o not try to use
126d0 20 73 6b 69 70 2d 73 63 61 6e 20 69 66 20 74 72   skip-scan if tr
126e0 75 65 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  ue */.#ifdef SQL
126f0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
12700 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20  _OR_STAT4.  int 
12710 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20  nSample;        
12720 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
12730 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53  f elements in aS
12740 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  ample[] */.  int
12750 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20   nSampleCol;    
12760 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
12770 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45   IndexSample.anE
12780 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f  q[] and so on */
12790 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67  .  tRowcnt *aAvg
127a0 45 71 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  Eq;         /* A
127b0 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65  verage nEq value
127c0 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69  s for keys not i
127d0 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49  n aSample */.  I
127e0 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d  ndexSample *aSam
127f0 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c  ple;    /* Sampl
12800 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d  es of the left-m
12810 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f  ost key */.  tRo
12820 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20  wcnt *aiRowEst; 
12830 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67        /* Non-log
12840 61 72 69 74 68 6d 69 63 20 73 74 61 74 31 20 64  arithmic stat1 d
12850 61 74 61 20 66 6f 72 20 74 68 69 73 20 69 6e 64  ata for this ind
12860 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  ex */.  tRowcnt 
12870 6e 52 6f 77 45 73 74 30 3b 20 20 20 20 20 20 20  nRowEst0;       
12880 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68   /* Non-logarith
12890 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  mic number of ro
128a0 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ws in the index 
128b0 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
128c0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
128d0 65 73 20 66 6f 72 20 49 6e 64 65 78 2e 69 64 78  es for Index.idx
128e0 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  Type.*/.#define 
128f0 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 41  SQLITE_IDXTYPE_A
12900 50 50 44 45 46 20 20 20 20 20 20 30 20 20 20 2f  PPDEF      0   /
12910 2a 20 43 72 65 61 74 65 64 20 75 73 69 6e 67 20  * Created using 
12920 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
12930 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
12940 44 58 54 59 50 45 5f 55 4e 49 51 55 45 20 20 20  DXTYPE_UNIQUE   
12950 20 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d     1   /* Implem
12960 65 6e 74 73 20 61 20 55 4e 49 51 55 45 20 63 6f  ents a UNIQUE co
12970 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
12980 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
12990 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 20 20 32  PE_PRIMARYKEY  2
129a0 20 20 20 2f 2a 20 49 73 20 74 68 65 20 50 52 49     /* Is the PRI
129b0 4d 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65  MARY KEY for the
129c0 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65   table */../* Re
129d0 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64  turn true if ind
129e0 65 78 20 58 20 69 73 20 61 20 50 52 49 4d 41 52  ex X is a PRIMAR
129f0 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23  Y KEY index */.#
12a00 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72 79  define IsPrimary
12a10 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28 28 58  KeyIndex(X)  ((X
12a20 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c 49  )->idxType==SQLI
12a30 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41  TE_IDXTYPE_PRIMA
12a40 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72  RYKEY)../* Retur
12a50 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20  n true if index 
12a60 58 20 69 73 20 61 20 55 4e 49 51 55 45 20 69 6e  X is a UNIQUE in
12a70 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  dex */.#define I
12a80 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29 20  sUniqueIndex(X) 
12a90 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72       ((X)->onErr
12aa0 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a  or!=OE_None)../*
12ab0 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20  .** Each sample 
12ac0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
12ad0 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65  lite_stat3 table
12ae0 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
12af0 69 6e 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75 73  in memory .** us
12b00 69 6e 67 20 61 20 73 74 72 75 63 74 75 72 65 20  ing a structure 
12b10 6f 66 20 74 68 69 73 20 74 79 70 65 2e 20 20 53  of this type.  S
12b20 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ee documentation
12b30 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74   at the top of t
12b40 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20  he.** analyze.c 
12b50 73 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20  source file for 
12b60 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
12b70 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
12b80 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a  t IndexSample {.
12b90 20 20 76 6f 69 64 20 2a 70 3b 20 20 20 20 20 20    void *p;      
12ba0 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
12bb0 6f 20 73 61 6d 70 6c 65 64 20 72 65 63 6f 72 64  o sampled record
12bc0 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20   */.  int n;    
12bd0 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
12be0 6f 66 20 72 65 63 6f 72 64 20 69 6e 20 62 79 74  of record in byt
12bf0 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  es */.  tRowcnt 
12c00 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73 74  *anEq;    /* Est
12c10 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  . number of rows
12c20 20 77 68 65 72 65 20 74 68 65 20 6b 65 79 20 65   where the key e
12c30 71 75 61 6c 73 20 74 68 69 73 20 73 61 6d 70 6c  quals this sampl
12c40 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  e */.  tRowcnt *
12c50 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e  anLt;    /* Est.
12c60 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
12c70 77 68 65 72 65 20 6b 65 79 20 69 73 20 6c 65 73  where key is les
12c80 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70  s than this samp
12c90 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  le */.  tRowcnt 
12ca0 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74  *anDLt;   /* Est
12cb0 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74  . number of dist
12cc0 69 6e 63 74 20 6b 65 79 73 20 6c 65 73 73 20 74  inct keys less t
12cd0 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20  han this sample 
12ce0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  */.};../*.** Eac
12cf0 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f  h token coming o
12d00 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20  ut of the lexer 
12d10 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
12d20 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74  f.** this struct
12d30 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65  ure.  Tokens are
12d40 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61   also used as pa
12d50 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73  rt of an express
12d60 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  ion..**.** Note 
12d70 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68  if Token.z==0 th
12d80 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64  en Token.dyn and
12d90 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64   Token.n are und
12da0 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61  efined and.** ma
12db0 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d  y contain random
12dc0 20 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74   values.  Do not
12dd0 20 6d 61 6b 65 20 61 6e 79 20 61 73 73 75 6d 70   make any assump
12de0 74 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65  tions about Toke
12df0 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b  n.dyn.** and Tok
12e00 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e  en.n when Token.
12e10 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  z==0..*/.struct 
12e20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20  Token {.  const 
12e30 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20  char *z;     /* 
12e40 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65  Text of the toke
12e50 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72  n.  Not NULL-ter
12e60 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e  minated! */.  un
12e70 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20  signed int n;   
12e80 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68   /* Number of ch
12e90 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 69 73  aracters in this
12ea0 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   token */.};../*
12eb0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
12ec0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
12ed0 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  e contains infor
12ee0 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f  mation needed to
12ef0 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64   generate.** cod
12f00 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74  e for a SELECT t
12f10 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67  hat contains agg
12f20 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
12f30 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e  ..**.** If Expr.
12f40 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d  op==TK_AGG_COLUM
12f50 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43  N or TK_AGG_FUNC
12f60 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70  TION then Expr.p
12f70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20  AggInfo is a.** 
12f80 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
12f90 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 20  structure.  The 
12fa0 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65  Expr.iColumn fie
12fb0 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  ld is the index 
12fc0 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43  in.** AggInfo.aC
12fd0 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e  ol[] or AggInfo.
12fe0 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72  aFunc[] of infor
12ff0 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f  mation needed to
13000 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64   generate.** cod
13010 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e  e for that node.
13020 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70  .**.** AggInfo.p
13030 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49  GroupBy and AggI
13040 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20  nfo.aFunc.pExpr 
13050 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20  point to fields 
13060 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72  within the.** or
13070 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74  iginal Select st
13080 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65 73  ructure that des
13090 63 72 69 62 65 73 20 74 68 65 20 53 45 4c 45 43  cribes the SELEC
130a0 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  T statement.  Th
130b0 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f  ese.** fields do
130c0 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20   not need to be 
130d0 66 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c  freed when deall
130e0 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67 67 49  ocating the AggI
130f0 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  nfo structure..*
13100 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  /.struct AggInfo
13110 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f   {.  u8 directMo
13120 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  de;          /* 
13130 44 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67  Direct rendering
13140 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65   mode means take
13150 20 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20   data directly. 
13160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13170 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d           ** from
13180 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72   source tables r
13190 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20  ather than from 
131a0 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a  accumulators */.
131b0 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49    u8 useSortingI
131c0 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20  dx;       /* In 
131d0 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66  direct mode, ref
131e0 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69  erence the sorti
131f0 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a  ng index rather.
13200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13210 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61            ** tha
13220 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  n the source tab
13230 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74  le */.  int sort
13240 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20 20  ingIdx;         
13250 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
13260 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20   of the sorting 
13270 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73  index */.  int s
13280 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20  ortingIdxPTab;  
13290 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
132a0 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61  ber of pseudo-ta
132b0 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f  ble */.  int nSo
132c0 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20  rtingColumn;    
132d0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
132e0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72  lumns in the sor
132f0 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
13300 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67  int mnReg, mxReg
13310 3b 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65  ;       /* Range
13320 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c   of registers al
13330 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c  located for aCol
13340 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20   and aFunc */.  
13350 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70  ExprList *pGroup
13360 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67  By;     /* The g
13370 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a  roup by clause *
13380 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e  /.  struct AggIn
13390 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46  fo_col {    /* F
133a0 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75  or each column u
133b0 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61  sed in source ta
133c0 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c  bles */.    Tabl
133d0 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
133e0 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74       /* Source t
133f0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
13400 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
13410 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
13420 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75  umber of the sou
13430 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
13440 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20   int iColumn;   
13450 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c            /* Col
13460 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69  umn number withi
13470 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  n the source tab
13480 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53  le */.    int iS
13490 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20  orterColumn;    
134a0 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
134b0 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69  ber in the sorti
134c0 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20  ng index */.    
134d0 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20  int iMem;       
134e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
134f0 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
13500 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c   acts as accumul
13510 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72  ator */.    Expr
13520 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
13530 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67       /* The orig
13540 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20  inal expression 
13550 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20  */.  } *aCol;.  
13560 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  int nColumn;    
13570 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13580 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65  r of used entrie
13590 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20  s in aCol[] */. 
135a0 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f   int nAccumulato
135b0 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  r;       /* Numb
135c0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68  er of columns th
135d0 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20  at show through 
135e0 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20  to the output.. 
135f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13600 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69           ** Addi
13610 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61  tional columns a
13620 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20  re used only as 
13630 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20  parameters to.  
13640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13650 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65          ** aggre
13660 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
13670 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e  /.  struct AggIn
13680 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46  fo_func {   /* F
13690 6f 72 20 65 61 63 68 20 61 67 67 72 65 67 61 74  or each aggregat
136a0 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
136b0 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
136c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
136d0 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e  pression encodin
136e0 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a  g the function *
136f0 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70  /.    FuncDef *p
13700 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f  Func;          /
13710 2a 20 54 68 65 20 61 67 67 72 65 67 61 74 65 20  * The aggregate 
13720 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  function impleme
13730 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69  ntation */.    i
13740 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt iMem;        
13750 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
13760 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
13770 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61  acts as accumula
13780 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  tor */.    int i
13790 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20  Distinct;       
137a0 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c      /* Ephemeral
137b0 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65   table used to e
137c0 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20  nforce DISTINCT 
137d0 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20  */.  } *aFunc;. 
137e0 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20   int nFunc;     
137f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13800 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
13810 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a   aFunc[] */.};..
13820 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79  /*.** The dataty
13830 70 65 20 79 6e 56 61 72 20 69 73 20 61 20 73 69  pe ynVar is a si
13840 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69  gned integer, ei
13850 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33  ther 16-bit or 3
13860 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c  2-bit..** Usuall
13870 79 20 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e  y it is 16-bits.
13880 20 20 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f    But if SQLITE_
13890 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
138a0 42 45 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a  BER is greater.*
138b0 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77 65 20  * than 32767 we 
138c0 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20  have to make it 
138d0 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20  32-bit.  16-bit 
138e0 69 73 20 70 72 65 66 65 72 72 65 64 20 62 65 63  is preferred bec
138f0 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20  ause.** it uses 
13900 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74  less memory in t
13910 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20  he Expr object, 
13920 77 68 69 63 68 20 69 73 20 61 20 62 69 67 20 6d  which is a big m
13930 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e  emory user.** in
13940 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f   systems with lo
13950 74 73 20 6f 66 20 70 72 65 70 61 72 65 64 20 73  ts of prepared s
13960 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20  tatements.  And 
13970 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  few applications
13980 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68  .** need more th
13990 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32  an about 10 or 2
139a0 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75  0 variables.  Bu
139b0 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75  t some extreme u
139c0 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20  sers want.** to 
139d0 68 61 76 65 20 70 72 65 70 61 72 65 64 20 73 74  have prepared st
139e0 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76  atements with ov
139f0 65 72 20 33 32 37 36 37 20 76 61 72 69 61 62 6c  er 32767 variabl
13a00 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d  es, and for them
13a10 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69  .** the option i
13a20 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20  s available (at 
13a30 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a  compile-time)..*
13a40 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
13a50 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
13a60 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66 20  <=32767.typedef 
13a70 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65  i16 ynVar;.#else
13a80 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56  .typedef int ynV
13a90 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ar;.#endif../*.*
13aa0 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61  * Each node of a
13ab0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  n expression in 
13ac0 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 69  the parse tree i
13ad0 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  s an instance.**
13ae0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
13af0 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f  re..**.** Expr.o
13b00 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e  p is the opcode.
13b10 20 54 68 65 20 69 6e 74 65 67 65 72 20 70 61 72   The integer par
13b20 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20  ser token codes 
13b30 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73  are reused.** as
13b40 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46   opcodes here. F
13b50 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20  or example, the 
13b60 70 61 72 73 65 72 20 64 65 66 69 6e 65 73 20 54  parser defines T
13b70 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e  K_GE to be an in
13b80 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65  teger.** code re
13b90 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22  presenting the "
13ba0 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68  >=" operator. Th
13bb0 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20  is same integer 
13bc0 63 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a  code is reused.*
13bd0 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74  * to represent t
13be0 68 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d  he greater-than-
13bf0 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72  or-equal-to oper
13c00 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72  ator in the expr
13c10 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a  ession.** tree..
13c20 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
13c30 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
13c40 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e  L literal (TK_IN
13c50 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c  TEGER, TK_FLOAT,
13c60 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a 20 6f 72   TK_BLOB, .** or
13c70 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65   TK_STRING), the
13c80 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
13c90 74 61 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f  tains the text o
13ca0 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61  f the SQL litera
13cb0 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70  l. If.** the exp
13cc0 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72  ression is a var
13cd0 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42  iable (TK_VARIAB
13ce0 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74  LE), then Expr.t
13cf0 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
13d00 65 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e  e .** variable n
13d10 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66  ame. Finally, if
13d20 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
13d30 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  is an SQL functi
13d40 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29  on (TK_FUNCTION)
13d50 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74  ,.** then Expr.t
13d60 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
13d70 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75  e name of the fu
13d80 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78  nction..**.** Ex
13d90 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78  pr.pRight and Ex
13da0 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65  pr.pLeft are the
13db0 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20   left and right 
13dc0 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f  subexpressions o
13dd0 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70  f a.** binary op
13de0 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f  erator. Either o
13df0 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55  r both may be NU
13e00 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78  LL..**.** Expr.x
13e10 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74  .pList is a list
13e20 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66   of arguments if
13e30 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
13e40 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  is an SQL functi
13e50 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78  on,.** a CASE ex
13e60 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49  pression or an I
13e70 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20  N expression of 
13e80 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20  the form "<lhs> 
13e90 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29  IN (<y>, <z>...)
13ea0 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65  "..** Expr.x.pSe
13eb0 6c 65 63 74 20 69 73 20 75 73 65 64 20 69 66 20  lect is used if 
13ec0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
13ed0 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f  s a sub-select o
13ee0 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  r an expression 
13ef0 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22  of.** the form "
13f00 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54  <lhs> IN (SELECT
13f10 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45   ...)". If the E
13f20 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74 20  P_xIsSelect bit 
13f30 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a  is set in the.**
13f40 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
13f50 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53  , then Expr.x.pS
13f60 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20  elect is valid. 
13f70 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e  Otherwise, Expr.
13f80 78 2e 70 4c 69 73 74 20 69 73 20 0a 2a 2a 20 76  x.pList is .** v
13f90 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65  alid..**.** An e
13fa0 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
13fb0 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49   form ID or ID.I
13fc0 44 20 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f  D refers to a co
13fd0 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e  lumn in a table.
13fe0 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70  .** For such exp
13ff0 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f  ressions, Expr.o
14000 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43  p is set to TK_C
14010 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69  OLUMN and Expr.i
14020 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20  Table is.** the 
14030 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e  integer cursor n
14040 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45 20  umber of a VDBE 
14050 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
14060 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e  to that table an
14070 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d  d.** Expr.iColum
14080 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  n is the column 
14090 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73  number for the s
140a0 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20  pecific column. 
140b0 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65   If the.** expre
140c0 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73  ssion is used as
140d0 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20   a result in an 
140e0 61 67 67 72 65 67 61 74 65 20 53 45 4c 45 43 54  aggregate SELECT
140f0 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61  , then the.** va
14100 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72  lue is also stor
14110 65 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69  ed in the Expr.i
14120 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  Agg column in th
14130 65 20 61 67 67 72 65 67 61 74 65 20 73 6f 20 74  e aggregate so t
14140 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65  hat.** it can be
14150 20 61 63 63 65 73 73 65 64 20 61 66 74 65 72 20   accessed after 
14160 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20 61  all aggregates a
14170 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a  re computed..**.
14180 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
14190 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75  sion is an unbou
141a0 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b  nd variable mark
141b0 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d  er (a question m
141c0 61 72 6b 20 0a 2a 2a 20 63 68 61 72 61 63 74 65  ark .** characte
141d0 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69  r '?' in the ori
141e0 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20  ginal SQL) then 
141f0 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20  the Expr.iTable 
14200 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78 20  holds the index 
14210 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  .** number for t
14220 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a  hat variable..**
14230 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
14240 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75  ssion is a subqu
14250 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43  ery then Expr.iC
14260 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69  olumn holds an i
14270 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74  nteger.** regist
14280 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69  er number contai
14290 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20  ning the result 
142a0 6f 66 20 74 68 65 20 73 75 62 71 75 65 72 79 2e  of the subquery.
142b0 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71    If the.** subq
142c0 75 65 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e  uery gives a con
142d0 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68  stant result, th
142e0 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e  en iTable is -1.
142f0 20 20 49 66 20 74 68 65 20 73 75 62 71 75 65 72    If the subquer
14300 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66  y.** gives a dif
14310 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74  ferent answer at
14320 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73   different times
14330 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e   during statemen
14340 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20  t processing.** 
14350 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74  then iTable is t
14360 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20  he address of a 
14370 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20  subroutine that 
14380 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75 62  computes the sub
14390 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  query..**.** If 
143a0 74 68 65 20 45 78 70 72 20 69 73 20 6f 66 20 74  the Expr is of t
143b0 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61  ype OP_Column, a
143c0 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 74 20  nd the table it 
143d0 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f  is selecting fro
143e0 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74  m.** is a disk t
143f0 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64  able or the "old
14400 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  .*" pseudo-table
14410 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e  , then pTab poin
14420 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72  ts to the.** cor
14430 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65  responding table
14440 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a   definition..**.
14450 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f  ** ALLOCATION NO
14460 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20  TES:.**.** Expr 
14470 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20  objects can use 
14480 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20  a lot of memory 
14490 73 70 61 63 65 20 69 6e 20 64 61 74 61 62 61 73  space in databas
144a0 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a  e schema.  To.**
144b0 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d   help reduce mem
144c0 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73  ory requirements
144d0 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45  , sometimes an E
144e0 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20  xpr object will 
144f0 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e  be.** truncated.
14500 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20    And to reduce 
14510 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65  the number of me
14520 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  mory allocations
14530 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74  , sometimes.** t
14540 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20  wo or more Expr 
14550 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20  objects will be 
14560 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67  stored in a sing
14570 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  le memory alloca
14580 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65  tion,.** togethe
14590 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b  r with Expr.zTok
145a0 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a  en strings..**.*
145b0 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75  * If the EP_Redu
145c0 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e  ced and EP_Token
145d0 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73  Only flags are s
145e0 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78  et when.** an Ex
145f0 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75  pr object is tru
14600 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50  ncated.  When EP
14610 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2c  _Reduced is set,
14620 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65   then all.** the
14630 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65   child Expr obje
14640 63 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  cts in the Expr.
14650 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70  pLeft and Expr.p
14660 52 69 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a  Right subtrees.*
14670 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  * are contained 
14680 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
14690 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
146a0 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65  n.  Note, howeve
146b0 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73  r, that.** the s
146c0 75 62 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e  ubtrees in Expr.
146d0 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e  x.pList or Expr.
146e0 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c  x.pSelect are al
146f0 77 61 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a  ways separately.
14700 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65  ** allocated, re
14710 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
14720 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65  her or not EP_Re
14730 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f  duced is set..*/
14740 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20  .struct Expr {. 
14750 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
14760 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61          /* Opera
14770 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62  tion performed b
14780 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20  y this node */. 
14790 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
147a0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
147b0 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63  ffinity of the c
147c0 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f  olumn or 0 if no
147d0 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  t a column */.  
147e0 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20  u32 flags;      
147f0 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75         /* Variou
14800 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53  s flags.  EP_* S
14810 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e  ee below */.  un
14820 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a  ion {.    char *
14830 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20  zToken;         
14840 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e   /* Token value.
14850 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64   Zero terminated
14860 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f   and dequoted */
14870 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b  .    int iValue;
14880 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
14890 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65  on-negative inte
148a0 67 65 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f  ger value if EP_
148b0 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20  IntValue */.  } 
148c0 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  u;..  /* If the 
148d0 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
148e0 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20  g is set in the 
148f0 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
14900 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70   then no.  ** sp
14910 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ace is allocated
14920 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20   for the fields 
14930 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74  below this point
14940 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a  . An attempt to.
14950 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d    ** access them
14960 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20   will result in 
14970 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61  a segfault or ma
14980 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a 20 20 2a 2a  lfunction. .  **
14990 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
149a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
149b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
149c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
149d0 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c  ***/..  Expr *pL
149e0 65 66 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  eft;           /
149f0 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20 2a  * Left subnode *
14a00 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68 74  /.  Expr *pRight
14a10 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 69  ;          /* Ri
14a20 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20  ght subnode */. 
14a30 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70   union {.    Exp
14a40 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20 20  rList *pList;   
14a50 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58    /* op = IN, EX
14a60 49 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43 41  ISTS, SELECT, CA
14a70 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45  SE, FUNCTION, BE
14a80 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c  TWEEN */.    Sel
14a90 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
14aa0 20 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65 63    /* EP_xIsSelec
14ab0 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45  t and op = IN, E
14ac0 58 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f  XISTS, SELECT */
14ad0 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66  .  } x;..  /* If
14ae0 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
14af0 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74  flag is set in t
14b00 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  he Expr.flags ma
14b10 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a  sk, then no.  **
14b20 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61   space is alloca
14b30 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c  ted for the fiel
14b40 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f  ds below this po
14b50 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  int. An attempt 
14b60 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74  to.  ** access t
14b70 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  hem will result 
14b80 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72  in a segfault or
14b90 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20   malfunction..  
14ba0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14bb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14bc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14bd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14be0 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49  *****/..#if SQLI
14bf0 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54  TE_MAX_EXPR_DEPT
14c00 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68  H>0.  int nHeigh
14c10 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
14c20 48 65 69 67 68 74 20 6f 66 20 74 68 65 20 74 72  Height of the tr
14c30 65 65 20 68 65 61 64 65 64 20 62 79 20 74 68 69  ee headed by thi
14c40 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  s node */.#endif
14c50 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20  .  int iTable;  
14c60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
14c70 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e  COLUMN: cursor n
14c80 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68  umber of table h
14c90 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20  olding column.  
14ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cb0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47         ** TK_REG
14cc0 49 53 54 45 52 3a 20 72 65 67 69 73 74 65 72 20  ISTER: register 
14cd0 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20  number.         
14ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cf0 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31  ** TK_TRIGGER: 1
14d00 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c   -> new, 0 -> ol
14d10 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d.              
14d20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45 50             ** EP
14d30 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34 32  _Unlikely:  1342
14d40 31 37 37 32 38 20 74 69 6d 65 73 20 6c 69 6b 65  17728 times like
14d50 6c 69 68 6f 6f 64 20 2a 2f 0a 20 20 79 6e 56 61  lihood */.  ynVa
14d60 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  r iColumn;      
14d70 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
14d80 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20   column index.  
14d90 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20  -1 for rowid..  
14da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14db0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52         ** TK_VAR
14dc0 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20  IABLE: variable 
14dd0 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e  number (always >
14de0 3d 20 31 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69  = 1). */.  i16 i
14df0 41 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Agg;            
14e00 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79    /* Which entry
14e10 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43   in pAggInfo->aC
14e20 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b  ol[] or ->aFunc[
14e30 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68  ] */.  i16 iRigh
14e40 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a  tJoinTable;   /*
14e50 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c   If EP_FromJoin,
14e60 20 74 68 65 20 72 69 67 68 74 20 74 61 62 6c 65   the right table
14e70 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a   of the join */.
14e80 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20    u8 op2;       
14e90 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52           /* TK_R
14ea0 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69 6e 61  EGISTER: origina
14eb0 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e  l value of Expr.
14ec0 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  op.             
14ed0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
14ee0 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61  K_COLUMN: the va
14ef0 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20 4f 50  lue of p5 for OP
14f00 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20  _Column.        
14f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54   ** TK_AGG_FUNCT
14f30 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65 70  ION: nesting dep
14f40 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20  th */.  AggInfo 
14f50 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f  *pAggInfo;     /
14f60 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47  * Used by TK_AGG
14f70 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41  _COLUMN and TK_A
14f80 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20  GG_FUNCTION */. 
14f90 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
14fa0 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
14fb0 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65   for TK_COLUMN e
14fc0 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d  xpressions. */.}
14fd0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
14fe0 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d  lowing are the m
14ff0 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20  eanings of bits 
15000 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
15010 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
15020 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20  ine EP_FromJoin 
15030 20 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69   0x000001 /* Ori
15040 67 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53  ginates in ON/US
15050 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 6f 75  ING clause of ou
15060 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
15070 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20 20  ine EP_Agg      
15080 20 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e   0x000002 /* Con
15090 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
150a0 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
150b0 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
150c0 20 45 50 5f 52 65 73 6f 6c 76 65 64 20 20 30 78   EP_Resolved  0x
150d0 30 30 30 30 30 34 20 2f 2a 20 49 44 73 20 68 61  000004 /* IDs ha
150e0 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64  ve been resolved
150f0 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23   to COLUMNs */.#
15100 64 65 66 69 6e 65 20 45 50 5f 45 72 72 6f 72 20  define EP_Error 
15110 20 20 20 20 30 78 30 30 30 30 30 38 20 2f 2a 20      0x000008 /* 
15120 45 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74 61  Expression conta
15130 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ins one or more 
15140 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e  errors */.#defin
15150 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30  e EP_Distinct  0
15160 78 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65  x000010 /* Aggre
15170 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69  gate function wi
15180 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  th DISTINCT keyw
15190 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ord */.#define E
151a0 50 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30  P_VarSelect 0x00
151b0 30 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20  0020 /* pSelect 
151c0 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e  is correlated, n
151d0 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23  ot constant */.#
151e0 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f  define EP_DblQuo
151f0 74 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20  ted 0x000040 /* 
15200 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67  token.z was orig
15210 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20  inally in "..." 
15220 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e  */.#define EP_In
15230 66 69 78 46 75 6e 63 20 30 78 30 30 30 30 38 30  fixFunc 0x000080
15240 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20   /* True for an 
15250 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20  infix function: 
15260 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20  LIKE, GLOB, etc 
15270 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f  */.#define EP_Co
15280 6c 6c 61 74 65 20 20 20 30 78 30 30 30 31 30 30  llate   0x000100
15290 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e   /* Tree contain
152a0 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f  s a TK_COLLATE o
152b0 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69  perator */.#defi
152c0 6e 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20  ne EP_Generic   
152d0 30 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f  0x000200 /* Igno
152e0 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66  re COLLATE or af
152f0 66 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74  finity on this t
15300 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ree */.#define E
15310 50 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30  P_IntValue  0x00
15320 30 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20  0400 /* Integer 
15330 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20  value contained 
15340 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23  in u.iValue */.#
15350 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c  define EP_xIsSel
15360 65 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20  ect 0x000800 /* 
15370 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c  x.pSelect is val
15380 69 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e  id (otherwise x.
15390 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65  pList is) */.#de
153a0 66 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20  fine EP_Skip    
153b0 20 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f    0x001000 /* CO
153c0 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e  LLATE, AS, or UN
153d0 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e  LIKELY */.#defin
153e0 65 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 30  e EP_Reduced   0
153f0 78 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20  x002000 /* Expr 
15400 73 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55  struct EXPR_REDU
15410 43 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e  CEDSIZE bytes on
15420 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ly */.#define EP
15430 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34  _TokenOnly 0x004
15440 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75  000 /* Expr stru
15450 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c  ct EXPR_TOKENONL
15460 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79  YSIZE bytes only
15470 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53   */.#define EP_S
15480 74 61 74 69 63 20 20 20 20 30 78 30 30 38 30 30  tatic    0x00800
15490 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d  0 /* Held in mem
154a0 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64  ory not obtained
154b0 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a   from malloc() *
154c0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d  /.#define EP_Mem
154d0 54 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20  Token  0x010000 
154e0 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74  /* Need to sqlit
154f0 65 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e  e3DbFree() Expr.
15500 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  zToken */.#defin
15510 65 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30  e EP_NoReduce  0
15520 78 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f  x020000 /* Canno
15530 74 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45  t EXPRDUP_REDUCE
15540 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64   this Expr */.#d
15550 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c  efine EP_Unlikel
15560 79 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75  y  0x040000 /* u
15570 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b  nlikely() or lik
15580 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69  elihood() functi
15590 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  on */.#define EP
155a0 5f 43 6f 6e 73 74 46 75 6e 63 20 30 78 30 38 30  _ConstFunc 0x080
155b0 30 30 30 20 2f 2a 20 4e 6f 64 65 20 69 73 20 61  000 /* Node is a
155c0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
155d0 53 54 41 4e 54 20 66 75 6e 63 74 69 6f 6e 20 2a  STANT function *
155e0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 61 6e  /.#define EP_Can
155f0 42 65 4e 75 6c 6c 20 30 78 31 30 30 30 30 30 20  BeNull 0x100000 
15600 2f 2a 20 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64  /* Can be null d
15610 65 73 70 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20  espite NOT NULL 
15620 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64  constraint */.#d
15630 65 66 69 6e 65 20 45 50 5f 53 75 62 71 75 65 72  efine EP_Subquer
15640 79 20 20 30 78 32 30 30 30 30 30 20 2f 2a 20 54  y  0x200000 /* T
15650 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54  ree contains a T
15660 4b 5f 53 45 4c 45 43 54 20 6f 70 65 72 61 74 6f  K_SELECT operato
15670 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 62  r */../*.** Comb
15680 69 6e 61 74 69 6f 6e 73 20 6f 66 20 74 77 6f 20  inations of two 
15690 6f 72 20 6d 6f 72 65 20 45 50 5f 2a 20 66 6c 61  or more EP_* fla
156a0 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  gs.*/.#define EP
156b0 5f 50 72 6f 70 61 67 61 74 65 20 28 45 50 5f 43  _Propagate (EP_C
156c0 6f 6c 6c 61 74 65 7c 45 50 5f 53 75 62 71 75 65  ollate|EP_Subque
156d0 72 79 29 20 2f 2a 20 50 72 6f 70 61 67 61 74 65  ry) /* Propagate
156e0 20 74 68 65 73 65 20 62 69 74 73 20 75 70 20 74   these bits up t
156f0 72 65 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ree */../*.** Th
15700 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62  ese macros can b
15710 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20  e used to test, 
15720 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69  set, or clear bi
15730 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 45 78  ts in the .** Ex
15740 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  pr.flags field..
15750 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48  */.#define ExprH
15760 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  asProperty(E,P) 
15770 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73      (((E)->flags
15780 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  &(P))!=0).#defin
15790 65 20 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70  e ExprHasAllProp
157a0 65 72 74 79 28 45 2c 50 29 20 20 28 28 28 45 29  erty(E,P)  (((E)
157b0 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50  ->flags&(P))==(P
157c0 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53  )).#define ExprS
157d0 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  etProperty(E,P) 
157e0 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d      (E)->flags|=
157f0 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  (P).#define Expr
15800 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c  ClearProperty(E,
15810 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26  P)   (E)->flags&
15820 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78  =~(P)../* The Ex
15830 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
15840 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  () macro is used
15850 20 66 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f   for Verificatio
15860 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a  n, Validation,.*
15870 2a 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74  * and Accreditat
15880 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f  ion only.  It wo
15890 72 6b 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74  rks like ExprSet
158a0 50 72 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e  Property() durin
158b0 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73  g VVA.** process
158c0 65 73 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f  es but is a no-o
158d0 70 20 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a  p for delivery..
158e0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
158f0 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20  _DEBUG.# define 
15900 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
15910 74 79 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c  ty(E,P)  (E)->fl
15920 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23  ags|=(P).#else.#
15930 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56   define ExprSetV
15940 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a  VAProperty(E,P).
15950 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
15960 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
15970 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
15980 62 79 74 65 73 20 72 65 71 75 69 72 65 64 20 62  bytes required b
15990 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 20  y a normal Expr 
159a0 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45  .** struct, an E
159b0 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20  xpr struct with 
159c0 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66  the EP_Reduced f
159d0 6c 61 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e  lag set in Expr.
159e0 66 6c 61 67 73 20 0a 2a 2a 20 61 6e 64 20 61 6e  flags .** and an
159f0 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74   Expr struct wit
15a00 68 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  h the EP_TokenOn
15a10 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a  ly flag set..*/.
15a20 23 64 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c  #define EXPR_FUL
15a30 4c 53 49 5a 45 20 20 20 20 20 20 20 20 20 20 20  LSIZE           
15a40 73 69 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20  sizeof(Expr)    
15a50 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73         /* Full s
15a60 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ize */.#define E
15a70 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20  XPR_REDUCEDSIZE 
15a80 20 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28         offsetof(
15a90 45 78 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a  Expr,iTable)  /*
15aa0 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73   Common features
15ab0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52   */.#define EXPR
15ac0 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20  _TOKENONLYSIZE  
15ad0 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70      offsetof(Exp
15ae0 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65  r,pLeft)   /* Fe
15af0 77 65 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a  wer features */.
15b00 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73  ./*.** Flags pas
15b10 73 65 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74  sed to the sqlit
15b20 65 33 45 78 70 72 44 75 70 28 29 20 66 75 6e 63  e3ExprDup() func
15b30 74 69 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65  tion. See the he
15b40 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20 0a 2a 2a  ader comment .**
15b50 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78   above sqlite3Ex
15b60 70 72 44 75 70 28 29 20 66 6f 72 20 64 65 74 61  prDup() for deta
15b70 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ils..*/.#define 
15b80 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 20  EXPRDUP_REDUCE  
15b90 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20 2f         0x0001  /
15ba0 2a 20 55 73 65 64 20 72 65 64 75 63 65 64 2d 73  * Used reduced-s
15bb0 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a  ize Expr nodes *
15bc0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20  /../*.** A list 
15bd0 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20  of expressions. 
15be0 20 45 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e   Each expression
15bf0 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20   may optionally 
15c00 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20  have a.** name. 
15c10 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f   An expr/name co
15c20 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65  mbination can be
15c30 20 75 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c   used in several
15c40 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61   ways, such.** a
15c50 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65  s the list of "e
15c60 78 70 72 20 41 53 20 49 44 22 20 66 69 65 6c 64  xpr AS ID" field
15c70 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53  s following a "S
15c80 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65  ELECT" or in the
15c90 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20  .** list of "ID 
15ca0 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e  = expr" items in
15cb0 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c   an UPDATE.  A l
15cc0 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
15cd0 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62  ns can.** also b
15ce0 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72  e used as the ar
15cf0 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63  gument to a func
15d00 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63  tion, in which c
15d10 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a  ase the a.zName.
15d20 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20  ** field is not 
15d30 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64  used..**.** By d
15d40 65 66 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e  efault the Expr.
15d50 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64  zSpan field hold
15d60 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62  s a human-readab
15d70 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f  le description o
15d80 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73  f.** the express
15d90 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 65 64  ion that is used
15da0 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69   in the generati
15db0 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73  on of error mess
15dc0 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75  ages and.** colu
15dd0 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74  mn labels.  In t
15de0 68 69 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a  his case, Expr.z
15df0 53 70 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c  Span is typicall
15e00 79 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a  y the text of a.
15e10 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73  ** column expres
15e20 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74  sion as it exist
15e30 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74  s in a SELECT st
15e40 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65  atement.  Howeve
15e50 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70  r, if.** the bSp
15e60 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69 73 20  anIsTab flag is 
15e70 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20  set, then zSpan 
15e80 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f  is overloaded to
15e90 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a   mean the name.*
15ea0 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  * of the result 
15eb0 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f  column in the fo
15ec0 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42  rm: DATABASE.TAB
15ed0 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73  LE.COLUMN.  This
15ee0 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69   later.** form i
15ef0 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20  s used for name 
15f00 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20  resolution with 
15f10 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75  nested FROM clau
15f20 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  ses..*/.struct E
15f30 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20  xprList {.  int 
15f40 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  nExpr;          
15f50 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15f60 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74  expressions on t
15f70 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 73 74 72  he list */.  str
15f80 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65  uct ExprList_ite
15f90 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20  m { /* For each 
15fa0 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
15fb0 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78  e list */.    Ex
15fc0 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
15fd0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 69 73        /* The lis
15fe0 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
15ff0 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
16000 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
16010 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61  /* Token associa
16020 74 65 64 20 77 69 74 68 20 74 68 69 73 20 65 78  ted with this ex
16030 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
16040 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20  char *zSpan;    
16050 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69          /* Origi
16060 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20  nal text of the 
16070 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
16080 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20    u8 sortOrder; 
16090 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66            /* 1 f
160a0 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72  or DESC or 0 for
160b0 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69   ASC */.    unsi
160c0 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20  gned done :1;   
160d0 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f      /* A flag to
160e0 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70   indicate when p
160f0 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e  rocessing is fin
16100 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73  ished */.    uns
16110 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62  igned bSpanIsTab
16120 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f   :1; /* zSpan ho
16130 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c  lds DB.TABLE.COL
16140 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  UMN */.    unsig
16150 6e 65 64 20 72 65 75 73 61 62 6c 65 20 3a 31 3b  ned reusable :1;
16160 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65     /* Constant e
16170 78 70 72 65 73 73 69 6f 6e 20 69 73 20 72 65 75  xpression is reu
16180 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 69  sable */.    uni
16190 6f 6e 20 7b 0a 20 20 20 20 20 20 73 74 72 75 63  on {.      struc
161a0 74 20 7b 0a 20 20 20 20 20 20 20 20 75 31 36 20  t {.        u16 
161b0 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20  iOrderByCol;    
161c0 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42    /* For ORDER B
161d0 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  Y, column number
161e0 20 69 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a   in result set *
161f0 2f 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 41  /.        u16 iA
16200 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20  lias;           
16210 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61  /* Index into Pa
16220 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72  rse.aAlias[] for
16230 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20   zName */.      
16240 7d 20 78 3b 0a 20 20 20 20 20 20 69 6e 74 20 69  } x;.      int i
16250 43 6f 6e 73 74 45 78 70 72 52 65 67 3b 20 20 20  ConstExprReg;   
16260 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 69     /* Register i
16270 6e 20 77 68 69 63 68 20 45 78 70 72 20 76 61 6c  n which Expr val
16280 75 65 20 69 73 20 63 61 63 68 65 64 20 2a 2f 0a  ue is cached */.
16290 20 20 20 20 7d 20 75 3b 0a 20 20 7d 20 2a 61 3b      } u;.  } *a;
162a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162b0 20 20 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77    /* Alloc a pow
162c0 65 72 20 6f 66 20 74 77 6f 20 67 72 65 61 74 65  er of two greate
162d0 72 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e 45  r or equal to nE
162e0 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  xpr */.};../*.**
162f0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
16300 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
16310 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70 61  s used by the pa
16320 72 73 65 72 20 74 6f 20 72 65 63 6f 72 64 20 62  rser to record b
16330 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65  oth.** the parse
16340 20 74 72 65 65 20 66 6f 72 20 61 6e 20 65 78 70   tree for an exp
16350 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20  ression and the 
16360 73 70 61 6e 20 6f 66 20 69 6e 70 75 74 20 74 65  span of input te
16370 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70  xt for an.** exp
16380 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ression..*/.stru
16390 63 74 20 45 78 70 72 53 70 61 6e 20 7b 0a 20 20  ct ExprSpan {.  
163a0 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
163b0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70        /* The exp
163c0 72 65 73 73 69 6f 6e 20 70 61 72 73 65 20 74 72  ression parse tr
163d0 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ee */.  const ch
163e0 61 72 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a  ar *zStart;   /*
163f0 20 46 69 72 73 74 20 63 68 61 72 61 63 74 65 72   First character
16400 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a   of input text *
16410 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
16420 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65  zEnd;     /* One
16430 20 63 68 61 72 61 63 74 65 72 20 70 61 73 74 20   character past 
16440 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74  the end of input
16450 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   text */.};../*.
16460 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
16470 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
16480 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70   can hold a simp
16490 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74  le list of ident
164a0 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20  ifiers,.** such 
164b0 61 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62  as the list "a,b
164c0 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  ,c" in the follo
164d0 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a  wing statements:
164e0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45  .**.**      INSE
164f0 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29  RT INTO t(a,b,c)
16500 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20   VALUES ...;.** 
16510 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
16520 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63  X idx ON t(a,b,c
16530 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54  );.**      CREAT
16540 45 20 54 52 49 47 47 45 52 20 74 72 69 67 20 42  E TRIGGER trig B
16550 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20  EFORE UPDATE ON 
16560 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a  t(a,b,c) ...;.**
16570 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61  .** The IdList.a
16580 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20 75 73  .idx field is us
16590 65 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69  ed when the IdLi
165a0 73 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  st represents th
165b0 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c  e list of.** col
165c0 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20  umn names after 
165d0 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20  a table name in 
165e0 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  an INSERT statem
165f0 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61  ent.  In the sta
16600 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20  tement.**.**    
16610 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
16620 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20  ,b,c) ....**.** 
16630 49 66 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d  If "a" is the k-
16640 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62  th column of tab
16650 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c  le "t", then IdL
16660 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e  ist.a[0].idx==k.
16670 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73  .*/.struct IdLis
16680 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c  t {.  struct IdL
16690 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63  ist_item {.    c
166a0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
166b0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
166c0 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20  identifier */.  
166d0 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20    int idx;      
166e0 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
166f0 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b  some Table.aCol[
16700 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61  ] of a column na
16710 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d  med zName */.  }
16720 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20   *a;.  int nId; 
16730 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16740 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73  r of identifiers
16750 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
16760 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69  };../*.** The bi
16770 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20 64  tmask datatype d
16780 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20  efined below is 
16790 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  used for various
167a0 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
167b0 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74  **.** Changing t
167c0 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69  his from a 64-bi
167d0 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79  t to a 32-bit ty
167e0 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75  pe limits the nu
167f0 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65  mber of.** table
16800 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33  s in a join to 3
16810 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e  2 instead of 64.
16820 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65    But it also re
16830 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a  duces the size.*
16840 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79  * of the library
16850 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e   by 738 bytes on
16860 20 69 78 38 36 2e 0a 2a 2f 0a 74 79 70 65 64 65   ix86..*/.typede
16870 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 0a  f u64 Bitmask;..
16880 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  /*.** The number
16890 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42 69   of bits in a Bi
168a0 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65  tmask.  "BMS" me
168b0 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69 7a  ans "BitMask Siz
168c0 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42  e"..*/.#define B
168d0 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f  MS  ((int)(sizeo
168e0 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a  f(Bitmask)*8))..
168f0 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20 61  /*.** A bit in a
16900 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66   Bitmask.*/.#def
16910 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29 20 20  ine MASKBIT(n)  
16920 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c   (((Bitmask)1)<<
16930 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d 41 53  (n)).#define MAS
16940 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75 6e 73  KBIT32(n) (((uns
16950 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28 6e  igned int)1)<<(n
16960 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  ))../*.** The fo
16970 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
16980 65 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  e describes the 
16990 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61  FROM clause of a
169a0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
169b0 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65  t..** Each table
169c0 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20   or subquery in 
169d0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
169e0 69 73 20 61 20 73 65 70 61 72 61 74 65 20 65 6c  is a separate el
169f0 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20  ement of.** the 
16a00 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61  SrcList.a[] arra
16a10 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68  y..**.** With th
16a20 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75  e addition of mu
16a30 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
16a40 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c  support, the fol
16a50 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
16a60 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20  .** can also be 
16a70 75 73 65 64 20 74 6f 20 64 65 73 63 72 69 62 65  used to describe
16a80 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61   a particular ta
16a90 62 6c 65 20 73 75 63 68 20 61 73 20 74 68 65 20  ble such as the 
16aa0 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73  table that.** is
16ab0 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20   modified by an 
16ac0 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20  INSERT, DELETE, 
16ad0 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  or UPDATE statem
16ae0 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72  ent.  In standar
16af0 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61  d SQL,.** such a
16b00 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61   table must be a
16b10 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44   simple name: ID
16b20 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65  .  But in SQLite
16b30 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a  , the table can.
16b40 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69  ** now be identi
16b50 66 69 65 64 20 62 79 20 61 20 64 61 74 61 62 61  fied by a databa
16b60 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20  se name, a dot, 
16b70 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e  then the table n
16b80 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a  ame: ID.ID..**.*
16b90 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73  * The jointype s
16ba0 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e  tarts out showin
16bb0 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20  g the join type 
16bc0 62 65 74 77 65 65 6e 20 74 68 65 20 63 75 72 72  between the curr
16bd0 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64  ent table.** and
16be0 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20   the next table 
16bf0 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68  on the list.  Th
16c00 65 20 70 61 72 73 65 72 20 62 75 69 6c 64 73 20  e parser builds 
16c10 74 68 65 20 6c 69 73 74 20 74 68 69 73 20 77 61  the list this wa
16c20 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65  y..** But sqlite
16c30 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69  3SrcListShiftJoi
16c40 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20 73 68  nType() later sh
16c50 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70  ifts the jointyp
16c60 65 73 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a  es so that each.
16c70 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72  ** jointype expr
16c80 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62  esses the join b
16c90 65 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65  etween the table
16ca0 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75   and the previou
16cb0 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  s table..**.** I
16cc0 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69  n the colUsed fi
16cd0 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72  eld, the high-or
16ce0 64 65 72 20 62 69 74 20 28 62 69 74 20 36 33 29  der bit (bit 63)
16cf0 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20 74   is set if the t
16d00 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  able.** contains
16d10 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f   more than 63 co
16d20 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34  lumns and the 64
16d30 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c  -th or later col
16d40 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a  umn is used..*/.
16d50 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b  struct SrcList {
16d60 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20  .  int nSrc;    
16d70 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16d80 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75   tables or subqu
16d90 65 72 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f  eries in the FRO
16da0 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33  M clause */.  u3
16db0 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f  2 nAlloc;      /
16dc0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
16dd0 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ies allocated in
16de0 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   a[] below */.  
16df0 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
16e00 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61  tem {.    Schema
16e10 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53   *pSchema;  /* S
16e20 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74  chema to which t
16e30 68 69 73 20 69 74 65 6d 20 69 73 20 66 69 78 65  his item is fixe
16e40 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  d */.    char *z
16e50 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61  Database;  /* Na
16e60 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  me of database h
16e70 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c  olding this tabl
16e80 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
16e90 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
16ea0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
16eb0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c  */.    char *zAl
16ec0 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  ias;     /* The 
16ed0 22 42 22 20 70 61 72 74 20 6f 66 20 61 20 22 41  "B" part of a "A
16ee0 20 41 53 20 42 22 20 70 68 72 61 73 65 2e 20 20   AS B" phrase.  
16ef0 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41 22  zName is the "A"
16f00 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
16f10 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  Tab;      /* An 
16f20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73  SQL table corres
16f30 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65  ponding to zName
16f40 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
16f50 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53  pSelect;  /* A S
16f60 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
16f70 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66  used in place of
16f80 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f   a table name */
16f90 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c  .    int addrFil
16fa0 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73  lSub;  /* Addres
16fb0 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20  s of subroutine 
16fc0 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75  to manifest a su
16fd0 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e  bquery */.    in
16fe0 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20  t regReturn;    
16ff0 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
17000 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72 65  ing return addre
17010 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75  ss of addrFillSu
17020 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  b */.    int reg
17030 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65  Result;    /* Re
17040 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20  gisters holding 
17050 72 65 73 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d  results of a co-
17060 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 75  routine */.    u
17070 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20  8 jointype;     
17080 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e   /* Type of join
17090 20 62 65 74 77 65 65 6e 20 74 68 69 73 20 61 62   between this ab
170a0 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69  le and the previ
170b0 6f 75 73 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  ous */.    unsig
170c0 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a  ned notIndexed :
170d0 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  1;    /* True if
170e0 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20   there is a NOT 
170f0 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a  INDEXED clause *
17100 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69  /.    unsigned i
17110 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20  sCorrelated :1; 
17120 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d   /* True if sub-
17130 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61  query is correla
17140 74 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  ted */.    unsig
17150 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e 65  ned viaCoroutine
17160 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65   :1;  /* Impleme
17170 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f 75  nted as a co-rou
17180 74 69 6e 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69  tine */.    unsi
17190 67 6e 65 64 20 69 73 52 65 63 75 72 73 69 76 65  gned isRecursive
171a0 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66   :1;   /* True f
171b0 6f 72 20 72 65 63 75 72 73 69 76 65 20 72 65 66  or recursive ref
171c0 65 72 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a  erence in WITH *
171d0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
171e0 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20  _OMIT_EXPLAIN.  
171f0 20 20 75 38 20 69 53 65 6c 65 63 74 49 64 3b 20    u8 iSelectId; 
17200 20 20 20 20 2f 2a 20 49 66 20 70 53 65 6c 65 63      /* If pSelec
17210 74 21 3d 30 2c 20 74 68 65 20 69 64 20 6f 66 20  t!=0, the id of 
17220 74 68 65 20 73 75 62 2d 73 65 6c 65 63 74 20 69  the sub-select i
17230 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a  n EQP */.#endif.
17240 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b      int iCursor;
17250 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
17260 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  E cursor number 
17270 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  used to access t
17280 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  his table */.   
17290 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20   Expr *pOn;     
172a0 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61     /* The ON cla
172b0 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
172c0 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73  .    IdList *pUs
172d0 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53  ing;   /* The US
172e0 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ING clause of a 
172f0 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d  join */.    Bitm
17300 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a  ask colUsed;  /*
17310 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65   Bit N (1<<N) se
17320 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66  t if column N of
17330 20 70 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f   pTab is used */
17340 0a 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65  .    char *zInde
17350 78 3b 20 20 20 20 20 2f 2a 20 49 64 65 6e 74 69  x;     /* Identi
17360 66 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58  fier from "INDEX
17370 45 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20  ED BY <zIndex>" 
17380 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 49 6e  clause */.    In
17390 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20  dex *pIndex;    
173a0 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74 75  /* Index structu
173b0 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  re corresponding
173c0 20 74 6f 20 7a 49 6e 64 65 78 2c 20 69 66 20 61   to zIndex, if a
173d0 6e 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20  ny */.  } a[1]; 
173e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
173f0 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
17400 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20  h identifier on 
17410 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  the list */.};..
17420 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20  /*.** Permitted 
17430 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72  values of the Sr
17440 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65  cList.a.jointype
17450 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e   field.*/.#defin
17460 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30  e JT_INNER     0
17470 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20  x0001    /* Any 
17480 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72  kind of inner or
17490 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23   cross join */.#
174a0 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20  define JT_CROSS 
174b0 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a      0x0002    /*
174c0 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66   Explicit use of
174d0 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f   the CROSS keywo
174e0 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  rd */.#define JT
174f0 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30 30  _NATURAL   0x000
17500 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72  4    /* True for
17510 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69   a "natural" joi
17520 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
17530 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30 38  LEFT      0x0008
17540 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65      /* Left oute
17550 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
17560 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30  e JT_RIGHT     0
17570 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68  x0010    /* Righ
17580 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  t outer join */.
17590 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52  #define JT_OUTER
175a0 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f       0x0020    /
175b0 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65  * The "OUTER" ke
175c0 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74  yword is present
175d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45   */.#define JT_E
175e0 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30 20  RROR     0x0040 
175f0 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72     /* unknown or
17600 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69   unsupported joi
17610 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  n type */.../*.*
17620 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69  * Flags appropri
17630 61 74 65 20 66 6f 72 20 74 68 65 20 77 63 74 72  ate for the wctr
17640 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72  lFlags parameter
17650 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72 65   of sqlite3Where
17660 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74  Begin().** and t
17670 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74  he WhereInfo.wct
17680 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a  rlFlags member..
17690 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
176a0 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20  _ORDERBY_NORMAL 
176b0 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f    0x0000 /* No-o
176c0 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  p */.#define WHE
176d0 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20  RE_ORDERBY_MIN  
176e0 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52      0x0001 /* OR
176f0 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e  DER BY processin
17700 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63  g for min() func
17710 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
17720 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20  E_ORDERBY_MAX   
17730 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44     0x0002 /* ORD
17740 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67  ER BY processing
17750 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20   for max() func 
17760 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
17770 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44  _ONEPASS_DESIRED
17780 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74    0x0004 /* Want
17790 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20   to do one-pass 
177a0 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f  UPDATE/DELETE */
177b0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
177c0 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20  UPLICATES_OK    
177d0 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20 74 6f 20  0x0008 /* Ok to 
177e0 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72  return a row mor
177f0 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23  e than once */.#
17800 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4d 49  define WHERE_OMI
17810 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20 20 30 78  T_OPEN_CLOSE  0x
17820 30 30 31 30 20 2f 2a 20 54 61 62 6c 65 20 63 75  0010 /* Table cu
17830 72 73 6f 72 73 20 61 72 65 20 61 6c 72 65 61 64  rsors are alread
17840 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  y open */.#defin
17850 65 20 57 48 45 52 45 5f 46 4f 52 43 45 5f 54 41  e WHERE_FORCE_TA
17860 42 4c 45 20 20 20 20 20 20 30 78 30 30 32 30 20  BLE      0x0020 
17870 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65 20 61 6e  /* Do not use an
17880 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73 65 61 72   index-only sear
17890 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ch */.#define WH
178a0 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c  ERE_ONETABLE_ONL
178b0 59 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20 4f  Y    0x0040 /* O
178c0 6e 6c 79 20 63 6f 64 65 20 74 68 65 20 31 73 74  nly code the 1st
178d0 20 74 61 62 6c 65 20 69 6e 20 70 54 61 62 4c 69   table in pTabLi
178e0 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  st */.#define WH
178f0 45 52 45 5f 4e 4f 5f 41 55 54 4f 49 4e 44 45 58  ERE_NO_AUTOINDEX
17900 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20 44       0x0080 /* D
17910 69 73 61 6c 6c 6f 77 20 61 75 74 6f 6d 61 74 69  isallow automati
17920 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  c indexes */.#de
17930 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50  fine WHERE_GROUP
17940 42 59 20 20 20 20 20 20 20 20 20 20 30 78 30 31  BY          0x01
17950 30 30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69  00 /* pOrderBy i
17960 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50  s really a GROUP
17970 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57   BY */.#define W
17980 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20  HERE_DISTINCTBY 
17990 20 20 20 20 20 20 30 78 30 32 30 30 20 2f 2a 20        0x0200 /* 
179a0 70 4f 72 64 65 72 62 79 20 69 73 20 72 65 61 6c  pOrderby is real
179b0 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c  ly a DISTINCT cl
179c0 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
179d0 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49  WHERE_WANT_DISTI
179e0 4e 43 54 20 20 20 20 30 78 30 34 30 30 20 2f 2a  NCT    0x0400 /*
179f0 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64   All output need
17a00 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74  s to be distinct
17a10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
17a20 45 5f 53 4f 52 54 42 59 47 52 4f 55 50 20 20 20  E_SORTBYGROUP   
17a30 20 20 20 30 78 30 38 30 30 20 2f 2a 20 53 75 70     0x0800 /* Sup
17a40 70 6f 72 74 20 73 71 6c 69 74 65 33 57 68 65 72  port sqlite3Wher
17a50 65 49 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23  eIsSorted() */.#
17a60 64 65 66 69 6e 65 20 57 48 45 52 45 5f 52 45 4f  define WHERE_REO
17a70 50 45 4e 5f 49 44 58 20 20 20 20 20 20 20 30 78  PEN_IDX       0x
17a80 31 30 30 30 20 2f 2a 20 54 72 79 20 74 6f 20 75  1000 /* Try to u
17a90 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 20  se OP_ReopenIdx 
17aa0 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72  */../* Allowed r
17ab0 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f  eturn values fro
17ac0 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  m sqlite3WhereIs
17ad0 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64  Distinct().*/.#d
17ae0 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
17af0 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30  INCT_NOOP      0
17b00 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65    /* DISTINCT ke
17b10 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a  yword not used *
17b20 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
17b30 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20  DISTINCT_UNIQUE 
17b40 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c     1  /* No dupl
17b50 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e  icates */.#defin
17b60 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
17b70 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a  _ORDERED   2  /*
17b80 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20   All duplicates 
17b90 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a  are adjacent */.
17ba0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
17bb0 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44  STINCT_UNORDERED
17bc0 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65   3  /* Duplicate
17bd0 73 20 61 72 65 20 73 63 61 74 74 65 72 65 64 20  s are scattered 
17be0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65  */../*.** A Name
17bf0 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20  Context defines 
17c00 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69  a context in whi
17c10 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61  ch to resolve ta
17c20 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a  ble and column.*
17c30 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f  * names.  The co
17c40 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f  ntext consists o
17c50 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c  f a list of tabl
17c60 65 73 20 28 74 68 65 20 70 53 72 63 4c 69 73 74  es (the pSrcList
17c70 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61  ) field and.** a
17c80 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65   list of named e
17c90 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73  xpression (pELis
17ca0 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65  t).  The named e
17cb0 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d  xpression list m
17cc0 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20  ay.** be NULL.  
17cd0 54 68 65 20 70 53 72 63 20 63 6f 72 72 65 73 70  The pSrc corresp
17ce0 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d  onds to the FROM
17cf0 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
17d00 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65  ECT or.** to the
17d10 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65   table being ope
17d20 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45  rated on by INSE
17d30 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44  RT, UPDATE, or D
17d40 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70  ELETE.  The.** p
17d50 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64  EList correspond
17d60 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20  s to the result 
17d70 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20  set of a SELECT 
17d80 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a  and is NULL for.
17d90 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65  ** other stateme
17da0 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43  nts..**.** NameC
17db0 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e  ontexts can be n
17dc0 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73  ested.  When res
17dd0 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68  olving names, th
17de0 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a  e inner-most .**
17df0 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72   context is sear
17e00 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66 20  ched first.  If 
17e10 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e  no match is foun
17e20 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65  d, the next oute
17e30 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20  r.** context is 
17e40 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65  checked.  If the
17e50 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d  re is still no m
17e60 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63  atch, the next c
17e70 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65  ontext.** is che
17e80 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63  cked.  This proc
17e90 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e  ess continues un
17ea0 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74  til either a mat
17eb0 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f  ch is found.** o
17ec0 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61  r all contexts a
17ed0 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20  re check.  When 
17ee0 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
17ef0 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65  , the nRef membe
17f00 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  r of.** the cont
17f10 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ext containing t
17f20 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72  he match is incr
17f30 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20  emented. .**.** 
17f40 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65  Each subquery ge
17f50 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e  ts a new NameCon
17f60 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74  text.  The pNext
17f70 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f   field points to
17f80 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74   the.** NameCont
17f90 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e  ext in the paren
17fa0 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74  t query.  Thus t
17fb0 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63  he process of sc
17fc0 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61  anning the.** Na
17fd0 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63  meContext list c
17fe0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65  orresponds to se
17ff0 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20  arching through 
18000 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74  successively out
18010 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73  er.** subqueries
18020 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d   looking for a m
18030 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  atch..*/.struct 
18040 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20  NameContext {.  
18050 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
18060 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73       /* The pars
18070 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  er */.  SrcList 
18080 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20  *pSrcList;   /* 
18090 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c  One or more tabl
180a0 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c  es used to resol
180b0 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78  ve names */.  Ex
180c0 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
180d0 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c     /* Optional l
180e0 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65  ist of result-se
180f0 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41  t columns */.  A
18100 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f  ggInfo *pAggInfo
18110 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  ;   /* Informati
18120 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67 61  on about aggrega
18130 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76 65  tes at this leve
18140 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65  l */.  NameConte
18150 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  xt *pNext;  /* N
18160 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63  ext outer name c
18170 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f  ontext.  NULL fo
18180 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20  r outermost */. 
18190 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
181a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
181b0 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65  of names resolve
181c0 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78  d by this contex
181d0 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  t */.  int nErr;
181e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
181f0 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
18200 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c  encountered whil
18210 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  e resolving name
18220 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61  s */.  u16 ncFla
18230 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a  gs;         /* Z
18240 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a  ero or more NC_*
18250 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62   flags defined b
18260 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  elow */.};../*.*
18270 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
18280 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e   for the NameCon
18290 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69  text, ncFlags fi
182a0 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 3a  eld..**.** Note:
182b0 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 6d    NC_MinMaxAgg m
182c0 75 73 74 20 68 61 76 65 20 74 68 65 20 73 61 6d  ust have the sam
182d0 65 20 76 61 6c 75 65 20 61 73 20 53 46 5f 4d 69  e value as SF_Mi
182e0 6e 4d 61 78 41 67 67 20 61 6e 64 0a 2a 2a 20 53  nMaxAgg and.** S
182f0 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
18300 58 2e 0a 2a 2a 20 0a 2a 2f 0a 23 64 65 66 69 6e  X..** .*/.#defin
18310 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30  e NC_AllowAgg  0
18320 78 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67  x0001  /* Aggreg
18330 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  ate functions ar
18340 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a  e allowed here *
18350 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73  /.#define NC_Has
18360 41 67 67 20 20 20 20 30 78 30 30 30 32 20 20 2f  Agg    0x0002  /
18370 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  * One or more ag
18380 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
18390 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  s seen */.#defin
183a0 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30  e NC_IsCheck   0
183b0 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69  x0004  /* True i
183c0 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  f resolving name
183d0 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e  s in a CHECK con
183e0 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
183f0 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20  ne NC_InAggFunc 
18400 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20  0x0008  /* True 
18410 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67  if analyzing arg
18420 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67  uments to an agg
18430 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
18440 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30 78   NC_PartIdx   0x
18450 30 30 31 30 20 20 2f 2a 20 54 72 75 65 20 69 66  0010  /* True if
18460 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72   resolving a par
18470 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45  tial index WHERE
18480 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d   */.#define NC_M
18490 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30 20  inMaxAgg 0x1000 
184a0 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72   /* min/max aggr
184b0 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65  egates seen.  Se
184c0 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a  e note above */.
184d0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
184e0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
184f0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f  ing structure co
18500 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72  ntains all infor
18510 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64  mation.** needed
18520 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64   to generate cod
18530 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53  e for a single S
18540 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
18550 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73  .**.** nLimit is
18560 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68   set to -1 if th
18570 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20  ere is no LIMIT 
18580 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74  clause.  nOffset
18590 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a   is set to 0..**
185a0 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20 4c   If there is a L
185b0 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65  IMIT clause, the
185c0 20 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69   parser sets nLi
185d0 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  mit to the value
185e0 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74   of the.** limit
185f0 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20   and nOffset to 
18600 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
18610 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69 66   offset (or 0 if
18620 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a   there is not.**
18630 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c   offset).  But l
18640 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20  ater on, nLimit 
18650 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f  and nOffset beco
18660 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f  me the memory lo
18670 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68  cations.** in th
18680 65 20 56 44 42 45 20 74 68 61 74 20 72 65 63 6f  e VDBE that reco
18690 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64  rd the limit and
186a0 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73   offset counters
186b0 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e  ..**.** addrOpen
186c0 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63  Ephm[] entries c
186d0 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72 65  ontain the addre
186e0 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68  ss of OP_OpenEph
186f0 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a  emeral opcodes..
18700 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65 73 73  ** These address
18710 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65  es must be store
18720 64 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e  d so that we can
18730 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c   go back and fil
18740 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b  l in.** the P4_K
18750 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61  EYINFO and P2 pa
18760 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20  rameters later. 
18770 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65 79   Neither the Key
18780 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20  Info nor.** the 
18790 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
187a0 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63  s in P2 can be c
187b0 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65 20 73  omputed at the s
187c0 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74  ame time.** as t
187d0 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69  he OP_OpenEphm i
187e0 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f  nstruction is co
187f0 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a  ded because not.
18800 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d  ** enough inform
18810 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
18820 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69  compound query i
18830 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20  s known at that 
18840 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65  point..** The Ke
18850 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70  yInfo for addrOp
18860 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31  enTran[0] and [1
18870 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61  ] contains colla
18880 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a  ting sequences.*
18890 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74  * for the result
188a0 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e   set.  The KeyIn
188b0 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45  fo for addrOpenE
188c0 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20  phm[2] contains 
188d0 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71  collating.** seq
188e0 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f  uences for the O
188f0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
18900 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74  */.struct Select
18910 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70   {.  ExprList *p
18920 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54  EList;      /* T
18930 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65  he fields of the
18940 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20   result */.  u8 
18950 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
18960 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54      /* One of: T
18970 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54  K_UNION TK_ALL T
18980 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45  K_INTERSECT TK_E
18990 58 43 45 50 54 20 2a 2f 0a 20 20 75 31 36 20 73  XCEPT */.  u16 s
189a0 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  elFlags;        
189b0 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f    /* Various SF_
189c0 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e  * values */.  in
189d0 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65  t iLimit, iOffse
189e0 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72  t;   /* Memory r
189f0 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67  egisters holding
18a00 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20   LIMIT & OFFSET 
18a10 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20  counters */.#if 
18a20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42  SELECTTRACE_ENAB
18a30 4c 45 44 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e  LED.  char zSelN
18a40 61 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20  ame[12];     /* 
18a50 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66  Symbolic name of
18a60 20 74 68 69 73 20 53 45 4c 45 43 54 20 75 73 65   this SELECT use
18a70 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67 20 2a   for debugging *
18a80 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 61  /.#endif.  int a
18a90 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20  ddrOpenEphm[2]; 
18aa0 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65    /* OP_OpenEphe
18ab0 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65  m opcodes relate
18ac0 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74  d to this select
18ad0 20 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65 63   */.  u64 nSelec
18ae0 74 52 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a 20  tRow;        /* 
18af0 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72  Estimated number
18b00 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
18b10 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53  */.  SrcList *pS
18b20 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  rc;         /* T
18b30 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  he FROM clause *
18b40 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65  /.  Expr *pWhere
18b50 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
18b60 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a  e WHERE clause *
18b70 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47  /.  ExprList *pG
18b80 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68  roupBy;    /* Th
18b90 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  e GROUP BY claus
18ba0 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61  e */.  Expr *pHa
18bb0 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  ving;         /*
18bc0 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75   The HAVING clau
18bd0 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  se */.  ExprList
18be0 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f   *pOrderBy;    /
18bf0 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  * The ORDER BY c
18c00 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63  lause */.  Selec
18c10 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20  t *pPrior;      
18c20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63    /* Prior selec
18c30 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t in a compound 
18c40 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74  select statement
18c50 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e   */.  Select *pN
18c60 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
18c70 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74  Next select to t
18c80 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d  he left in a com
18c90 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20  pound */.  Expr 
18ca0 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20  *pLimit;        
18cb0 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65    /* LIMIT expre
18cc0 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e  ssion. NULL mean
18cd0 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20  s not used. */. 
18ce0 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20   Expr *pOffset; 
18cf0 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45          /* OFFSE
18d00 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55  T expression. NU
18d10 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65  LL means not use
18d20 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57  d. */.  With *pW
18d30 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ith;           /
18d40 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20 61 74  * WITH clause at
18d50 74 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 73  tached to this s
18d60 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20  elect. Or NULL. 
18d70 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
18d80 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
18d90 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e  Select.selFlags.
18da0 20 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69    The "SF" prefi
18db0 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20  x stands for.** 
18dc0 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a  "Select Flag"..*
18dd0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73  /.#define SF_Dis
18de0 74 69 6e 63 74 20 20 20 20 20 20 20 20 30 78 30  tinct        0x0
18df0 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73  001  /* Output s
18e00 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43  hould be DISTINC
18e10 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  T */.#define SF_
18e20 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 20  Resolved        
18e30 30 78 30 30 30 32 20 20 2f 2a 20 49 64 65 6e 74  0x0002  /* Ident
18e40 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e  ifiers have been
18e50 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65   resolved */.#de
18e60 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74  fine SF_Aggregat
18e70 65 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20  e       0x0004  
18e80 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72  /* Contains aggr
18e90 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
18ea0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73  */.#define SF_Us
18eb0 65 73 45 70 68 65 6d 65 72 61 6c 20 20 20 30 78  esEphemeral   0x
18ec0 30 30 30 38 20 20 2f 2a 20 55 73 65 73 20 74 68  0008  /* Uses th
18ed0 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  e OpenEphemeral 
18ee0 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e  opcode */.#defin
18ef0 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20  e SF_Expanded   
18f00 20 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20       0x0010  /* 
18f10 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
18f20 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20  and() called on 
18f30 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  this */.#define 
18f40 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20  SF_HasTypeInfo  
18f50 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20 46 52     0x0020  /* FR
18f60 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61  OM subqueries ha
18f70 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74  ve Table metadat
18f80 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  a */.#define SF_
18f90 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 20  Compound        
18fa0 30 78 30 30 34 30 20 20 2f 2a 20 50 61 72 74 20  0x0040  /* Part 
18fb0 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75  of a compound qu
18fc0 65 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ery */.#define S
18fd0 46 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20  F_Values        
18fe0 20 20 30 78 30 30 38 30 20 20 2f 2a 20 53 79 6e    0x0080  /* Syn
18ff0 74 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41  thesized from VA
19000 4c 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23  LUES clause */.#
19010 64 65 66 69 6e 65 20 53 46 5f 4d 75 6c 74 69 56  define SF_MultiV
19020 61 6c 75 65 20 20 20 20 20 20 30 78 30 31 30 30  alue      0x0100
19030 20 20 2f 2a 20 53 69 6e 67 6c 65 20 56 41 4c 55    /* Single VALU
19040 45 53 20 74 65 72 6d 20 77 69 74 68 20 6d 75 6c  ES term with mul
19050 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64  tiple rows */.#d
19060 65 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46  efine SF_NestedF
19070 72 6f 6d 20 20 20 20 20 20 30 78 30 32 30 30 20  rom      0x0200 
19080 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61   /* Part of a pa
19090 72 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d  renthesized FROM
190a0 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69   clause */.#defi
190b0 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65  ne SF_MaybeConve
190c0 72 74 20 20 20 20 30 78 30 34 30 30 20 20 2f 2a  rt    0x0400  /*
190d0 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d   Need convertCom
190e0 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
190f0 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69  query() */.#defi
19100 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76 65 20  ne SF_Recursive 
19110 20 20 20 20 20 20 30 78 30 38 30 30 20 20 2f 2a        0x0800  /*
19120 20 54 68 65 20 72 65 63 75 72 73 69 76 65 20 70   The recursive p
19130 61 72 74 20 6f 66 20 61 20 72 65 63 75 72 73 69  art of a recursi
19140 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e  ve CTE */.#defin
19150 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20  e SF_MinMaxAgg  
19160 20 20 20 20 20 30 78 31 30 30 30 20 20 2f 2a 20       0x1000  /* 
19170 41 67 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69  Aggregate contai
19180 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61  ning min() or ma
19190 78 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  x() */.#define S
191a0 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20 20  F_Converted     
191b0 20 20 30 78 32 30 30 30 20 20 2f 2a 20 42 79 20    0x2000  /* By 
191c0 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53  convertCompoundS
191d0 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28  electToSubquery(
191e0 29 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ) */.../*.** The
191f0 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45   results of a SE
19200 4c 45 43 54 20 63 61 6e 20 62 65 20 64 69 73 74  LECT can be dist
19210 72 69 62 75 74 65 64 20 69 6e 20 73 65 76 65 72  ributed in sever
19220 61 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66 69  al ways, as defi
19230 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66  ned.** by one of
19240 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   the following m
19250 61 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54  acros.  The "SRT
19260 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22  " prefix means "
19270 53 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a  SELECT Result.**
19280 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   Type"..**.**   
19290 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20    SRT_Union     
192a0 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
192b0 61 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65  as a key in a te
192c0 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 0a 2a  mporary index .*
192d0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
192e0 20 20 20 20 20 20 69 64 65 6e 74 69 66 69 65 64        identified
192f0 20 62 79 20 70 44 65 73 74 2d 3e 69 53 44 50 61   by pDest->iSDPa
19300 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  rm..**.**     SR
19310 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 52 65  T_Except      Re
19320 6d 6f 76 65 20 72 65 73 75 6c 74 73 20 66 72 6f  move results fro
19330 6d 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  m the temporary 
19340 69 6e 64 65 78 20 70 44 65 73 74 2d 3e 69 53 44  index pDest->iSD
19350 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Parm..**.**     
19360 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20  SRT_Exists      
19370 53 74 6f 72 65 20 61 20 31 20 69 6e 20 6d 65 6d  Store a 1 in mem
19380 6f 72 79 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e  ory cell pDest->
19390 69 53 44 50 61 72 6d 20 69 66 20 74 68 65 20 72  iSDParm if the r
193a0 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20  esult.**        
193b0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
193c0 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a   is not empty..*
193d0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
193e0 63 61 72 64 20 20 20 20 20 54 68 72 6f 77 20 74  card     Throw t
193f0 68 65 20 72 65 73 75 6c 74 73 20 61 77 61 79 2e  he results away.
19400 20 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62    This is used b
19410 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20  y SELECT.**     
19420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19430 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
19440 6e 20 74 72 69 67 67 65 72 73 20 77 68 6f 73 65  n triggers whose
19450 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73   only purpose is
19460 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19470 20 20 20 20 20 20 20 20 74 68 65 20 73 69 64 65          the side
19480 2d 65 66 66 65 63 74 73 20 6f 66 20 66 75 6e 63  -effects of func
19490 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  tions..**.** All
194a0 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61 72   of the above ar
194b0 65 20 66 72 65 65 20 74 6f 20 69 67 6e 6f 72 65  e free to ignore
194c0 20 74 68 65 69 72 20 4f 52 44 45 52 20 42 59 20   their ORDER BY 
194d0 63 6c 61 75 73 65 2e 20 54 68 6f 73 65 20 74 68  clause. Those th
194e0 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73  at.** follow mus
194f0 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45  t honor the ORDE
19500 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a  R BY clause..**.
19510 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75 74 70 75  **     SRT_Outpu
19520 74 20 20 20 20 20 20 47 65 6e 65 72 61 74 65 20  t      Generate 
19530 61 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 20  a row of output 
19540 28 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 52 65  (using the OP_Re
19550 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20  sultRow.**      
19560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
19570 70 63 6f 64 65 29 20 66 6f 72 20 65 61 63 68 20  pcode) for each 
19580 72 6f 77 20 69 6e 20 74 68 65 20 72 65 73 75 6c  row in the resul
19590 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  t set..**.**    
195a0 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20   SRT_Mem        
195b0 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20 74   Only valid if t
195c0 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 20 73  he result is a s
195d0 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a  ingle column..**
195e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195f0 20 20 20 20 20 53 74 6f 72 65 20 74 68 65 20 66       Store the f
19600 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  irst column of t
19610 68 65 20 66 69 72 73 74 20 72 65 73 75 6c 74 20  he first result 
19620 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  row.**          
19630 20 20 20 20 20 20 20 20 20 20 20 69 6e 20 72 65             in re
19640 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53  gister pDest->iS
19650 44 50 61 72 6d 20 74 68 65 6e 20 61 62 61 6e 64  DParm then aband
19660 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a 20 20  on the rest.**  
19670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19680 20 20 20 6f 66 20 74 68 65 20 71 75 65 72 79 2e     of the query.
19690 20 20 54 68 69 73 20 64 65 73 74 69 6e 61 74 69    This destinati
196a0 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49  on implies "LIMI
196b0 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  T 1"..**.**     
196c0 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20  SRT_Set         
196d0 54 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74 20  The result must 
196e0 62 65 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  be a single colu
196f0 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61 63 68 0a  mn.  Store each.
19700 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19710 20 20 20 20 20 20 20 72 6f 77 20 6f 66 20 72 65         row of re
19720 73 75 6c 74 20 61 73 20 74 68 65 20 6b 65 79 20  sult as the key 
19730 69 6e 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  in table pDest->
19740 69 53 44 50 61 72 6d 2e 20 0a 2a 2a 20 20 20 20  iSDParm. .**    
19750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19760 20 41 70 70 6c 79 20 74 68 65 20 61 66 66 69 6e   Apply the affin
19770 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66 53 64  ity pDest->affSd
19780 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72 69 6e  st before storin
19790 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  g.**            
197a0 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73           results
197b0 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70 6c 65  .  Used to imple
197c0 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45 43 54  ment "IN (SELECT
197d0 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   ...)"..**.**   
197e0 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20    SRT_EphemTab  
197f0 20 20 43 72 65 61 74 65 20 61 6e 20 74 65 6d 70    Create an temp
19800 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
19810 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64 20 73  t->iSDParm and s
19820 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  tore.**         
19830 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
19840 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20 54 68  result there. Th
19850 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74  e cursor is left
19860 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20   open after.**  
19870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19880 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20 20 54     returning.  T
19890 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f  his is like SRT_
198a0 54 61 62 6c 65 20 65 78 63 65 70 74 20 74 68 61  Table except tha
198b0 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
198c0 20 20 20 20 20 20 20 20 20 74 68 69 73 20 64 65           this de
198d0 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f  stination uses O
198e0 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
198f0 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20 20 20  to create.**    
19900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19910 20 74 68 65 20 74 61 62 6c 65 20 66 69 72 73 74   the table first
19920 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
19930 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65 6e 65  Coroutine   Gene
19940 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e  rate a co-routin
19950 65 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 61  e that returns a
19960 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20   new row of.**  
19970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19980 20 20 20 72 65 73 75 6c 74 73 20 65 61 63 68 20     results each 
19990 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76 6f 6b  time it is invok
199a0 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79 20 70  ed.  The entry p
199b0 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  oint.**         
199c0 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74              of t
199d0 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73  he co-routine is
199e0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
199f0 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ter pDest->iSDPa
19a00 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  rm.**           
19a10 20 20 20 20 20 20 20 20 20 20 61 6e 64 20 74 68            and th
19a20 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20  e result row is 
19a30 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73 74 2d  stored in pDest-
19a40 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65 72 73  >nDest registers
19a50 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19a60 20 20 20 20 20 20 20 20 73 74 61 72 74 69 6e 67          starting
19a70 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69 53 64   with pDest->iSd
19a80 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  st..**.**     SR
19a90 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 53 74  T_Table       St
19aa0 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 74  ore results in t
19ab0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
19ac0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
19ad0 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f 20 20  *     SRT_Fifo  
19ae0 20 20 20 20 20 20 54 68 69 73 20 69 73 20 6c 69        This is li
19af0 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20  ke SRT_EphemTab 
19b00 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
19b10 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20  table.**        
19b20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73 20               is 
19b30 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72 65 61  assumed to alrea
19b40 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53 52 54  dy be open.  SRT
19b50 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20  _Fifo has.**    
19b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b70 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20   the additional 
19b80 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65 69 6e  property of bein
19b90 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65  g able to ignore
19ba0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19bb0 20 20 20 20 20 20 20 20 74 68 65 20 4f 52 44 45          the ORDE
19bc0 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a  R BY clause..**.
19bd0 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 46  **     SRT_DistF
19be0 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72 65 73  ifo    Store res
19bf0 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70 6f 72  ults in a tempor
19c00 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
19c10 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20  >iSDParm..**    
19c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c30 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20 74 65   But also use te
19c40 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
19c50 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61  est->iSDParm+1 a
19c60 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
19c70 20 20 20 20 20 20 20 20 20 61 20 72 65 63 6f 72           a recor
19c80 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20 72  d of all prior r
19c90 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72  esults and ignor
19ca0 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74 65 0a  e any duplicate.
19cb0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19cc0 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20 4e 61         rows.  Na
19cd0 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69 73 74  me means:  "Dist
19ce0 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a  inct Fifo"..**.*
19cf0 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75 65 20  *     SRT_Queue 
19d00 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75        Store resu
19d10 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20  lts in priority 
19d20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44  queue pDest->iSD
19d30 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20  Parm (really.** 
19d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d50 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e 20 20      an index).  
19d60 41 70 70 65 6e 64 20 61 20 73 65 71 75 65 6e 63  Append a sequenc
19d70 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68 61 74  e number so that
19d80 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20   all entries.** 
19d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19da0 20 20 20 20 61 72 65 20 64 69 73 74 69 6e 63 74      are distinct
19db0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
19dc0 44 69 73 74 51 75 65 75 65 20 20 20 53 74 6f 72  DistQueue   Stor
19dd0 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69  e results in pri
19de0 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73  ority queue pDes
19df0 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20  t->iSDParm only 
19e00 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  if.**           
19e10 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73 61            the sa
19e20 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20 6e 65  me record has ne
19e30 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65 64 20  ver been stored 
19e40 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20  before.  The.** 
19e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e60 20 20 20 20 69 6e 64 65 78 20 61 74 20 70 44 65      index at pDe
19e70 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f  st->iSDParm+1 ho
19e80 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f  ld all prior sto
19e90 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  res..*/.#define 
19ea0 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20  SRT_Union       
19eb0 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   1  /* Store res
19ec0 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61  ult as keys in a
19ed0 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  n index */.#defi
19ee0 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20 20  ne SRT_Except   
19ef0 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65      2  /* Remove
19f00 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55   result from a U
19f10 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  NION index */.#d
19f20 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73  efine SRT_Exists
19f30 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f         3  /* Sto
19f40 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73 75  re 1 if the resu
19f50 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20  lt is not empty 
19f60 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44  */.#define SRT_D
19f70 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20 2f  iscard      4  /
19f80 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68  * Do not save th
19f90 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65  e results anywhe
19fa0 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  re */.#define SR
19fb0 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 20 35  T_Fifo         5
19fc0 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
19fd0 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61  t as data with a
19fe0 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69  n automatic rowi
19ff0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  d */.#define SRT
1a000 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20 36 20  _DistFifo     6 
1a010 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69 66   /* Like SRT_Fif
1a020 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65  o, but unique re
1a030 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  sults only */.#d
1a040 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75 65 20  efine SRT_Queue 
1a050 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74 6f         7  /* Sto
1a060 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20  re result in an 
1a070 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65  queue */.#define
1a080 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20   SRT_DistQueue  
1a090 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54    8  /* Like SRT
1a0a0 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e 69 71  _Queue, but uniq
1a0b0 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20  ue results only 
1a0c0 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52  */../* The ORDER
1a0d0 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 69 67   BY clause is ig
1a0e0 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66  nored for all of
1a0f0 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64   the above */.#d
1a100 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f  efine IgnorableO
1a110 72 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e 65  rderby(X) ((X->e
1a120 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 74 51  Dest)<=SRT_DistQ
1a130 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65 20 53  ueue)..#define S
1a140 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20  RT_Output       
1a150 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63  9  /* Output eac
1a160 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20  h row of result 
1a170 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d  */.#define SRT_M
1a180 65 6d 20 20 20 20 20 20 20 20 20 31 30 20 20 2f  em         10  /
1a190 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
1a1a0 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  n a memory cell 
1a1b0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53  */.#define SRT_S
1a1c0 65 74 20 20 20 20 20 20 20 20 20 31 31 20 20 2f  et         11  /
1a1d0 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20  * Store results 
1a1e0 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e  as keys in an in
1a1f0 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
1a200 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 31  RT_EphemTab    1
1a210 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61  2  /* Create tra
1a220 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73  nsient tab and s
1a230 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61  tore like SRT_Ta
1a240 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ble */.#define S
1a250 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31  RT_Coroutine   1
1a260 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61  3  /* Generate a
1a270 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72   single row of r
1a280 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esult */.#define
1a290 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20   SRT_Table      
1a2a0 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20 72 65   14  /* Store re
1a2b0 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74  sult as data wit
1a2c0 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72  h an automatic r
1a2d0 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  owid */../*.** A
1a2e0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
1a2f0 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69  is object descri
1a300 62 65 73 20 77 68 65 72 65 20 74 6f 20 70 75 74  bes where to put
1a310 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 20   of the results 
1a320 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73  of.** a SELECT s
1a330 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72  tatement..*/.str
1a340 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b  uct SelectDest {
1a350 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20 20 20  .  u8 eDest;    
1a360 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74          /* How t
1a370 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65  o dispose of the
1a380 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66   results.  On of
1a390 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f   SRT_* above. */
1a3a0 0a 20 20 63 68 61 72 20 61 66 66 53 64 73 74 3b  .  char affSdst;
1a3b0 20 20 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e          /* Affin
1a3c0 69 74 79 20 75 73 65 64 20 77 68 65 6e 20 65 44  ity used when eD
1a3d0 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a  est==SRT_Set */.
1a3e0 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20    int iSDParm;  
1a3f0 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61         /* A para
1a400 6d 65 74 65 72 20 75 73 65 64 20 62 79 20 74 68  meter used by th
1a410 65 20 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c  e eDest disposal
1a420 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74   method */.  int
1a430 20 69 53 64 73 74 3b 20 20 20 20 20 20 20 20 20   iSdst;         
1a440 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74    /* Base regist
1a450 65 72 20 77 68 65 72 65 20 72 65 73 75 6c 74 73  er where results
1a460 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a   are written */.
1a470 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20 20    int nSdst;    
1a480 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1a490 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c   of registers al
1a4a0 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 45 78 70  located */.  Exp
1a4b0 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b  rList *pOrderBy;
1a4c0 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73    /* Key columns
1a4d0 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65 20 61   for SRT_Queue a
1a4e0 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65 75 65  nd SRT_DistQueue
1a4f0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75   */.};../*.** Du
1a500 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61  ring code genera
1a510 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e  tion of statemen
1a520 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65 72  ts that do inser
1a530 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52  ts into AUTOINCR
1a540 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62 6c 65 73  EMENT .** tables
1a550 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
1a560 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61  information is a
1a570 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 54  ttached to the T
1a580 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70  able.u.autoInc.p
1a590 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20 65  .** pointer of e
1a5a0 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e  ach autoincremen
1a5b0 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f 72  t table to recor
1a5c0 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f  d some side info
1a5d0 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20  rmation that.** 
1a5e0 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
1a5f0 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68 61  or needs.  We ha
1a600 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d 74  ve to keep per-t
1a610 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d 65  able autoincreme
1a620 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  nt.** informatio
1a630 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72 74  n in case insert
1a640 73 20 61 72 65 20 64 6f 77 6e 20 77 69 74 68 69  s are down withi
1a650 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72 69  n triggers.  Tri
1a660 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20  ggers do not.** 
1a670 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e  normally coordin
1a680 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76 69  ate their activi
1a690 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f 20  ties, but we do 
1a6a0 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61  need to coordina
1a6b0 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e  te the.** loadin
1a6c0 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66 20  g and saving of 
1a6d0 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e  autoincrement in
1a6e0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
1a6f0 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f  ruct AutoincInfo
1a700 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f   {.  AutoincInfo
1a710 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65   *pNext;   /* Ne
1a720 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e  xt info block in
1a730 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d 20   a list of them 
1a740 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  all */.  Table *
1a750 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 2f  pTab;          /
1a760 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e 66  * Table this inf
1a770 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20 74  o block refers t
1a780 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20  o */.  int iDb; 
1a790 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a7a0 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65 33  Index in sqlite3
1a7b0 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62 61  .aDb[] of databa
1a7c0 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62 20  se holding pTab 
1a7d0 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72 3b  */.  int regCtr;
1a7e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
1a7f0 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68 6f  mory register ho
1a800 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20  lding the rowid 
1a810 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f  counter */.};../
1a820 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68 65  *.** Size of the
1a830 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f   column cache.*/
1a840 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1a850 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65 66  N_COLCACHE.# def
1a860 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c  ine SQLITE_N_COL
1a870 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66 0a  CACHE 10.#endif.
1a880 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20  ./*.** At least 
1a890 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  one instance of 
1a8a0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1a8b0 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61 74  ructure is creat
1a8c0 65 64 20 66 6f 72 20 65 61 63 68 20 0a 2a 2a 20  ed for each .** 
1a8d0 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61 79  trigger that may
1a8e0 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65 20   be fired while 
1a8f0 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52  parsing an INSER
1a900 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c  T, UPDATE or DEL
1a910 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  ETE.** statement
1a920 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63  . All such objec
1a930 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ts are stored in
1a940 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
1a950 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61   headed at.** Pa
1a960 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1a970 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65  and deleted once
1a980 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69   statement compi
1a990 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a  lation has been.
1a9a0 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a  ** completed..**
1a9b0 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70  .** A Vdbe sub-p
1a9c0 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c  rogram that impl
1a9d0 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20  ements the body 
1a9e0 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20  and WHEN clause 
1a9f0 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72  of trigger.** Tr
1aa00 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67 65  iggerPrg.pTrigge
1aa10 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65  r, assuming a de
1aa20 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
1aa30 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54  T clause of.** T
1aa40 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66  riggerPrg.orconf
1aa50 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74  , is stored in t
1aa60 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70 50  he TriggerPrg.pP
1aa70 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e  rogram variable.
1aa80 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54  .** The Parse.pT
1aa90 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e  riggerPrg list n
1aaa0 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77  ever contains tw
1aab0 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20 74  o entries with t
1aac0 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65  he same.** value
1aad0 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67  s for both pTrig
1aae0 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a  ger and orconf..
1aaf0 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65  **.** The Trigge
1ab00 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d  rPrg.aColmask[0]
1ab10 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
1ab20 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c   to a mask of ol
1ab30 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61  d.* columns.** a
1ab40 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74 20  ccessed (or set 
1ab50 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65 72  to 0 for trigger
1ab60 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65 73  s fired as a res
1ab70 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 20 0a 2a  ult of INSERT .*
1ab80 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53  * statements). S
1ab90 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72  imilarly, the Tr
1aba0 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73  iggerPrg.aColmas
1abb0 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73  k[1] variable is
1abc0 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73   set to.** a mas
1abd0 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
1abe0 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70  ns used by the p
1abf0 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63  rogram..*/.struc
1ac00 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20  t TriggerPrg {. 
1ac10 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
1ac20 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67  er;      /* Trig
1ac30 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d  ger this program
1ac40 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20   was coded from 
1ac50 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20  */.  TriggerPrg 
1ac60 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20  *pNext;      /* 
1ac70 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61  Next entry in Pa
1ac80 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1ac90 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f  list */.  SubPro
1aca0 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20  gram *pProgram; 
1acb0 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70    /* Program imp
1acc0 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67  lementing pTrigg
1acd0 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69  er/orconf */.  i
1ace0 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20  nt orconf;      
1acf0 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1ad00 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f  t ON CONFLICT po
1ad10 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43  licy */.  u32 aC
1ad20 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20  olmask[2];      
1ad30 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c    /* Masks of ol
1ad40 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  d.*, new.* colum
1ad50 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d  ns accessed */.}
1ad60 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62  ;../*.** The yDb
1ad70 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f  Mask datatype fo
1ad80 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66  r the bitmask of
1ad90 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
1ada0 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20  tabases..*/.#if 
1adb0 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
1adc0 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66  HED>30.  typedef
1add0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79   unsigned char y
1ade0 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d  DbMask[(SQLITE_M
1adf0 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38  AX_ATTACHED+9)/8
1ae00 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  ];.# define DbMa
1ae10 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28  skTest(M,I)    (
1ae20 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c  ((M)[(I)/8]&(1<<
1ae30 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20  ((I)&7)))!=0).# 
1ae40 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72  define DbMaskZer
1ae50 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74  o(M)      memset
1ae60 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29  ((M),0,sizeof(M)
1ae70 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1ae80 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d  kSet(M,I)     (M
1ae90 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28  )[(I)/8]|=(1<<((
1aea0 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20  I)&7)).# define 
1aeb0 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1aec0 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b     sqlite3DbMask
1aed0 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66  AllZero(M).# def
1aee0 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72  ine DbMaskNonZer
1aef0 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44  o(M)   (sqlite3D
1af00 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d  bMaskAllZero(M)=
1af10 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  =0).#else.  type
1af20 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  def unsigned int
1af30 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69   yDbMask;.# defi
1af40 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c  ne DbMaskTest(M,
1af50 49 29 20 20 20 20 28 28 28 4d 29 26 28 28 28 79  I)    (((M)&(((y
1af60 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29  DbMask)1)<<(I)))
1af70 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62  !=0).# define Db
1af80 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20  MaskZero(M)     
1af90 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20   (M)=0.# define 
1afa0 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20  DbMaskSet(M,I)  
1afb0 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61     (M)|=(((yDbMa
1afc0 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65  sk)1)<<(I)).# de
1afd0 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65  fine DbMaskAllZe
1afe0 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23  ro(M)   (M)==0.#
1aff0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f   define DbMaskNo
1b000 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d  nZero(M)   (M)!=
1b010 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
1b020 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f  An SQL parser co
1b030 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f  ntext.  A copy o
1b040 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
1b050 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75   is passed throu
1b060 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72  gh.** the parser
1b070 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61   and down into a
1b080 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63  ll the parser ac
1b090 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20  tion routine in 
1b0a0 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72  order to.** carr
1b0b0 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61  y around informa
1b0c0 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f  tion that is glo
1b0d0 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72  bal to the entir
1b0e0 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54  e parse..**.** T
1b0f0 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20  he structure is 
1b100 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f  divided into two
1b110 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68   parts.  When th
1b120 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64  e parser and cod
1b130 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61  e.** generate ca
1b140 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65  ll themselves re
1b150 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66  cursively, the f
1b160 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65  irst part of the
1b170 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73   structure.** is
1b180 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68   constant but th
1b190 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73  e second part is
1b1a0 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65   reset at the be
1b1b0 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20  ginning and end 
1b1c0 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72  of.** each recur
1b1d0 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  sion..**.** The 
1b1e0 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61  nTableLock and a
1b1f0 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62  TableLock variab
1b200 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65  les are only use
1b210 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d  d if the shared-
1b220 63 61 63 68 65 20 0a 2a 2a 20 66 65 61 74 75 72  cache .** featur
1b230 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66  e is enabled (if
1b240 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75   sqlite3Tsd()->u
1b250 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20  seSharedData is 
1b260 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a  true). They are.
1b270 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  ** used to store
1b280 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c   the set of tabl
1b290 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64  e-locks required
1b2a0 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e   by the statemen
1b2b0 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69  t being.** compi
1b2c0 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71  led. Function sq
1b2d0 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29  lite3TableLock()
1b2e0 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20   is used to add 
1b2f0 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a  entries to the.*
1b300 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63  * list..*/.struc
1b310 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69  t Parse {.  sqli
1b320 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
1b330 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74   /* The main dat
1b340 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20  abase structure 
1b350 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  */.  char *zErrM
1b360 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20  sg;       /* An 
1b370 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f  error message */
1b380 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20  .  Vdbe *pVdbe; 
1b390 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e          /* An en
1b3a0 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69  gine for executi
1b3b0 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65  ng database byte
1b3c0 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63  code */.  int rc
1b3d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1b3e0 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72  * Return code fr
1b3f0 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  om execution */.
1b400 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74    u8 colNamesSet
1b410 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61  ;      /* TRUE a
1b420 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61  fter OP_ColumnNa
1b430 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75  me has been issu
1b440 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20  ed to pVdbe */. 
1b450 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b   u8 checkSchema;
1b460 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20        /* Causes 
1b470 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68  schema cookie ch
1b480 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72  eck after an err
1b490 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65  or */.  u8 neste
1b4a0 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
1b4b0 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
1b4c0 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61   calls to the pa
1b4d0 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61  rser/code genera
1b4e0 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d  tor */.  u8 nTem
1b4f0 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
1b500 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f   Number of tempo
1b510 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69  rary registers i
1b520 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a  n aTempReg[] */.
1b530 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74    u8 isMultiWrit
1b540 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69  e;     /* True i
1b550 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
1b560 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75  modify/insert mu
1b570 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20  ltiple rows */. 
1b580 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20   u8 mayAbort;   
1b590 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
1b5a0 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74   statement may t
1b5b0 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
1b5c0 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  ception */.  u8 
1b5d0 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20  hasCompound;    
1b5e0 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76    /* Need to inv
1b5f0 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f  oke convertCompo
1b600 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
1b610 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b  ery() */.  u8 ok
1b620 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20  ConstFactor;    
1b630 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20  /* OK to factor 
1b640 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f  out constants */
1b650 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b  .  int aTempReg[
1b660 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69  8];     /* Holdi
1b670 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70  ng area for temp
1b680 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20  orary registers 
1b690 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52  */.  int nRangeR
1b6a0 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a  eg;       /* Siz
1b6b0 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  e of the tempora
1b6c0 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63  ry register bloc
1b6d0 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67  k */.  int iRang
1b6e0 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46  eReg;       /* F
1b6f0 69 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e  irst register in
1b700 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
1b710 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69  ter block */.  i
1b720 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
1b730 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1b740 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a   errors seen */.
1b750 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20    int nTab;     
1b760 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b770 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61   of previously a
1b780 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75  llocated VDBE cu
1b790 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  rsors */.  int n
1b7a0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
1b7b0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  /* Number of mem
1b7c0 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73  ory cells used s
1b7d0 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
1b7e0 53 65 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Set;            
1b7f0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 65 74  /* Number of set
1b800 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f  s used so far */
1b810 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20 20 20  .  int nOnce;   
1b820 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1b830 72 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69 6e 73  r of OP_Once ins
1b840 74 72 75 63 74 69 6f 6e 73 20 73 6f 20 66 61 72  tructions so far
1b850 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c   */.  int nOpAll
1b860 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  oc;        /* Nu
1b870 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c  mber of slots al
1b880 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65  located for Vdbe
1b890 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  .aOp[] */.  int 
1b8a0 69 46 69 78 65 64 4f 70 3b 20 20 20 20 20 20 20  iFixedOp;       
1b8b0 20 2f 2a 20 4e 65 76 65 72 20 62 61 63 6b 20 6f   /* Never back o
1b8c0 75 74 20 6f 70 63 6f 64 65 73 20 69 46 69 78 65  ut opcodes iFixe
1b8d0 64 4f 70 2d 31 20 6f 72 20 65 61 72 6c 69 65 72  dOp-1 or earlier
1b8e0 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61 73 65   */.  int ckBase
1b8f0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61  ;          /* Ba
1b900 73 65 20 72 65 67 69 73 74 65 72 20 6f 66 20 64  se register of d
1b910 61 74 61 20 64 75 72 69 6e 67 20 63 68 65 63 6b  ata during check
1b920 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
1b930 20 20 69 6e 74 20 69 50 61 72 74 49 64 78 54 61    int iPartIdxTa
1b940 62 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  b;     /* Table 
1b950 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
1b960 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78   a partial index
1b970 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65   */.  int iCache
1b980 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f  Level;     /* Co
1b990 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77 68 65  lCache valid whe
1b9a0 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c  n aColCache[].iL
1b9b0 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65  evel<=iCacheLeve
1b9c0 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68  l */.  int iCach
1b9d0 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 43  eCnt;       /* C
1b9e0 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20 67  ounter used to g
1b9f0 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63 68  enerate aColCach
1ba00 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a  e[].lru values *
1ba10 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20  /.  int nLabel; 
1ba20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1ba30 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65  er of labels use
1ba40 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62  d */.  int *aLab
1ba50 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  el;         /* S
1ba60 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65  pace to hold the
1ba70 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 73 74 72   labels */.  str
1ba80 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a  uct yColCache {.
1ba90 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20      int iTable; 
1baa0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
1bab0 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  le cursor number
1bac0 20 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f 6c   */.    i16 iCol
1bad0 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  umn;          /*
1bae0 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75   Table column nu
1baf0 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74  mber */.    u8 t
1bb00 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20  empReg;         
1bb10 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74    /* iReg is a t
1bb20 65 6d 70 20 72 65 67 69 73 74 65 72 20 74 68 61  emp register tha
1bb30 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72  t needs to be fr
1bb40 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  eed */.    int i
1bb50 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Level;          
1bb60 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65   /* Nesting leve
1bb70 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65  l */.    int iRe
1bb80 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  g;             /
1bb90 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c 75 65  * Reg with value
1bba0 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e   of this column.
1bbb0 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a   0 means none. *
1bbc0 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20  /.    int lru;  
1bbd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
1bbe0 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73  east recently us
1bbf0 65 64 20 65 6e 74 72 79 20 68 61 73 20 74 68 65  ed entry has the
1bc00 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20   smallest value 
1bc10 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65  */.  } aColCache
1bc20 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43  [SQLITE_N_COLCAC
1bc30 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72  HE];  /* One for
1bc40 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63   each column cac
1bc50 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 45 78  he entry */.  Ex
1bc60 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78  prList *pConstEx
1bc70 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65  pr;/* Constant e
1bc80 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
1bc90 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74  Token constraint
1bca0 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20  Name;/* Name of 
1bcb0 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63  the constraint c
1bcc0 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70  urrently being p
1bcd0 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61  arsed */.  yDbMa
1bce0 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20  sk writeMask;   
1bcf0 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65  /* Start a write
1bd00 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
1bd10 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20  these databases 
1bd20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f  */.  yDbMask coo
1bd30 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74  kieMask;  /* Bit
1bd40 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76  mask of schema v
1bd50 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65  erified database
1bd60 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69  s */.  int cooki
1bd70 65 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41  eValue[SQLITE_MA
1bd80 58 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20 20  X_ATTACHED+2];  
1bd90 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f  /* Values of coo
1bda0 6b 69 65 73 20 74 6f 20 76 65 72 69 66 79 20 2a  kies to verify *
1bdb0 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64  /.  int regRowid
1bdc0 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69  ;        /* Regi
1bdd0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77  ster holding row
1bde0 69 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42  id of CREATE TAB
1bdf0 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e  LE entry */.  in
1be00 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20  t regRoot;      
1be10 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
1be20 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65  olding root page
1be30 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20   number for new 
1be40 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74  objects */.  int
1be50 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20   nMaxArg;       
1be60 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61    /* Max args pa
1be70 73 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e  ssed to user fun
1be80 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f  ction by sub-pro
1be90 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45  gram */.#if SELE
1bea0 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a  CTTRACE_ENABLED.
1beb0 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20    int nSelect;  
1bec0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1bed0 20 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74 65   of SELECT state
1bee0 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20 20  ments seen */.  
1bef0 69 6e 74 20 6e 53 65 6c 65 63 74 49 6e 64 65 6e  int nSelectInden
1bf00 74 3b 20 20 20 2f 2a 20 48 6f 77 20 66 61 72 20  t;   /* How far 
1bf10 74 6f 20 69 6e 64 65 6e 74 20 53 45 4c 45 43 54  to indent SELECT
1bf20 54 52 41 43 45 28 29 20 6f 75 74 70 75 74 20 2a  TRACE() output *
1bf30 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
1bf40 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
1bf50 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20  RED_CACHE.  int 
1bf60 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20  nTableLock;     
1bf70 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1bf80 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c  locks in aTableL
1bf90 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f  ock */.  TableLo
1bfa0 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20  ck *aTableLock; 
1bfb0 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c  /* Required tabl
1bfc0 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72  e locks for shar
1bfd0 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f  ed-cache mode */
1bfe0 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e  .#endif.  Autoin
1bff0 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f  cInfo *pAinc;  /
1c000 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
1c010 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  out AUTOINCREMEN
1c020 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20  T counters */.. 
1c030 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
1c040 75 73 65 64 20 77 68 69 6c 65 20 63 6f 64 69 6e  used while codin
1c050 67 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  g trigger progra
1c060 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a  ms. */.  Parse *
1c070 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a  pToplevel;    /*
1c080 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
1c090 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61   for main progra
1c0a0 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20  m (or NULL) */. 
1c0b0 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72   Table *pTrigger
1c0c0 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74  Tab;  /* Table t
1c0d0 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e  riggers are bein
1c0e0 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20  g coded for */. 
1c0f0 20 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20   int addrCrTab; 
1c100 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73        /* Address
1c110 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 54 61 62   of OP_CreateTab
1c120 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45  le opcode on CRE
1c130 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 69  ATE TABLE */.  i
1c140 6e 74 20 61 64 64 72 53 6b 69 70 50 4b 3b 20 20  nt addrSkipPK;  
1c150 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f      /* Address o
1c160 66 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f  f instruction to
1c170 20 73 6b 69 70 20 50 52 49 4d 41 52 59 20 4b 45   skip PRIMARY KE
1c180 59 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 33 32  Y index */.  u32
1c190 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20   nQueryLoop;    
1c1a0 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20    /* Est number 
1c1b0 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66  of iterations of
1c1c0 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67   a query (10*log
1c1d0 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f  2(N)) */.  u32 o
1c1e0 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  ldmask;         
1c1f0 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a  /* Mask of old.*
1c200 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e   columns referen
1c210 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77  ced */.  u32 new
1c220 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a  mask;         /*
1c230 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63   Mask of new.* c
1c240 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65  olumns reference
1c250 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67  d */.  u8 eTrigg
1c260 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54  erOp;       /* T
1c270 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
1c280 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45  ERT or TK_DELETE
1c290 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66   */.  u8 eOrconf
1c2a0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65  ;          /* De
1c2b0 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
1c2c0 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69  T policy for tri
1c2d0 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20  gger steps */.  
1c2e0 75 38 20 64 69 73 61 62 6c 65 54 72 69 67 67 65  u8 disableTrigge
1c2f0 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  rs;  /* True to 
1c300 64 69 73 61 62 6c 65 20 74 72 69 67 67 65 72 73  disable triggers
1c310 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a   */..  /********
1c320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c330 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c340 2a 2a 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 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20 63  .  ** Above is c
1c370 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20  onstant between 
1c380 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c  recursions.  Bel
1c390 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66 6f  ow is reset befo
1c3a0 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a  re and after.  *
1c3b0 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e  * each recursion
1c3c0 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20  .  The boundary 
1c3d0 62 65 74 77 65 65 6e 20 74 68 65 73 65 20 74 77  between these tw
1c3e0 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65 74  o regions is det
1c3f0 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69  ermined.  ** usi
1c400 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  ng offsetof(Pars
1c410 65 2c 6e 56 61 72 29 20 73 6f 20 74 68 65 20 6e  e,nVar) so the n
1c420 56 61 72 20 66 69 65 6c 64 20 6d 75 73 74 20 62  Var field must b
1c430 65 20 74 68 65 20 66 69 72 73 74 20 66 69 65 6c  e the first fiel
1c440 64 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20 72 65  d.  ** in the re
1c450 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a  cursive region..
1c460 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
1c470 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c480 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c490 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c4a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 69  **********/..  i
1c4b0 6e 74 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20  nt nVar;        
1c4c0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1c4d0 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62  er of '?' variab
1c4e0 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20  les seen in the 
1c4f0 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  SQL so far */.  
1c500 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20 20  int nzVar;      
1c510 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1c520 62 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  ber of available
1c530 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b   slots in azVar[
1c540 5d 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72  ] */.  u8 iPkSor
1c550 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
1c560 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43 20   /* ASC or DESC 
1c570 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d  for INTEGER PRIM
1c580 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20  ARY KEY */.  u8 
1c590 62 46 72 65 65 57 69 74 68 3b 20 20 20 20 20 20  bFreeWith;      
1c5a0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
1c5b0 66 20 70 57 69 74 68 20 73 68 6f 75 6c 64 20 62  f pWith should b
1c5c0 65 20 66 72 65 65 64 20 77 69 74 68 20 70 61 72  e freed with par
1c5d0 73 65 72 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c  ser */.  u8 expl
1c5e0 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ain;            
1c5f0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
1c600 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69  e EXPLAIN flag i
1c610 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71  s found on the q
1c620 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20  uery */.#ifndef 
1c630 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
1c640 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65  UALTABLE.  u8 de
1c650 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20  clareVtab;      
1c660 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1c670 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64  inside sqlite3_d
1c680 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f  eclare_vtab() */
1c690 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b  .  int nVtabLock
1c6a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1c6b0 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61  Number of virtua
1c6c0 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b  l tables to lock
1c6d0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
1c6e0 20 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20   nAlias;        
1c6f0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1c700 20 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73 75   of aliased resu
1c710 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a  lt set columns *
1c720 2f 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b  /.  int nHeight;
1c730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1c740 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65   Expression tree
1c750 20 68 65 69 67 68 74 20 6f 66 20 63 75 72 72 65   height of curre
1c760 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f  nt sub-select */
1c770 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1c780 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69  OMIT_EXPLAIN.  i
1c790 6e 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20  nt iSelectId;   
1c7a0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f           /* ID o
1c7b0 66 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74  f current select
1c7c0 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74   for EXPLAIN out
1c7d0 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65  put */.  int iNe
1c7e0 78 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20  xtSelectId;     
1c7f0 20 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c     /* Next avail
1c800 61 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66  able select ID f
1c810 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75  or EXPLAIN outpu
1c820 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68  t */.#endif.  ch
1c830 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20  ar **azVar;     
1c840 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
1c850 65 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20  ers to names of 
1c860 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20  parameters */.  
1c870 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65  Vdbe *pReprepare
1c880 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20  ;         /* VM 
1c890 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64  being reprepared
1c8a0 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61   (sqlite3Reprepa
1c8b0 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74  re()) */.  const
1c8c0 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20   char *zTail;   
1c8d0 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20       /* All SQL 
1c8e0 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61  text past the la
1c8f0 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72  st semicolon par
1c900 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  sed */.  Table *
1c910 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20  pNewTable;      
1c920 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65     /* A table be
1c930 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20  ing constructed 
1c940 62 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  by CREATE TABLE 
1c950 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e  */.  Trigger *pN
1c960 65 77 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f  ewTrigger;     /
1c970 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20  * Trigger under 
1c980 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20 43  construct by a C
1c990 52 45 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f  REATE TRIGGER */
1c9a0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1c9b0 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20  AuthContext; /* 
1c9c0 54 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65  The 6th paramete
1c9d0 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63  r to db->xAuth c
1c9e0 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54 6f  allbacks */.  To
1c9f0 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20  ken sNameToken; 
1ca00 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
1ca10 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65   with unqualifie
1ca20 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20  d schema object 
1ca30 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  name */.  Token 
1ca40 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20  sLastToken;     
1ca50 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20      /* The last 
1ca60 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a  token parsed */.
1ca70 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1ca80 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
1ca90 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20  .  Token sArg;  
1caa0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1cab0 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66  Complete text of
1cac0 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65   a module argume
1cad0 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a  nt */.  Table **
1cae0 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20  apVtabLock;     
1caf0 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
1cb00 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e  virtual tables n
1cb10 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a  eeding locking *
1cb20 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65  /.#endif.  Table
1cb30 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20   *pZombieTab;   
1cb40 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
1cb50 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f  Table objects to
1cb60 20 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f   delete after co
1cb70 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67  de gen */.  Trig
1cb80 67 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72  gerPrg *pTrigger
1cb90 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20  Prg;  /* Linked 
1cba0 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72  list of coded tr
1cbb0 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68  iggers */.  With
1cbc0 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20   *pWith;        
1cbd0 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
1cbe0 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
1cbf0 20 4e 55 4c 4c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   NULL */.};../*.
1cc00 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  ** Return true i
1cc10 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69  f currently insi
1cc20 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65  de an sqlite3_de
1cc30 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c  clare_vtab() cal
1cc40 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  l..*/.#ifdef SQL
1cc50 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
1cc60 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20  TABLE.  #define 
1cc70 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20  IN_DECLARE_VTAB 
1cc80 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  0.#else.  #defin
1cc90 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41  e IN_DECLARE_VTA
1cca0 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61  B (pParse->decla
1ccb0 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a  reVtab).#endif..
1ccc0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1ccd0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1cce0 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e  ng structure can
1ccf0 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20   be declared on 
1cd00 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64  a stack and used
1cd10 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20  .** to save the 
1cd20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65  Parse.zAuthConte
1cd30 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74  xt value so that
1cd40 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f   it can be resto
1cd50 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74  red later..*/.st
1cd60 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74  ruct AuthContext
1cd70 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
1cd80 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20  *zAuthContext;  
1cd90 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61   /* Put saved Pa
1cda0 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74  rse.zAuthContext
1cdb0 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65   here */.  Parse
1cdc0 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
1cdd0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61         /* The Pa
1cde0 72 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f  rse structure */
1cdf0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69  .};../*.** Bitfi
1ce00 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35  eld flags for P5
1ce10 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75   value in variou
1ce20 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a 23 64  s opcodes..*/.#d
1ce30 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48  efine OPFLAG_NCH
1ce40 41 4e 47 45 20 20 20 20 20 20 20 30 78 30 31 20  ANGE       0x01 
1ce50 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64     /* Set to upd
1ce60 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20  ate db->nChange 
1ce70 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1ce80 47 5f 45 50 48 45 4d 20 20 20 20 20 20 20 20 20  G_EPHEM         
1ce90 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x01    /* OP_Co
1cea0 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c 20  lumn: Ephemeral 
1ceb0 6f 75 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f 0a  output is ok */.
1cec0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c  #define OPFLAG_L
1ced0 41 53 54 52 4f 57 49 44 20 20 20 20 20 30 78 30  ASTROWID     0x0
1cee0 32 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75  2    /* Set to u
1cef0 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f  pdate db->lastRo
1cf00 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  wid */.#define O
1cf10 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20  PFLAG_ISUPDATE  
1cf20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54      0x04    /* T
1cf30 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73  his OP_Insert is
1cf40 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a   an sql UPDATE *
1cf50 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1cf60 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20 20 30  _APPEND        0
1cf70 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69  x08    /* This i
1cf80 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61  s likely to be a
1cf90 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66  n append */.#def
1cfa0 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  ine OPFLAG_USESE
1cfb0 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20 20  EKRESULT 0x10   
1cfc0 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64   /* Try to avoid
1cfd0 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65   a seek in Btree
1cfe0 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65 66  Insert() */.#def
1cff0 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54  ine OPFLAG_LENGT
1d000 48 41 52 47 20 20 20 20 20 30 78 34 30 20 20 20  HARG     0x40   
1d010 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e   /* OP_Column on
1d020 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67  ly used for leng
1d030 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  th() */.#define 
1d040 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
1d050 20 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20       0x80    /* 
1d060 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75  OP_Column only u
1d070 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29  sed for typeof()
1d080 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1d090 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20  AG_BULKCSR      
1d0a0 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x01    /* OP_O
1d0b0 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70  pen** used to op
1d0c0 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a  en bulk cursor *
1d0d0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1d0e0 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20 20 30  _SEEKEQ        0
1d0f0 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  x02    /* OP_Ope
1d100 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73 65 73 20  n** cursor uses 
1d110 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a  EQ seek only */.
1d120 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50  #define OPFLAG_P
1d130 32 49 53 52 45 47 20 20 20 20 20 20 20 30 78 30  2ISREG       0x0
1d140 34 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50  4    /* P2 to OP
1d150 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65 67  _Open** is a reg
1d160 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ister number */.
1d170 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50  #define OPFLAG_P
1d180 45 52 4d 55 54 45 20 20 20 20 20 20 20 30 78 30  ERMUTE       0x0
1d190 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61  1    /* OP_Compa
1d1a0 72 65 3a 20 75 73 65 20 74 68 65 20 70 65 72 6d  re: use the perm
1d1b0 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 20  utation */../*. 
1d1c0 2a 20 45 61 63 68 20 74 72 69 67 67 65 72 20 70  * Each trigger p
1d1d0 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61  resent in the da
1d1e0 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
1d1f0 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e   stored as an in
1d200 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72  stance of. * str
1d210 75 63 74 20 54 72 69 67 67 65 72 2e 20 0a 20 2a  uct Trigger. . *
1d220 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20  . * Pointers to 
1d230 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72  instances of str
1d240 75 63 74 20 54 72 69 67 67 65 72 20 61 72 65 20  uct Trigger are 
1d250 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77 61  stored in two wa
1d260 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65  ys.. * 1. In the
1d270 20 22 74 72 69 67 48 61 73 68 22 20 68 61 73 68   "trigHash" hash
1d280 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66 20   table (part of 
1d290 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68 61  the sqlite3* tha
1d2a0 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65  t represents the
1d2b0 20 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73 65   . *    database
1d2c0 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 54  ). This allows T
1d2d0 72 69 67 67 65 72 20 73 74 72 75 63 74 75 72 65  rigger structure
1d2e0 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 76 65  s to be retrieve
1d2f0 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e  d by name.. * 2.
1d300 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61 73   All triggers as
1d310 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
1d320 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f 72  single table for
1d330 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c  m a linked list,
1d340 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20 20   using the. *   
1d350 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f 66   pNext member of
1d360 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e   struct Trigger.
1d370 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
1d380 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
1d390 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e  of the. *    lin
1d3a0 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f 72  ked list is stor
1d3b0 65 64 20 61 73 20 74 68 65 20 22 70 54 72 69 67  ed as the "pTrig
1d3c0 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20 74  ger" member of t
1d3d0 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20 2a  he associated. *
1d3e0 20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c 65      struct Table
1d3f0 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74 65  .. *. * The "ste
1d400 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 70  p_list" member p
1d410 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72  oints to the fir
1d420 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20  st element of a 
1d430 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63  linked list. * c
1d440 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51  ontaining the SQ
1d450 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65  L statements spe
1d460 63 69 66 69 65 64 20 61 73 20 74 68 65 20 74 72  cified as the tr
1d470 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20  igger program.. 
1d480 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
1d490 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  r {.  char *zNam
1d4a0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
1d4b0 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
1d4c0 20 74 72 69 67 67 65 72 20 20 20 20 20 20 20 20   trigger        
1d4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4e0 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c 65  */.  char *table
1d4f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1d500 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65  The table or vie
1d510 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74  w to which the t
1d520 72 69 67 67 65 72 20 61 70 70 6c 69 65 73 20 2a  rigger applies *
1d530 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  /.  u8 op;      
1d540 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1d550 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c  ne of TK_DELETE,
1d560 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
1d570 4e 53 45 52 54 20 20 20 20 20 20 20 20 20 2a 2f  NSERT         */
1d580 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20 20  .  u8 tr_tm;    
1d590 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
1d5a0 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45 46  e of TRIGGER_BEF
1d5b0 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46 54  ORE, TRIGGER_AFT
1d5c0 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  ER */.  Expr *pW
1d5d0 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  hen;            
1d5e0 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61 75  /* The WHEN clau
1d5f0 73 65 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  se of the expres
1d600 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c  sion (may be NUL
1d610 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a  L) */.  IdList *
1d620 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20  pColumns;       
1d630 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  /* If this is an
1d640 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75   UPDATE OF <colu
1d650 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65 72  mn-list> trigger
1d660 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1d670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1d680 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e  he <column-list>
1d690 20 69 73 20 73 74 6f 72 65 64 20 68 65 72 65 20   is stored here 
1d6a0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
1d6b0 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a 20  hema;        /* 
1d6c0 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e  Schema containin
1d6d0 67 20 74 68 65 20 74 72 69 67 67 65 72 20 2a 2f  g the trigger */
1d6e0 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62 53  .  Schema *pTabS
1d6f0 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63  chema;     /* Sc
1d700 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20  hema containing 
1d710 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54  the table */.  T
1d720 72 69 67 67 65 72 53 74 65 70 20 2a 73 74 65 70  riggerStep *step
1d730 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c  _list; /* Link l
1d740 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 20 70  ist of trigger p
1d750 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20 20  rogram steps    
1d760 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54 72           */.  Tr
1d770 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20 20  igger *pNext;   
1d780 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74 72        /* Next tr
1d790 69 67 67 65 72 20 61 73 73 6f 63 69 61 74 65 64  igger associated
1d7a0 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65 20   with the table 
1d7b0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74  */.};../*.** A t
1d7c0 72 69 67 67 65 72 20 69 73 20 65 69 74 68 65 72  rigger is either
1d7d0 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e 20   a BEFORE or an 
1d7e0 41 46 54 45 52 20 74 72 69 67 67 65 72 2e 20 20  AFTER trigger.  
1d7f0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  The following co
1d800 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72  nstants.** deter
1d810 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a 2a 2a 0a  mine which. .**.
1d820 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65 20  ** If there are 
1d830 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65 72  multiple trigger
1d840 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66 20  s, you might of 
1d850 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64 20  some BEFORE and 
1d860 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49  some AFTER..** I
1d870 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74 68  n that cases, th
1d880 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f  e constants belo
1d890 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74 6f  w can be ORed to
1d8a0 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  gether..*/.#defi
1d8b0 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52  ne TRIGGER_BEFOR
1d8c0 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52 49  E  1.#define TRI
1d8d0 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a 0a  GGER_AFTER   2..
1d8e0 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*. * An instanc
1d8f0 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  e of struct Trig
1d900 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64 20  gerStep is used 
1d910 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c  to store a singl
1d920 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a  e SQL statement.
1d930 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61 72   * that is a par
1d940 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d 70  t of a trigger-p
1d950 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20 49  rogram. . *. * I
1d960 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75  nstances of stru
1d970 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 61  ct TriggerStep a
1d980 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73  re stored in a s
1d990 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73  ingly linked lis
1d9a0 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69  t (linked. * usi
1d9b0 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d  ng the "pNext" m
1d9c0 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63 65  ember) reference
1d9d0 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c  d by the "step_l
1d9e0 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74  ist" member of t
1d9f0 68 65 20 0a 20 2a 20 61 73 73 6f 63 69 61 74 65  he . * associate
1da00 64 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  d struct Trigger
1da10 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66   instance. The f
1da20 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
1da30 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  the linked list 
1da40 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20  is. * the first 
1da50 73 74 65 70 20 6f 66 20 74 68 65 20 74 72 69 67  step of the trig
1da60 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 20  ger-program.. * 
1da70 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d  . * The "op" mem
1da80 62 65 72 20 69 6e 64 69 63 61 74 65 73 20 77 68  ber indicates wh
1da90 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20  ether this is a 
1daa0 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52  "DELETE", "INSER
1dab0 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a  T", "UPDATE" or.
1dac0 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61 74   * "SELECT" stat
1dad0 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69  ement. The meani
1dae0 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72  ngs of the other
1daf0 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74 65   members is dete
1db00 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 0a 20  rmined by the . 
1db10 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20  * value of "op" 
1db20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20  as follows:. *. 
1db30 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45  * (op == TK_INSE
1db40 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20  RT). * orconf   
1db50 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f   -> stores the O
1db60 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72  N CONFLICT algor
1db70 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20  ithm. * pSelect 
1db80 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20    -> If this is 
1db90 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
1dba0 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74  .. SELECT ... st
1dbb0 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a  atement, then. *
1dbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1dbd0 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e  is stores a poin
1dbe0 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43  ter to the SELEC
1dbf0 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68  T statement. Oth
1dc00 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
1dc10 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71  zTarget   -> Deq
1dc20 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
1dc30 65 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72  e table to inser
1dc40 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72  t into.. * pExpr
1dc50 4c 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20  List -> If this 
1dc60 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
1dc70 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e  O ... VALUES ...
1dc80 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
1dc90 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1dca0 20 74 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c   this stores val
1dcb0 75 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74  ues to be insert
1dcc0 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55  ed. Otherwise NU
1dcd0 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20  LL.. * pIdList  
1dce0 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
1dcf0 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
1dd00 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73  . (<column-names
1dd10 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e 20 0a 20  >) VALUES ... . 
1dd20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  *              s
1dd30 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74  tatement, then t
1dd40 68 69 73 20 73 74 6f 72 65 73 20 74 68 65 20 63  his stores the c
1dd50 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62  olumn-names to b
1dd60 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  e. *            
1dd70 20 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e    inserted into.
1dd80 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
1dd90 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a 54 61 72  _DELETE). * zTar
1dda0 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65  get   -> Dequote
1ddb0 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
1ddc0 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72  ble to delete fr
1ddd0 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20  om.. * pWhere   
1dde0 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c   -> The WHERE cl
1ddf0 61 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45  ause of the DELE
1de00 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20  TE statement if 
1de10 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64  one is specified
1de20 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
1de30 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c    Otherwise NULL
1de40 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20  .. * . * (op == 
1de50 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 7a 54  TK_UPDATE). * zT
1de60 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f  arget   -> Dequo
1de70 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
1de80 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65 2e  table to update.
1de90 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e  . * pWhere    ->
1dea0 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
1deb0 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  e of the UPDATE 
1dec0 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65  statement if one
1ded0 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20   is specified.. 
1dee0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f  *              O
1def0 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
1df00 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41  * pExprList -> A
1df10 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c   list of the col
1df20 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61  umns to update a
1df30 6e 64 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  nd the expressio
1df40 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20  ns to update. * 
1df50 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1df60 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65  m to. See sqlite
1df70 33 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65  3Update() docume
1df80 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61  ntation of "pCha
1df90 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20  nges". *        
1dfa0 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a        argument..
1dfb0 20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54   * . */.struct T
1dfc0 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75  riggerStep {.  u
1dfd0 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
1dfe0 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b      /* One of TK
1dff0 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41  _DELETE, TK_UPDA
1e000 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54  TE, TK_INSERT, T
1e010 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38  K_SELECT */.  u8
1e020 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20   orconf;        
1e030 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63     /* OE_Rollbac
1e040 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67  k etc. */.  Trig
1e050 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20  ger *pTrig;     
1e060 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72 20   /* The trigger 
1e070 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20 69  that this step i
1e080 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20  s a part of */. 
1e090 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
1e0a0 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20  ;     /* SELECT 
1e0b0 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 52 48 53  statement or RHS
1e0c0 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   of INSERT INTO 
1e0d0 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20  SELECT ... */.  
1e0e0 63 68 61 72 20 2a 7a 54 61 72 67 65 74 3b 20 20  char *zTarget;  
1e0f0 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20 74       /* Target t
1e100 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45 2c  able for DELETE,
1e110 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54 20   UPDATE, INSERT 
1e120 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72  */.  Expr *pWher
1e130 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  e;        /* The
1e140 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f   WHERE clause fo
1e150 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  r DELETE or UPDA
1e160 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45 78  TE steps */.  Ex
1e170 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69 73  prList *pExprLis
1e180 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73 65  t; /* SET clause
1e190 20 66 6f 72 20 55 50 44 41 54 45 2e 20 2a 2f 0a   for UPDATE. */.
1e1a0 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73    IdList *pIdLis
1e1b0 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  t;     /* Column
1e1c0 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45 52   names for INSER
1e1d0 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  T */.  TriggerSt
1e1e0 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  ep *pNext;  /* N
1e1f0 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d  ext in the link-
1e200 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67 65  list */.  Trigge
1e210 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f  rStep *pLast;  /
1e220 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20 69  * Last element i
1e230 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c  n link-list. Val
1e240 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d 20  id for 1st elem 
1e250 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  only */.};../*.*
1e260 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
1e270 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
1e280 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  ns information u
1e290 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74  sed by the sqlit
1e2a0 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69  eFix....** routi
1e2b0 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c 6b  nes as they walk
1e2c0 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
1e2d0 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73 65  to make database
1e2e0 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65   references.** e
1e2f0 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a 74 79  xplicit.  .*/.ty
1e300 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62 46  pedef struct DbF
1e310 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74  ixer DbFixer;.st
1e320 72 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20  ruct DbFixer {. 
1e330 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
1e340 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73       /* The pars
1e350 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72  ing context.  Er
1e360 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72 69  ror messages wri
1e370 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53  tten here */.  S
1e380 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
1e390 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20     /* Fix items 
1e3a0 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a  to this schema *
1e3b0 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79  /.  int bVarOnly
1e3c0 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b  ;       /* Check
1e3d0 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72 65   for variable re
1e3e0 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f  ferences only */
1e3f0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1e400 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  Db;    /* Make s
1e410 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20  ure all objects 
1e420 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  are contained in
1e430 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
1e440 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
1e450 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20  zType;  /* Type 
1e460 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72  of the container
1e470 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f   - used for erro
1e480 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20  r messages */.  
1e490 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61  const Token *pNa
1e4a0 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74  me; /* Name of t
1e4b0 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75  he container - u
1e4c0 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65  sed for error me
1e4d0 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ssages */.};../*
1e4e0 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20  .** An objected 
1e4f0 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61  used to accumula
1e500 74 65 20 74 68 65 20 74 65 78 74 20 6f 66 20 61  te the text of a
1e510 20 73 74 72 69 6e 67 20 77 68 65 72 65 20 77 65   string where we
1e520 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73  .** do not neces
1e530 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20  sarily know how 
1e540 62 69 67 20 74 68 65 20 73 74 72 69 6e 67 20 77  big the string w
1e550 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e  ill be in the en
1e560 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74 72  d..*/.struct Str
1e570 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65  Accum {.  sqlite
1e580 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f  3 *db;         /
1e590 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61 62  * Optional datab
1e5a0 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64  ase for lookasid
1e5b0 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20  e.  Can be NULL 
1e5c0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61 73 65  */.  char *zBase
1e5d0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62  ;         /* A b
1e5e0 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20  ase allocation. 
1e5f0 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63   Not from malloc
1e600 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65  . */.  char *zTe
1e610 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  xt;         /* T
1e620 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63  he string collec
1e630 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ted so far */.  
1e640 69 6e 74 20 20 6e 43 68 61 72 3b 20 20 20 20 20  int  nChar;     
1e650 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f       /* Length o
1e660 66 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20  f the string so 
1e670 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 41  far */.  int  nA
1e680 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  lloc;         /*
1e690 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65   Amount of space
1e6a0 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54   allocated in zT
1e6b0 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 20 6d 78  ext */.  int  mx
1e6c0 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a  Alloc;        /*
1e6d0 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64   Maximum allowed
1e6e0 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a   string length *
1e6f0 2f 0a 20 20 75 38 20 20 20 75 73 65 4d 61 6c 6c  /.  u8   useMall
1e700 6f 63 3b 20 20 20 20 20 20 2f 2a 20 30 3a 20 6e  oc;      /* 0: n
1e710 6f 6e 65 2c 20 20 31 3a 20 73 71 6c 69 74 65 33  one,  1: sqlite3
1e720 44 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20 73 71  DbMalloc,  2: sq
1e730 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a  lite3_malloc */.
1e740 20 20 75 38 20 20 20 61 63 63 45 72 72 6f 72 3b    u8   accError;
1e750 20 20 20 20 20 20 20 2f 2a 20 53 54 52 41 43 43         /* STRACC
1e760 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54 52 41  UM_NOMEM or STRA
1e770 43 43 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a 7d  CCUM_TOOBIG */.}
1e780 3b 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43 43  ;.#define STRACC
1e790 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23 64 65  UM_NOMEM   1.#de
1e7a0 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 54 4f  fine STRACCUM_TO
1e7b0 4f 42 49 47 20 20 32 0a 0a 2f 2a 0a 2a 2a 20 41  OBIG  2../*.** A
1e7c0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
1e7d0 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
1e7e0 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74  ed to communicat
1e7f0 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  e information.**
1e800 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69   from sqlite3Ini
1e810 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63  t and OP_ParseSc
1e820 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71  hema into the sq
1e830 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
1e840 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  k..*/.typedef st
1e850 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33  ruct {.  sqlite3
1e860 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20   *db;        /* 
1e870 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65 69  The database bei
1e880 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
1e890 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72  /.  char **pzErr
1e8a0 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72  Msg;    /* Error
1e8b0 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64 20   message stored 
1e8c0 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44  here */.  int iD
1e8d0 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
1e8e0 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61   0 for main data
1e8f0 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d  base.  1 for TEM
1e900 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43  P, 2.. for ATTAC
1e910 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  Hed */.  int rc;
1e920 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e930 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72  Result code stor
1e940 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69  ed here */.} Ini
1e950 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74  tData;../*.** St
1e960 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69  ructure containi
1e970 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67  ng global config
1e980 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f 72  uration data for
1e990 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72   the SQLite libr
1e9a0 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ary..**.** This 
1e9b0 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20 63  structure also c
1e9c0 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74 61  ontains some sta
1e9d0 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  te information..
1e9e0 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74 65  */.struct Sqlite
1e9f0 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20  3Config {.  int 
1ea00 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20 20  bMemstat;       
1ea10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ea20 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
1ea30 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a 2f  memory status */
1ea40 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74 65  .  int bCoreMute
1ea50 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
1ea60 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1ea70 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74 65  enable core mute
1ea80 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46  xing */.  int bF
1ea90 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20 20  ullMutex;       
1eaa0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1eab0 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66 75  rue to enable fu
1eac0 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20  ll mutexing */. 
1ead0 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20 20   int bOpenUri;  
1eae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eaf0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e     /* True to in
1eb00 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d 65  terpret filename
1eb10 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20 69  s as URIs */.  i
1eb20 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20 20 20  nt bUseCis;     
1eb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb40 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e 67   /* Use covering
1eb50 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75 6c   indices for ful
1eb60 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74  l-scans */.  int
1eb70 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20 20   mxStrlen;      
1eb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1eb90 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e 67  * Maximum string
1eba0 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74   length */.  int
1ebb0 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b 20 20   neverCorrupt;  
1ebc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ebd0 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 61 6c  * Database is al
1ebe0 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64  ways well-formed
1ebf0 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b   */.  int szLook
1ec00 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
1ec10 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1ec20 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66  lt lookaside buf
1ec30 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e  fer size */.  in
1ec40 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20  t nLookaside;   
1ec50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec60 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61  /* Default looka
1ec70 73 69 64 65 20 62 75 66 66 65 72 20 63 6f 75 6e  side buffer coun
1ec80 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  t */.  sqlite3_m
1ec90 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20  em_methods m;   
1eca0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d           /* Low-
1ecb0 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c  level memory all
1ecc0 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63  ocation interfac
1ecd0 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  e */.  sqlite3_m
1ece0 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74  utex_methods mut
1ecf0 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d  ex;      /* Low-
1ed00 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65  level mutex inte
1ed10 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74  rface */.  sqlit
1ed20 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64  e3_pcache_method
1ed30 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a 20  s2 pcache2;  /* 
1ed40 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63  Low-level page-c
1ed50 61 63 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a  ache interface *
1ed60 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b  /.  void *pHeap;
1ed70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed80 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74        /* Heap st
1ed90 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20  orage space */. 
1eda0 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20   int nHeap;     
1edb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edc0 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48     /* Size of pH
1edd0 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d  eap[] */.  int m
1ede0 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20  nReq, mxReq;    
1edf0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ee00 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70  Min and max heap
1ee10 20 72 65 71 75 65 73 74 73 20 73 69 7a 65 73 20   requests sizes 
1ee20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  */.  sqlite3_int
1ee30 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20  64 szMmap;      
1ee40 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29         /* mmap()
1ee50 20 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e 20   space per open 
1ee60 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  file */.  sqlite
1ee70 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20  3_int64 mxMmap; 
1ee80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
1ee90 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72  aximum value for
1eea0 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69   szMmap */.  voi
1eeb0 64 20 2a 70 53 63 72 61 74 63 68 3b 20 20 20 20  d *pScratch;    
1eec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1eed0 2a 20 53 63 72 61 74 63 68 20 6d 65 6d 6f 72 79  * Scratch memory
1eee0 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72 61   */.  int szScra
1eef0 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  tch;            
1ef00 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
1ef10 6f 66 20 65 61 63 68 20 73 63 72 61 74 63 68 20  of each scratch 
1ef20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20  buffer */.  int 
1ef30 6e 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20  nScratch;       
1ef40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ef50 20 4e 75 6d 62 65 72 20 6f 66 20 73 63 72 61 74   Number of scrat
1ef60 63 68 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20  ch buffers */.  
1ef70 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20  void *pPage;    
1ef80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef90 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20    /* Page cache 
1efa0 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20  memory */.  int 
1efb0 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20 20  szPage;         
1efc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1efd0 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61   Size of each pa
1efe0 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f  ge in pPage[] */
1eff0 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20  .  int nPage;   
1f000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f010 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1f020 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67 65  f pages in pPage
1f030 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61  [] */.  int mxPa
1f040 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20  rserStack;      
1f050 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78            /* max
1f060 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68  imum depth of th
1f070 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a  e parser stack *
1f080 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43 61  /.  int sharedCa
1f090 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20  cheEnabled;     
1f0a0 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66        /* true if
1f0b0 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
1f0c0 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20  de enabled */.  
1f0d0 75 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20 20  u32 szPma;      
1f0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0f0 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72    /* Maximum Sor
1f100 74 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a  ter PMA size */.
1f110 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d    /* The above m
1f120 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69  ight be initiali
1f130 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e  zed to non-zero.
1f140 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
1f150 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20  need to always. 
1f160 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65   ** initially be
1f170 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20   zero, however. 
1f180 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b  */.  int isInit;
1f190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1a0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
1f1b0 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74  fter initializat
1f1c0 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64  ion has finished
1f1d0 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67   */.  int inProg
1f1e0 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20  ress;           
1f1f0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1f200 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61  while initializa
1f210 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
1f220 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65   */.  int isMute
1f230 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  xInit;          
1f240 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1f250 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72  after mutexes ar
1f260 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  e initialized */
1f270 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49  .  int isMallocI
1f280 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
1f290 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
1f2a0 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69  er malloc is ini
1f2b0 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
1f2c0 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20  t isPCacheInit; 
1f2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2e0 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
1f2f0 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
1f300 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  zed */.  int nRe
1f310 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  fInitMutex;     
1f320 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1f330 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66  mber of users of
1f340 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20   pInitMutex */. 
1f350 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
1f360 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  pInitMutex;     
1f370 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64     /* Mutex used
1f380 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74   by sqlite3_init
1f390 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f  ialize() */.  vo
1f3a0 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a  id (*xLog)(void*
1f3b0 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
1f3c0 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66  ); /* Function f
1f3d0 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20  or logging */.  
1f3e0 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20  void *pLogArg;  
1f3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f400 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72       /* First ar
1f410 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29  gument to xLog()
1f420 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
1f430 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a  E_ENABLE_SQLLOG.
1f440 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29    void(*xSqllog)
1f450 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
1f460 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
1f470 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c  );.  void *pSqll
1f480 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69  ogArg;.#endif.#i
1f490 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45  fdef SQLITE_VDBE
1f4a0 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54  _COVERAGE.  /* T
1f4b0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
1f4c0 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55  lback (if not NU
1f4d0 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f  LL) is invoked o
1f4e0 6e 20 65 76 65 72 79 20 56 44 42 45 20 62 72 61  n every VDBE bra
1f4f0 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69  nch.  ** operati
1f500 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c  on.  Set the cal
1f510 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49  lback using SQLI
1f520 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45  TE_TESTCTRL_VDBE
1f530 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a  _COVERAGE..  */.
1f540 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72    void (*xVdbeBr
1f550 61 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74 20  anch)(void*,int 
1f560 69 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68 69  iSrcLine,u8 eThi
1f570 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43  s,u8 eMx);  /* C
1f580 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
1f590 64 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41 72  d *pVdbeBranchAr
1f5a0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
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 2f 2a 20 31 73 74 20 61 72         /* 1st ar
1f5d0 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66  gument */.#endif
1f5e0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1f5f0 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
1f600 54 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43  T.  int (*xTestC
1f610 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20  allback)(int);  
1f620 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64        /* Invoked
1f630 20 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74   by sqlite3Fault
1f640 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a  Sim() */.#endif.
1f650 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65    int bLocaltime
1f660 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20  Fault;          
1f670 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66      /* True to f
1f680 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20  ail localtime() 
1f690 63 61 6c 6c 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  calls */.};../*.
1f6a0 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73  ** This macro is
1f6b0 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20   used inside of 
1f6c0 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
1f6d0 6e 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65 20  nts to indicate 
1f6e0 74 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73 65  that.** the asse
1f6f0 72 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  rt is only valid
1f700 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65   on a well-forme
1f710 64 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e 73  d database.  Ins
1f720 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20  tead of:.**.**  
1f730 20 20 20 61 73 73 65 72 74 28 20 58 20 29 3b 0a     assert( X );.
1f740 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73  **.** One writes
1f750 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
1f760 72 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50 54  rt( X || CORRUPT
1f770 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52  _DB );.**.** COR
1f780 52 55 50 54 5f 44 42 20 69 73 20 74 72 75 65 20  RUPT_DB is true 
1f790 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70  during normal op
1f7a0 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50  eration.  CORRUP
1f7b0 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e  T_DB does not in
1f7c0 64 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20 74  dicate.** that t
1f7d0 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 64  he database is d
1f7e0 65 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75 70  efinitely corrup
1f7f0 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74 20  t, only that it 
1f800 6d 69 67 68 74 20 62 65 20 63 6f 72 72 75 70 74  might be corrupt
1f810 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65  ..** For most te
1f820 73 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55 50  st cases, CORRUP
1f830 54 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20 66  T_DB is set to f
1f840 61 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70 65  alse using a spe
1f850 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  cial.** sqlite3_
1f860 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20  test_control(). 
1f870 20 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61 73   This enables as
1f880 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
1f890 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68  s to prove.** th
1f8a0 69 6e 67 73 20 74 68 61 74 20 61 72 65 20 61 6c  ings that are al
1f8b0 77 61 79 73 20 74 72 75 65 20 66 6f 72 20 77 65  ways true for we
1f8c0 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61  ll-formed databa
1f8d0 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ses..*/.#define 
1f8e0 43 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71 6c  CORRUPT_DB  (sql
1f8f0 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72  ite3Config.never
1f900 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a  Corrupt==0)../*.
1f910 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74  ** Context point
1f920 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74  er passed down t
1f930 68 72 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d  hrough the tree-
1f940 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  walk..*/.struct 
1f950 57 61 6c 6b 65 72 20 7b 0a 20 20 69 6e 74 20 28  Walker {.  int (
1f960 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28  *xExprCallback)(
1f970 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
1f980 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b       /* Callback
1f990 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73   for expressions
1f9a0 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c   */.  int (*xSel
1f9b0 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c  ectCallback)(Wal
1f9c0 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20  ker*,Select*);  
1f9d0 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20  /* Callback for 
1f9e0 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69  SELECTs */.  voi
1f9f0 64 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62  d (*xSelectCallb
1fa00 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65  ack2)(Walker*,Se
1fa10 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64  lect*);/* Second
1fa20 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45   callback for SE
1fa30 4c 45 43 54 73 20 2a 2f 0a 20 20 50 61 72 73 65  LECTs */.  Parse
1fa40 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
1fa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa60 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63       /* Parser c
1fa70 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e  ontext.  */.  in
1fa80 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20  t walkerDepth;  
1fa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1faa0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1fab0 72 20 6f 66 20 73 75 62 71 75 65 72 69 65 73 20  r of subqueries 
1fac0 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b 20 20  */.  u8 eCode;  
1fad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1faf0 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65 73  * A small proces
1fb00 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20 75  sing code */.  u
1fb10 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20  nion {          
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 2f 2a 20 45 78 74 72           /* Extr
1fb40 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62  a data for callb
1fb50 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43  ack */.    NameC
1fb60 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20  ontext *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 2f 2a 20 4e 61 6d 69 6e 67 20        /* Naming 
1fb90 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69  context */.    i
1fba0 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt 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 2f 2a 20 41 20 63            /* A c
1fbd0 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e  ounter */.    in
1fbe0 74 20 69 43 75 72 3b 20 20 20 20 20 20 20 20 20  t 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 2f 2a 20 41 20 63 75           /* A cu
1fc10 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  rsor number */. 
1fc20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63     SrcList *pSrc
1fc30 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  List;           
1fc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1fc50 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
1fc60 20 20 20 20 73 74 72 75 63 74 20 53 72 63 43 6f      struct SrcCo
1fc70 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20  unt *pSrcCount; 
1fc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1fc90 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d  * Counting colum
1fca0 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a  n references */.
1fcb0 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f    } u;.};../* Fo
1fcc0 72 77 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f  rward declaratio
1fcd0 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  ns */.int sqlite
1fce0 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72  3WalkExpr(Walker
1fcf0 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
1fd00 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69  qlite3WalkExprLi
1fd10 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  st(Walker*, Expr
1fd20 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
1fd30 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61  te3WalkSelect(Wa
1fd40 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
1fd50 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
1fd60 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65  SelectExpr(Walke
1fd70 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
1fd80 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
1fd90 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c  ectFrom(Walker*,
1fda0 20 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a   Select*);../*.*
1fdb0 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72  * Return code fr
1fdc0 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72 65  om the parse-tre
1fdd0 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74  e walking primit
1fde0 69 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a  ives and their.*
1fdf0 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a  * callbacks..*/.
1fe00 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74  #define WRC_Cont
1fe10 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43  inue    0   /* C
1fe20 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74  ontinue down int
1fe30 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64  o children */.#d
1fe40 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20  efine WRC_Prune 
1fe50 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69        1   /* Omi
1fe60 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63  t children but c
1fe70 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20  ontinue walking 
1fe80 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66  siblings */.#def
1fe90 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20  ine WRC_Abort   
1fea0 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64      2   /* Aband
1feb0 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b  on the tree walk
1fec0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e   */../*.** An in
1fed0 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
1fee0 74 72 75 63 74 75 72 65 20 72 65 70 72 65 73 65  tructure represe
1fef0 6e 74 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65  nts a set of one
1ff00 20 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a   or more CTEs.**
1ff10 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65   (common table e
1ff20 78 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61  xpressions) crea
1ff30 74 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20  ted by a single 
1ff40 57 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a  WITH clause..*/.
1ff50 73 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20  struct With {.  
1ff60 69 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20  int nCte;       
1ff70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff80 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45  /* Number of CTE
1ff90 73 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c  s in the WITH cl
1ffa0 61 75 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a  ause */.  With *
1ffb0 70 4f 75 74 65 72 3b 20 20 20 20 20 20 20 20 20  pOuter;         
1ffc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
1ffd0 74 61 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61  taining WITH cla
1ffe0 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  use, or NULL */.
1fff0 20 20 73 74 72 75 63 74 20 43 74 65 20 7b 20 20    struct Cte {  
20000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20010 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54    /* For each CT
20020 45 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c  E in the WITH cl
20030 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20  ause.... */.    
20040 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
20050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20060 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
20070 43 54 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c  CTE */.    ExprL
20080 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20  ist *pCols;     
20090 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69             /* Li
200a0 73 74 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63  st of explicit c
200b0 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20  olumn names, or 
200c0 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65  NULL */.    Sele
200d0 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
200e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
200f0 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  he definition of
20100 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20   this CTE */.   
20110 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 72   const char *zEr
20120 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
20130 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67   /* Error messag
20140 65 20 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72  e for circular r
20150 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d  eferences */.  }
20160 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65   a[1];.};..#ifde
20170 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
20180 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
20190 20 6f 66 20 74 68 65 20 54 72 65 65 56 69 65 77   of the TreeView
201a0 20 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64 20   object is used 
201b0 66 6f 72 20 70 72 69 6e 74 69 6e 67 20 74 68 65  for printing the
201c0 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64   content of.** d
201d0 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 6f  ata structures o
201e0 6e 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72  n sqlite3DebugPr
201f0 69 6e 74 66 28 29 20 75 73 69 6e 67 20 61 20 74  intf() using a t
20200 72 65 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a  ree-like view..*
20210 2f 0a 73 74 72 75 63 74 20 54 72 65 65 56 69 65  /.struct TreeVie
20220 77 20 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c  w {.  int iLevel
20230 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
20240 20 57 68 69 63 68 20 6c 65 76 65 6c 20 6f 66 20   Which level of 
20250 74 68 65 20 74 72 65 65 20 77 65 20 61 72 65 20  the tree we are 
20260 6f 6e 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e  on */.  u8  bLin
20270 65 5b 31 30 30 5d 3b 20 20 20 20 20 20 20 20 20  e[100];         
20280 2f 2a 20 44 72 61 77 20 76 65 72 74 69 63 61 6c  /* Draw vertical
20290 20 69 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20   in column i if 
202a0 62 4c 69 6e 65 5b 69 5d 20 69 73 20 74 72 75 65  bLine[i] is true
202b0 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a   */.};.#endif /*
202c0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
202d0 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67  ../*.** Assuming
202e0 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74   zIn points to t
202f0 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66  he first byte of
20300 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63 74   a UTF-8 charact
20310 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a  er,.** advance z
20320 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  In to point to t
20330 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66  he first byte of
20340 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20   the next UTF-8 
20350 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64  character..*/.#d
20360 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49  efine SQLITE_SKI
20370 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20  P_UTF8(zIn) {   
20380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20390 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28       \.  if( (*(
203a0 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b  zIn++))>=0xc0 ){
203b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
203d0 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e      while( (*zIn
203e0 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29   & 0xc0)==0x80 )
203f0 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20  { zIn++; }      
20400 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20         \.  }    
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 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  \.}../*.** The S
20450 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63  QLITE_*_BKPT mac
20460 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74 75  ros are substitu
20470 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f  tes for the erro
20480 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20  r codes with.** 
20490 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75  the same name bu
204a0 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42  t without the _B
204b0 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68 65  KPT suffix.  The
204c0 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65  se macros invoke
204d0 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61  .** routines tha
204e0 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e  t report the lin
204f0 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63  e-number on whic
20500 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67  h the error orig
20510 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20  inated.** using 
20520 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20  sqlite3_log().  
20530 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73  The routines als
20540 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76  o provide a conv
20550 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20  enient place.** 
20560 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67 65  to set a debugge
20570 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f  r breakpoint..*/
20580 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72  .int sqlite3Corr
20590 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69  uptError(int);.i
205a0 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65  nt sqlite3Misuse
205b0 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20  Error(int);.int 
205c0 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45  sqlite3CantopenE
205d0 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69  rror(int);.#defi
205e0 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  ne SQLITE_CORRUP
205f0 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f  T_BKPT sqlite3Co
20600 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e  rruptError(__LIN
20610 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c  E__).#define SQL
20620 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20  ITE_MISUSE_BKPT 
20630 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72  sqlite3MisuseErr
20640 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65  or(__LINE__).#de
20650 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54  fine SQLITE_CANT
20660 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65  OPEN_BKPT sqlite
20670 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f  3CantopenError(_
20680 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a  _LINE__).../*.**
20690 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20   FTS4 is really 
206a0 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72  an extension for
206b0 20 46 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e   FTS3.  It is en
206c0 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a  abled using the.
206d0 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ** SQLITE_ENABLE
206e0 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75  _FTS3 macro.  Bu
206f0 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75  t to avoid confu
20700 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c  sion we also cal
20710 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  l.** the SQLITE_
20720 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72  ENABLE_FTS4 macr
20730 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e  o to serve as an
20740 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54   alias for SQLIT
20750 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a  E_ENABLE_FTS3..*
20760 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
20770 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
20780 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
20790 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
207a0 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
207b0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a  E_ENABLE_FTS3 1.
207c0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
207d0 65 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72  e ctype.h header
207e0 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e   is needed for n
207f0 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73  on-ASCII systems
20800 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a  .  It is also.**
20810 20 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20   needed by FTS3 
20820 77 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63  when FTS3 is inc
20830 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61  luded in the ama
20840 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69  lgamation..*/.#i
20850 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
20860 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20  E_ASCII) || \.  
20870 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
20880 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26  E_ENABLE_FTS3) &
20890 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
208a0 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a  _AMALGAMATION)).
208b0 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65  # include <ctype
208c0 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h>.#endif../*.*
208d0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
208e0 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65  macros mimic the
208f0 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72   standard librar
20900 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70  y functions toup
20910 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63  per(),.** isspac
20920 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20  e(), isalnum(), 
20930 69 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73  isdigit() and is
20940 78 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63  xdigit(), respec
20950 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73  tively. The.** s
20960 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f  qlite versions o
20970 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43  nly work for ASC
20980 49 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72  II characters, r
20990 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63  egardless of loc
209a0 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ale..*/.#ifdef S
209b0 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65  QLITE_ASCII.# de
209c0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
209d0 70 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73  per(x)  ((x)&~(s
209e0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
209f0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
20a00 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69  )]&0x20)).# defi
20a10 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63  ne sqlite3Isspac
20a20 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  e(x)   (sqlite3C
20a30 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
20a40 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31  d char)(x)]&0x01
20a50 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
20a60 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28  e3Isalnum(x)   (
20a70 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
20a80 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
20a90 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69  x)]&0x06).# defi
20aa0 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68  ne sqlite3Isalph
20ab0 61 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  a(x)   (sqlite3C
20ac0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
20ad0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32  d char)(x)]&0x02
20ae0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
20af0 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28  e3Isdigit(x)   (
20b00 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
20b10 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
20b20 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69  x)]&0x04).# defi
20b30 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67  ne sqlite3Isxdig
20b40 69 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43  it(x)  (sqlite3C
20b50 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
20b60 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38  d char)(x)]&0x08
20b70 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
20b80 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28  e3Tolower(x)   (
20b90 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
20ba0 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  wer[(unsigned ch
20bb0 61 72 29 28 78 29 5d 29 0a 23 65 6c 73 65 0a 23  ar)(x)]).#else.#
20bc0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
20bd0 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f 75 70  oupper(x)   toup
20be0 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68  per((unsigned ch
20bf0 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
20c00 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28   sqlite3Isspace(
20c10 78 29 20 20 20 69 73 73 70 61 63 65 28 28 75 6e  x)   isspace((un
20c20 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
20c30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20c40 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73  3Isalnum(x)   is
20c50 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20  alnum((unsigned 
20c60 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
20c70 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68  ne sqlite3Isalph
20c80 61 28 78 29 20 20 20 69 73 61 6c 70 68 61 28 28  a(x)   isalpha((
20c90 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
20ca0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
20cb0 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20  te3Isdigit(x)   
20cc0 69 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65  isdigit((unsigne
20cd0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
20ce0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64  fine sqlite3Isxd
20cf0 69 67 69 74 28 78 29 20 20 69 73 78 64 69 67 69  igit(x)  isxdigi
20d00 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  t((unsigned char
20d10 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
20d20 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29  qlite3Tolower(x)
20d30 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69     tolower((unsi
20d40 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
20d50 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
20d60 33 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a 0a  3IsIdChar(u8);..
20d70 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66  /*.** Internal f
20d80 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70  unction prototyp
20d90 65 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71  es.*/.#define sq
20da0 6c 69 74 65 33 53 74 72 49 43 6d 70 20 73 71 6c  lite3StrICmp sql
20db0 69 74 65 33 5f 73 74 72 69 63 6d 70 0a 69 6e 74  ite3_stricmp.int
20dc0 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
20dd0 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  (const char*);.#
20de0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
20df0 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73  rNICmp sqlite3_s
20e00 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c  trnicmp..int sql
20e10 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76  ite3MallocInit(v
20e20 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
20e30 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64  e3MallocEnd(void
20e40 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
20e50 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69  Malloc(u64);.voi
20e60 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
20e70 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20  Zero(u64);.void 
20e80 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  *sqlite3DbMalloc
20e90 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75  Zero(sqlite3*, u
20ea0 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
20eb0 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71  e3DbMallocRaw(sq
20ec0 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68  lite3*, u64);.ch
20ed0 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72  ar *sqlite3DbStr
20ee0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  Dup(sqlite3*,con
20ef0 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20  st char*);.char 
20f00 2a 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75  *sqlite3DbStrNDu
20f10 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  p(sqlite3*,const
20f20 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 76 6f   char*, u64);.vo
20f30 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c  id *sqlite3Reall
20f40 6f 63 28 76 6f 69 64 2a 2c 20 75 36 34 29 3b 0a  oc(void*, u64);.
20f50 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52  void *sqlite3DbR
20f60 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c  eallocOrFree(sql
20f70 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20  ite3 *, void *, 
20f80 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
20f90 74 65 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c  te3DbRealloc(sql
20fa0 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20  ite3 *, void *, 
20fb0 75 36 34 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u64);.void sqlit
20fc0 65 33 44 62 46 72 65 65 28 73 71 6c 69 74 65 33  e3DbFree(sqlite3
20fd0 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73  *, void*);.int s
20fe0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65  qlite3MallocSize
20ff0 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c  (void*);.int sql
21000 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65  ite3DbMallocSize
21010 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
21020 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
21030 53 63 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e  ScratchMalloc(in
21040 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21050 53 63 72 61 74 63 68 46 72 65 65 28 76 6f 69 64  ScratchFree(void
21060 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  *);.void *sqlite
21070 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29  3PageMalloc(int)
21080 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
21090 67 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76  geFree(void*);.v
210a0 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65  oid sqlite3MemSe
210b0 74 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a  tDefault(void);.
210c0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69  void sqlite3Beni
210d0 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f  gnMallocHooks(vo
210e0 69 64 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f  id (*)(void), vo
210f0 69 64 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 69  id (*)(void));.i
21100 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65  nt sqlite3HeapNe
21110 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a  arlyFull(void);.
21120 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d  ./*.** On system
21130 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61  s with ample sta
21140 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68 61  ck space and tha
21150 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61  t support alloca
21160 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20  (), make.** use 
21170 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f  of alloca() to o
21180 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20  btain space for 
21190 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20  large automatic 
211a0 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66  objects.  By def
211b0 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20  ault,.** obtain 
211c0 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f  space from mallo
211d0 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61  c()..**.** The a
211e0 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20  lloca() routine 
211f0 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55  never returns NU
21200 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63  LL.  This will c
21210 61 75 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a  ause code paths.
21220 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69 74  ** that deal wit
21230 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  h sqlite3StackAl
21240 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20 74  loc() failures t
21250 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65  o be unreachable
21260 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
21270 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20  TE_USE_ALLOCA.# 
21280 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
21290 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  ackAllocRaw(D,N)
212a0 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64     alloca(N).# d
212b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
212c0 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  ckAllocZero(D,N)
212d0 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28    memset(alloca(
212e0 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69  N), 0, N).# defi
212f0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46  ne sqlite3StackF
21300 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 0a  ree(D,P)       .
21310 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
21320 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
21330 52 61 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74  Raw(D,N)   sqlit
21340 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c  e3DbMallocRaw(D,
21350 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
21360 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72  te3StackAllocZer
21370 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44  o(D,N)  sqlite3D
21380 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  bMallocZero(D,N)
21390 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
213a0 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20  3StackFree(D,P) 
213b0 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
213c0 72 65 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a  ree(D,P).#endif.
213d0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
213e0 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f  NABLE_MEMSYS3.co
213f0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  nst sqlite3_mem_
21400 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33  methods *sqlite3
21410 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f  MemGetMemsys3(vo
21420 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  id);.#endif.#ifd
21430 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
21440 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73  _MEMSYS5.const s
21450 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
21460 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65  ds *sqlite3MemGe
21470 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a  tMemsys5(void);.
21480 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66  #endif...#ifndef
21490 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d   SQLITE_MUTEX_OM
214a0 49 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  IT.  sqlite3_mut
214b0 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74  ex_methods const
214c0 20 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74   *sqlite3Default
214d0 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73  Mutex(void);.  s
214e0 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
214f0 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
21500 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69  te3NoopMutex(voi
21510 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  d);.  sqlite3_mu
21520 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65  tex *sqlite3Mute
21530 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69  xAlloc(int);.  i
21540 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49  nt sqlite3MutexI
21550 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74  nit(void);.  int
21560 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64   sqlite3MutexEnd
21570 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a  (void);.#endif..
21580 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71  sqlite3_int64 sq
21590 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c 75 65  lite3StatusValue
215a0 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
215b0 74 65 33 53 74 61 74 75 73 55 70 28 69 6e 74 2c  te3StatusUp(int,
215c0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
215d0 74 65 33 53 74 61 74 75 73 44 6f 77 6e 28 69 6e  te3StatusDown(in
215e0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
215f0 6c 69 74 65 33 53 74 61 74 75 73 53 65 74 28 69  lite3StatusSet(i
21600 6e 74 2c 20 69 6e 74 29 3b 0a 0a 2f 2a 20 41 63  nt, int);../* Ac
21610 63 65 73 73 20 74 6f 20 6d 75 74 65 78 65 73 20  cess to mutexes 
21620 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
21630 73 74 61 74 75 73 28 29 20 2a 2f 0a 73 71 6c 69  status() */.sqli
21640 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
21650 65 33 50 63 61 63 68 65 31 4d 75 74 65 78 28 76  e3Pcache1Mutex(v
21660 6f 69 64 29 3b 0a 73 71 6c 69 74 65 33 5f 6d 75  oid);.sqlite3_mu
21670 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  tex *sqlite3Mall
21680 6f 63 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 0a  ocMutex(void);..
21690 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
216a0 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
216b0 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  NT.  int sqlite3
216c0 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23  IsNaN(double);.#
216d0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
216e0 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30  lite3IsNaN(X)  0
216f0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
21700 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
21710 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
21720 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f  cture holds info
21730 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51  rmation about SQ
21740 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61  L.** functions a
21750 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72  rguments that ar
21760 65 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73  e the parameters
21770 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29   to the printf()
21780 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74   function..*/.st
21790 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d  ruct PrintfArgum
217a0 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72  ents {.  int nAr
217b0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
217c0 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65    /* Total numbe
217d0 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
217e0 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20  /.  int nUsed;  
217f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21800 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
21810 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  nts used so far 
21820 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  */.  sqlite3_val
21830 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a  ue **apArg;   /*
21840 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61   The argument va
21850 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66  lues */.};..#def
21860 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  ine SQLITE_PRINT
21870 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 0a  F_INTERNAL 0x01.
21880 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
21890 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30  RINTF_SQLFUNC  0
218a0 78 30 32 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  x02.void sqlite3
218b0 56 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75  VXPrintf(StrAccu
218c0 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20 63  m*, u32, const c
218d0 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a  har*, va_list);.
218e0 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72 69  void sqlite3XPri
218f0 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 75  ntf(StrAccum*, u
21900 33 32 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  32, const char*,
21910 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c   ...);.char *sql
21920 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69  ite3MPrintf(sqli
21930 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
21940 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71  , ...);.char *sq
21950 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71  lite3VMPrintf(sq
21960 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
21970 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 63 68  r*, va_list);.ch
21980 61 72 20 2a 73 71 6c 69 74 65 33 4d 41 70 70 65  ar *sqlite3MAppe
21990 6e 64 66 28 73 71 6c 69 74 65 33 2a 2c 63 68 61  ndf(sqlite3*,cha
219a0 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  r*,const char*,.
219b0 2e 2e 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64  ..);.#if defined
219c0 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
219d0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
219e0 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71  DEBUG).  void sq
219f0 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
21a00 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e  (const char*, ..
21a10 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  .);.#endif.#if d
21a20 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
21a30 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  ST).  void *sqli
21a40 74 65 33 54 65 73 74 54 65 78 74 54 6f 50 74 72  te3TestTextToPtr
21a50 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  (const char*);.#
21a60 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
21a70 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
21a80 0a 20 20 54 72 65 65 56 69 65 77 20 2a 73 71 6c  .  TreeView *sql
21a90 69 74 65 33 54 72 65 65 56 69 65 77 50 75 73 68  ite3TreeViewPush
21aa0 28 54 72 65 65 56 69 65 77 2a 2c 75 38 29 3b 0a  (TreeView*,u8);.
21ab0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
21ac0 65 65 56 69 65 77 50 6f 70 28 54 72 65 65 56 69  eeViewPop(TreeVi
21ad0 65 77 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ew*);.  void sql
21ae0 69 74 65 33 54 72 65 65 56 69 65 77 4c 69 6e 65  ite3TreeViewLine
21af0 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
21b00 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 20  t char*, ...);. 
21b10 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
21b20 65 56 69 65 77 49 74 65 6d 28 54 72 65 65 56 69  eViewItem(TreeVi
21b30 65 77 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ew*, const char*
21b40 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71  , u8);.  void sq
21b50 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70  lite3TreeViewExp
21b60 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  r(TreeView*, con
21b70 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20  st Expr*, u8);. 
21b80 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
21b90 65 56 69 65 77 45 78 70 72 4c 69 73 74 28 54 72  eViewExprList(Tr
21ba0 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45  eeView*, const E
21bb0 78 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f  xprList*, u8, co
21bc0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
21bd0 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
21be0 65 77 53 65 6c 65 63 74 28 54 72 65 65 56 69 65  ewSelect(TreeVie
21bf0 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63 74  w*, const Select
21c00 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a  *, u8);.#endif..
21c10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74  .void sqlite3Set
21c20 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20  String(char **, 
21c30 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
21c40 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  char*, ...);.voi
21c50 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73  d sqlite3ErrorMs
21c60 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  g(Parse*, const 
21c70 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74  char*, ...);.int
21c80 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28   sqlite3Dequote(
21c90 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
21ca0 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63  te3KeywordCode(c
21cb0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
21cc0 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  ar*, int);.int s
21cd0 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72 28  qlite3RunParser(
21ce0 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
21cf0 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76  ar*, char **);.v
21d00 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73  oid sqlite3Finis
21d10 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b  hCoding(Parse*);
21d20 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
21d30 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a  empReg(Parse*);.
21d40 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65  void sqlite3Rele
21d50 61 73 65 54 65 6d 70 52 65 67 28 50 61 72 73 65  aseTempReg(Parse
21d60 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  *,int);.int sqli
21d70 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28  te3GetTempRange(
21d80 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
21d90 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65  d sqlite3Release
21da0 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a  TempRange(Parse*
21db0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
21dc0 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70  sqlite3ClearTemp
21dd0 52 65 67 43 61 63 68 65 28 50 61 72 73 65 2a 29  RegCache(Parse*)
21de0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
21df0 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33  xprAlloc(sqlite3
21e00 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65  *,int,const Toke
21e10 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  n*,int);.Expr *s
21e20 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69 74  qlite3Expr(sqlit
21e30 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
21e40 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
21e50 65 33 45 78 70 72 41 74 74 61 63 68 53 75 62 74  e3ExprAttachSubt
21e60 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78  rees(sqlite3*,Ex
21e70 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  pr*,Expr*,Expr*)
21e80 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50  ;.Expr *sqlite3P
21e90 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74  Expr(Parse*, int
21ea0 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  , Expr*, Expr*, 
21eb0 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45  const Token*);.E
21ec0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
21ed0 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  And(sqlite3*,Exp
21ee0 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72  r*, Expr*);.Expr
21ef0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e   *sqlite3ExprFun
21f00 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70  ction(Parse*,Exp
21f10 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  rList*, Token*);
21f20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
21f30 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72  rAssignVarNumber
21f40 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
21f50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
21f60 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  rDelete(sqlite3*
21f70 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69  , Expr*);.ExprLi
21f80 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c  st *sqlite3ExprL
21f90 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a  istAppend(Parse*
21fa0 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
21fb0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
21fc0 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50  xprListSetName(P
21fd0 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
21fe0 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Token*,int);.voi
21ff0 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
22000 74 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c  tSetSpan(Parse*,
22010 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70  ExprList*,ExprSp
22020 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  an*);.void sqlit
22030 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65  e3ExprListDelete
22040 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c  (sqlite3*, ExprL
22050 69 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74  ist*);.u32 sqlit
22060 65 33 45 78 70 72 4c 69 73 74 46 6c 61 67 73 28  e3ExprListFlags(
22070 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 29  const ExprList*)
22080 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69  ;.int sqlite3Ini
22090 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72  t(sqlite3*, char
220a0 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
220b0 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69  InitCallback(voi
220c0 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c  d*, int, char**,
220d0 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73   char**);.void s
220e0 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61 72  qlite3Pragma(Par
220f0 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
22100 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76  *,Token*,int);.v
22110 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74  oid sqlite3Reset
22120 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
22130 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29  ection(sqlite3*)
22140 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
22150 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c  setOneSchema(sql
22160 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
22170 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65   sqlite3Collapse
22180 44 61 74 61 62 61 73 65 41 72 72 61 79 28 73 71  DatabaseArray(sq
22190 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
221a0 6c 69 74 65 33 42 65 67 69 6e 50 61 72 73 65 28  lite3BeginParse(
221b0 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
221c0 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49  d sqlite3CommitI
221d0 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73  nternalChanges(s
221e0 71 6c 69 74 65 33 2a 29 3b 0a 54 61 62 6c 65 20  qlite3*);.Table 
221f0 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65  *sqlite3ResultSe
22200 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a  tOfSelect(Parse*
22210 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20  ,Select*);.void 
22220 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65  sqlite3OpenMaste
22230 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20  rTable(Parse *, 
22240 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  int);.Index *sql
22250 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e  ite3PrimaryKeyIn
22260 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36  dex(Table*);.i16
22270 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66   sqlite3ColumnOf
22280 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31  Index(Index*, i1
22290 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  6);.void sqlite3
222a0 53 74 61 72 74 54 61 62 6c 65 28 50 61 72 73 65  StartTable(Parse
222b0 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
222c0 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29  int,int,int,int)
222d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
222e0 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54  dColumn(Parse*,T
222f0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
22300 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50  ite3AddNotNull(P
22310 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
22320 64 20 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d  d sqlite3AddPrim
22330 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45  aryKey(Parse*, E
22340 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
22350 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
22360 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f  qlite3AddCheckCo
22370 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
22380 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
22390 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 54 79  lite3AddColumnTy
223a0 70 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  pe(Parse*,Token*
223b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
223c0 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50  ddDefaultValue(P
223d0 61 72 73 65 2a 2c 45 78 70 72 53 70 61 6e 2a 29  arse*,ExprSpan*)
223e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
223f0 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72  dCollateType(Par
22400 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  se*, Token*);.vo
22410 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62  id sqlite3EndTab
22420 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  le(Parse*,Token*
22430 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63  ,Token*,u8,Selec
22440 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
22450 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74 20 63  ParseUri(const c
22460 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
22470 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a  ,unsigned int*,.
22480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22490 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73 2a      sqlite3_vfs*
224a0 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a  *,char**,char **
224b0 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69 74 65  );.Btree *sqlite
224c0 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 73  3DbNameToBtree(s
224d0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
224e0 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
224f0 33 43 6f 64 65 4f 6e 63 65 28 50 61 72 73 65 20  3CodeOnce(Parse 
22500 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  *);..#ifdef SQLI
22510 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
22520 54 45 53 54 0a 23 20 64 65 66 69 6e 65 20 73 71  TEST.# define sq
22530 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58 29  lite3FaultSim(X)
22540 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65   SQLITE_OK.#else
22550 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 61  .  int sqlite3Fa
22560 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e  ultSim(int);.#en
22570 64 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c  dif..Bitvec *sql
22580 69 74 65 33 42 69 74 76 65 63 43 72 65 61 74 65  ite3BitvecCreate
22590 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (u32);.int sqlit
225a0 65 33 42 69 74 76 65 63 54 65 73 74 28 42 69 74  e3BitvecTest(Bit
225b0 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20  vec*, u32);.int 
225c0 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 65 74  sqlite3BitvecSet
225d0 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
225e0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76  void sqlite3Bitv
225f0 65 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c  ecClear(Bitvec*,
22600 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f   u32, void*);.vo
22610 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  id sqlite3Bitvec
22620 44 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a 29  Destroy(Bitvec*)
22630 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69 74  ;.u32 sqlite3Bit
22640 76 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a 29  vecSize(Bitvec*)
22650 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
22660 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74 28 69  vecBuiltinTest(i
22670 6e 74 2c 69 6e 74 2a 29 3b 0a 0a 52 6f 77 53 65  nt,int*);..RowSe
22680 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74  t *sqlite3RowSet
22690 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 76  Init(sqlite3*, v
226a0 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69  oid*, unsigned i
226b0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
226c0 33 52 6f 77 53 65 74 43 6c 65 61 72 28 52 6f 77  3RowSetClear(Row
226d0 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  Set*);.void sqli
226e0 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28  te3RowSetInsert(
226f0 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69  RowSet*, i64);.i
22700 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  nt sqlite3RowSet
22710 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e  Test(RowSet*, in
22720 74 20 69 42 61 74 63 68 2c 20 69 36 34 29 3b 0a  t iBatch, i64);.
22730 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65  int sqlite3RowSe
22740 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c 20 69  tNext(RowSet*, i
22750 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  64*);..void sqli
22760 74 65 33 43 72 65 61 74 65 56 69 65 77 28 50 61  te3CreateView(Pa
22770 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
22780 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65 6c 65 63 74  n*,Token*,Select
22790 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66  *,int,int);..#if
227a0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
227b0 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21  _OMIT_VIEW) || !
227c0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
227d0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
227e0 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  ).  int sqlite3V
227f0 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65  iewGetColumnName
22800 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29  s(Parse*,Table*)
22810 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
22820 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43   sqlite3ViewGetC
22830 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20  olumnNames(A,B) 
22840 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51  0.#endif..#if SQ
22850 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
22860 44 3e 33 30 0a 20 20 69 6e 74 20 73 71 6c 69 74  D>30.  int sqlit
22870 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e3DbMaskAllZero(
22880 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66  yDbMask);.#endif
22890 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f  .void sqlite3Dro
228a0 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  pTable(Parse*, S
228b0 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  rcList*, int, in
228c0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
228d0 43 6f 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61  CodeDropTable(Pa
228e0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
228f0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
22900 6c 69 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65  lite3DeleteTable
22910 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65  (sqlite3*, Table
22920 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
22930 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
22940 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c  EMENT.  void sql
22950 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
22960 74 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50  tBegin(Parse *pP
22970 61 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71  arse);.  void sq
22980 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
22990 6e 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61  ntEnd(Parse *pPa
229a0 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  rse);.#else.# de
229b0 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f  fine sqlite3Auto
229c0 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58  incrementBegin(X
229d0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
229e0 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45  e3AutoincrementE
229f0 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69  nd(X).#endif.voi
22a00 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28  d sqlite3Insert(
22a10 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
22a20 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73  , Select*, IdLis
22a30 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  t*, int);.void *
22a40 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f  sqlite3ArrayAllo
22a50 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f  cate(sqlite3*,vo
22a60 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74  id*,int,int*,int
22a70 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69  *);.IdList *sqli
22a80 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28  te3IdListAppend(
22a90 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74  sqlite3*, IdList
22aa0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
22ab0 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64  sqlite3IdListInd
22ac0 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74  ex(IdList*,const
22ad0 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74   char*);.SrcList
22ae0 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
22af0 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33 2a  Enlarge(sqlite3*
22b00 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c  , SrcList*, int,
22b10 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a   int);.SrcList *
22b20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70  sqlite3SrcListAp
22b30 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 53  pend(sqlite3*, S
22b40 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  rcList*, Token*,
22b50 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73   Token*);.SrcLis
22b60 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
22b70 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28  tAppendFromTerm(
22b80 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
22b90 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
22ba0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
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 54 6f 6b 65 6e 2a 2c 20          Token*, 
22bd0 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20  Select*, Expr*, 
22be0 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  IdList*);.void s
22bf0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64  qlite3SrcListInd
22c00 65 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20  exedBy(Parse *, 
22c10 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e  SrcList *, Token
22c20 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
22c30 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28  IndexedByLookup(
22c40 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20  Parse *, struct 
22c50 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b  SrcList_item *);
22c60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
22c70 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70  ListShiftJoinTyp
22c80 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69  e(SrcList*);.voi
22c90 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
22ca0 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61  AssignCursors(Pa
22cb0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  rse*, SrcList*);
22cc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c  .void sqlite3IdL
22cd0 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
22ce0 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f  3*, IdList*);.vo
22cf0 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
22d00 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
22d10 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64  , SrcList*);.Ind
22d20 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63  ex *sqlite3Alloc
22d30 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 73  ateIndexObject(s
22d40 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c  qlite3*,i16,int,
22d50 63 68 61 72 2a 2a 29 3b 0a 49 6e 64 65 78 20 2a  char**);.Index *
22d60 73 71 6c 69 74 65 33 43 72 65 61 74 65 49 6e 64  sqlite3CreateInd
22d70 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ex(Parse*,Token*
22d80 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a  ,Token*,SrcList*
22d90 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54  ,ExprList*,int,T
22da0 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20  oken*,.         
22db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22dc0 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
22dd0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
22de0 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ropIndex(Parse*,
22df0 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b   SrcList*, int);
22e00 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65  .int sqlite3Sele
22e10 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  ct(Parse*, Selec
22e20 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29  t*, SelectDest*)
22e30 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65  ;.Select *sqlite
22e40 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73 65  3SelectNew(Parse
22e50 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c  *,ExprList*,SrcL
22e60 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
22e70 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
22e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
22e90 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75  xpr*,ExprList*,u
22ea0 31 36 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b  16,Expr*,Expr*);
22eb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
22ec0 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  ectDelete(sqlite
22ed0 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61  3*, Select*);.Ta
22ee0 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ble *sqlite3SrcL
22ef0 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a  istLookup(Parse*
22f00 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74  , SrcList*);.int
22f10 20 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f 6e   sqlite3IsReadOn
22f20 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ly(Parse*, Table
22f30 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
22f40 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 50  lite3OpenTable(P
22f50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c  arse*, int iCur,
22f60 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65 2a   int iDb, Table*
22f70 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66 69  , int);.#if defi
22f80 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
22f90 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f  E_UPDATE_DELETE_
22fa0 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e  LIMIT) && !defin
22fb0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ed(SQLITE_OMIT_S
22fc0 55 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a 73  UBQUERY).Expr *s
22fd0 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72 65  qlite3LimitWhere
22fe0 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a  (Parse*,SrcList*
22ff0 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
23000 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63 68 61  ,Expr*,Expr*,cha
23010 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  r*);.#endif.void
23020 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46 72   sqlite3DeleteFr
23030 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  om(Parse*, SrcLi
23040 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  st*, Expr*);.voi
23050 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28  d sqlite3Update(
23060 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
23070 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  , ExprList*, Exp
23080 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65 49  r*, int);.WhereI
23090 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72  nfo *sqlite3Wher
230a0 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72  eBegin(Parse*,Sr
230b0 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
230c0 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a  rList*,ExprList*
230d0 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,u16,int);.void 
230e0 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28  sqlite3WhereEnd(
230f0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 75 36 34  WhereInfo*);.u64
23100 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 75 74   sqlite3WhereOut
23110 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68 65 72  putRowCount(Wher
23120 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
23130 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69  ite3WhereIsDisti
23140 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  nct(WhereInfo*);
23150 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
23160 65 49 73 4f 72 64 65 72 65 64 28 57 68 65 72 65  eIsOrdered(Where
23170 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
23180 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64  te3WhereIsSorted
23190 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
231a0 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 43 6f  t sqlite3WhereCo
231b0 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57 68 65 72  ntinueLabel(Wher
231c0 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
231d0 69 74 65 33 57 68 65 72 65 42 72 65 61 6b 4c 61  ite3WhereBreakLa
231e0 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  bel(WhereInfo*);
231f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
23200 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65 72 65  eOkOnePass(Where
23210 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  Info*, int*);.in
23220 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
23230 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65  eGetColumn(Parse
23240 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
23250 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76  int, int, u8);.v
23260 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
23270 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61  odeGetColumnOfTa
23280 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65  ble(Vdbe*, Table
23290 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
232a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
232b0 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73  xprCodeMove(Pars
232c0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
232d0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
232e0 45 78 70 72 43 61 63 68 65 53 74 6f 72 65 28 50  ExprCacheStore(P
232f0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
23300 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
23310 74 65 33 45 78 70 72 43 61 63 68 65 50 75 73 68  te3ExprCachePush
23320 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
23330 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50  qlite3ExprCacheP
23340 6f 70 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  op(Parse*);.void
23350 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
23360 65 52 65 6d 6f 76 65 28 50 61 72 73 65 2a 2c 20  eRemove(Parse*, 
23370 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
23380 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
23390 43 6c 65 61 72 28 50 61 72 73 65 2a 29 3b 0a 76  Clear(Parse*);.v
233a0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
233b0 61 63 68 65 41 66 66 69 6e 69 74 79 43 68 61 6e  acheAffinityChan
233c0 67 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  ge(Parse*, int, 
233d0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
233e0 65 33 45 78 70 72 43 6f 64 65 28 50 61 72 73 65  e3ExprCode(Parse
233f0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
23400 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23410 43 6f 64 65 46 61 63 74 6f 72 61 62 6c 65 28 50  CodeFactorable(P
23420 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
23430 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
23440 45 78 70 72 43 6f 64 65 41 74 49 6e 69 74 28 50  ExprCodeAtInit(P
23450 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
23460 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
23470 74 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28  te3ExprCodeTemp(
23480 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
23490 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
234a0 33 45 78 70 72 43 6f 64 65 54 61 72 67 65 74 28  3ExprCodeTarget(
234b0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
234c0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
234d0 33 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68  3ExprCodeAndCach
234e0 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
234f0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
23500 65 33 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69  e3ExprCodeExprLi
23510 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  st(Parse*, ExprL
23520 69 73 74 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  ist*, int, u8);.
23530 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
23540 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78 30  CEL_DUP      0x0
23550 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20  1  /* Deep, not 
23560 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a  shallow copies *
23570 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
23580 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20 30  _ECEL_FACTOR   0
23590 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f  x02  /* Factor o
235a0 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d  ut constant term
235b0 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  s */.void sqlite
235c0 33 45 78 70 72 49 66 54 72 75 65 28 50 61 72 73  3ExprIfTrue(Pars
235d0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
235e0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
235f0 65 33 45 78 70 72 49 66 46 61 6c 73 65 28 50 61  e3ExprIfFalse(Pa
23600 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
23610 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73  , int);.Table *s
23620 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28  qlite3FindTable(
23630 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
23640 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
23650 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
23660 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61  e3LocateTable(Pa
23670 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c  rse*,int isView,
23680 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
23690 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65  st char*);.Table
236a0 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54   *sqlite3LocateT
236b0 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c  ableItem(Parse*,
236c0 69 6e 74 20 69 73 56 69 65 77 2c 73 74 72 75 63  int isView,struc
236d0 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a  t SrcList_item *
236e0 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
236f0 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74  3FindIndex(sqlit
23700 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
23710 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
23720 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
23730 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28  kAndDeleteTable(
23740 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
23750 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
23760 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
23770 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69  DeleteIndex(sqli
23780 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
23790 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
237a0 74 65 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a  te3Vacuum(Parse*
237b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75  );.int sqlite3Ru
237c0 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20  nVacuum(char**, 
237d0 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68 61 72 20  sqlite3*);.char 
237e0 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d  *sqlite3NameFrom
237f0 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20  Token(sqlite3*, 
23800 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
23810 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28  ite3ExprCompare(
23820 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
23830 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
23840 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45  xprListCompare(E
23850 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  xprList*, ExprLi
23860 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  st*, int);.int s
23870 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65  qlite3ExprImplie
23880 73 45 78 70 72 28 45 78 70 72 2a 2c 20 45 78 70  sExpr(Expr*, Exp
23890 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
238a0 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
238b0 65 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65  eAggregates(Name
238c0 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
238d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
238e0 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74  prAnalyzeAggList
238f0 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78  (NameContext*,Ex
23900 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
23910 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65  lite3FunctionUse
23920 73 54 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20  sThisSrc(Expr*, 
23930 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20  SrcList*);.Vdbe 
23940 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28  *sqlite3GetVdbe(
23950 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
23960 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53 74 61  lite3PrngSaveSta
23970 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  te(void);.void s
23980 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72  qlite3PrngRestor
23990 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f  eState(void);.vo
239a0 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61  id sqlite3Rollba
239b0 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69  ckAll(sqlite3*,i
239c0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
239d0 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
239e0 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  a(Parse*, int);.
239f0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
23a00 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d  VerifyNamedSchem
23a10 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  a(Parse*, const 
23a20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64  char *zDb);.void
23a30 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61   sqlite3BeginTra
23a40 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsaction(Parse*,
23a50 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
23a60 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63  te3CommitTransac
23a70 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f  tion(Parse*);.vo
23a80 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61  id sqlite3Rollba
23a90 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  ckTransaction(Pa
23aa0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
23ab0 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72  te3Savepoint(Par
23ac0 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a  se*, int, Token*
23ad0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
23ae0 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73  loseSavepoints(s
23af0 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20  qlite3 *);.void 
23b00 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75 74 65  sqlite3LeaveMute
23b10 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28  xAndCloseZombie(
23b20 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
23b30 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
23b40 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74  tant(Expr*);.int
23b50 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
23b60 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78  nstantNotJoin(Ex
23b70 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
23b80 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f  3ExprIsConstantO
23b90 72 46 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 2c  rFunction(Expr*,
23ba0 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
23bb0 33 45 78 70 72 49 73 54 61 62 6c 65 43 6f 6e 73  3ExprIsTableCons
23bc0 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e 74 29 3b  tant(Expr*,int);
23bd0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
23be0 49 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c  IsInteger(Expr*,
23bf0 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
23c00 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c  te3ExprCanBeNull
23c10 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69  (const Expr*);.i
23c20 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4e 65  nt sqlite3ExprNe
23c30 65 64 73 4e 6f 41 66 66 69 6e 69 74 79 43 68 61  edsNoAffinityCha
23c40 6e 67 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c  nge(const Expr*,
23c50 20 63 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69   char);.int sqli
23c60 74 65 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74  te3IsRowid(const
23c70 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
23c80 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77  lite3GenerateRow
23c90 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 54 61  Delete(Parse*,Ta
23ca0 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e  ble*,Trigger*,in
23cb0 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38  t,int,int,i16,u8
23cc0 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71  ,u8,u8);.void sq
23cd0 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77  lite3GenerateRow
23ce0 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61 72 73  IndexDelete(Pars
23cf0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
23d00 20 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74   int, int*);.int
23d10 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
23d20 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a 2c  IndexKey(Parse*,
23d30 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e   Index*, int, in
23d40 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64  t, int, int*,Ind
23d50 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ex*,int);.void s
23d60 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61 72  qlite3ResolvePar
23d70 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73 65 2a  tIdxLabel(Parse*
23d80 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
23d90 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73 74  te3GenerateConst
23da0 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72 73  raintChecks(Pars
23db0 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69  e*,Table*,int*,i
23dc0 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a  nt,int,int,int,.
23dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23df0 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69       u8,u8,int,i
23e00 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  nt*);.void sqlit
23e10 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74  e3CompleteInsert
23e20 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  ion(Parse*,Table
23e30 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
23e40 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b  t*,int,int,int);
23e50 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e  .int sqlite3Open
23e60 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28  TableAndIndices(
23e70 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
23e80 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69  int, int, u8*, i
23e90 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64  nt*, int*);.void
23ea0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69   sqlite3BeginWri
23eb0 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61 72 73  teOperation(Pars
23ec0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
23ed0 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c 74 69  oid sqlite3Multi
23ee0 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b 0a 76  Write(Parse*);.v
23ef0 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79 41 62  oid sqlite3MayAb
23f00 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ort(Parse*);.voi
23f10 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e  d sqlite3HaltCon
23f20 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
23f30 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c  int, int, char*,
23f40 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73   i8, u8);.void s
23f50 71 6c 69 74 65 33 55 6e 69 71 75 65 43 6f 6e 73  qlite3UniqueCons
23f60 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  traint(Parse*, i
23f70 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  nt, Index*);.voi
23f80 64 20 73 71 6c 69 74 65 33 52 6f 77 69 64 43 6f  d sqlite3RowidCo
23f90 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
23fa0 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45   int, Table*);.E
23fb0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
23fc0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  Dup(sqlite3*,Exp
23fd0 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73  r*,int);.ExprLis
23fe0 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
23ff0 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45  stDup(sqlite3*,E
24000 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53  xprList*,int);.S
24010 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
24020 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  rcListDup(sqlite
24030 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29  3*,SrcList*,int)
24040 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65  ;.IdList *sqlite
24050 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74  3IdListDup(sqlit
24060 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65  e3*,IdList*);.Se
24070 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c  lect *sqlite3Sel
24080 65 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  ectDup(sqlite3*,
24090 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 23 69  Select*,int);.#i
240a0 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  f SELECTTRACE_EN
240b0 41 42 4c 45 44 0a 76 6f 69 64 20 73 71 6c 69 74  ABLED.void sqlit
240c0 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28  e3SelectSetName(
240d0 53 65 6c 65 63 74 2a 2c 63 6f 6e 73 74 20 63 68  Select*,const ch
240e0 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ar*);.#else.# de
240f0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65  fine sqlite3Sele
24100 63 74 53 65 74 4e 61 6d 65 28 41 2c 42 29 0a 23  ctSetName(A,B).#
24110 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
24120 65 33 46 75 6e 63 44 65 66 49 6e 73 65 72 74 28  e3FuncDefInsert(
24130 46 75 6e 63 44 65 66 48 61 73 68 2a 2c 20 46 75  FuncDefHash*, Fu
24140 6e 63 44 65 66 2a 29 3b 0a 46 75 6e 63 44 65 66  ncDef*);.FuncDef
24150 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e   *sqlite3FindFun
24160 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63  ction(sqlite3*,c
24170 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69  onst char*,int,i
24180 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20  nt,u8,u8);.void 
24190 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 42  sqlite3RegisterB
241a0 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28  uiltinFunctions(
241b0 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
241c0 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 44  sqlite3RegisterD
241d0 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73  ateTimeFunctions
241e0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
241f0 69 74 65 33 52 65 67 69 73 74 65 72 47 6c 6f 62  ite3RegisterGlob
24200 61 6c 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  alFunctions(void
24210 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  );.int sqlite3Sa
24220 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69  fetyCheckOk(sqli
24230 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
24240 65 33 53 61 66 65 74 79 43 68 65 63 6b 53 69 63  e3SafetyCheckSic
24250 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b  kOrOk(sqlite3*);
24260 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 68 61  .void sqlite3Cha
24270 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a  ngeCookie(Parse*
24280 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65  , int);..#if !de
24290 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
242a0 54 5f 56 49 45 57 29 20 26 26 20 21 64 65 66 69  T_VIEW) && !defi
242b0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
242c0 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20 73 71  TRIGGER).void sq
242d0 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69 7a 65  lite3Materialize
242e0 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54 61 62  View(Parse*, Tab
242f0 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  le*, Expr*, int)
24300 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ;.#endif..#ifnde
24310 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
24320 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73 71 6c  IGGER.  void sql
24330 69 74 65 33 42 65 67 69 6e 54 72 69 67 67 65 72  ite3BeginTrigger
24340 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
24350 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49  Token*,int,int,I
24360 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  dList*,SrcList*,
24370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24380 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
24390 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  *,int, int);.  v
243a0 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73  oid sqlite3Finis
243b0 68 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  hTrigger(Parse*,
243c0 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c 20 54   TriggerStep*, T
243d0 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73  oken*);.  void s
243e0 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
243f0 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  r(Parse*, SrcLis
24400 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  t*, int);.  void
24410 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
24420 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20 54  gerPtr(Parse*, T
24430 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72 69 67  rigger*);.  Trig
24440 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67  ger *sqlite3Trig
24450 67 65 72 73 45 78 69 73 74 28 50 61 72 73 65 20  gersExist(Parse 
24460 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
24470 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a  ExprList*, int *
24480 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67 67 65  pMask);.  Trigge
24490 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  r *sqlite3Trigge
244a0 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54  rList(Parse *, T
244b0 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20  able *);.  void 
244c0 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
244d0 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
244e0 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78  igger *, int, Ex
244f0 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61  prList*, int, Ta
24500 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20 20 20  ble *,.         
24510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24520 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74     int, int, int
24530 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
24540 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44  3CodeRowTriggerD
24550 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c 20 54  irect(Parse *, T
24560 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c 65 20  rigger *, Table 
24570 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
24580 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
24590 56 69 65 77 54 72 69 67 67 65 72 73 28 50 61 72  ViewTriggers(Par
245a0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
245b0 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73  r*, int, ExprLis
245c0 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  t*);.  void sqli
245d0 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
245e0 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 20 54  Step(sqlite3*, T
245f0 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20 20  riggerStep*);.  
24600 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
24610 69 74 65 33 54 72 69 67 67 65 72 53 65 6c 65 63  ite3TriggerSelec
24620 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 53  tStep(sqlite3*,S
24630 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69 67 67  elect*);.  Trigg
24640 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
24650 72 69 67 67 65 72 49 6e 73 65 72 74 53 74 65 70  riggerInsertStep
24660 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a  (sqlite3*,Token*
24670 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20  , 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 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a     Select*,u8);.
246b0 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
246c0 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70 64  qlite3TriggerUpd
246d0 61 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ateStep(sqlite3*
246e0 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
246f0 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20  *, Expr*, u8);. 
24700 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
24710 6c 69 74 65 33 54 72 69 67 67 65 72 44 65 6c 65  lite3TriggerDele
24720 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  teStep(sqlite3*,
24730 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a  Token*, Expr*);.
24740 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
24750 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
24760 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  te3*, Trigger*);
24770 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55  .  void sqlite3U
24780 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
24790 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69  igger(sqlite3*,i
247a0 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
247b0 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54 72  .  u32 sqlite3Tr
247c0 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72  iggerColmask(Par
247d0 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70  se*,Trigger*,Exp
247e0 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54  rList*,int,int,T
247f0 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65  able*,int);.# de
24800 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
24810 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70  eToplevel(p) ((p
24820 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28  )->pToplevel ? (
24830 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20  p)->pToplevel : 
24840 28 70 29 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  (p)).#else.# def
24850 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
24860 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45  ersExist(B,C,D,E
24870 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73  ,F) 0.# define s
24880 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
24890 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e  ger(A,B).# defin
248a0 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  e sqlite3DropTri
248b0 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64  ggerPtr(A,B).# d
248c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c  efine sqlite3Unl
248d0 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
248e0 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66  ger(A,B,C).# def
248f0 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52  ine sqlite3CodeR
24900 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c  owTrigger(A,B,C,
24910 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64  D,E,F,G,H,I).# d
24920 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
24930 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63  eRowTriggerDirec
24940 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23  t(A,B,C,D,E,F).#
24950 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
24960 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29  riggerList(X, Y)
24970 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   0.# define sqli
24980 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c  te3ParseToplevel
24990 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73  (p) p.# define s
249a0 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c  qlite3TriggerCol
249b0 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  mask(A,B,C,D,E,F
249c0 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e  ,G) 0.#endif..in
249d0 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70  t sqlite3JoinTyp
249e0 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
249f0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
24a00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
24a10 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28  reateForeignKey(
24a20 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
24a30 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c  *, Token*, ExprL
24a40 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ist*, int);.void
24a50 20 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72   sqlite3DeferFor
24a60 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20  eignKey(Parse*, 
24a70 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
24a80 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52  LITE_OMIT_AUTHOR
24a90 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73  IZATION.  void s
24aa0 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 50  qlite3AuthRead(P
24ab0 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65  arse*,Expr*,Sche
24ac0 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20  ma*,SrcList*);. 
24ad0 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68   int sqlite3Auth
24ae0 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74  Check(Parse*,int
24af0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
24b00 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
24b10 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
24b20 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
24b30 65 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20  extPush(Parse*, 
24b40 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f  AuthContext*, co
24b50 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
24b60 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
24b70 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e  ntextPop(AuthCon
24b80 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  text*);.  int sq
24b90 6c 69 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c  lite3AuthReadCol
24ba0 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
24bb0 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  har *, const cha
24bc0 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65  r *, int);.#else
24bd0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24be0 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c  3AuthRead(a,b,c,
24bf0 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  d).# define sqli
24c00 74 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62  te3AuthCheck(a,b
24c10 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54  ,c,d,e)    SQLIT
24c20 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71  E_OK.# define sq
24c30 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
24c40 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65  Push(a,b,c).# de
24c50 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
24c60 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28  ContextPop(a)  (
24c70 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69  (void)(a)).#endi
24c80 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74  f.void sqlite3At
24c90 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70  tach(Parse*, Exp
24ca0 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  r*, Expr*, Expr*
24cb0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
24cc0 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78  etach(Parse*, Ex
24cd0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
24ce0 65 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65  e3FixInit(DbFixe
24cf0 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c  r*, Parse*, int,
24d00 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
24d10 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  nst Token*);.int
24d20 20 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69   sqlite3FixSrcLi
24d30 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63  st(DbFixer*, Src
24d40 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
24d50 74 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46  te3FixSelect(DbF
24d60 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ixer*, Select*);
24d70 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45  .int sqlite3FixE
24d80 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78  xpr(DbFixer*, Ex
24d90 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
24da0 33 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46  3FixExprList(DbF
24db0 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  ixer*, ExprList*
24dc0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
24dd0 78 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46  xTriggerStep(DbF
24de0 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74  ixer*, TriggerSt
24df0 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ep*);.int sqlite
24e00 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72  3AtoF(const char
24e10 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e   *z, double*, in
24e20 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
24e30 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73  te3GetInt32(cons
24e40 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b  t char *, int*);
24e50 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69  .int sqlite3Atoi
24e60 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  (const char*);.i
24e70 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31 36 42  nt sqlite3Utf16B
24e80 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69  yteLen(const voi
24e90 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43  d *pData, int nC
24ea0 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  har);.int sqlite
24eb0 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e  3Utf8CharLen(con
24ec0 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20  st char *pData, 
24ed0 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20  int nByte);.u32 
24ee0 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64 28  sqlite3Utf8Read(
24ef0 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67  const u8**);.Log
24f00 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  Est sqlite3LogEs
24f10 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73  t(u64);.LogEst s
24f20 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28  qlite3LogEstAdd(
24f30 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a  LogEst,LogEst);.
24f40 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
24f50 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
24f60 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
24f70 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28  ogEstFromDouble(
24f80 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a  double);.#endif.
24f90 75 36 34 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  u64 sqlite3LogEs
24fa0 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a  tToInt(LogEst);.
24fb0 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20  ./*.** Routines 
24fc0 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74  to read and writ
24fd0 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  e variable-lengt
24fe0 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65  h integers.  The
24ff0 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  se used to.** be
25000 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79   defined locally
25010 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65  , but now we use
25020 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74   the varint rout
25030 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c  ines in the util
25040 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69  .c.** file..*/.i
25050 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  nt sqlite3PutVar
25060 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61  int(unsigned cha
25070 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c  r*, u64);.u8 sql
25080 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f  ite3GetVarint(co
25090 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
250a0 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20  r *, u64 *);.u8 
250b0 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
250c0 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  32(const unsigne
250d0 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29  d char *, u32 *)
250e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72  ;.int sqlite3Var
250f0 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a  intLen(u64 v);..
25100 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e  /*.** The common
25110 20 63 61 73 65 20 69 73 20 66 6f 72 20 61 20 76   case is for a v
25120 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69  arint to be a si
25130 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79  ngle byte.  They
25140 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61   following.** ma
25150 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20  cros handle the 
25160 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68  common case with
25170 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72 65 20  out a procedure 
25180 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63  call, but then c
25190 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65  all.** the proce
251a0 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20  dure for larger 
251b0 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66  varints..*/.#def
251c0 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28  ine getVarint32(
251d0 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28  A,B)  \.  (u8)((
251e0 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28  *(A)<(u8)0x80)?(
251f0 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31  (B)=(u32)*(A)),1
25200 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e  :sqlite3GetVarin
25210 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26  t32((A),(u32 *)&
25220 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75  (B))).#define pu
25230 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20  tVarint32(A,B)  
25240 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32 29 28  \.  (u8)(((u32)(
25250 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a  B)<(u32)0x80)?(*
25260 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68  (A)=(unsigned ch
25270 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71  ar)(B)),1:\.  sq
25280 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 28  lite3PutVarint((
25290 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65  A),(B))).#define
252a0 20 67 65 74 56 61 72 69 6e 74 20 20 20 20 73 71   getVarint    sq
252b0 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23  lite3GetVarint.#
252c0 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74  define putVarint
252d0 20 20 20 20 73 71 6c 69 74 65 33 50 75 74 56 61      sqlite3PutVa
252e0 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61  rint...const cha
252f0 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41  r *sqlite3IndexA
25300 66 66 69 6e 69 74 79 53 74 72 28 56 64 62 65 20  ffinityStr(Vdbe 
25310 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 76 6f 69  *, Index *);.voi
25320 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66  d sqlite3TableAf
25330 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54 61  finity(Vdbe*, Ta
25340 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72  ble*, int);.char
25350 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41   sqlite3CompareA
25360 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45  ffinity(Expr *pE
25370 78 70 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b  xpr, char aff2);
25380 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65  .int sqlite3Inde
25390 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72  xAffinityOk(Expr
253a0 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69 64   *pExpr, char id
253b0 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61  x_affinity);.cha
253c0 72 20 73 71 6c 69 74 65 33 45 78 70 72 41 66 66  r sqlite3ExprAff
253d0 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70  inity(Expr *pExp
253e0 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  r);.int sqlite3A
253f0 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72  toi64(const char
25400 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38  *, i64*, int, u8
25410 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65  );.int sqlite3De
25420 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73  cOrHexToI64(cons
25430 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a  t char*, i64*);.
25440 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
25450 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33  rWithMsg(sqlite3
25460 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
25470 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  ar*,...);.void s
25480 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69  qlite3Error(sqli
25490 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
254a0 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f  *sqlite3HexToBlo
254b0 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73  b(sqlite3*, cons
254c0 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e  t char *z, int n
254d0 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78  );.u8 sqlite3Hex
254e0 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e  ToInt(int h);.in
254f0 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74  t sqlite3TwoPart
25500 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f  Name(Parse *, To
25510 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20  ken *, Token *, 
25520 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20  Token **);..#if 
25530 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
25540 45 53 54 29 20 0a 63 6f 6e 73 74 20 63 68 61 72  EST) .const char
25550 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65   *sqlite3ErrName
25560 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63  (int);.#endif..c
25570 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
25580 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69  e3ErrStr(int);.i
25590 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63  nt sqlite3ReadSc
255a0 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72  hema(Parse *pPar
255b0 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  se);.CollSeq *sq
255c0 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71  lite3FindCollSeq
255d0 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63  (sqlite3*,u8 enc
255e0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  , const char*,in
255f0 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  t);.CollSeq *sql
25600 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65  ite3LocateCollSe
25610 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
25620 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d   const char*zNam
25630 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  e);.CollSeq *sql
25640 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28  ite3ExprCollSeq(
25650 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
25660 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70  xpr *pExpr);.Exp
25670 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64  r *sqlite3ExprAd
25680 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61  dCollateToken(Pa
25690 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
256a0 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
256b0 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  , int);.Expr *sq
256c0 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c  lite3ExprAddColl
256d0 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a  ateString(Parse*
256e0 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61  ,Expr*,const cha
256f0 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
25700 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74  e3ExprSkipCollat
25710 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  e(Expr*);.int sq
25720 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65  lite3CheckCollSe
25730 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53  q(Parse *, CollS
25740 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  eq *);.int sqlit
25750 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d  e3CheckObjectNam
25760 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74  e(Parse *, const
25770 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73   char *);.void s
25780 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61  qlite3VdbeSetCha
25790 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20  nges(sqlite3 *, 
257a0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
257b0 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69  3AddInt64(i64*,i
257c0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
257d0 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  SubInt64(i64*,i6
257e0 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  4);.int sqlite3M
257f0 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ulInt64(i64*,i64
25800 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62  );.int sqlite3Ab
25810 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66  sInt32(int);.#if
25820 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
25830 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64  E_8_3_NAMES.void
25840 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66   sqlite3FileSuff
25850 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ix3(const char*,
25860 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23   char*);.#else.#
25870 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46   define sqlite3F
25880 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a  ileSuffix3(X,Y).
25890 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65  #endif.u8 sqlite
258a0 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73  3GetBoolean(cons
258b0 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a  t char *z,u8);..
258c0 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69  const void *sqli
258d0 74 65 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c  te3ValueText(sql
258e0 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29  ite3_value*, u8)
258f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c  ;.int sqlite3Val
25900 75 65 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f  ueBytes(sqlite3_
25910 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69  value*, u8);.voi
25920 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65  d sqlite3ValueSe
25930 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c  tStr(sqlite3_val
25940 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  ue*, int, const 
25950 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20 20 20 20  void *,u8, .    
25960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25970 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64      void(*)(void
25980 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  *));.void sqlite
25990 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71  3ValueSetNull(sq
259a0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76  lite3_value*);.v
259b0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
259c0 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  Free(sqlite3_val
259d0 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61  ue*);.sqlite3_va
259e0 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75  lue *sqlite3Valu
259f0 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b  eNew(sqlite3 *);
25a00 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74  .char *sqlite3Ut
25a10 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a  f16to8(sqlite3 *
25a20 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
25a30 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
25a40 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70  ite3ValueFromExp
25a50 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70  r(sqlite3 *, Exp
25a60 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c  r *, u8, u8, sql
25a70 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a  ite3_value **);.
25a80 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
25a90 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73  eApplyAffinity(s
25aa0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20  qlite3_value *, 
25ab0 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66  u8, u8);.#ifndef
25ac0 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
25ad0 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73  TION.extern cons
25ae0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
25af0 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f  sqlite3OpcodePro
25b00 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20  perty[];.extern 
25b10 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
25b20 68 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72  har sqlite3Upper
25b30 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72  ToLower[];.exter
25b40 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
25b50 20 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79   char sqlite3Cty
25b60 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20  peMap[];.extern 
25b70 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69  const Token sqli
25b80 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a  te3IntTokens[];.
25b90 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53  extern SQLITE_WS
25ba0 44 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33  D struct Sqlite3
25bb0 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f  Config sqlite3Co
25bc0 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 53 51 4c  nfig;.extern SQL
25bd0 49 54 45 5f 57 53 44 20 46 75 6e 63 44 65 66 48  ITE_WSD FuncDefH
25be0 61 73 68 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  ash sqlite3Globa
25bf0 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e  lFunctions;.#ifn
25c00 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
25c10 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73  WSD.extern int s
25c20 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74  qlite3PendingByt
25c30 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66  e;.#endif.#endif
25c40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6f  .void sqlite3Roo
25c50 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69 74  tPageMoved(sqlit
25c60 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e3*, int, int, i
25c70 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25c80 33 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a 2c  3Reindex(Parse*,
25c90 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
25ca0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
25cb0 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  terFunctions(voi
25cc0 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
25cd0 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c 65  AlterRenameTable
25ce0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
25cf0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
25d00 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e 28  sqlite3GetToken(
25d10 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
25d20 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76  har *, int *);.v
25d30 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74 65  oid sqlite3Neste
25d40 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 63  dParse(Parse*, c
25d50 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
25d60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
25d70 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
25d80 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a 29  ements(sqlite3*)
25d90 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64  ;.int sqlite3Cod
25da0 65 53 75 62 73 65 6c 65 63 74 28 50 61 72 73 65  eSubselect(Parse
25db0 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c   *, Expr *, int,
25dc0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
25dd0 74 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61  te3SelectPrep(Pa
25de0 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e  rse*, Select*, N
25df0 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e  ameContext*);.in
25e00 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70  t sqlite3MatchSp
25e10 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61  anName(const cha
25e20 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
25e30 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
25e40 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
25e50 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78  sqlite3ResolveEx
25e60 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74  prNames(NameCont
25e70 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ext*, Expr*);.vo
25e80 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
25e90 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72  eSelectNames(Par
25ea0 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61  se*, Select*, Na
25eb0 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69  meContext*);.voi
25ec0 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
25ed0 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61  SelfReference(Pa
25ee0 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c  rse*,Table*,int,
25ef0 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29  Expr*,ExprList*)
25f00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73  ;.int sqlite3Res
25f10 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79  olveOrderGroupBy
25f20 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
25f30 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e  , ExprList*, con
25f40 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
25f50 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66  sqlite3ColumnDef
25f60 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62  ault(Vdbe *, Tab
25f70 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  le *, int, int);
25f80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
25f90 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d  erFinishAddColum
25fa0 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e  n(Parse *, Token
25fb0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
25fc0 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f  3AlterBeginAddCo
25fd0 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72  lumn(Parse *, Sr
25fe0 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65  cList *);.CollSe
25ff0 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c  q *sqlite3GetCol
26000 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c  lSeq(Parse*, u8,
26010 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73   CollSeq *, cons
26020 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73  t char*);.char s
26030 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54 79  qlite3AffinityTy
26040 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  pe(const char*, 
26050 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
26060 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a  e3Analyze(Parse*
26070 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
26080 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
26090 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28  vokeBusyHandler(
260a0 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69  BusyHandler*);.i
260b0 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62  nt sqlite3FindDb
260c0 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
260d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
260e0 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65  indDbName(sqlite
260f0 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
26100 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
26110 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69  nalysisLoad(sqli
26120 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76  te3*,int iDB);.v
26130 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
26140 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71  eIndexSamples(sq
26150 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a  lite3*,Index*);.
26160 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 61  void sqlite3Defa
26170 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a  ultRowEst(Index*
26180 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
26190 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74  egisterLikeFunct
261a0 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69  ions(sqlite3*, i
261b0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
261c0 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73  IsLikeFunction(s
261d0 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
261e0 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  t*,char*);.void 
261f0 73 71 6c 69 74 65 33 4d 69 6e 69 6d 75 6d 46 69  sqlite3MinimumFi
26200 6c 65 46 6f 72 6d 61 74 28 50 61 72 73 65 2a 2c  leFormat(Parse*,
26210 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
26220 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c   sqlite3SchemaCl
26230 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68  ear(void *);.Sch
26240 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65  ema *sqlite3Sche
26250 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c  maGet(sqlite3 *,
26260 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73   Btree *);.int s
26270 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e  qlite3SchemaToIn
26280 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  dex(sqlite3 *db,
26290 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49   Schema *);.KeyI
262a0 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
262b0 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33  nfoAlloc(sqlite3
262c0 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,int,int);.void
262d0 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55   sqlite3KeyInfoU
262e0 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  nref(KeyInfo*);.
262f0 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
26300 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e  KeyInfoRef(KeyIn
26310 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  fo*);.KeyInfo *s
26320 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49  qlite3KeyInfoOfI
26330 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64  ndex(Parse*, Ind
26340 65 78 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  ex*);.#ifdef SQL
26350 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71  ITE_DEBUG.int sq
26360 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72  lite3KeyInfoIsWr
26370 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a  iteable(KeyInfo*
26380 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
26390 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28  lite3CreateFunc(
263a0 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
263b0 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e   char *, int, in
263c0 74 2c 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76 6f  t, void *, .  vo
263d0 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
263e0 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
263f0 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20  te3_value **),. 
26400 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
26410 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
26420 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
26430 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74  , void (*)(sqlit
26440 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20  e3_context*),.  
26450 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
26460 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 69  pDestructor.);.i
26470 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69  nt sqlite3ApiExi
26480 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69  t(sqlite3 *db, i
26490 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
264a0 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65  OpenTempDatabase
264b0 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64  (Parse *);..void
264c0 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
264d0 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20  Init(StrAccum*, 
264e0 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  char*, int, int)
264f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
26500 72 41 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72  rAccumAppend(Str
26510 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61  Accum*,const cha
26520 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  r*,int);.void sq
26530 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70  lite3StrAccumApp
26540 65 6e 64 41 6c 6c 28 53 74 72 41 63 63 75 6d 2a  endAll(StrAccum*
26550 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
26560 6f 69 64 20 73 71 6c 69 74 65 33 41 70 70 65 6e  oid sqlite3Appen
26570 64 43 68 61 72 28 53 74 72 41 63 63 75 6d 2a 2c  dChar(StrAccum*,
26580 69 6e 74 2c 63 68 61 72 29 3b 0a 63 68 61 72 20  int,char);.char 
26590 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d  *sqlite3StrAccum
265a0 46 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a  Finish(StrAccum*
265b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
265c0 74 72 41 63 63 75 6d 52 65 73 65 74 28 53 74 72  trAccumReset(Str
265d0 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71  Accum*);.void sq
265e0 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73 74 49  lite3SelectDestI
265f0 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c  nit(SelectDest*,
26600 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a  int,int);.Expr *
26610 73 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c  sqlite3CreateCol
26620 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20  umnExpr(sqlite3 
26630 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e  *, SrcList *, in
26640 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73  t, int);..void s
26650 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73 74  qlite3BackupRest
26660 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  art(sqlite3_back
26670 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  up *);.void sqli
26680 74 65 33 42 61 63 6b 75 70 55 70 64 61 74 65 28  te3BackupUpdate(
26690 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a  sqlite3_backup *
266a0 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38  , Pgno, const u8
266b0 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c   *);..#ifdef SQL
266c0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
266d0 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73  _OR_STAT4.void s
266e0 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e  qlite3AnalyzeFun
266f0 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e  ctions(void);.in
26700 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72  t sqlite3Stat4Pr
26710 6f 62 65 53 65 74 56 61 6c 75 65 28 50 61 72 73  obeSetValue(Pars
26720 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b  e*,Index*,Unpack
26730 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a  edRecord**,Expr*
26740 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69  ,u8,int,int*);.i
26750 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 56  nt sqlite3Stat4V
26760 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72  alueFromExpr(Par
26770 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20  se*, Expr*, u8, 
26780 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
26790 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
267a0 61 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70  at4ProbeFree(Unp
267b0 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69  ackedRecord*);.i
267c0 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 43  nt sqlite3Stat4C
267d0 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20  olumn(sqlite3*, 
267e0 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
267f0 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76  , int, sqlite3_v
26800 61 6c 75 65 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a  alue**);.#endif.
26810 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  ./*.** The inter
26820 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f  face to the LEMO
26830 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73  N-generated pars
26840 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69  er.*/.void *sqli
26850 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76  te3ParserAlloc(v
26860 6f 69 64 2a 28 2a 29 28 75 36 34 29 29 3b 0a 76  oid*(*)(u64));.v
26870 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
26880 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69  rFree(void*, voi
26890 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f  d(*)(void*));.vo
268a0 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
268b0 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b  (void*, int, Tok
268c0 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69 66  en, Parse*);.#if
268d0 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54  def YYTRACKMAXST
268e0 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73  ACKDEPTH.  int s
268f0 71 6c 69 74 65 33 50 61 72 73 65 72 53 74 61 63  qlite3ParserStac
26900 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65  kPeak(void*);.#e
26910 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74  ndif..void sqlit
26920 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73  e3AutoLoadExtens
26930 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
26940 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
26950 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49  MIT_LOAD_EXTENSI
26960 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ON.  void sqlite
26970 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
26980 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73  (sqlite3*);.#els
26990 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
269a0 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e  e3CloseExtension
269b0 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  s(X).#endif..#if
269c0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
269d0 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20  _SHARED_CACHE.  
269e0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
269f0 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69  eLock(Parse *, i
26a00 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e  nt, int, u8, con
26a10 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73  st char *);.#els
26a20 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
26a30 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77  te3TableLock(v,w
26a40 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a  ,x,y,z).#endif..
26a50 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
26a60 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ST.  int sqlite3
26a70 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64  Utf8To8(unsigned
26a80 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
26a90 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
26aa0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
26ab0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
26ac0 65 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23  e3VtabClear(Y).#
26ad0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
26ae0 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51  VtabSync(X,Y) SQ
26af0 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e  LITE_OK.#  defin
26b00 65 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c  e sqlite3VtabRol
26b10 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69  lback(X).#  defi
26b20 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f  ne sqlite3VtabCo
26b30 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e  mmit(X).#  defin
26b40 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53  e sqlite3VtabInS
26b50 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65 66  ync(db) 0.#  def
26b60 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c  ine sqlite3VtabL
26b70 6f 63 6b 28 58 29 20 0a 23 20 20 64 65 66 69 6e  ock(X) .#  defin
26b80 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  e sqlite3VtabUnl
26b90 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ock(X).#  define
26ba0 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
26bb0 63 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66  ckList(X).#  def
26bc0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53  ine sqlite3VtabS
26bd0 61 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a  avepoint(X, Y, Z
26be0 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64  ) SQLITE_OK.#  d
26bf0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74  efine sqlite3Get
26c00 56 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56  VTable(X,Y)  ((V
26c10 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a  Table*)0).#else.
26c20 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
26c30 74 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33  tabClear(sqlite3
26c40 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20   *db, Table*);. 
26c50 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
26c60 61 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c  abDisconnect(sql
26c70 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20  ite3 *db, Table 
26c80 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  *p);.   int sqli
26c90 74 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69  te3VtabSync(sqli
26ca0 74 65 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b  te3 *db, Vdbe*);
26cb0 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
26cc0 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69  tabRollback(sqli
26cd0 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74  te3 *db);.   int
26ce0 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d   sqlite3VtabComm
26cf0 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  it(sqlite3 *db);
26d00 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
26d10 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20  VtabLock(VTable 
26d20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
26d30 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54  te3VtabUnlock(VT
26d40 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64  able *);.   void
26d50 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
26d60 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29  ckList(sqlite3*)
26d70 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
26d80 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71  VtabSavepoint(sq
26d90 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e  lite3 *, int, in
26da0 74 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  t);.   void sqli
26db0 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
26dc0 6d 73 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74  msg(Vdbe*, sqlit
26dd0 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54  e3_vtab*);.   VT
26de0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74  able *sqlite3Get
26df0 56 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  VTable(sqlite3*,
26e00 20 54 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66   Table*);.#  def
26e10 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49  ine sqlite3VtabI
26e20 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d  nSync(db) ((db)-
26e30 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64  >nVTrans>0 && (d
26e40 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a  b)->aVTrans==0).
26e50 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
26e60 74 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61  te3VtabMakeWrita
26e70 62 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  ble(Parse*,Table
26e80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26e90 56 74 61 62 42 65 67 69 6e 50 61 72 73 65 28 50  VtabBeginParse(P
26ea0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
26eb0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69  oken*, Token*, i
26ec0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
26ed0 33 56 74 61 62 46 69 6e 69 73 68 50 61 72 73 65  3VtabFinishParse
26ee0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
26ef0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
26f00 61 62 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a  abArgInit(Parse*
26f10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
26f20 74 61 62 41 72 67 45 78 74 65 6e 64 28 50 61 72  tabArgExtend(Par
26f30 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  se*, Token*);.in
26f40 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
26f50 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a  lCreate(sqlite3*
26f60 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
26f70 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69  r *, char **);.i
26f80 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
26f90 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a  llConnect(Parse*
26fa0 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73  , Table*);.int s
26fb0 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65  qlite3VtabCallDe
26fc0 73 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20  stroy(sqlite3*, 
26fd0 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  int, const char 
26fe0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
26ff0 74 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33  tabBegin(sqlite3
27000 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46   *, VTable *);.F
27010 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56  uncDef *sqlite3V
27020 74 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74  tabOverloadFunct
27030 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75  ion(sqlite3 *,Fu
27040 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67  ncDef*, int nArg
27050 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
27060 71 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e  qlite3InvalidFun
27070 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f  ction(sqlite3_co
27080 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
27090 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c  e3_value**);.sql
270a0 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74  ite3_int64 sqlit
270b0 65 33 53 74 6d 74 43 75 72 72 65 6e 74 54 69 6d  e3StmtCurrentTim
270c0 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  e(sqlite3_contex
270d0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
270e0 56 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64  VdbeParameterInd
270f0 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20  ex(Vdbe*, const 
27100 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  char*, int);.int
27110 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72   sqlite3Transfer
27120 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33  Bindings(sqlite3
27130 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33  _stmt *, sqlite3
27140 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73  _stmt *);.void s
27150 71 6c 69 74 65 33 50 61 72 73 65 72 52 65 73 65  qlite3ParserRese
27160 74 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73  t(Parse*);.int s
27170 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28  qlite3Reprepare(
27180 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Vdbe*);.void sql
27190 69 74 65 33 45 78 70 72 4c 69 73 74 43 68 65 63  ite3ExprListChec
271a0 6b 4c 65 6e 67 74 68 28 50 61 72 73 65 2a 2c 20  kLength(Parse*, 
271b0 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74  ExprList*, const
271c0 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71   char*);.CollSeq
271d0 20 2a 73 71 6c 69 74 65 33 42 69 6e 61 72 79 43   *sqlite3BinaryC
271e0 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61  ompareCollSeq(Pa
271f0 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45  rse *, Expr *, E
27200 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  xpr *);.int sqli
27210 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28  te3TempInMemory(
27220 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a 29 3b  const sqlite3*);
27230 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
27240 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e  ite3JournalModen
27250 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65  ame(int);.#ifnde
27260 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
27270 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43  L.  int sqlite3C
27280 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65  heckpoint(sqlite
27290 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  3*, int, int, in
272a0 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74  t*, int*);.  int
272b0 20 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75   sqlite3WalDefau
272c0 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c  ltHook(void*,sql
272d0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
272e0 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23  *,int);.#endif.#
272f0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
27300 49 54 5f 43 54 45 0a 20 20 57 69 74 68 20 2a 73  IT_CTE.  With *s
27310 71 6c 69 74 65 33 57 69 74 68 41 64 64 28 50 61  qlite3WithAdd(Pa
27320 72 73 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e  rse*,With*,Token
27330 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65  *,ExprList*,Sele
27340 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ct*);.  void sql
27350 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 73  ite3WithDelete(s
27360 71 6c 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a  qlite3*,With*);.
27370 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69    void sqlite3Wi
27380 74 68 50 75 73 68 28 50 61 72 73 65 2a 2c 20 57  thPush(Parse*, W
27390 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65  ith*, u8);.#else
273a0 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
273b0 57 69 74 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a  WithPush(x,y,z).
273c0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57  #define sqlite3W
273d0 69 74 68 44 65 6c 65 74 65 28 78 2c 79 29 0a 23  ithDelete(x,y).#
273e0 65 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72  endif../* Declar
273f0 61 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74  ations for funct
27400 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20  ions in fkey.c. 
27410 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65  All of these are
27420 20 72 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20   replaced by.** 
27430 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20  no-op macros if 
27440 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
27450 20 69 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20   is defined. In 
27460 74 68 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72  this case no for
27470 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63  eign.** key func
27480 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61  tionality is ava
27490 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f  ilable. If OMIT_
274a0 54 52 49 47 47 45 52 20 69 73 20 64 65 66 69 6e  TRIGGER is defin
274b0 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46  ed but.** OMIT_F
274c0 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f  OREIGN_KEY is no
274d0 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20  t, only some of 
274e0 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  the functions ar
274f0 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a  e no-oped. In.**
27500 20 74 68 69 73 20 63 61 73 65 20 66 6f 72 65 69   this case forei
27510 67 6e 20 6b 65 79 73 20 61 72 65 20 70 61 72 73  gn keys are pars
27520 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72  ed, but no other
27530 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69   functionality i
27540 73 20 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28  s .** provided (
27550 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46  enforcement of F
27560 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65  K constraints re
27570 71 75 69 72 65 73 20 74 68 65 20 74 72 69 67 67  quires the trigg
27580 65 72 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e  ers sub-system).
27590 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
275a0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52  (SQLITE_OMIT_FOR
275b0 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65  EIGN_KEY) && !de
275c0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
275d0 54 5f 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69  T_TRIGGER).  voi
275e0 64 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b  d sqlite3FkCheck
275f0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
27600 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
27610 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
27620 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65  lite3FkDropTable
27630 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
27640 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76   *, Table*);.  v
27650 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74  oid sqlite3FkAct
27660 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62  ions(Parse*, Tab
27670 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  le*, ExprList*, 
27680 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  int, int*, int);
27690 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b  .  int sqlite3Fk
276a0 52 65 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c  Required(Parse*,
276b0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69   Table*, int*, i
276c0 6e 74 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74  nt);.  u32 sqlit
276d0 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73  e3FkOldmask(Pars
276e0 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46  e*, Table*);.  F
276f0 4b 65 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65  Key *sqlite3FkRe
27700 66 65 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a  ferences(Table *
27710 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
27720 6e 65 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69  ne sqlite3FkActi
27730 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29  ons(a,b,c,d,e,f)
27740 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
27750 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c  e3FkCheck(a,b,c,
27760 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65  d,e,f).  #define
27770 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61   sqlite3FkDropTa
27780 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65  ble(a,b,c).  #de
27790 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c  fine sqlite3FkOl
277a0 64 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20  dmask(a,b)      
277b0 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73     0.  #define s
277c0 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64  qlite3FkRequired
277d0 28 61 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a 23  (a,b,c,d)    0.#
277e0 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
277f0 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
27800 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c  N_KEY.  void sql
27810 69 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c  ite3FkDelete(sql
27820 69 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b  ite3 *, Table*);
27830 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b  .  int sqlite3Fk
27840 4c 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72 73  LocateIndex(Pars
27850 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c  e*,Table*,FKey*,
27860 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a  Index**,int**);.
27870 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
27880 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28  sqlite3FkDelete(
27890 61 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73  a,b).  #define s
278a0 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e  qlite3FkLocateIn
278b0 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23  dex(a,b,c,d,e).#
278c0 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76  endif.../*.** Av
278d0 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e  ailable fault in
278e0 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64  jectors.  Should
278f0 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67   be numbered beg
27900 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a  inning with 0..*
27910 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
27920 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d  _FAULTINJECTOR_M
27930 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66  ALLOC     0.#def
27940 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54  ine SQLITE_FAULT
27950 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20  INJECTOR_COUNT  
27960 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65      1../*.** The
27970 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68   interface to th
27980 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e  e code in fault.
27990 63 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74  c used for ident
279a0 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a  ifying "benign".
279b0 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72  ** malloc failur
279c0 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79  es. This is only
279d0 20 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49   present if SQLI
279e0 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
279f0 54 45 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64  TEST.** is not d
27a00 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64  efined..*/.#ifnd
27a10 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
27a20 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f  UILTIN_TEST.  vo
27a30 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42  id sqlite3BeginB
27a40 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64  enignMalloc(void
27a50 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
27a60 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
27a70 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20  (void);.#else.  
27a80 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42  #define sqlite3B
27a90 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
27aa0 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  ().  #define sql
27ab0 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
27ac0 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  loc().#endif../*
27ad0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75  .** Allowed retu
27ae0 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73  rn values from s
27af0 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65  qlite3FindInInde
27b00 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  x().*/.#define I
27b10 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20  N_INDEX_ROWID   
27b20 20 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72       1   /* Sear
27b30 63 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  ch the rowid of 
27b40 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  the table */.#de
27b50 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50  fine IN_INDEX_EP
27b60 48 20 20 20 20 20 20 20 20 20 20 32 20 20 20 2f  H          2   /
27b70 2a 20 53 65 61 72 63 68 20 61 6e 20 65 70 68 65  * Search an ephe
27b80 6d 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a  meral b-tree */.
27b90 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
27ba0 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20  _INDEX_ASC    3 
27bb0 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e    /* Existing in
27bc0 64 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f  dex ASCENDING */
27bd0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
27be0 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34  X_INDEX_DESC   4
27bf0 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69     /* Existing i
27c00 6e 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20  ndex DESCENDING 
27c10 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
27c20 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20  DEX_NOOP        
27c30 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65   5   /* No table
27c40 20 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20   available. Use 
27c50 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f  comparisons */./
27c60 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61  *.** Allowed fla
27c70 67 73 20 66 6f 72 20 74 68 65 20 33 72 64 20 70  gs for the 3rd p
27c80 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69  arameter to sqli
27c90 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29  te3FindInIndex()
27ca0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  ..*/.#define IN_
27cb0 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20  INDEX_NOOP_OK   
27cc0 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20    0x0001  /* OK 
27cd0 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44  to return IN_IND
27ce0 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69  EX_NOOP */.#defi
27cf0 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42  ne IN_INDEX_MEMB
27d00 45 52 53 48 49 50 20 20 30 78 30 30 30 32 20 20  ERSHIP  0x0002  
27d10 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75  /* IN operator u
27d20 73 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68  sed for membersh
27d30 69 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69  ip test */.#defi
27d40 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50  ne IN_INDEX_LOOP
27d50 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20          0x0004  
27d60 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75  /* IN operator u
27d70 73 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f  sed as a loop */
27d80 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
27d90 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c  InIndex(Parse *,
27da0 20 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e   Expr *, u32, in
27db0 74 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  t*);..#ifdef SQL
27dc0 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49  ITE_ENABLE_ATOMI
27dd0 43 5f 57 52 49 54 45 0a 20 20 69 6e 74 20 73 71  C_WRITE.  int sq
27de0 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e  lite3JournalOpen
27df0 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20  (sqlite3_vfs *, 
27e00 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71  const char *, sq
27e10 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e  lite3_file *, in
27e20 74 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  t, int);.  int s
27e30 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a  qlite3JournalSiz
27e40 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29  e(sqlite3_vfs *)
27e50 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  ;.  int sqlite3J
27e60 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c  ournalCreate(sql
27e70 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 20 20  ite3_file *);.  
27e80 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
27e90 61 6c 45 78 69 73 74 73 28 73 71 6c 69 74 65 33  alExists(sqlite3
27ea0 5f 66 69 6c 65 20 2a 70 29 3b 0a 23 65 6c 73 65  _file *p);.#else
27eb0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
27ec0 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 70 56  e3JournalSize(pV
27ed0 66 73 29 20 28 28 70 56 66 73 29 2d 3e 73 7a 4f  fs) ((pVfs)->szO
27ee0 73 46 69 6c 65 29 0a 20 20 23 64 65 66 69 6e 65  sFile).  #define
27ef0 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45   sqlite3JournalE
27f00 78 69 73 74 73 28 70 29 20 31 0a 23 65 6e 64 69  xists(p) 1.#endi
27f10 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  f..void sqlite3M
27f20 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71  emJournalOpen(sq
27f30 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 69  lite3_file *);.i
27f40 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75  nt sqlite3MemJou
27f50 72 6e 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b 0a  rnalSize(void);.
27f60 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4d 65 6d  int sqlite3IsMem
27f70 4a 6f 75 72 6e 61 6c 28 73 71 6c 69 74 65 33 5f  Journal(sqlite3_
27f80 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73  file *);..void s
27f90 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69  qlite3ExprSetHei
27fa0 67 68 74 41 6e 64 46 6c 61 67 73 28 50 61 72 73  ghtAndFlags(Pars
27fb0 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
27fc0 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f  *p);.#if SQLITE_
27fd0 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30  MAX_EXPR_DEPTH>0
27fe0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65  .  int sqlite3Se
27ff0 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28 53  lectExprHeight(S
28000 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20  elect *);.  int 
28010 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
28020 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69  Height(Parse*, i
28030 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  nt);.#else.  #de
28040 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65  fine sqlite3Sele
28050 63 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20  ctExprHeight(x) 
28060 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  0.  #define sqli
28070 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67  te3ExprCheckHeig
28080 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a  ht(x,y).#endif..
28090 75 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62  u32 sqlite3Get4b
280a0 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a  yte(const u8*);.
280b0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34  void sqlite3Put4
280c0 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a  byte(u8*, u32);.
280d0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
280e0 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
280f0 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  IFY.  void sqlit
28100 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63  e3ConnectionBloc
28110 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73  ked(sqlite3 *, s
28120 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69  qlite3 *);.  voi
28130 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
28140 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69  ionUnlocked(sqli
28150 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64  te3 *db);.  void
28160 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
28170 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33  onClosed(sqlite3
28180 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23   *db);.#else.  #
28190 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
281a0 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28  nnectionBlocked(
281b0 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73  x,y).  #define s
281c0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
281d0 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64  Unlocked(x).  #d
281e0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
281f0 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29  nectionClosed(x)
28200 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
28210 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76  SQLITE_DEBUG.  v
28220 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
28230 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68  rTrace(FILE*, ch
28240 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ar *);.#endif../
28250 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
28260 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43  TE_ENABLE IOTRAC
28270 45 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68  E exists then th
28280 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  e global variabl
28290 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72  e.** sqlite3IoTr
282a0 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72  ace is a pointer
282b0 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b   to a printf-lik
282c0 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74  e routine used t
282d0 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74  o.** print I/O t
282e0 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e  racing messages.
282f0 20 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49   .*/.#ifdef SQLI
28300 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43  TE_ENABLE_IOTRAC
28310 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41  E.# define IOTRA
28320 43 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74  CE(A)  if( sqlit
28330 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c  e3IoTrace ){ sql
28340 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d  ite3IoTrace A; }
28350 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56  .  void sqlite3V
28360 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64  dbeIOTraceSql(Vd
28370 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49  be*);.SQLITE_API
28380 20 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76   SQLITE_EXTERN v
28390 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43  oid (SQLITE_CDEC
283a0 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63  L *sqlite3IoTrac
283b0 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  e)(const char*,.
283c0 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  ..);.#else.# def
283d0 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23  ine IOTRACE(A).#
283e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
283f0 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29  dbeIOTraceSql(X)
28400 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
28410 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72  hese routines ar
28420 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20  e available for 
28430 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67  the mem2.c debug
28440 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ging memory allo
28450 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  cator.** only.  
28460 54 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f  They are used to
28470 20 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66   verify that dif
28480 66 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f  ferent "types" o
28490 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f  f memory.** allo
284a0 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70  cations are prop
284b0 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20  erly tracked by 
284c0 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a  the system..**.*
284d0 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
284e0 67 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20  gSetType() sets 
284f0 74 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e  the "type" of an
28500 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f   allocation to o
28510 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d  ne of.** the MEM
28520 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65  TYPE_* macros de
28530 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68  fined below.  Th
28540 65 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61  e type must be a
28550 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a   bitmask with.**
28560 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65   a single bit se
28570 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  t..**.** sqlite3
28580 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
28590 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
285a0 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74  f any of the bit
285b0 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
285c0 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
285d0 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
285e0 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
285f0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
28600 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69  tType()..** sqli
28610 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
28620 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64  pe() is intended
28630 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20   for use inside 
28640 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
28650 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  nts..**.** sqlit
28660 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
28670 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  () returns true 
28680 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62  if none of the b
28690 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e  its in its secon
286a0 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61  d.** argument ma
286b0 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74  tch the type set
286c0 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73   by the previous
286d0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
286e0 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a  SetType()..**.**
286f0 20 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73   Perhaps the mos
28700 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e  t important poin
28710 74 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65  t is the differe
28720 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54  nce between MEMT
28730 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20  YPE_HEAP.** and 
28740 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
28750 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61  E.  If an alloca
28760 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f  tion is MEMTYPE_
28770 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20  LOOKASIDE, that 
28780 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68  means.** it migh
28790 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f  t have been allo
287a0 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  cated by lookasi
287b0 64 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61  de, except the a
287c0 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a  llocation was.**
287d0 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f   too large or lo
287e0 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65  okaside was alre
287f0 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73  ady full.  It is
28800 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65   important to ve
28810 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c  rify.** that all
28820 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69  ocations that mi
28830 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61  ght have been sa
28840 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61  tisfied by looka
28850 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20  side are not.** 
28860 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e  passed back to n
28870 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
28880 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41  e() routines.  A
28890 73 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74  sserts such as t
288a0 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62  he.** example ab
288b0 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f  ove are placed o
288c0 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  n the non-lookas
288d0 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
288e0 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  nes to verify.**
288f0 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74   this constraint
28900 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20  . .**.** All of 
28910 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f  this is no-op fo
28920 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62  r a production b
28930 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63  uild.  It only c
28940 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61  omes into.** pla
28950 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54  y when the SQLIT
28960 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69  E_MEMDEBUG compi
28970 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69  le-time option i
28980 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  s used..*/.#ifde
28990 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  f SQLITE_MEMDEBU
289a0 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  G.  void sqlite3
289b0 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
289c0 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74  void*,u8);.  int
289d0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
289e0 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  HasType(void*,u8
289f0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
28a00 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76  MemdebugNoType(v
28a10 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a  oid*,u8);.#else.
28a20 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28a30 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
28a40 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a  X,Y)  /* no-op *
28a50 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  /.# define sqlit
28a60 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
28a70 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69  e(X,Y)  1.# defi
28a80 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
28a90 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20  ugNoType(X,Y)   
28aa0 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65  1.#endif.#define
28ab0 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20   MEMTYPE_HEAP   
28ac0 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e      0x01  /* Gen
28ad0 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61  eral heap alloca
28ae0 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
28af0 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
28b00 44 45 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61  DE  0x02  /* Hea
28b10 70 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76  p that might hav
28b20 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65  e been lookaside
28b30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54   */.#define MEMT
28b40 59 50 45 5f 53 43 52 41 54 43 48 20 20 20 20 30  YPE_SCRATCH    0
28b50 78 30 34 20 20 2f 2a 20 53 63 72 61 74 63 68 20  x04  /* Scratch 
28b60 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23  allocations */.#
28b70 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50  define MEMTYPE_P
28b80 43 41 43 48 45 20 20 20 20 20 30 78 30 38 20 20  CACHE     0x08  
28b90 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 61 6c  /* Page cache al
28ba0 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a  locations */../*
28bb0 0a 2a 2a 20 54 68 72 65 61 64 69 6e 67 20 69 6e  .** Threading in
28bc0 74 65 72 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53  terface.*/.#if S
28bd0 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
28be0 5f 54 48 52 45 41 44 53 3e 30 0a 69 6e 74 20 73  _THREADS>0.int s
28bf0 71 6c 69 74 65 33 54 68 72 65 61 64 43 72 65 61  qlite3ThreadCrea
28c00 74 65 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a  te(SQLiteThread*
28c10 2a 2c 76 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a  *,void*(*)(void*
28c20 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71  ),void*);.int sq
28c30 6c 69 74 65 33 54 68 72 65 61 64 4a 6f 69 6e 28  lite3ThreadJoin(
28c40 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2c 20 76  SQLiteThread*, v
28c50 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  oid**);.#endif..
28c60 23 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49 54  #endif /* _SQLIT
28c70 45 49 4e 54 5f 48 5f 20 2a 2f 0a                 EINT_H_ */.