/ Hex Artifact Content
Login

Artifact 0c5881204cfbba739fa5c859a6acb3219a70f42e:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 49 6e  INT_H_../*.** In
01e0: 63 6c 75 64 65 20 74 68 65 20 68 65 61 64 65 72  clude the header
01f0: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 63 75   file used to cu
0200: 73 74 6f 6d 69 7a 65 20 74 68 65 20 63 6f 6d 70  stomize the comp
0210: 69 6c 65 72 20 6f 70 74 69 6f 6e 73 20 66 6f 72  iler options for
0220: 20 4d 53 56 43 2e 0a 2a 2a 20 54 68 69 73 20 73   MSVC..** This s
0230: 68 6f 75 6c 64 20 62 65 20 64 6f 6e 65 20 66 69  hould be done fi
0240: 72 73 74 20 73 6f 20 74 68 61 74 20 69 74 20 63  rst so that it c
0250: 61 6e 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20  an successfully 
0260: 70 72 65 76 65 6e 74 20 73 70 75 72 69 6f 75 73  prevent spurious
0270: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  .** compiler war
0280: 6e 69 6e 67 73 20 64 75 65 20 74 6f 20 73 75 62  nings due to sub
0290: 73 65 71 75 65 6e 74 20 63 6f 6e 74 65 6e 74 20  sequent content 
02a0: 69 6e 20 74 68 69 73 20 66 69 6c 65 20 61 6e 64  in this file and
02b0: 20 6f 74 68 65 72 20 66 69 6c 65 73 0a 2a 2a 20   other files.** 
02c0: 74 68 61 74 20 61 72 65 20 69 6e 63 6c 75 64 65  that are include
02d0: 64 20 62 79 20 74 68 69 73 20 66 69 6c 65 2e 0a  d by this file..
02e0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 6d 73 76  */.#include "msv
02f0: 63 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 53 70 65 63  c.h"../*.** Spec
0300: 69 61 6c 20 73 65 74 75 70 20 66 6f 72 20 56 78  ial setup for Vx
0310: 57 6f 72 6b 73 0a 2a 2f 0a 23 69 6e 63 6c 75 64  Works.*/.#includ
0320: 65 20 22 76 78 77 6f 72 6b 73 2e 68 22 0a 0a 2f  e "vxworks.h"../
0330: 2a 0a 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69  *.** These #defi
0340: 6e 65 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c  nes should enabl
0350: 65 20 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70  e >2GB file supp
0360: 6f 72 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20  ort on POSIX if 
0370: 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e  the.** underlyin
0380: 67 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74  g operating syst
0390: 65 6d 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20  em supports it. 
03a0: 20 49 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73   If the OS lacks
03b0: 0a 2a 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73  .** large file s
03c0: 75 70 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68  upport, or if th
03d0: 65 20 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c  e OS is windows,
03e0: 20 74 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65   these should be
03f0: 20 6e 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54   no-ops..**.** T
0400: 69 63 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68  icket #2739:  Th
0410: 65 20 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55  e _LARGEFILE_SOU
0420: 52 43 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61  RCE macro must a
0430: 70 70 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79  ppear before any
0440: 0a 2a 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c  .** system #incl
0450: 75 64 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68  udes.  Hence, th
0460: 69 73 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65  is block of code
0470: 20 6d 75 73 74 20 62 65 20 74 68 65 20 76 65 72   must be the ver
0480: 79 20 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20  y first.** code 
0490: 69 6e 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69  in all source fi
04a0: 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65  les..**.** Large
04b0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61   file support ca
04c0: 6e 20 62 65 20 64 69 73 61 62 6c 65 64 20 75 73  n be disabled us
04d0: 69 6e 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45  ing the -DSQLITE
04e0: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69  _DISABLE_LFS swi
04f0: 74 63 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f  tch.** on the co
0500: 6d 70 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c  mpiler command l
0510: 69 6e 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65  ine.  This is ne
0520: 63 65 73 73 61 72 79 20 69 66 20 79 6f 75 20 61  cessary if you a
0530: 72 65 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20  re compiling.** 
0540: 6f 6e 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68  on a recent mach
0550: 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61 74  ine (ex: Red Hat
0560: 20 37 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61   7.2) but you wa
0570: 6e 74 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20  nt your code to 
0580: 77 6f 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c  work.** on an ol
0590: 64 65 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a  der machine (ex:
05a0: 20 52 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20   Red Hat 6.0).  
05b0: 49 66 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f  If you compile o
05c0: 6e 20 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a  n Red Hat 7.2.**
05d0: 20 77 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70   without this op
05e0: 74 69 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61  tion, LFS is ena
05f0: 62 6c 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f  ble.  But LFS do
0600: 65 73 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20  es not exist in 
0610: 74 68 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e  the kernel.** in
0620: 20 52 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f   Red Hat 6.0, so
0630: 20 74 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20   the code won't 
0640: 77 6f 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f  work.  Hence, fo
0650: 72 20 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79  r maximum binary
0660: 0a 2a 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20  .** portability 
0670: 79 6f 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20  you should omit 
0680: 4c 46 53 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70  LFS..**.** The p
0690: 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61 70  revious paragrap
06a0: 68 20 77 61 73 20 77 72 69 74 74 65 6e 20 69 6e  h was written in
06b0: 20 32 30 30 35 2e 20 20 28 54 68 69 73 20 70 61   2005.  (This pa
06c0: 72 61 67 72 61 70 68 20 69 73 20 77 72 69 74 74  ragraph is writt
06d0: 65 6e 0a 2a 2a 20 6f 6e 20 32 30 30 38 2d 31 31  en.** on 2008-11
06e0: 2d 32 38 2e 29 20 54 68 65 73 65 20 64 61 79 73  -28.) These days
06f0: 2c 20 61 6c 6c 20 4c 69 6e 75 78 20 6b 65 72 6e  , all Linux kern
0700: 65 6c 73 20 73 75 70 70 6f 72 74 20 6c 61 72 67  els support larg
0710: 65 20 66 69 6c 65 73 2c 20 73 6f 0a 2a 2a 20 79  e files, so.** y
0720: 6f 75 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62  ou should probab
0730: 6c 79 20 6c 65 61 76 65 20 4c 46 53 20 65 6e 61  ly leave LFS ena
0740: 62 6c 65 64 2e 20 20 42 75 74 20 73 6f 6d 65 20  bled.  But some 
0750: 65 6d 62 65 64 64 65 64 20 70 6c 61 74 66 6f 72  embedded platfor
0760: 6d 73 20 6d 69 67 68 74 0a 2a 2a 20 6c 61 63 6b  ms might.** lack
0770: 20 4c 46 53 20 69 6e 20 77 68 69 63 68 20 63 61   LFS in which ca
0780: 73 65 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49  se the SQLITE_DI
0790: 53 41 42 4c 45 5f 4c 46 53 20 6d 61 63 72 6f 20  SABLE_LFS macro 
07a0: 6d 69 67 68 74 20 73 74 69 6c 6c 20 62 65 20 75  might still be u
07b0: 73 65 66 75 6c 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d  seful..**.** Sim
07c0: 69 6c 61 72 20 69 73 20 74 72 75 65 20 66 6f 72  ilar is true for
07d0: 20 4d 61 63 20 4f 53 20 58 2e 20 20 4c 46 53 20   Mac OS X.  LFS 
07e0: 69 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65  is only supporte
07f0: 64 20 6f 6e 20 4d 61 63 20 4f 53 20 58 20 39 20  d on Mac OS X 9 
0800: 61 6e 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69  and later..*/.#i
0810: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53  fndef SQLITE_DIS
0820: 41 42 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69 6e  ABLE_LFS.# defin
0830: 65 20 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20 20  e _LARGE_FILE   
0840: 20 20 20 20 31 0a 23 20 69 66 6e 64 65 66 20 5f      1.# ifndef _
0850: 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53  FILE_OFFSET_BITS
0860: 0a 23 20 20 20 64 65 66 69 6e 65 20 5f 46 49 4c  .#   define _FIL
0870: 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34  E_OFFSET_BITS 64
0880: 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e  .# endif.# defin
0890: 65 20 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55  e _LARGEFILE_SOU
08a0: 52 43 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  RCE 1.#endif../*
08b0: 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72 69   Needed for vari
08c0: 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e  ous definitions.
08d0: 2e 2e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  .. */.#if define
08e0: 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21  d(__GNUC__) && !
08f0: 64 65 66 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55  defined(_GNU_SOU
0900: 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 47  RCE).# define _G
0910: 4e 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66  NU_SOURCE.#endif
0920: 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  ..#if defined(__
0930: 4f 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21 64  OpenBSD__) && !d
0940: 65 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52  efined(_BSD_SOUR
0950: 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42 53  CE).# define _BS
0960: 44 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a  D_SOURCE.#endif.
0970: 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57  ./*.** For MinGW
0980: 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20 69  , check to see i
0990: 66 20 77 65 20 63 61 6e 20 69 6e 63 6c 75 64 65  f we can include
09a0: 20 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65   the header file
09b0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a   containing its.
09c0: 2a 2a 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72  ** version infor
09d0: 6d 61 74 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74  mation, among ot
09e0: 68 65 72 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72  her things.  Nor
09f0: 6d 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 74 65  mally, this inte
0a00: 72 6e 61 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65  rnal MinGW.** he
0a10: 61 64 65 72 20 66 69 6c 65 20 77 6f 75 6c 64 20  ader file would 
0a20: 5b 6f 6e 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64  [only] be includ
0a30: 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
0a40: 20 62 79 20 6f 74 68 65 72 20 4d 69 6e 47 57 20   by other MinGW 
0a50: 68 65 61 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b  header.** files;
0a60: 20 68 6f 77 65 76 65 72 2c 20 74 68 65 20 63 6f   however, the co
0a70: 6e 74 61 69 6e 65 64 20 76 65 72 73 69 6f 6e 20  ntained version 
0a80: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e  information is n
0a90: 6f 77 20 72 65 71 75 69 72 65 64 20 62 79 20 74  ow required by t
0aa0: 68 69 73 0a 2a 2a 20 68 65 61 64 65 72 20 66 69  his.** header fi
0ab0: 6c 65 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e  le to work aroun
0ac0: 64 20 62 69 6e 61 72 79 20 63 6f 6d 70 61 74 69  d binary compati
0ad0: 62 69 6c 69 74 79 20 69 73 73 75 65 73 20 28 73  bility issues (s
0ae0: 65 65 20 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a  ee below) and.**
0af0: 20 74 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c   this is the onl
0b00: 79 20 6b 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72  y known way to r
0b10: 65 6c 69 61 62 6c 79 20 6f 62 74 61 69 6e 20 69  eliably obtain i
0b20: 74 2e 20 20 54 68 69 73 20 65 6e 74 69 72 65 20  t.  This entire 
0b30: 23 69 66 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75  #if block.** wou
0b40: 6c 64 20 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79  ld be completely
0b50: 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69 66 20   unnecessary if 
0b60: 74 68 65 72 65 20 77 61 73 20 61 6e 79 20 6f 74  there was any ot
0b70: 68 65 72 20 77 61 79 20 6f 66 20 64 65 74 65 63  her way of detec
0b80: 74 69 6e 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69  ting.** MinGW vi
0b90: 61 20 74 68 65 69 72 20 70 72 65 70 72 6f 63 65  a their preproce
0ba0: 73 73 6f 72 20 28 65 2e 67 2e 20 69 66 20 74 68  ssor (e.g. if th
0bb0: 65 79 20 63 75 73 74 6f 6d 69 7a 65 64 20 74 68  ey customized th
0bc0: 65 69 72 20 47 43 43 20 74 6f 20 64 65 66 69 6e  eir GCC to defin
0bd0: 65 0a 2a 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d  e.** some MinGW-
0be0: 73 70 65 63 69 66 69 63 20 6d 61 63 72 6f 73 29  specific macros)
0bf0: 2e 20 20 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e  .  When compilin
0c00: 67 20 66 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74  g for MinGW, eit
0c10: 68 65 72 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45  her the.** _HAVE
0c20: 5f 4d 49 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56  _MINGW_H or _HAV
0c30: 45 5f 5f 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65  E__MINGW_H (note
0c40: 20 74 68 65 20 65 78 74 72 61 20 75 6e 64 65 72   the extra under
0c50: 73 63 6f 72 65 29 20 6d 61 63 72 6f 20 6d 75 73  score) macro mus
0c60: 74 20 62 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b  t be.** defined;
0c70: 20 6f 74 68 65 72 77 69 73 65 2c 20 64 65 74 65   otherwise, dete
0c80: 63 74 69 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69  ction of conditi
0c90: 6f 6e 73 20 73 70 65 63 69 66 69 63 20 74 6f 20  ons specific to 
0ca0: 4d 69 6e 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a  MinGW will be.**
0cb0: 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69   disabled..*/.#i
0cc0: 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f  f defined(_HAVE_
0cd0: 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75  MINGW_H).# inclu
0ce0: 64 65 20 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c  de "mingw.h".#el
0cf0: 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56 45  if defined(_HAVE
0d00: 5f 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63  __MINGW_H).# inc
0d10: 6c 75 64 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a  lude "_mingw.h".
0d20: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f  #endif../*.** Fo
0d30: 72 20 4d 69 6e 47 57 20 76 65 72 73 69 6f 6e 20  r MinGW version 
0d40: 34 2e 78 20 28 61 6e 64 20 68 69 67 68 65 72 29  4.x (and higher)
0d50: 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20 69  , check to see i
0d60: 66 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54  f the _USE_32BIT
0d70: 5f 54 49 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e  _TIME_T.** defin
0d80: 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f  e is required to
0d90: 20 6d 61 69 6e 74 61 69 6e 20 62 69 6e 61 72 79   maintain binary
0da0: 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77   compatibility w
0db0: 69 74 68 20 74 68 65 20 4d 53 56 43 20 72 75 6e  ith the MSVC run
0dc0: 74 69 6d 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20  time.** library 
0dd0: 69 6e 20 75 73 65 20 28 65 2e 67 2e 20 66 6f 72  in use (e.g. for
0de0: 20 57 69 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f   Windows XP)..*/
0df0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 55  .#if !defined(_U
0e00: 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54 29  SE_32BIT_TIME_T)
0e10: 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 55 53   && !defined(_US
0e20: 45 5f 36 34 42 49 54 5f 54 49 4d 45 5f 54 29 20  E_64BIT_TIME_T) 
0e30: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
0e40: 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65 66  (_WIN32) && !def
0e50: 69 6e 65 64 28 5f 57 49 4e 36 34 29 20 26 26 20  ined(_WIN64) && 
0e60: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f  \.    defined(__
0e70: 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53  MINGW_MAJOR_VERS
0e80: 49 4f 4e 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f  ION) && __MINGW_
0e90: 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d  MAJOR_VERSION >=
0ea0: 20 34 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69   4 && \.    defi
0eb0: 6e 65 64 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a  ned(__MSVCRT__).
0ec0: 23 20 64 65 66 69 6e 65 20 5f 55 53 45 5f 33 32  # define _USE_32
0ed0: 42 49 54 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69  BIT_TIME_T.#endi
0ee0: 66 0a 0a 2f 2a 20 54 68 65 20 70 75 62 6c 69 63  f../* The public
0ef0: 20 53 51 4c 69 74 65 20 69 6e 74 65 72 66 61 63   SQLite interfac
0f00: 65 2e 20 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46  e.  The _FILE_OF
0f10: 46 53 45 54 5f 42 49 54 53 20 6d 61 63 72 6f 20  FSET_BITS macro 
0f20: 6d 75 73 74 20 61 70 70 65 61 72 0a 2a 2a 20 66  must appear.** f
0f30: 69 72 73 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c  irst in QNX.  Al
0f40: 73 6f 2c 20 74 68 65 20 5f 55 53 45 5f 33 32 42  so, the _USE_32B
0f50: 49 54 5f 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20  IT_TIME_T macro 
0f60: 6d 75 73 74 20 61 70 70 65 61 72 20 66 69 72 73  must appear firs
0f70: 74 20 66 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a  t for.** MinGW..
0f80: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c  */.#include "sql
0f90: 69 74 65 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49  ite3.h"../*.** I
0fa0: 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e 66 69  nclude the confi
0fb0: 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65 72 20  guration header 
0fc0: 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e 66 69  output by 'confi
0fd0: 67 75 72 65 27 20 69 66 20 77 65 27 72 65 20 75  gure' if we're u
0fe0: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f  sing the.** auto
0ff0: 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69 6c 64  conf-based build
1000: 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 48 41 56 45  .*/.#ifdef _HAVE
1010: 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48  _SQLITE_CONFIG_H
1020: 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69  .#include "confi
1030: 67 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 23 69 6e  g.h".#endif..#in
1040: 63 6c 75 64 65 20 22 73 71 6c 69 74 65 4c 69 6d  clude "sqliteLim
1050: 69 74 2e 68 22 0a 0a 2f 2a 20 44 69 73 61 62 6c  it.h"../* Disabl
1060: 65 20 6e 75 69 73 61 6e 63 65 20 77 61 72 6e 69  e nuisance warni
1070: 6e 67 73 20 6f 6e 20 42 6f 72 6c 61 6e 64 20 63  ngs on Borland c
1080: 6f 6d 70 69 6c 65 72 73 20 2a 2f 0a 23 69 66 20  ompilers */.#if 
1090: 64 65 66 69 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e  defined(__BORLAN
10a0: 44 43 5f 5f 29 0a 23 70 72 61 67 6d 61 20 77 61  DC__).#pragma wa
10b0: 72 6e 20 2d 72 63 68 20 2f 2a 20 75 6e 72 65 61  rn -rch /* unrea
10c0: 63 68 61 62 6c 65 20 63 6f 64 65 20 2a 2f 0a 23  chable code */.#
10d0: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 63 63  pragma warn -ccc
10e0: 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 20 69 73   /* Condition is
10f0: 20 61 6c 77 61 79 73 20 74 72 75 65 20 6f 72 20   always true or 
1100: 66 61 6c 73 65 20 2a 2f 0a 23 70 72 61 67 6d 61  false */.#pragma
1110: 20 77 61 72 6e 20 2d 61 75 73 20 2f 2a 20 41 73   warn -aus /* As
1120: 73 69 67 6e 65 64 20 76 61 6c 75 65 20 69 73 20  signed value is 
1130: 6e 65 76 65 72 20 75 73 65 64 20 2a 2f 0a 23 70  never used */.#p
1140: 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 73 75 20  ragma warn -csu 
1150: 2f 2a 20 43 6f 6d 70 61 72 69 6e 67 20 73 69 67  /* Comparing sig
1160: 6e 65 64 20 61 6e 64 20 75 6e 73 69 67 6e 65 64  ned and unsigned
1170: 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72 6e   */.#pragma warn
1180: 20 2d 73 70 61 20 2f 2a 20 53 75 73 70 69 63 69   -spa /* Suspici
1190: 6f 75 73 20 70 6f 69 6e 74 65 72 20 61 72 69 74  ous pointer arit
11a0: 68 6d 65 74 69 63 20 2a 2f 0a 23 65 6e 64 69 66  hmetic */.#endif
11b0: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
11c0: 73 74 61 6e 64 61 72 64 20 68 65 61 64 65 72 20  standard header 
11d0: 66 69 6c 65 73 20 61 73 20 6e 65 63 65 73 73 61  files as necessa
11e0: 72 79 0a 2a 2f 0a 23 69 66 64 65 66 20 48 41 56  ry.*/.#ifdef HAV
11f0: 45 5f 53 54 44 49 4e 54 5f 48 0a 23 69 6e 63 6c  E_STDINT_H.#incl
1200: 75 64 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a 23  ude <stdint.h>.#
1210: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41 56  endif.#ifdef HAV
1220: 45 5f 49 4e 54 54 59 50 45 53 5f 48 0a 23 69 6e  E_INTTYPES_H.#in
1230: 63 6c 75 64 65 20 3c 69 6e 74 74 79 70 65 73 2e  clude <inttypes.
1240: 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  h>.#endif../*.**
1250: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
1260: 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20 74  acros are used t
1270: 6f 20 63 61 73 74 20 70 6f 69 6e 74 65 72 73 20  o cast pointers 
1280: 74 6f 20 69 6e 74 65 67 65 72 73 20 61 6e 64 0a  to integers and.
1290: 2a 2a 20 69 6e 74 65 67 65 72 73 20 74 6f 20 70  ** integers to p
12a0: 6f 69 6e 74 65 72 73 2e 20 20 54 68 65 20 77 61  ointers.  The wa
12b0: 79 20 79 6f 75 20 64 6f 20 74 68 69 73 20 76 61  y you do this va
12c0: 72 69 65 73 20 66 72 6f 6d 20 6f 6e 65 20 63 6f  ries from one co
12d0: 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 74 68 65  mpiler.** to the
12e0: 20 6e 65 78 74 2c 20 73 6f 20 77 65 20 68 61 76   next, so we hav
12f0: 65 20 64 65 76 65 6c 6f 70 65 64 20 74 68 65 20  e developed the 
1300: 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 74 20 6f 66  following set of
1310: 20 23 69 66 20 73 74 61 74 65 6d 65 6e 74 73 0a   #if statements.
1320: 2a 2a 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ** to generate a
1330: 70 70 72 6f 70 72 69 61 74 65 20 6d 61 63 72 6f  ppropriate macro
1340: 73 20 66 6f 72 20 61 20 77 69 64 65 20 72 61 6e  s for a wide ran
1350: 67 65 20 6f 66 20 63 6f 6d 70 69 6c 65 72 73 2e  ge of compilers.
1360: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 72 72 65  .**.** The corre
1370: 63 74 20 22 41 4e 53 49 22 20 77 61 79 20 74 6f  ct "ANSI" way to
1380: 20 64 6f 20 74 68 69 73 20 69 73 20 74 6f 20 75   do this is to u
1390: 73 65 20 74 68 65 20 69 6e 74 70 74 72 5f 74 20  se the intptr_t 
13a0: 74 79 70 65 2e 20 0a 2a 2a 20 55 6e 66 6f 72 74  type. .** Unfort
13b0: 75 6e 61 74 65 6c 79 2c 20 74 68 61 74 20 74 79  unately, that ty
13c0: 70 65 64 65 66 20 69 73 20 6e 6f 74 20 61 76 61  pedef is not ava
13d0: 69 6c 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f  ilable on all co
13e0: 6d 70 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69  mpilers, or.** i
13f0: 66 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c  f it is availabl
1400: 65 2c 20 69 74 20 72 65 71 75 69 72 65 73 20 61  e, it requires a
1410: 6e 20 23 69 6e 63 6c 75 64 65 20 6f 66 20 73 70  n #include of sp
1420: 65 63 69 66 69 63 20 68 65 61 64 65 72 73 0a 2a  ecific headers.*
1430: 2a 20 74 68 61 74 20 76 61 72 79 20 66 72 6f 6d  * that vary from
1440: 20 6f 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f 20   one machine to 
1450: 74 68 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  the next..**.** 
1460: 54 69 63 6b 65 74 20 23 33 38 36 30 3a 20 20 54  Ticket #3860:  T
1470: 68 65 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20  he llvm-gcc-4.2 
1480: 63 6f 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41 70  compiler from Ap
1490: 70 6c 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a  ple chokes on.**
14a0: 20 74 68 65 20 28 28 76 6f 69 64 2a 29 26 28 28   the ((void*)&((
14b0: 63 68 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e  char*)0)[X]) con
14c0: 73 74 72 75 63 74 2e 20 20 42 75 74 20 4d 53 56  struct.  But MSV
14d0: 43 20 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f  C chokes on ((vo
14e0: 69 64 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20  id*)(X))..** So 
14f0: 77 65 20 68 61 76 65 20 74 6f 20 64 65 66 69 6e  we have to defin
1500: 65 20 74 68 65 20 6d 61 63 72 6f 73 20 69 6e 20  e the macros in 
1510: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 64  different ways d
1520: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a  epending on the.
1530: 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a  ** compiler..*/.
1540: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 50 54  #if defined(__PT
1550: 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f  RDIFF_TYPE__)  /
1560: 2a 20 54 68 69 73 20 63 61 73 65 20 73 68 6f 75  * This case shou
1570: 6c 64 20 77 6f 72 6b 20 66 6f 72 20 47 43 43 20  ld work for GCC 
1580: 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  */.# define SQLI
1590: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29  TE_INT_TO_PTR(X)
15a0: 20 20 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52    ((void*)(__PTR
15b0: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
15c0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
15d0: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
15e0: 28 28 69 6e 74 29 28 5f 5f 50 54 52 44 49 46 46  ((int)(__PTRDIFF
15f0: 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c  _TYPE__)(X)).#el
1600: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e  if !defined(__GN
1610: 55 43 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20 57  UC__)       /* W
1620: 6f 72 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65  orks for compile
1630: 72 73 20 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c  rs other than LL
1640: 56 4d 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53  VM */.# define S
1650: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
1660: 28 58 29 20 20 28 28 76 6f 69 64 2a 29 26 28 28  (X)  ((void*)&((
1670: 63 68 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64  char*)0)[X]).# d
1680: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
1690: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
16a0: 74 29 28 28 28 63 68 61 72 2a 29 58 29 2d 28 63  t)(((char*)X)-(c
16b0: 68 61 72 2a 29 30 29 29 0a 23 65 6c 69 66 20 64  har*)0)).#elif d
16c0: 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49  efined(HAVE_STDI
16d0: 4e 54 5f 48 29 20 20 20 2f 2a 20 55 73 65 20 74  NT_H)   /* Use t
16e0: 68 69 73 20 63 61 73 65 20 69 66 20 77 65 20 68  his case if we h
16f0: 61 76 65 20 41 4e 53 49 20 68 65 61 64 65 72 73  ave ANSI headers
1700: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
1710: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
1720: 29 20 20 28 28 76 6f 69 64 2a 29 28 69 6e 74 70  )  ((void*)(intp
1730: 74 72 5f 74 29 28 58 29 29 0a 23 20 64 65 66 69  tr_t)(X)).# defi
1740: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
1750: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
1760: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 65  intptr_t)(X)).#e
1770: 6c 73 65 20 20 20 20 20 20 20 20 20 20 20 20 20  lse             
1780: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1790: 47 65 6e 65 72 61 74 65 73 20 61 20 77 61 72 6e  Generates a warn
17a0: 69 6e 67 20 2d 20 62 75 74 20 69 74 20 61 6c 77  ing - but it alw
17b0: 61 79 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64  ays works */.# d
17c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
17d0: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
17e0: 69 64 2a 29 28 58 29 29 0a 23 20 64 65 66 69 6e  id*)(X)).# defin
17f0: 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f  e SQLITE_PTR_TO_
1800: 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 58  INT(X)  ((int)(X
1810: 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  )).#endif../*.**
1820: 20 41 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e 74   A macro to hint
1830: 20 74 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   to the compiler
1840: 20 74 68 61 74 20 61 20 66 75 6e 63 74 69 6f 6e   that a function
1850: 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a   should not be.*
1860: 2a 20 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23 69  * inlined..*/.#i
1870: 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43  f defined(__GNUC
1880: 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 53 51  __).#  define SQ
1890: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f  LITE_NOINLINE  _
18a0: 5f 61 74 74 72 69 62 75 74 65 5f 5f 28 28 6e 6f  _attribute__((no
18b0: 69 6e 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20 64  inline)).#elif d
18c0: 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29  efined(_MSC_VER)
18d0: 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33   && _MSC_VER>=13
18e0: 31 30 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c  10.#  define SQL
18f0: 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f  ITE_NOINLINE  __
1900: 64 65 63 6c 73 70 65 63 28 6e 6f 69 6e 6c 69 6e  declspec(noinlin
1910: 65 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  e).#else.#  defi
1920: 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49  ne SQLITE_NOINLI
1930: 4e 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  NE.#endif../*.**
1940: 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48 52 45   The SQLITE_THRE
1950: 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d 75 73  ADSAFE macro mus
1960: 74 20 62 65 20 64 65 66 69 6e 65 64 20 61 73 20  t be defined as 
1970: 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a 20 30  0, 1, or 2..** 0
1980: 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73 20 61   means mutexes a
1990: 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64  re permanently d
19a0: 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65 20 6c  isable and the l
19b0: 69 62 72 61 72 79 20 69 73 20 6e 65 76 65 72 0a  ibrary is never.
19c0: 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e 20 20  ** threadsafe.  
19d0: 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72  1 means the libr
19e0: 61 72 79 20 69 73 20 73 65 72 69 61 6c 69 7a 65  ary is serialize
19f0: 64 20 77 68 69 63 68 20 69 73 20 74 68 65 20 68  d which is the h
1a00: 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65 6c 20  ighest.** level 
1a10: 6f 66 20 74 68 72 65 61 64 73 61 66 65 74 79 2e  of threadsafety.
1a20: 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    2 means the li
1a30: 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69 74 68  brary is multith
1a40: 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69 70 6c  readed - multipl
1a50: 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63 61 6e  e.** threads can
1a60: 20 75 73 65 20 53 51 4c 69 74 65 20 61 73 20 6c   use SQLite as l
1a70: 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20 74 68  ong as no two th
1a80: 72 65 61 64 73 20 74 72 79 20 74 6f 20 75 73 65  reads try to use
1a90: 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64 61 74   the same.** dat
1aa0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
1ab0: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
1ac0: 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72 20 76  e..**.** Older v
1ad0: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
1ae0: 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69 6f 6e  e used an option
1af0: 61 6c 20 54 48 52 45 41 44 53 41 46 45 20 6d 61  al THREADSAFE ma
1b00: 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70 70 6f  cro..** We suppo
1b10: 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65 67 61  rt that for lega
1b20: 63 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  cy..*/.#if !defi
1b30: 6e 65 64 28 53 51 4c 49 54 45 5f 54 48 52 45 41  ned(SQLITE_THREA
1b40: 44 53 41 46 45 29 0a 23 20 69 66 20 64 65 66 69  DSAFE).# if defi
1b50: 6e 65 64 28 54 48 52 45 41 44 53 41 46 45 29 0a  ned(THREADSAFE).
1b60: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
1b70: 45 5f 54 48 52 45 41 44 53 41 46 45 20 54 48 52  E_THREADSAFE THR
1b80: 45 41 44 53 41 46 45 0a 23 20 65 6c 73 65 0a 23  EADSAFE.# else.#
1b90: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
1ba0: 5f 54 48 52 45 41 44 53 41 46 45 20 31 20 2f 2a  _THREADSAFE 1 /*
1bb0: 20 49 4d 50 3a 20 52 2d 30 37 32 37 32 2d 32 32   IMP: R-07272-22
1bc0: 33 30 39 20 2a 2f 0a 23 20 65 6e 64 69 66 0a 23  309 */.# endif.#
1bd0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77  endif../*.** Pow
1be0: 65 72 73 61 66 65 20 6f 76 65 72 77 72 69 74 65  ersafe overwrite
1bf0: 20 69 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c   is on by defaul
1c00: 74 2e 20 20 42 75 74 20 63 61 6e 20 62 65 20 74  t.  But can be t
1c10: 75 72 6e 65 64 20 6f 66 66 20 75 73 69 6e 67 0a  urned off using.
1c20: 2a 2a 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f  ** the -DSQLITE_
1c30: 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52  POWERSAFE_OVERWR
1c40: 49 54 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69  ITE=0 command-li
1c50: 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69  ne option..*/.#i
1c60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 50 4f 57  fndef SQLITE_POW
1c70: 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45  ERSAFE_OVERWRITE
1c80: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1c90: 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57  _POWERSAFE_OVERW
1ca0: 52 49 54 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  RITE 1.#endif../
1cb0: 2a 0a 2a 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46  *.** EVIDENCE-OF
1cc0: 3a 20 52 2d 32 35 37 31 35 2d 33 37 30 37 32 20  : R-25715-37072 
1cd0: 4d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  Memory allocatio
1ce0: 6e 20 73 74 61 74 69 73 74 69 63 73 20 61 72 65  n statistics are
1cf0: 20 65 6e 61 62 6c 65 64 20 62 79 0a 2a 2a 20 64   enabled by.** d
1d00: 65 66 61 75 6c 74 20 75 6e 6c 65 73 73 20 53 51  efault unless SQ
1d10: 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64  Lite is compiled
1d20: 20 77 69 74 68 20 53 51 4c 49 54 45 5f 44 45 46   with SQLITE_DEF
1d30: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 3d 30  AULT_MEMSTATUS=0
1d40: 20 69 6e 0a 2a 2a 20 77 68 69 63 68 20 63 61 73   in.** which cas
1d50: 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
1d60: 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20 61  ion statistics a
1d70: 72 65 20 64 69 73 61 62 6c 65 64 20 62 79 20 64  re disabled by d
1d80: 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 21  efault..*/.#if !
1d90: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
1da0: 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53  EFAULT_MEMSTATUS
1db0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
1dc0: 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41  E_DEFAULT_MEMSTA
1dd0: 54 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  TUS 1.#endif../*
1de0: 0a 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20  .** Exactly one 
1df0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1e00: 20 6d 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20   macros must be 
1e10: 64 65 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72  defined in order
1e20: 20 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77   to.** specify w
1e30: 68 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  hich memory allo
1e40: 63 61 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d  cation subsystem
1e50: 20 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   to use..**.**  
1e60: 20 20 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d     SQLITE_SYSTEM
1e70: 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20  _MALLOC         
1e80: 20 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73   // Use normal s
1e90: 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a  ystem malloc().*
1ea0: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e  *     SQLITE_WIN
1eb0: 33 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20  32_MALLOC       
1ec0: 20 20 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32      // Use Win32
1ed0: 20 6e 61 74 69 76 65 20 68 65 61 70 20 41 50 49   native heap API
1ee0: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a  .**     SQLITE_Z
1ef0: 45 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20  ERO_MALLOC      
1f00: 20 20 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73        // Use a s
1f10: 74 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68  tub allocator th
1f20: 61 74 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a  at always fails.
1f30: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45  **     SQLITE_ME
1f40: 4d 44 45 42 55 47 20 20 20 20 20 20 20 20 20 20  MDEBUG          
1f50: 20 20 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e       // Debuggin
1f60: 67 20 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73  g version of sys
1f70: 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a  tem malloc().**.
1f80: 2a 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69  ** On Windows, i
1f90: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e  f the SQLITE_WIN
1fa0: 33 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41  32_MALLOC_VALIDA
1fb0: 54 45 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69  TE macro is defi
1fc0: 6e 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61  ned and the.** a
1fd0: 73 73 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73  ssert() macro is
1fe0: 20 65 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63   enabled, each c
1ff0: 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e  all into the Win
2000: 33 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 73  32 native heap s
2010: 75 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c  ubsystem.** will
2020: 20 63 61 75 73 65 20 48 65 61 70 56 61 6c 69 64   cause HeapValid
2030: 61 74 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64  ate to be called
2040: 2e 20 20 49 66 20 68 65 61 70 20 76 61 6c 69 64  .  If heap valid
2050: 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69  ation should fai
2060: 6c 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69  l, an.** asserti
2070: 6f 6e 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67  on will be trigg
2080: 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e  ered..**.** If n
2090: 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65  one of the above
20a0: 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68   are defined, th
20b0: 65 6e 20 73 65 74 20 53 51 4c 49 54 45 5f 53 59  en set SQLITE_SY
20c0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a  STEM_MALLOC as.*
20d0: 2a 20 74 68 65 20 64 65 66 61 75 6c 74 2e 0a 2a  * the default..*
20e0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
20f0: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
2100: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
2110: 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d  d(SQLITE_WIN32_M
2120: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2130: 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f  ined(SQLITE_ZERO
2140: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
2150: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45  efined(SQLITE_ME
2160: 4d 44 45 42 55 47 29 3e 31 0a 23 20 65 72 72 6f  MDEBUG)>1.# erro
2170: 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20 6f  r "Two or more o
2180: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
2190: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e  compile-time con
21a0: 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f  figuration optio
21b0: 6e 73 5c 0a 20 61 72 65 20 64 65 66 69 6e 65 64  ns\. are defined
21c0: 20 62 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e 65   but at most one
21d0: 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53   is allowed:\. S
21e0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
21f0: 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e 33  LOC, SQLITE_WIN3
2200: 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45  2_MALLOC, SQLITE
2210: 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51 4c  _MEMDEBUG,\. SQL
2220: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22  ITE_ZERO_MALLOC"
2230: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
2240: 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45  ned(SQLITE_SYSTE
2250: 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  M_MALLOC) \.  + 
2260: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57  defined(SQLITE_W
2270: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  IN32_MALLOC) \. 
2280: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
2290: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c  E_ZERO_MALLOC) \
22a0: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
22b0: 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d 30  ITE_MEMDEBUG)==0
22c0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
22d0: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31  _SYSTEM_MALLOC 1
22e0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
22f0: 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f  f SQLITE_MALLOC_
2300: 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f  SOFT_LIMIT is no
2310: 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79  t zero, then try
2320: 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20   to keep the.** 
2330: 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20  sizes of memory 
2340: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f  allocations belo
2350: 77 20 74 68 69 73 20 76 61 6c 75 65 20 77 68 65  w this value whe
2360: 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a  re possible..*/.
2370: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2380: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
2390: 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20  LIMIT).# define 
23a0: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
23b0: 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65  FT_LIMIT 1024.#e
23c0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e  ndif../*.** We n
23d0: 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58  eed to define _X
23e0: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66  OPEN_SOURCE as f
23f0: 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20  ollows in order 
2400: 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63  to enable.** rec
2410: 75 72 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f  ursive mutexes o
2420: 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74  n most Unix syst
2430: 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64 28 29  ems and fchmod()
2440: 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20   on OpenBSD..** 
2450: 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  But _XOPEN_SOURC
2460: 45 20 64 65 66 69 6e 65 20 63 61 75 73 65 73 20  E define causes 
2470: 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63  problems for Mac
2480: 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a   OS X, so omit.*
2490: 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  * it..*/.#if !de
24a0: 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55  fined(_XOPEN_SOU
24b0: 52 43 45 29 20 26 26 20 21 64 65 66 69 6e 65 64  RCE) && !defined
24c0: 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20  (__DARWIN__) && 
24d0: 21 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45  !defined(__APPLE
24e0: 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 5f 58  __).#  define _X
24f0: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a  OPEN_SOURCE 600.
2500: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44  #endif../*.** ND
2510: 45 42 55 47 20 61 6e 64 20 53 51 4c 49 54 45 5f  EBUG and SQLITE_
2520: 44 45 42 55 47 20 61 72 65 20 6f 70 70 6f 73 69  DEBUG are opposi
2530: 74 65 73 2e 20 20 49 74 20 73 68 6f 75 6c 64 20  tes.  It should 
2540: 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20 74  always be true t
2550: 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e  hat.** defined(N
2560: 44 45 42 55 47 29 3d 3d 21 64 65 66 69 6e 65 64  DEBUG)==!defined
2570: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 2e 20  (SQLITE_DEBUG). 
2580: 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20   If this is not 
2590: 63 75 72 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a  currently true,.
25a0: 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72 75 65 20  ** make it true 
25b0: 62 79 20 64 65 66 69 6e 69 6e 67 20 6f 72 20 75  by defining or u
25c0: 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45 42 55 47  ndefining NDEBUG
25d0: 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20  ..**.** Setting 
25e0: 4e 44 45 42 55 47 20 6d 61 6b 65 73 20 74 68 65  NDEBUG makes the
25f0: 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e   code smaller an
2600: 64 20 66 61 73 74 65 72 20 62 79 20 64 69 73 61  d faster by disa
2610: 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73  bling the.** ass
2620: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
2630: 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53   in the code.  S
2640: 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20 64 65  o we want the de
2650: 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20  fault action.** 
2660: 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47  to be for NDEBUG
2670: 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e   to be set and N
2680: 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65  DEBUG to be unde
2690: 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51  fined only if SQ
26a0: 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73  LITE_DEBUG.** is
26b0: 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42   set.  Thus NDEB
26c0: 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70  UG becomes an op
26d0: 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e  t-in rather than
26e0: 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66   an opt-out.** f
26f0: 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21  eature..*/.#if !
2700: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20  defined(NDEBUG) 
2710: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
2720: 54 45 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66  TE_DEBUG) .# def
2730: 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e  ine NDEBUG 1.#en
2740: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
2750: 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e  NDEBUG) && defin
2760: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
2770: 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a  .# undef NDEBUG.
2780: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e  #endif../*.** En
2790: 61 62 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  able SQLITE_ENAB
27a0: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
27b0: 4e 54 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45  NTS if SQLITE_DE
27c0: 42 55 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e  BUG is turned on
27d0: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
27e0: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
27f0: 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53  EXPLAIN_COMMENTS
2800: 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
2810: 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66  ITE_DEBUG).# def
2820: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
2830: 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e  E_EXPLAIN_COMMEN
2840: 54 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  TS 1.#endif../*.
2850: 2a 2a 20 54 68 65 20 74 65 73 74 63 61 73 65 28  ** The testcase(
2860: 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  ) macro is used 
2870: 74 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61  to aid in covera
2880: 67 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65  ge testing.  Whe
2890: 6e 20 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65  n .** doing cove
28a0: 72 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68  rage testing, th
28b0: 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69  e condition insi
28c0: 64 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  de the argument 
28d0: 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29  to.** testcase()
28e0: 20 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61 74   must be evaluat
28f0: 65 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64  ed both true and
2900: 20 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20   false in order 
2910: 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62  to.** get full b
2920: 72 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20  ranch coverage. 
2930: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
2940: 6d 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65  macro is inserte
2950: 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73  d.** to help ens
2960: 75 72 65 20 61 64 65 71 75 61 74 65 20 74 65 73  ure adequate tes
2970: 74 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c  t coverage in pl
2980: 61 63 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c  aces where simpl
2990: 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64  e.** condition/d
29a0: 65 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65  ecision coverage
29b0: 20 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20   is inadequate. 
29c0: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65   For example, te
29d0: 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20  stcase().** can 
29e0: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
29f0: 73 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61  sure boundary va
2a00: 6c 75 65 73 20 61 72 65 20 74 65 73 74 65 64 2e  lues are tested.
2a10: 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b    For.** bitmask
2a20: 20 74 65 73 74 73 2c 20 74 65 73 74 63 61 73 65   tests, testcase
2a30: 28 29 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  () can be used t
2a40: 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68  o make sure each
2a50: 20 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69   bit.** is signi
2a60: 66 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20  ficant and used 
2a70: 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20  at least once.  
2a80: 4f 6e 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  On switch statem
2a90: 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75  ents.** where mu
2aa0: 6c 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20  ltiple cases go 
2ab0: 74 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63  to the same bloc
2ac0: 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63  k of code, testc
2ad0: 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73  ase().** can ins
2ae0: 75 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73  ure that all cas
2af0: 65 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  es are evaluated
2b00: 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ..**.*/.#ifdef S
2b10: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
2b20: 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  EST.  void sqlit
2b30: 65 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b  e3Coverage(int);
2b40: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
2b50: 73 65 28 58 29 20 20 69 66 28 20 58 20 29 7b 20  se(X)  if( X ){ 
2b60: 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28  sqlite3Coverage(
2b70: 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c  __LINE__); }.#el
2b80: 73 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74  se.# define test
2b90: 63 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a  case(X).#endif..
2ba0: 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e  /*.** The TESTON
2bb0: 4c 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  LY macro is used
2bc0: 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69   to enclose vari
2bd0: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
2be0: 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69  s or.** other bi
2bf0: 74 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  ts of code that 
2c00: 61 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75  are needed to su
2c10: 70 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65  pport the argume
2c20: 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65  nts.** within te
2c30: 73 74 63 61 73 65 28 29 20 61 6e 64 20 61 73 73  stcase() and ass
2c40: 65 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f  ert() macros..*/
2c50: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  .#if !defined(ND
2c60: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
2c70: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
2c80: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
2c90: 54 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23  TESTONLY(X)  X.#
2ca0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45  else.# define TE
2cb0: 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66  STONLY(X).#endif
2cc0: 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65  ../*.** Sometime
2cd0: 73 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c  s we need a smal
2ce0: 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65  l amount of code
2cf0: 20 73 75 63 68 20 61 73 20 61 20 76 61 72 69 61   such as a varia
2d00: 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ble initializati
2d10: 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66  on.** to setup f
2d20: 6f 72 20 61 20 6c 61 74 65 72 20 61 73 73 65 72  or a later asser
2d30: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  t() statement.  
2d40: 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  We do not want t
2d50: 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61  his code to.** a
2d60: 70 70 65 61 72 20 77 68 65 6e 20 61 73 73 65 72  ppear when asser
2d70: 74 28 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e  t() is disabled.
2d80: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
2d90: 6d 61 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f  macro is therefo
2da0: 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f  re.** used to co
2db0: 6e 74 61 69 6e 20 74 68 61 74 20 73 65 74 75 70  ntain that setup
2dc0: 20 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41   code.  The "VVA
2dd0: 22 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73  " acronym stands
2de0: 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63   for.** "Verific
2df0: 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f  ation, Validatio
2e00: 6e 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74 61  n, and Accredita
2e10: 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72  tion".  In other
2e20: 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63   words, the.** c
2e30: 6f 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f  ode within VVA_O
2e40: 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20  NLY() will only 
2e50: 72 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66  run during verif
2e60: 69 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65  ication processe
2e70: 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44  s..*/.#ifndef ND
2e80: 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56  EBUG.# define VV
2e90: 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  A_ONLY(X)  X.#el
2ea0: 73 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  se.# define VVA_
2eb0: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
2ec0: 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53  /*.** The ALWAYS
2ed0: 20 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f   and NEVER macro
2ee0: 73 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65  s surround boole
2ef0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77  an expressions w
2f00: 68 69 63 68 20 0a 2a 2a 20 61 72 65 20 69 6e 74  hich .** are int
2f10: 65 6e 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20  ended to always 
2f20: 62 65 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  be true or false
2f30: 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
2f40: 20 53 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73   Such.** express
2f50: 69 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d  ions could be om
2f60: 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63  itted from the c
2f70: 6f 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20  ode completely. 
2f80: 20 42 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65   But they.** are
2f90: 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66   included in a f
2fa0: 65 77 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65  ew cases in orde
2fb0: 72 20 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65  r to enhance the
2fc0: 20 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f   resilience.** o
2fd0: 66 20 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78  f SQLite to unex
2fe0: 70 65 63 74 65 64 20 62 65 68 61 76 69 6f 72 20  pected behavior 
2ff0: 2d 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f  - to make the co
3000: 64 65 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67  de "self-healing
3010: 22 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65  ".** or "ductile
3020: 22 20 72 61 74 68 65 72 20 74 68 61 6e 20 62 65  " rather than be
3030: 69 6e 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e  ing "brittle" an
3040: 64 20 63 72 61 73 68 69 6e 67 20 61 74 20 74 68  d crashing at th
3050: 65 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20  e first.** hint 
3060: 6f 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68  of unplanned beh
3070: 61 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  avior..**.** In 
3080: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57  other words, ALW
3090: 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72  AYS and NEVER ar
30a0: 65 20 61 64 64 65 64 20 66 6f 72 20 64 65 66 65  e added for defe
30b0: 6e 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a  nsive code..**.*
30c0: 2a 20 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76  * When doing cov
30d0: 65 72 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c  erage testing AL
30e0: 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61  WAYS and NEVER a
30f0: 72 65 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f  re hard-coded to
3100: 0a 2a 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20  .** be true and 
3110: 66 61 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68  false so that th
3120: 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f  e unreachable co
3130: 64 65 20 74 68 65 79 20 73 70 65 63 69 66 79 20  de they specify 
3140: 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63  will.** not be c
3150: 6f 75 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74  ounted as untest
3160: 65 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20  ed code..*/.#if 
3170: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43  defined(SQLITE_C
3180: 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20  OVERAGE_TEST).# 
3190: 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29  define ALWAYS(X)
31a0: 20 20 20 20 20 20 28 31 29 0a 23 20 64 65 66 69        (1).# defi
31b0: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
31c0: 20 20 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66    (0).#elif !def
31d0: 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64  ined(NDEBUG).# d
31e0: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
31f0: 20 20 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73       ((X)?1:(ass
3200: 65 72 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66  ert(0),0)).# def
3210: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
3220: 20 20 20 28 28 58 29 3f 28 61 73 73 65 72 74 28     ((X)?(assert(
3230: 30 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23  0),1):0).#else.#
3240: 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58   define ALWAYS(X
3250: 29 20 20 20 20 20 20 28 58 29 0a 23 20 64 65 66  )      (X).# def
3260: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
3270: 20 20 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f     (X).#endif../
3280: 2a 0a 2a 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e  *.** Declaration
3290: 73 20 75 73 65 64 20 66 6f 72 20 74 72 61 63 69  s used for traci
32a0: 6e 67 20 74 68 65 20 6f 70 65 72 61 74 69 6e 67  ng the operating
32b0: 20 73 79 73 74 65 6d 20 69 6e 74 65 72 66 61 63   system interfac
32c0: 65 73 2e 0a 2a 2f 0a 23 69 66 20 28 64 65 66 69  es..*/.#if (defi
32d0: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
32e0: 29 20 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57  ) && SQLITE_OS_W
32f0: 49 4e 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66  IN) || \.    def
3300: 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
3310: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
3320: 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f 54 52 41  ITE_FORCE_OS_TRA
3330: 43 45 29 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  CE).  extern int
3340: 20 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65 3b   sqlite3OSTrace;
3350: 0a 23 20 64 65 66 69 6e 65 20 4f 53 54 52 41 43  .# define OSTRAC
3360: 45 28 58 29 20 20 20 20 20 20 20 20 20 20 69 66  E(X)          if
3370: 28 20 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65  ( sqlite3OSTrace
3380: 20 29 20 73 71 6c 69 74 65 33 44 65 62 75 67 50   ) sqlite3DebugP
3390: 72 69 6e 74 66 20 58 0a 23 20 64 65 66 69 6e 65  rintf X.# define
33a0: 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f   SQLITE_HAVE_OS_
33b0: 54 52 41 43 45 0a 23 65 6c 73 65 0a 23 20 64 65  TRACE.#else.# de
33c0: 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58 29 0a  fine OSTRACE(X).
33d0: 23 20 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f  # undef  SQLITE_
33e0: 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65  HAVE_OS_TRACE.#e
33f0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  ndif../*.** Retu
3400: 72 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72  rn true (non-zer
3410: 6f 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20  o) if the input 
3420: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68  is an integer th
3430: 61 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a  at is too large.
3440: 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d  ** to fit in 32-
3450: 62 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72  bits.  This macr
3460: 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65  o is used inside
3470: 20 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74   of various test
3480: 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73  case().** macros
3490: 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
34a0: 77 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53  we have tested S
34b0: 51 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d  QLite for large-
34c0: 66 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f  file support..*/
34d0: 0a 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f  .#define IS_BIG_
34e0: 49 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28  INT(X)  (((X)&~(
34f0: 69 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21  i64)0xffffffff)!
3500: 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d  =0)../*.** The m
3510: 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20  acro unlikely() 
3520: 69 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73  is a hint that s
3530: 75 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65  urrounds a boole
3540: 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  an.** expression
3550: 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79   that is usually
3560: 20 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c   false.  Macro l
3570: 69 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64  ikely() surround
3580: 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65  s.** a boolean e
3590: 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
35a0: 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20  s usually true. 
35b0: 20 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75   These hints cou
35c0: 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79  ld,.** in theory
35d0: 2c 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65  , be used by the
35e0: 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e   compiler to gen
35f0: 65 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64  erate better cod
3600: 65 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e  e, but.** curren
3610: 74 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73  tly they are jus
3620: 74 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68  t comments for h
3630: 75 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f  uman readers..*/
3640: 0a 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28  .#define likely(
3650: 58 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e  X)    (X).#defin
3660: 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28  e unlikely(X)  (
3670: 58 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61  X)..#include "ha
3680: 73 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  sh.h".#include "
3690: 70 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64  parse.h".#includ
36a0: 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63  e <stdio.h>.#inc
36b0: 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a  lude <stdlib.h>.
36c0: 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67  #include <string
36d0: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73  .h>.#include <as
36e0: 73 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  sert.h>.#include
36f0: 20 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a   <stddef.h>../*.
3700: 2a 2a 20 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20  ** If compiling 
3710: 66 6f 72 20 61 20 70 72 6f 63 65 73 73 6f 72 20  for a processor 
3720: 74 68 61 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74  that lacks float
3730: 69 6e 67 20 70 6f 69 6e 74 20 73 75 70 70 6f 72  ing point suppor
3740: 74 2c 0a 2a 2a 20 73 75 62 73 74 69 74 75 74 65  t,.** substitute
3750: 20 69 6e 74 65 67 65 72 20 66 6f 72 20 66 6c 6f   integer for flo
3760: 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23  ating-point.*/.#
3770: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
3780: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
3790: 0a 23 20 64 65 66 69 6e 65 20 64 6f 75 62 6c 65  .# define double
37a0: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20   sqlite_int64.# 
37b0: 64 65 66 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c  define float sql
37c0: 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69  ite_int64.# defi
37d0: 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59  ne LONGDOUBLE_TY
37e0: 50 45 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a  PE sqlite_int64.
37f0: 23 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  # ifndef SQLITE_
3800: 42 49 47 5f 44 42 4c 0a 23 20 20 20 64 65 66 69  BIG_DBL.#   defi
3810: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42  ne SQLITE_BIG_DB
3820: 4c 20 28 28 28 73 71 6c 69 74 65 33 5f 69 6e 74  L (((sqlite3_int
3830: 36 34 29 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64  64)1)<<50).# end
3840: 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  if.# define SQLI
3850: 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45  TE_OMIT_DATETIME
3860: 5f 46 55 4e 43 53 20 31 0a 23 20 64 65 66 69 6e  _FUNCS 1.# defin
3870: 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  e SQLITE_OMIT_TR
3880: 41 43 45 20 31 0a 23 20 75 6e 64 65 66 20 53 51  ACE 1.# undef SQ
3890: 4c 49 54 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41  LITE_MIXED_ENDIA
38a0: 4e 5f 36 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20  N_64BIT_FLOAT.# 
38b0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 48 41 56  undef SQLITE_HAV
38c0: 45 5f 49 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23  E_ISNAN.#endif.#
38d0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49  ifndef SQLITE_BI
38e0: 47 5f 44 42 4c 0a 23 20 64 65 66 69 6e 65 20 53  G_DBL.# define S
38f0: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 31  QLITE_BIG_DBL (1
3900: 65 39 39 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  e99).#endif../*.
3910: 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69  ** OMIT_TEMPDB i
3920: 73 20 73 65 74 20 74 6f 20 31 20 69 66 20 53 51  s set to 1 if SQ
3930: 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42  LITE_OMIT_TEMPDB
3940: 20 69 73 20 64 65 66 69 6e 65 64 2c 20 6f 72 20   is defined, or 
3950: 30 0a 2a 2a 20 61 66 74 65 72 77 61 72 64 2e 20  0.** afterward. 
3960: 48 61 76 69 6e 67 20 74 68 69 73 20 6d 61 63 72  Having this macr
3970: 6f 20 61 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63  o allows us to c
3980: 61 75 73 65 20 74 68 65 20 43 20 63 6f 6d 70 69  ause the C compi
3990: 6c 65 72 20 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20  ler .** to omit 
39a0: 63 6f 64 65 20 75 73 65 64 20 62 79 20 54 45 4d  code used by TEM
39b0: 50 20 74 61 62 6c 65 73 20 77 69 74 68 6f 75 74  P tables without
39c0: 20 6d 65 73 73 79 20 23 69 66 6e 64 65 66 20 73   messy #ifndef s
39d0: 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69  tatements..*/.#i
39e0: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
39f0: 5f 54 45 4d 50 44 42 0a 23 64 65 66 69 6e 65 20  _TEMPDB.#define 
3a00: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 31 0a 23 65  OMIT_TEMPDB 1.#e
3a10: 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54  lse.#define OMIT
3a20: 5f 54 45 4d 50 44 42 20 30 0a 23 65 6e 64 69 66  _TEMPDB 0.#endif
3a30: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22 66 69 6c  ../*.** The "fil
3a40: 65 20 66 6f 72 6d 61 74 22 20 6e 75 6d 62 65 72  e format" number
3a50: 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74   is an integer t
3a60: 68 61 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  hat is increment
3a70: 65 64 20 77 68 65 6e 65 76 65 72 0a 2a 2a 20 74  ed whenever.** t
3a80: 68 65 20 56 44 42 45 2d 6c 65 76 65 6c 20 66 69  he VDBE-level fi
3a90: 6c 65 20 66 6f 72 6d 61 74 20 63 68 61 6e 67 65  le format change
3aa0: 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  s.  The followin
3ab0: 67 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 20  g macros define 
3ac0: 74 68 65 0a 2a 2a 20 74 68 65 20 64 65 66 61 75  the.** the defau
3ad0: 6c 74 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 66  lt file format f
3ae0: 6f 72 20 6e 65 77 20 64 61 74 61 62 61 73 65 73  or new databases
3af0: 20 61 6e 64 20 74 68 65 20 6d 61 78 69 6d 75 6d   and the maximum
3b00: 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a 2a 2a 20   file format.** 
3b10: 74 68 61 74 20 74 68 65 20 6c 69 62 72 61 72 79  that the library
3b20: 20 63 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a 23 64   can read..*/.#d
3b30: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
3b40: 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23  _FILE_FORMAT 4.#
3b50: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45  ifndef SQLITE_DE
3b60: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
3b70: 54 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  T.# define SQLIT
3b80: 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46  E_DEFAULT_FILE_F
3b90: 4f 52 4d 41 54 20 34 0a 23 65 6e 64 69 66 0a 0a  ORMAT 4.#endif..
3ba0: 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20  /*.** Determine 
3bb0: 77 68 65 74 68 65 72 20 74 72 69 67 67 65 72 73  whether triggers
3bc0: 20 61 72 65 20 72 65 63 75 72 73 69 76 65 20 62   are recursive b
3bd0: 79 20 64 65 66 61 75 6c 74 2e 20 20 54 68 69 73  y default.  This
3be0: 20 63 61 6e 20 62 65 0a 2a 2a 20 63 68 61 6e 67   can be.** chang
3bf0: 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 75  ed at run-time u
3c00: 73 69 6e 67 20 61 20 70 72 61 67 6d 61 2e 0a 2a  sing a pragma..*
3c10: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
3c20: 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49  _DEFAULT_RECURSI
3c30: 56 45 5f 54 52 49 47 47 45 52 53 0a 23 20 64 65  VE_TRIGGERS.# de
3c40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
3c50: 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52  ULT_RECURSIVE_TR
3c60: 49 47 47 45 52 53 20 30 0a 23 65 6e 64 69 66 0a  IGGERS 0.#endif.
3c70: 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69 64 65 20 61  ./*.** Provide a
3c80: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66   default value f
3c90: 6f 72 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53  or SQLITE_TEMP_S
3ca0: 54 4f 52 45 20 69 6e 20 63 61 73 65 20 69 74 20  TORE in case it 
3cb0: 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64  is not specified
3cc0: 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61  .** on the comma
3cd0: 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64  nd-line.*/.#ifnd
3ce0: 65 66 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53  ef SQLITE_TEMP_S
3cf0: 54 4f 52 45 0a 23 20 64 65 66 69 6e 65 20 53 51  TORE.# define SQ
3d00: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20  LITE_TEMP_STORE 
3d10: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
3d20: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 78 63 20  E_TEMP_STORE_xc 
3d30: 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20 66 72  1  /* Exclude fr
3d40: 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65  om ctime.c */.#e
3d50: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e  ndif../*.** If n
3d60: 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e  o value has been
3d70: 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51   provided for SQ
3d80: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
3d90: 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a  THREADS, or if.*
3da0: 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  * SQLITE_TEMP_ST
3db0: 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20  ORE is set to 3 
3dc0: 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f  (never use tempo
3dd0: 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74  rary files), set
3de0: 20 69 74 20 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e   it .** to zero.
3df0: 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54  .*/.#if SQLITE_T
3e00: 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20  EMP_STORE==3 || 
3e10: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
3e20: 45 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c  E==0.# undef SQL
3e30: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
3e40: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
3e50: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
3e60: 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64  R_THREADS 0.#end
3e70: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
3e80: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
3e90: 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51  EADS.# define SQ
3ea0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
3eb0: 54 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66  THREADS 8.#endif
3ec0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
3ed0: 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54  DEFAULT_WORKER_T
3ee0: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
3ef0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
3f00: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a  ORKER_THREADS 0.
3f10: 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54  #endif.#if SQLIT
3f20: 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52  E_DEFAULT_WORKER
3f30: 5f 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f  _THREADS>SQLITE_
3f40: 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
3f50: 44 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  DS.# undef SQLIT
3f60: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
3f70: 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51  EADS.# define SQ
3f80: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
3f90: 54 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44  THREADS SQLITE_D
3fa0: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
3fb0: 52 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 0a 2f  READS.#endif.../
3fc0: 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20 6e 6f  *.** GCC does no
3fd0: 74 20 64 65 66 69 6e 65 20 74 68 65 20 6f 66 66  t define the off
3fe0: 73 65 74 6f 66 28 29 20 6d 61 63 72 6f 20 73 6f  setof() macro so
3ff0: 20 77 65 27 6c 6c 20 68 61 76 65 20 74 6f 20 64   we'll have to d
4000: 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c 76 65  o it.** ourselve
4010: 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 6f 66  s..*/.#ifndef of
4020: 66 73 65 74 6f 66 0a 23 64 65 66 69 6e 65 20 6f  fsetof.#define o
4030: 66 66 73 65 74 6f 66 28 53 54 52 55 43 54 55 52  ffsetof(STRUCTUR
4040: 45 2c 46 49 45 4c 44 29 20 28 28 69 6e 74 29 28  E,FIELD) ((int)(
4050: 28 63 68 61 72 2a 29 26 28 28 53 54 52 55 43 54  (char*)&((STRUCT
4060: 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44 29 29  URE*)0)->FIELD))
4070: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
4080: 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70 75 74 65  acros to compute
4090: 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20 6d 61 78   minimum and max
40a0: 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e 75 6d 62  imum of two numb
40b0: 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ers..*/.#define 
40c0: 4d 49 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42  MIN(A,B) ((A)<(B
40d0: 29 3f 28 41 29 3a 28 42 29 29 0a 23 64 65 66 69  )?(A):(B)).#defi
40e0: 6e 65 20 4d 41 58 28 41 2c 42 29 20 28 28 41 29  ne MAX(A,B) ((A)
40f0: 3e 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 0a 2f  >(B)?(A):(B))../
4100: 2a 0a 2a 2a 20 53 77 61 70 20 74 77 6f 20 6f 62  *.** Swap two ob
4110: 6a 65 63 74 73 20 6f 66 20 74 79 70 65 20 54 59  jects of type TY
4120: 50 45 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  PE..*/.#define S
4130: 57 41 50 28 54 59 50 45 2c 41 2c 42 29 20 7b 54  WAP(TYPE,A,B) {T
4140: 59 50 45 20 74 3d 41 3b 20 41 3d 42 3b 20 42 3d  YPE t=A; A=B; B=
4150: 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b  t;}../*.** Check
4160: 20 74 6f 20 73 65 65 20 69 66 20 74 68 69 73 20   to see if this 
4170: 6d 61 63 68 69 6e 65 20 75 73 65 73 20 45 42 43  machine uses EBC
4180: 44 49 43 2e 20 20 28 59 65 73 2c 20 62 65 6c 69  DIC.  (Yes, beli
4190: 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74  eve it or.** not
41a0: 2c 20 74 68 65 72 65 20 61 72 65 20 73 74 69 6c  , there are stil
41b0: 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75 74 20 74  l machines out t
41c0: 68 65 72 65 20 74 68 61 74 20 75 73 65 20 45 42  here that use EB
41d0: 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41  CDIC.).*/.#if 'A
41e0: 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23 20 64 65  ' == '\301'.# de
41f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 42 43 44  fine SQLITE_EBCD
4200: 49 43 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66  IC 1.#else.# def
4210: 69 6e 65 20 53 51 4c 49 54 45 5f 41 53 43 49 49  ine SQLITE_ASCII
4220: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
4230: 20 49 6e 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f   Integers of kno
4240: 77 6e 20 73 69 7a 65 73 2e 20 20 54 68 65 73 65  wn sizes.  These
4250: 20 74 79 70 65 64 65 66 73 20 6d 69 67 68 74 20   typedefs might 
4260: 63 68 61 6e 67 65 20 66 6f 72 20 61 72 63 68 69  change for archi
4270: 74 65 63 74 75 72 65 73 0a 2a 2a 20 77 68 65 72  tectures.** wher
4280: 65 20 74 68 65 20 73 69 7a 65 73 20 76 65 72 79  e the sizes very
4290: 2e 20 20 50 72 65 70 72 6f 63 65 73 73 6f 72 20  .  Preprocessor 
42a0: 6d 61 63 72 6f 73 20 61 72 65 20 61 76 61 69 6c  macros are avail
42b0: 61 62 6c 65 20 73 6f 20 74 68 61 74 20 74 68 65  able so that the
42c0: 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e 20 62 65  .** types can be
42d0: 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65   conveniently re
42e0: 64 65 66 69 6e 65 64 20 61 74 20 63 6f 6d 70 69  defined at compi
42f0: 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b 65 20 74  le-type.  Like t
4300: 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  his:.**.**      
4310: 20 20 20 63 63 20 27 2d 44 55 49 4e 54 50 54 52     cc '-DUINTPTR
4320: 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20  _TYPE=long long 
4330: 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e  int' ....*/.#ifn
4340: 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 0a  def UINT32_TYPE.
4350: 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e  # ifdef HAVE_UIN
4360: 54 33 32 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  T32_T.#  define 
4370: 55 49 4e 54 33 32 5f 54 59 50 45 20 75 69 6e 74  UINT32_TYPE uint
4380: 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64  32_t.# else.#  d
4390: 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50  efine UINT32_TYP
43a0: 45 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23  E unsigned int.#
43b0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
43c0: 66 6e 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50  fndef UINT16_TYP
43d0: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55  E.# ifdef HAVE_U
43e0: 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e  INT16_T.#  defin
43f0: 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 69  e UINT16_TYPE ui
4400: 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20  nt16_t.# else.# 
4410: 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54   define UINT16_T
4420: 59 50 45 20 75 6e 73 69 67 6e 65 64 20 73 68 6f  YPE unsigned sho
4430: 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23  rt int.# endif.#
4440: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e  endif.#ifndef IN
4450: 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T16_TYPE.# ifdef
4460: 20 48 41 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20   HAVE_INT16_T.# 
4470: 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59   define INT16_TY
4480: 50 45 20 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73  PE int16_t.# els
4490: 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31  e.#  define INT1
44a0: 36 5f 54 59 50 45 20 73 68 6f 72 74 20 69 6e 74  6_TYPE short int
44b0: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
44c0: 23 69 66 6e 64 65 66 20 55 49 4e 54 38 5f 54 59  #ifndef UINT8_TY
44d0: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
44e0: 55 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e  UINT8_T.#  defin
44f0: 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75 69 6e  e UINT8_TYPE uin
4500: 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64  t8_t.# else.#  d
4510: 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45  efine UINT8_TYPE
4520: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 0a 23   unsigned char.#
4530: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
4540: 66 6e 64 65 66 20 49 4e 54 38 5f 54 59 50 45 0a  fndef INT8_TYPE.
4550: 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54  # ifdef HAVE_INT
4560: 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e  8_T.#  define IN
4570: 54 38 5f 54 59 50 45 20 69 6e 74 38 5f 74 0a 23  T8_TYPE int8_t.#
4580: 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20   else.#  define 
4590: 49 4e 54 38 5f 54 59 50 45 20 73 69 67 6e 65 64  INT8_TYPE signed
45a0: 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65   char.# endif.#e
45b0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e  ndif.#ifndef LON
45c0: 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a 23 20 64  GDOUBLE_TYPE.# d
45d0: 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45  efine LONGDOUBLE
45e0: 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c  _TYPE long doubl
45f0: 65 0a 23 65 6e 64 69 66 0a 74 79 70 65 64 65 66  e.#endif.typedef
4600: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 69 36   sqlite_int64 i6
4610: 34 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 38  4;          /* 8
4620: 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74  -byte signed int
4630: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
4640: 73 71 6c 69 74 65 5f 75 69 6e 74 36 34 20 75 36  sqlite_uint64 u6
4650: 34 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d  4;         /* 8-
4660: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
4670: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
4680: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 33 32   UINT32_TYPE u32
4690: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 34  ;           /* 4
46a0: 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69  -byte unsigned i
46b0: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
46c0: 66 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 31  f UINT16_TYPE u1
46d0: 36 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  6;           /* 
46e0: 32 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20  2-byte unsigned 
46f0: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
4700: 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 69 31  ef INT16_TYPE i1
4710: 36 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  6;            /*
4720: 20 32 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69   2-byte signed i
4730: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
4740: 66 20 55 49 4e 54 38 5f 54 59 50 45 20 75 38 3b  f UINT8_TYPE u8;
4750: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4760: 31 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20  1-byte unsigned 
4770: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
4780: 65 66 20 49 4e 54 38 5f 54 59 50 45 20 69 38 3b  ef INT8_TYPE i8;
4790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
47a0: 20 31 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69   1-byte signed i
47b0: 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  nteger */../*.**
47c0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20   SQLITE_MAX_U32 
47d0: 69 73 20 61 20 75 36 34 20 63 6f 6e 73 74 61 6e  is a u64 constan
47e0: 74 20 74 68 61 74 20 69 73 20 74 68 65 20 6d 61  t that is the ma
47f0: 78 69 6d 75 6d 20 75 36 34 20 76 61 6c 75 65 0a  ximum u64 value.
4800: 2a 2a 20 74 68 61 74 20 63 61 6e 20 62 65 20 73  ** that can be s
4810: 74 6f 72 65 64 20 69 6e 20 61 20 75 33 32 20 77  tored in a u32 w
4820: 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64  ithout loss of d
4830: 61 74 61 2e 20 20 54 68 65 20 76 61 6c 75 65 0a  ata.  The value.
4840: 2a 2a 20 69 73 20 30 78 30 30 30 30 30 30 30 30  ** is 0x00000000
4850: 66 66 66 66 66 66 66 66 2e 20 20 42 75 74 20 62  ffffffff.  But b
4860: 65 63 61 75 73 65 20 6f 66 20 71 75 69 72 6b 73  ecause of quirks
4870: 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65   of some compile
4880: 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76 65 20 74  rs, we.** have t
4890: 6f 20 73 70 65 63 69 66 79 20 74 68 65 20 76 61  o specify the va
48a0: 6c 75 65 20 69 6e 20 74 68 65 20 6c 65 73 73 20  lue in the less 
48b0: 69 6e 74 75 69 74 69 76 65 20 6d 61 6e 6e 65 72  intuitive manner
48c0: 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69   shown:.*/.#defi
48d0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33  ne SQLITE_MAX_U3
48e0: 32 20 20 28 28 28 28 75 36 34 29 31 29 3c 3c 33  2  ((((u64)1)<<3
48f0: 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  2)-1)../*.** The
4900: 20 64 61 74 61 74 79 70 65 20 75 73 65 64 20 74   datatype used t
4910: 6f 20 73 74 6f 72 65 20 65 73 74 69 6d 61 74 65  o store estimate
4920: 73 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20  s of the number 
4930: 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20  of rows in a.** 
4940: 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
4950: 20 54 68 69 73 20 69 73 20 61 6e 20 75 6e 73 69   This is an unsi
4960: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 74 79 70  gned integer typ
4970: 65 2e 20 20 46 6f 72 20 39 39 2e 39 25 20 6f 66  e.  For 99.9% of
4980: 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64 2c 20 61  .** the world, a
4990: 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20   32-bit integer 
49a0: 69 73 20 73 75 66 66 69 63 69 65 6e 74 2e 20 20  is sufficient.  
49b0: 42 75 74 20 61 20 36 34 2d 62 69 74 20 69 6e 74  But a 64-bit int
49c0: 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75  eger.** can be u
49d0: 73 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  sed at compile-t
49e0: 69 6d 65 20 69 66 20 64 65 73 69 72 65 64 2e 0a  ime if desired..
49f0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
4a00: 5f 36 34 42 49 54 5f 53 54 41 54 53 0a 20 74 79  _64BIT_STATS. ty
4a10: 70 65 64 65 66 20 75 36 34 20 74 52 6f 77 63 6e  pedef u64 tRowcn
4a20: 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20  t;    /* 64-bit 
4a30: 6f 6e 6c 79 20 69 66 20 72 65 71 75 65 73 74 65  only if requeste
4a40: 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  d at compile-tim
4a50: 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65  e */.#else. type
4a60: 64 65 66 20 75 33 32 20 74 52 6f 77 63 6e 74 3b  def u32 tRowcnt;
4a70: 20 20 20 20 2f 2a 20 33 32 2d 62 69 74 20 69 73      /* 32-bit is
4a80: 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a   the default */.
4a90: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 73  #endif../*.** Es
4aa0: 74 69 6d 61 74 65 64 20 71 75 61 6e 74 69 74 69  timated quantiti
4ab0: 65 73 20 75 73 65 64 20 66 6f 72 20 71 75 65 72  es used for quer
4ac0: 79 20 70 6c 61 6e 6e 69 6e 67 20 61 72 65 20 73  y planning are s
4ad0: 74 6f 72 65 64 20 61 73 20 31 36 2d 62 69 74 0a  tored as 16-bit.
4ae0: 2a 2a 20 6c 6f 67 61 72 69 74 68 6d 73 2e 20 20  ** logarithms.  
4af0: 46 6f 72 20 71 75 61 6e 74 69 74 79 20 58 2c 20  For quantity X, 
4b00: 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64  the value stored
4b10: 20 69 73 20 31 30 2a 6c 6f 67 32 28 58 29 2e 20   is 10*log2(X). 
4b20: 20 54 68 69 73 0a 2a 2a 20 67 69 76 65 73 20 61   This.** gives a
4b30: 20 70 6f 73 73 69 62 6c 65 20 72 61 6e 67 65 20   possible range 
4b40: 6f 66 20 76 61 6c 75 65 73 20 6f 66 20 61 70 70  of values of app
4b50: 72 6f 78 69 6d 61 74 65 6c 79 20 31 2e 30 65 39  roximately 1.0e9
4b60: 38 36 20 74 6f 20 31 65 2d 39 38 36 2e 0a 2a 2a  86 to 1e-986..**
4b70: 20 42 75 74 20 74 68 65 20 61 6c 6c 6f 77 65 64   But the allowed
4b80: 20 76 61 6c 75 65 73 20 61 72 65 20 22 67 72 61   values are "gra
4b90: 69 6e 79 22 2e 20 20 4e 6f 74 20 65 76 65 72 79  iny".  Not every
4ba0: 20 76 61 6c 75 65 20 69 73 20 72 65 70 72 65 73   value is repres
4bb0: 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20  entable..** For 
4bc0: 65 78 61 6d 70 6c 65 2c 20 71 75 61 6e 74 69 74  example, quantit
4bd0: 69 65 73 20 31 36 20 61 6e 64 20 31 37 20 61 72  ies 16 and 17 ar
4be0: 65 20 62 6f 74 68 20 72 65 70 72 65 73 65 6e 74  e both represent
4bf0: 65 64 20 62 79 20 61 20 4c 6f 67 45 73 74 0a 2a  ed by a LogEst.*
4c00: 2a 20 6f 66 20 34 30 2e 20 20 48 6f 77 65 76 65  * of 40.  Howeve
4c10: 72 2c 20 73 69 6e 63 65 20 4c 6f 67 45 73 74 20  r, since LogEst 
4c20: 71 75 61 6e 74 69 74 69 65 73 20 61 72 65 20 73  quantities are s
4c30: 75 70 70 6f 73 65 20 74 6f 20 62 65 20 65 73 74  uppose to be est
4c40: 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e 6f 74 20 65  imates,.** not e
4c50: 78 61 63 74 20 76 61 6c 75 65 73 2c 20 74 68 69  xact values, thi
4c60: 73 20 69 6d 70 72 65 63 69 73 69 6f 6e 20 69 73  s imprecision is
4c70: 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65 6d 2e 0a   not a problem..
4c80: 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73 74 22 20 69  **.** "LogEst" i
4c90: 73 20 73 68 6f 72 74 20 66 6f 72 20 22 4c 6f 67  s short for "Log
4ca0: 61 72 69 74 68 6d 69 63 20 45 73 74 69 6d 61 74  arithmic Estimat
4cb0: 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c  e"..**.** Exampl
4cc0: 65 73 3a 0a 2a 2a 20 20 20 20 20 20 31 20 2d 3e  es:.**      1 ->
4cd0: 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20   0              
4ce0: 32 30 20 2d 3e 20 34 33 20 20 20 20 20 20 20 20  20 -> 43        
4cf0: 20 20 31 30 30 30 30 20 2d 3e 20 31 33 32 0a 2a    10000 -> 132.*
4d00: 2a 20 20 20 20 20 20 32 20 2d 3e 20 31 30 20 20  *      2 -> 10  
4d10: 20 20 20 20 20 20 20 20 20 20 20 32 35 20 2d 3e             25 ->
4d20: 20 34 36 20 20 20 20 20 20 20 20 20 20 32 35 30   46          250
4d30: 30 30 20 2d 3e 20 31 34 36 0a 2a 2a 20 20 20 20  00 -> 146.**    
4d40: 20 20 33 20 2d 3e 20 31 36 20 20 20 20 20 20 20    3 -> 16       
4d50: 20 20 20 20 20 31 30 30 20 2d 3e 20 36 36 20 20       100 -> 66  
4d60: 20 20 20 20 20 20 31 30 30 30 30 30 30 20 2d 3e        1000000 ->
4d70: 20 31 39 39 0a 2a 2a 20 20 20 20 20 20 34 20 2d   199.**      4 -
4d80: 3e 20 32 30 20 20 20 20 20 20 20 20 20 20 20 31  > 20           1
4d90: 30 30 30 20 2d 3e 20 39 39 20 20 20 20 20 20 20  000 -> 99       
4da0: 20 31 30 34 38 35 37 36 20 2d 3e 20 32 30 30 0a   1048576 -> 200.
4db0: 2a 2a 20 20 20 20 20 31 30 20 2d 3e 20 33 33 20  **     10 -> 33 
4dc0: 20 20 20 20 20 20 20 20 20 20 31 30 32 34 20 2d            1024 -
4dd0: 3e 20 31 30 30 20 20 20 20 34 32 39 34 39 36 37  > 100    4294967
4de0: 32 39 36 20 2d 3e 20 33 32 30 0a 2a 2a 0a 2a 2a  296 -> 320.**.**
4df0: 20 54 68 65 20 4c 6f 67 45 73 74 20 63 61 6e 20   The LogEst can 
4e00: 62 65 20 6e 65 67 61 74 69 76 65 20 74 6f 20 69  be negative to i
4e10: 6e 64 69 63 61 74 65 20 66 72 61 63 74 69 6f 6e  ndicate fraction
4e20: 61 6c 20 76 61 6c 75 65 73 2e 20 0a 2a 2a 20 45  al values. .** E
4e30: 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20  xamples:.**.**  
4e40: 20 20 30 2e 35 20 2d 3e 20 2d 31 30 20 20 20 20    0.5 -> -10    
4e50: 20 20 20 20 20 20 20 30 2e 31 20 2d 3e 20 2d 33         0.1 -> -3
4e60: 33 20 20 20 20 20 20 20 20 30 2e 30 36 32 35 20  3        0.0625 
4e70: 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79 70 65 64 65  -> -40.*/.typede
4e80: 66 20 49 4e 54 31 36 5f 54 59 50 45 20 4c 6f 67  f INT16_TYPE Log
4e90: 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20  Est;../*.** Set 
4ea0: 74 68 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49  the SQLITE_PTRSI
4eb0: 5a 45 20 6d 61 63 72 6f 20 74 6f 20 74 68 65 20  ZE macro to the 
4ec0: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
4ed0: 69 6e 20 61 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a  in a pointer.*/.
4ee0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 50  #ifndef SQLITE_P
4ef0: 54 52 53 49 5a 45 0a 23 20 69 66 20 64 65 66 69  TRSIZE.# if defi
4f00: 6e 65 64 28 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49  ned(__SIZEOF_POI
4f10: 4e 54 45 52 5f 5f 29 0a 23 20 20 20 64 65 66 69  NTER__).#   defi
4f20: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a  ne SQLITE_PTRSIZ
4f30: 45 20 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54  E __SIZEOF_POINT
4f40: 45 52 5f 5f 0a 23 20 65 6c 69 66 20 64 65 66 69  ER__.# elif defi
4f50: 6e 65 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c  ned(i386)     ||
4f60: 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f   defined(__i386_
4f70: 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  _)   || defined(
4f80: 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c  _M_IX86) ||    \
4f90: 0a 20 20 20 20 20 20 20 64 65 66 69 6e 65 64 28  .       defined(
4fa0: 5f 4d 5f 41 52 4d 29 20 20 20 7c 7c 20 64 65 66  _M_ARM)   || def
4fb0: 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 20 20 20  ined(__arm__)   
4fc0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38   || defined(__x8
4fd0: 36 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  6).#   define SQ
4fe0: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 34 0a 23  LITE_PTRSIZE 4.#
4ff0: 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65   else.#   define
5000: 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20   SQLITE_PTRSIZE 
5010: 38 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  8.# endif.#endif
5020: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
5030: 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74  o determine whet
5040: 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e 65 20  her the machine 
5050: 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74 6c 65  is big or little
5060: 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20   endian,.** and 
5070: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
5080: 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74 69 6f  hat determinatio
5090: 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20 6f 72  n is run-time or
50a0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a   compile-time..*
50b0: 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20 70 65  *.** For best pe
50c0: 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20 61 74  rformance, an at
50d0: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
50e0: 20 67 75 65 73 73 20 61 74 20 74 68 65 20 62 79   guess at the by
50f0: 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73 69 6e  te-order.** usin
5100: 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f 72  g C-preprocessor
5110: 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74 68 61   macros.  If tha
5120: 74 20 69 73 20 75 6e 73 75 63 63 65 73 73 66 75  t is unsuccessfu
5130: 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44 53 51  l, or if.** -DSQ
5140: 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54  LITE_RUNTIME_BYT
5150: 45 4f 52 44 45 52 3d 31 20 69 73 20 73 65 74 2c  EORDER=1 is set,
5160: 20 74 68 65 6e 20 62 79 74 65 2d 6f 72 64 65 72   then byte-order
5170: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 2a   is determined.*
5180: 2a 20 61 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a  * at run-time..*
5190: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
51a0: 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e  AMALGAMATION.con
51b0: 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e  st int sqlite3on
51c0: 65 20 3d 20 31 3b 0a 23 65 6c 73 65 0a 65 78 74  e = 1;.#else.ext
51d0: 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71  ern const int sq
51e0: 6c 69 74 65 33 6f 6e 65 3b 0a 23 65 6e 64 69 66  lite3one;.#endif
51f0: 0a 23 69 66 20 28 64 65 66 69 6e 65 64 28 69 33  .#if (defined(i3
5200: 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e  86)     || defin
5210: 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c  ed(__i386__)   |
5220: 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38  | defined(_M_IX8
5230: 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20  6) ||    \.     
5240: 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34  defined(__x86_64
5250: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78  ) || defined(__x
5260: 38 36 5f 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69  86_64__) || defi
5270: 6e 65 64 28 5f 4d 5f 58 36 34 29 20 20 7c 7c 20  ned(_M_X64)  || 
5280: 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65     \.     define
5290: 64 28 5f 4d 5f 41 4d 44 36 34 29 20 7c 7c 20 64  d(_M_AMD64) || d
52a0: 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20  efined(_M_ARM)  
52b0: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
52c0: 78 38 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20  x86)   ||    \. 
52d0: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 61 72      defined(__ar
52e0: 6d 5f 5f 29 29 20 26 26 20 21 64 65 66 69 6e 65  m__)) && !define
52f0: 64 28 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45  d(SQLITE_RUNTIME
5300: 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20 64 65  _BYTEORDER).# de
5310: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45  fine SQLITE_BYTE
5320: 4f 52 44 45 52 20 20 20 20 31 32 33 34 0a 23 20  ORDER    1234.# 
5330: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
5340: 47 45 4e 44 49 41 4e 20 20 20 20 30 0a 23 20 64  GENDIAN    0.# d
5350: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54  efine SQLITE_LIT
5360: 54 4c 45 45 4e 44 49 41 4e 20 31 0a 23 20 64 65  TLEENDIAN 1.# de
5370: 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31  fine SQLITE_UTF1
5380: 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f  6NATIVE  SQLITE_
5390: 55 54 46 31 36 4c 45 0a 23 65 6e 64 69 66 0a 23  UTF16LE.#endif.#
53a0: 69 66 20 28 64 65 66 69 6e 65 64 28 73 70 61 72  if (defined(spar
53b0: 63 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  c)    || defined
53c0: 28 5f 5f 70 70 63 5f 5f 29 29 20 20 5c 0a 20 20  (__ppc__))  \.  
53d0: 20 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51    && !defined(SQ
53e0: 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54  LITE_RUNTIME_BYT
53f0: 45 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65  EORDER).# define
5400: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
5410: 52 20 20 20 20 34 33 32 31 0a 23 20 64 65 66 69  R    4321.# defi
5420: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  ne SQLITE_BIGEND
5430: 49 41 4e 20 20 20 20 31 0a 23 20 64 65 66 69 6e  IAN    1.# defin
5440: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
5450: 4e 44 49 41 4e 20 30 0a 23 20 64 65 66 69 6e 65  NDIAN 0.# define
5460: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
5470: 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31  IVE  SQLITE_UTF1
5480: 36 42 45 0a 23 65 6e 64 69 66 0a 23 69 66 20 21  6BE.#endif.#if !
5490: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 42  defined(SQLITE_B
54a0: 59 54 45 4f 52 44 45 52 29 0a 23 20 64 65 66 69  YTEORDER).# defi
54b0: 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  ne SQLITE_BYTEOR
54c0: 44 45 52 20 20 20 20 30 20 20 20 20 20 2f 2a 20  DER    0     /* 
54d0: 30 20 6d 65 61 6e 73 20 22 75 6e 6b 6e 6f 77 6e  0 means "unknown
54e0: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
54f0: 22 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51  " */.# define SQ
5500: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20  LITE_BIGENDIAN  
5510: 20 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71    (*(char *)(&sq
5520: 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20  lite3one)==0).# 
5530: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49  define SQLITE_LI
5540: 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63 68  TTLEENDIAN (*(ch
5550: 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e  ar *)(&sqlite3on
5560: 65 29 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65 20  e)==1).# define 
5570: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
5580: 56 45 20 20 28 53 51 4c 49 54 45 5f 42 49 47 45  VE  (SQLITE_BIGE
5590: 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46  NDIAN?SQLITE_UTF
55a0: 31 36 42 45 3a 53 51 4c 49 54 45 5f 55 54 46 31  16BE:SQLITE_UTF1
55b0: 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  6LE).#endif../*.
55c0: 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72  ** Constants for
55d0: 20 74 68 65 20 6c 61 72 67 65 73 74 20 61 6e 64   the largest and
55e0: 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73 73 69 62   smallest possib
55f0: 6c 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64  le 64-bit signed
5600: 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68   integers..** Th
5610: 65 73 65 20 6d 61 63 72 6f 73 20 61 72 65 20 64  ese macros are d
5620: 65 73 69 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20  esigned to work 
5630: 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74  correctly on bot
5640: 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34 2d  h 32-bit and 64-
5650: 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73  bit.** compilers
5660: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52  ..*/.#define LAR
5670: 47 45 53 54 5f 49 4e 54 36 34 20 20 28 30 78 66  GEST_INT64  (0xf
5680: 66 66 66 66 66 66 66 7c 28 28 28 69 36 34 29 30  fffffff|(((i64)0
5690: 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 29  x7fffffff)<<32))
56a0: 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53  .#define SMALLES
56b0: 54 5f 49 4e 54 36 34 20 28 28 28 69 36 34 29 2d  T_INT64 (((i64)-
56c0: 31 29 20 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54  1) - LARGEST_INT
56d0: 36 34 29 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e  64)../* .** Roun
56e0: 64 20 75 70 20 61 20 6e 75 6d 62 65 72 20 74 6f  d up a number to
56f0: 20 74 68 65 20 6e 65 78 74 20 6c 61 72 67 65 72   the next larger
5700: 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20   multiple of 8. 
5710: 20 54 68 69 73 20 69 73 20 75 73 65 64 0a 2a 2a   This is used.**
5720: 20 74 6f 20 66 6f 72 63 65 20 38 2d 62 79 74 65   to force 8-byte
5730: 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34   alignment on 64
5740: 2d 62 69 74 20 61 72 63 68 69 74 65 63 74 75 72  -bit architectur
5750: 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52  es..*/.#define R
5760: 4f 55 4e 44 38 28 78 29 20 20 20 20 20 28 28 28  OUND8(x)     (((
5770: 78 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a  x)+7)&~7)../*.**
5780: 20 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74   Round down to t
5790: 68 65 20 6e 65 61 72 65 73 74 20 6d 75 6c 74 69  he nearest multi
57a0: 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66  ple of 8.*/.#def
57b0: 69 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78  ine ROUNDDOWN8(x
57c0: 29 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a  ) ((x)&~7)../*.*
57d0: 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68  * Assert that th
57e0: 65 20 70 6f 69 6e 74 65 72 20 58 20 69 73 20 61  e pointer X is a
57f0: 6c 69 67 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62  ligned to an 8-b
5800: 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 20 20 54  yte boundary.  T
5810: 68 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20  his.** macro is 
5820: 75 73 65 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e  used only within
5830: 20 61 73 73 65 72 74 28 29 20 74 6f 20 76 65 72   assert() to ver
5840: 69 66 79 20 74 68 61 74 20 74 68 65 20 63 6f 64  ify that the cod
5850: 65 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c  e gets.** all al
5860: 69 67 6e 6d 65 6e 74 20 72 65 73 74 72 69 63 74  ignment restrict
5870: 69 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a  ions correct..**
5880: 0a 2a 2a 20 45 78 63 65 70 74 2c 20 69 66 20 53  .** Except, if S
5890: 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49  QLITE_4_BYTE_ALI
58a0: 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64  GNED_MALLOC is d
58b0: 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 74 68 65  efined, then the
58c0: 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d  .** underlying m
58d0: 61 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e  alloc() implemen
58e0: 74 61 74 69 6f 6e 20 6d 69 67 68 74 20 72 65 74  tation might ret
58f0: 75 72 6e 20 75 73 20 34 2d 62 79 74 65 20 61 6c  urn us 4-byte al
5900: 69 67 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72  igned.** pointer
5910: 73 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73 65  s.  In that case
5920: 2c 20 6f 6e 6c 79 20 76 65 72 69 66 79 20 34 2d  , only verify 4-
5930: 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a  byte alignment..
5940: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
5950: 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f  _4_BYTE_ALIGNED_
5960: 4d 41 4c 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20  MALLOC.# define 
5970: 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e  EIGHT_BYTE_ALIGN
5980: 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68  MENT(X)   ((((ch
5990: 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a  ar*)(X) - (char*
59a0: 29 30 29 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65  )0)&3)==0).#else
59b0: 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f  .# define EIGHT_
59c0: 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58  BYTE_ALIGNMENT(X
59d0: 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58  )   ((((char*)(X
59e0: 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 37 29  ) - (char*)0)&7)
59f0: 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ==0).#endif../*.
5a00: 2a 2a 20 44 69 73 61 62 6c 65 20 4d 4d 41 50 20  ** Disable MMAP 
5a10: 6f 6e 20 70 6c 61 74 66 6f 72 6d 73 20 77 68 65  on platforms whe
5a20: 72 65 20 69 74 20 69 73 20 6b 6e 6f 77 6e 20 74  re it is known t
5a30: 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69  o not work.*/.#i
5a40: 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e  f defined(__Open
5a50: 42 53 44 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  BSD__) || define
5a60: 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20  d(__QNXNTO__).# 
5a70: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58  undef SQLITE_MAX
5a80: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66  _MMAP_SIZE.# def
5a90: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  ine SQLITE_MAX_M
5aa0: 4d 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69  MAP_SIZE 0.#endi
5ab0: 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74  f../*.** Default
5ac0: 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66   maximum size of
5ad0: 20 6d 65 6d 6f 72 79 20 75 73 65 64 20 62 79 20   memory used by 
5ae0: 6d 65 6d 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f  memory-mapped I/
5af0: 4f 20 69 6e 20 74 68 65 20 56 46 53 0a 2a 2f 0a  O in the VFS.*/.
5b00: 23 69 66 64 65 66 20 5f 5f 41 50 50 4c 45 5f 5f  #ifdef __APPLE__
5b10: 0a 23 20 69 6e 63 6c 75 64 65 20 3c 54 61 72 67  .# include <Targ
5b20: 65 74 43 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 68  etConditionals.h
5b30: 3e 0a 23 20 69 66 20 54 41 52 47 45 54 5f 4f 53  >.# if TARGET_OS
5b40: 5f 49 50 48 4f 4e 45 0a 23 20 20 20 75 6e 64 65  _IPHONE.#   unde
5b50: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  f SQLITE_MAX_MMA
5b60: 50 5f 53 49 5a 45 0a 23 20 20 20 64 65 66 69 6e  P_SIZE.#   defin
5b70: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
5b80: 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66  P_SIZE 0.# endif
5b90: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
5ba0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
5bb0: 53 49 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65  SIZE.# if define
5bc0: 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20  d(__linux__) \. 
5bd0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 57 49 4e   || defined(_WIN
5be0: 33 32 29 20 5c 0a 20 20 7c 7c 20 28 64 65 66 69  32) \.  || (defi
5bf0: 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26  ned(__APPLE__) &
5c00: 26 20 64 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48  & defined(__MACH
5c10: 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69  __)) \.  || defi
5c20: 6e 65 64 28 5f 5f 73 75 6e 29 0a 23 20 20 20 64  ned(__sun).#   d
5c30: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
5c40: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 78 37 66 66  _MMAP_SIZE 0x7ff
5c50: 66 30 30 30 30 20 20 2f 2a 20 32 31 34 37 34 31  f0000  /* 214741
5c60: 38 31 31 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23  8112 */.# else.#
5c70: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
5c80: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
5c90: 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e  .# endif.# defin
5ca0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
5cb0: 50 5f 53 49 5a 45 5f 78 63 20 31 20 2f 2a 20 65  P_SIZE_xc 1 /* e
5cc0: 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d  xclude from ctim
5cd0: 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  e.c */.#endif../
5ce0: 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74  *.** The default
5cf0: 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a 65   MMAP_SIZE is ze
5d00: 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f  ro on all platfo
5d10: 72 6d 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69  rms.  Or, even i
5d20: 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65  f a larger.** de
5d30: 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20  fault MMAP_SIZE 
5d40: 69 73 20 73 70 65 63 69 66 69 65 64 20 61 74 20  is specified at 
5d50: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61  compile-time, ma
5d60: 6b 65 20 73 75 72 65 20 74 68 61 74 20 69 74 20  ke sure that it 
5d70: 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65  does.** not exce
5d80: 65 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d  ed the maximum m
5d90: 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  map size..*/.#if
5da0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
5db0: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  ULT_MMAP_SIZE.# 
5dc0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
5dd0: 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20  FAULT_MMAP_SIZE 
5de0: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
5df0: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
5e00: 49 5a 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63  IZE_xc 1  /* Exc
5e10: 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e  lude from ctime.
5e20: 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 20  c */.#endif.#if 
5e30: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
5e40: 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49 54 45 5f  MAP_SIZE>SQLITE_
5e50: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
5e60: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  undef SQLITE_DEF
5e70: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  AULT_MMAP_SIZE.#
5e80: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
5e90: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
5ea0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
5eb0: 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  _SIZE.#endif../*
5ec0: 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20  .** Only one of 
5ed0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
5ee0: 41 54 33 20 6f 72 20 53 51 4c 49 54 45 5f 45 4e  AT3 or SQLITE_EN
5ef0: 41 42 4c 45 5f 53 54 41 54 34 20 63 61 6e 20 62  ABLE_STAT4 can b
5f00: 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a 20 50 72  e defined..** Pr
5f10: 69 6f 72 69 74 79 20 69 73 20 67 69 76 65 6e 20  iority is given 
5f20: 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  to SQLITE_ENABLE
5f30: 5f 53 54 41 54 34 2e 20 20 49 66 20 65 69 74 68  _STAT4.  If eith
5f40: 65 72 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20  er are defined, 
5f50: 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e 65 20 53  also.** define S
5f60: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
5f70: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f 0a 23  T3_OR_STAT4.*/.#
5f80: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
5f90: 42 4c 45 5f 53 54 41 54 34 0a 23 20 75 6e 64 65  BLE_STAT4.# unde
5fa0: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
5fb0: 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53  STAT3.# define S
5fc0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
5fd0: 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65  T3_OR_STAT4 1.#e
5fe0: 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  lif SQLITE_ENABL
5ff0: 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65  E_STAT3.# define
6000: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
6010: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a  TAT3_OR_STAT4 1.
6020: 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41  #elif SQLITE_ENA
6030: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
6040: 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  T4.# undef SQLIT
6050: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
6060: 52 5f 53 54 41 54 34 0a 23 65 6e 64 69 66 0a 0a  R_STAT4.#endif..
6070: 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54 52 41 43  /*.** SELECTTRAC
6080: 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c 6c 20 62  E_ENABLED will b
6090: 65 20 65 69 74 68 65 72 20 31 20 6f 72 20 30 20  e either 1 or 0 
60a0: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
60b0: 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a 2a 20 74  ther or not.** t
60c0: 68 65 20 53 65 6c 65 63 74 20 71 75 65 72 79 20  he Select query 
60d0: 67 65 6e 65 72 61 74 6f 72 20 74 72 61 63 69 6e  generator tracin
60e0: 67 20 6c 6f 67 69 63 20 69 73 20 74 75 72 6e 65  g logic is turne
60f0: 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  d on..*/.#if def
6100: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
6110: 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  G) || defined(SQ
6120: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45  LITE_ENABLE_SELE
6130: 43 54 54 52 41 43 45 29 0a 23 20 64 65 66 69 6e  CTTRACE).# defin
6140: 65 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  e SELECTTRACE_EN
6150: 41 42 4c 45 44 20 31 0a 23 65 6c 73 65 0a 23 20  ABLED 1.#else.# 
6160: 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41  define SELECTTRA
6170: 43 45 5f 45 4e 41 42 4c 45 44 20 30 0a 23 65 6e  CE_ENABLED 0.#en
6180: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
6190: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
61a0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
61b0: 65 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  e is used to sto
61c0: 72 65 20 74 68 65 20 62 75 73 79 2d 68 61 6e 64  re the busy-hand
61d0: 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20  ler.** callback 
61e0: 66 6f 72 20 61 20 67 69 76 65 6e 20 73 71 6c 69  for a given sqli
61f0: 74 65 20 68 61 6e 64 6c 65 2e 20 0a 2a 2a 0a 2a  te handle. .**.*
6200: 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62 75 73  * The sqlite.bus
6210: 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65 72 20  yHandler member 
6220: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20 73 74  of the sqlite st
6230: 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  ruct contains th
6240: 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c 62 61  e busy.** callba
6250: 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  ck for the datab
6260: 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61 63 68  ase handle. Each
6270: 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20 76 69   pager opened vi
6280: 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20  a the sqlite.** 
6290: 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73 65 64  handle is passed
62a0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 73 71   a pointer to sq
62b0: 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72  lite.busyHandler
62c0: 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e 64 6c  . The busy-handl
62d0: 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 69  er.** callback i
62e0: 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 76 6f  s currently invo
62f0: 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20 77 69  ked only from wi
6300: 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a 2a 2f  thin pager.c..*/
6310: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6320: 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75 73 79  BusyHandler Busy
6330: 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63 74 20  Handler;.struct 
6340: 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a 20 20  BusyHandler {.  
6350: 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76 6f 69  int (*xFunc)(voi
6360: 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68  d *,int);  /* Th
6370: 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  e busy callback 
6380: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 3b  */.  void *pArg;
6390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
63a0: 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74 6f 20  /* First arg to 
63b0: 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  busy callback */
63c0: 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20 20 20  .  int nBusy;   
63d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
63e0: 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74   Incremented wit
63f0: 68 20 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c  h each busy call
6400: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61   */.};../*.** Na
6410: 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72  me of the master
6420: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e   database table.
6430: 20 20 54 68 65 20 6d 61 73 74 65 72 20 64 61 74    The master dat
6440: 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69  abase table.** i
6450: 73 20 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c  s a special tabl
6460: 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  e that holds the
6470: 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69   names and attri
6480: 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20  butes of all.** 
6490: 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20  user tables and 
64a0: 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66  indices..*/.#def
64b0: 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20  ine MASTER_NAME 
64c0: 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61        "sqlite_ma
64d0: 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45  ster".#define TE
64e0: 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20  MP_MASTER_NAME  
64f0: 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
6500: 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ter"../*.** The 
6510: 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65  root-page of the
6520: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
6530: 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69   table..*/.#defi
6540: 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20  ne MASTER_ROOT  
6550: 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68       1../*.** Th
6560: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63  e name of the sc
6570: 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23  hema table..*/.#
6580: 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41  define SCHEMA_TA
6590: 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f  BLE(x)  ((!OMIT_
65a0: 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f  TEMPDB)&&(x==1)?
65b0: 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45  TEMP_MASTER_NAME
65c0: 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f  :MASTER_NAME)../
65d0: 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e  *.** A convenien
65e0: 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65  ce macro that re
65f0: 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
6600: 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a   of elements in.
6610: 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a  ** an array..*/.
6620: 23 64 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a  #define ArraySiz
6630: 65 28 58 29 20 20 20 20 28 28 69 6e 74 29 28 73  e(X)    ((int)(s
6640: 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28  izeof(X)/sizeof(
6650: 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44  X[0])))../*.** D
6660: 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20  etermine if the 
6670: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f  argument is a po
6680: 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64  wer of two.*/.#d
6690: 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54  efine IsPowerOfT
66a0: 77 6f 28 58 29 20 28 28 28 58 29 26 28 28 58 29  wo(X) (((X)&((X)
66b0: 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  -1))==0)../*.** 
66c0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61  The following va
66d0: 6c 75 65 20 61 73 20 61 20 64 65 73 74 72 75 63  lue as a destruc
66e0: 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65  tor means to use
66f0: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
6700: 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33  ..** The sqlite3
6710: 44 62 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65  DbFree() routine
6720: 20 72 65 71 75 69 72 65 73 20 74 77 6f 20 70 61   requires two pa
6730: 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64  rameters instead
6740: 20 6f 66 20 74 68 65 20 0a 2a 2a 20 6f 6e 65 20   of the .** one 
6750: 70 61 72 61 6d 65 74 65 72 20 74 68 61 74 20 64  parameter that d
6760: 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61  estructors norma
6770: 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77 65  lly want.  So we
6780: 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64 75   have to introdu
6790: 63 65 20 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69  ce .** this magi
67a0: 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65  c value that the
67b0: 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68   code knows to h
67c0: 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74 6c  andle differentl
67d0: 79 2e 20 20 41 6e 79 20 0a 2a 2a 20 70 6f 69 6e  y.  Any .** poin
67e0: 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65  ter will work he
67f0: 72 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74  re as long as it
6800: 20 69 73 20 64 69 73 74 69 6e 63 74 20 66 72 6f   is distinct fro
6810: 6d 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 0a  m SQLITE_STATIC.
6820: 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54 52  ** and SQLITE_TR
6830: 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66  ANSIENT..*/.#def
6840: 69 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d  ine SQLITE_DYNAM
6850: 49 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f 64  IC   ((sqlite3_d
6860: 65 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29 73  estructor_type)s
6870: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65  qlite3MallocSize
6880: 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51  )../*.** When SQ
6890: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73  LITE_OMIT_WSD is
68a0: 20 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61   defined, it mea
68b0: 6e 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67  ns that the targ
68c0: 65 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73  et platform does
68d0: 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  .** not support 
68e0: 57 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20  Writable Static 
68f0: 44 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20  Data (WSD) such 
6900: 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74  as global and st
6910: 61 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a  atic variables..
6920: 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73  ** All variables
6930: 20 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20   must either be 
6940: 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20  on the stack or 
6950: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
6960: 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68  cated from.** th
6970: 65 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53  e heap.  When WS
6980: 44 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64  D is unsupported
6990: 2c 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64  , the variable d
69a0: 65 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74  eclarations scat
69b0: 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68  tered.** through
69c0: 6f 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63  out the SQLite c
69d0: 6f 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20  ode must become 
69e0: 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61  constants instea
69f0: 64 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57  d.  The SQLITE_W
6a00: 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75  SD.** macro is u
6a10: 73 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72  sed for this pur
6a20: 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65  pose.  And inste
6a30: 61 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e  ad of referencin
6a40: 67 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a  g the variable.*
6a50: 2a 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75  * directly, we u
6a60: 73 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20  se its constant 
6a70: 61 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b  as a key to look
6a80: 75 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20  up the run-time 
6a90: 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66  allocated.** buf
6aa0: 66 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72  fer that holds r
6ab0: 65 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54  eal variable.  T
6ac0: 68 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61  he constant is a
6ad0: 6c 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69  lso the initiali
6ae0: 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  zer.** for the r
6af0: 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65  un-time allocate
6b00: 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20  d buffer..**.** 
6b10: 49 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73  In the usual cas
6b20: 65 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73  e where WSD is s
6b30: 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51  upported, the SQ
6b40: 4c 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f  LITE_WSD and GLO
6b50: 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65  BAL.** macros be
6b60: 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20  come no-ops and 
6b70: 68 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72  have zero perfor
6b80: 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f  mance impact..*/
6b90: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
6ba0: 4d 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e  MIT_WSD.  #defin
6bb0: 65 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e  e SQLITE_WSD con
6bc0: 73 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f  st.  #define GLO
6bd0: 42 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73  BAL(t,v) (*(t*)s
6be0: 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28  qlite3_wsd_find(
6bf0: 28 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a  (void*)&(v), siz
6c00: 65 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69  eof(v))).  #defi
6c10: 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ne sqlite3Global
6c20: 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74  Config GLOBAL(st
6c30: 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
6c40: 69 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  ig, sqlite3Confi
6c50: 67 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  g).  int sqlite3
6c60: 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c  _wsd_init(int N,
6c70: 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20   int J);.  void 
6c80: 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e  *sqlite3_wsd_fin
6c90: 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c  d(void *K, int L
6ca0: 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
6cb0: 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20 0a 20  ne SQLITE_WSD . 
6cc0: 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28   #define GLOBAL(
6cd0: 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65  t,v) v.  #define
6ce0: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
6cf0: 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66  nfig sqlite3Conf
6d00: 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ig.#endif../*.**
6d10: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
6d20: 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20 74  acros are used t
6d30: 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69  o suppress compi
6d40: 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64  ler warnings and
6d50: 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63   to.** make it c
6d60: 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65  lear to human re
6d70: 61 64 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e  aders 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 64 65 6c 69 62 65 72 61 74 65 6c 79 20  is deliberately 
6da0: 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64 20  .** left unused 
6db0: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
6dc0: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54  of a function. T
6dd0: 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70 70  his usually happ
6de0: 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75  ens when.** a fu
6df0: 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64  nction is called
6e00: 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e 20   via a function 
6e10: 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78 61  pointer. For exa
6e20: 6d 70 6c 65 20 74 68 65 20 0a 2a 2a 20 69 6d 70  mple the .** imp
6e30: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  lementation of a
6e40: 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65 20  n SQL aggregate 
6e50: 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61  step callback ma
6e60: 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a  y not use the.**
6e70: 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69 63   parameter indic
6e80: 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65 72  ating the number
6e90: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61   of arguments pa
6ea0: 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67 72  ssed to the aggr
6eb0: 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20  egate,.** if it 
6ec0: 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73 20  knows that this 
6ed0: 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73 65  is enforced else
6ee0: 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  where..**.** Whe
6ef0: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
6f00: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
6f10: 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69 6e  ed at all within
6f20: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66   the body of a f
6f30: 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69  unction,.** it i
6f40: 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65  s generally name
6f50: 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20 22  d "NotUsed" or "
6f60: 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61 6b  NotUsed2" to mak
6f70: 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63 6c  e things even cl
6f80: 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65  earer..** Howeve
6f90: 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73 20  r, these macros 
6fa0: 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64  may also be used
6fb0: 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61 72   to suppress war
6fc0: 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74 6f  nings related to
6fd0: 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20 74  .** parameters t
6fe0: 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e  hat may or may n
6ff0: 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65 6e  ot be used depen
7000: 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74  ding on compilat
7010: 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20  ion options..** 
7020: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f 73  For example thos
7030: 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c  e parameters onl
7040: 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72 74  y used in assert
7050: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49  () statements. I
7060: 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65 73  n these.** cases
7070: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
7080: 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65 72  are named as per
7090: 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76 65   the usual conve
70a0: 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ntions..*/.#defi
70b0: 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  ne UNUSED_PARAME
70c0: 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78 29  TER(x) (void)(x)
70d0: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
70e0: 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29 20  PARAMETER2(x,y) 
70f0: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
7100: 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d  (x),UNUSED_PARAM
7110: 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46  ETER(y)../*.** F
7120: 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65  orward reference
7130: 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73 0a  s to structures.
7140: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
7150: 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e 66  t AggInfo AggInf
7160: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
7170: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41 75  t AuthContext Au
7180: 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  thContext;.typed
7190: 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69 6e  ef struct Autoin
71a0: 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66  cInfo AutoincInf
71b0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
71c0: 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63 3b  t Bitvec Bitvec;
71d0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
71e0: 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b  CollSeq CollSeq;
71f0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7200: 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74  Column Column;.t
7210: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
7220: 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74 72   Db;.typedef str
7230: 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65 6d  uct Schema Schem
7240: 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  a;.typedef struc
7250: 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79 70  t Expr Expr;.typ
7260: 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72  edef struct Expr
7270: 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a 74  List ExprList;.t
7280: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
7290: 70 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e 3b  prSpan ExprSpan;
72a0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
72b0: 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65 64  FKey FKey;.typed
72c0: 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65  ef struct FuncDe
72d0: 73 74 72 75 63 74 6f 72 20 46 75 6e 63 44 65 73  structor FuncDes
72e0: 74 72 75 63 74 6f 72 3b 0a 74 79 70 65 64 65 66  tructor;.typedef
72f0: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20   struct FuncDef 
7300: 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64 65 66  FuncDef;.typedef
7310: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48   struct FuncDefH
7320: 61 73 68 20 46 75 6e 63 44 65 66 48 61 73 68 3b  ash FuncDefHash;
7330: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7340: 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a 74  IdList IdList;.t
7350: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e  ypedef struct In
7360: 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65 64  dex Index;.typed
7370: 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 53  ef struct IndexS
7380: 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c  ample IndexSampl
7390: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
73a0: 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79 43 6c  t KeyClass KeyCl
73b0: 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ass;.typedef str
73c0: 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49  uct KeyInfo KeyI
73d0: 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72  nfo;.typedef str
73e0: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f  uct Lookaside Lo
73f0: 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64 65 66  okaside;.typedef
7400: 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64   struct Lookasid
7410: 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53  eSlot LookasideS
7420: 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  lot;.typedef str
7430: 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c  uct Module Modul
7440: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
7450: 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61  t NameContext Na
7460: 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  meContext;.typed
7470: 65 66 20 73 74 72 75 63 74 20 50 61 72 73 65 20  ef struct Parse 
7480: 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66 20 73  Parse;.typedef s
7490: 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75  truct PrintfArgu
74a0: 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72 67 75  ments PrintfArgu
74b0: 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66 20 73  ments;.typedef s
74c0: 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f 77  truct RowSet Row
74d0: 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Set;.typedef str
74e0: 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53 61  uct Savepoint Sa
74f0: 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66  vepoint;.typedef
7500: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 53   struct Select S
7510: 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73  elect;.typedef s
7520: 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72 65  truct SQLiteThre
7530: 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64 3b  ad SQLiteThread;
7540: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7550: 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63  SelectDest Selec
7560: 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73  tDest;.typedef s
7570: 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53 72  truct SrcList Sr
7580: 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  cList;.typedef s
7590: 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 53  truct StrAccum S
75a0: 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66  trAccum;.typedef
75b0: 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61   struct Table Ta
75c0: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
75d0: 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61  uct TableLock Ta
75e0: 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66  bleLock;.typedef
75f0: 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f   struct Token To
7600: 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ken;.typedef str
7610: 75 63 74 20 54 72 65 65 56 69 65 77 20 54 72 65  uct TreeView Tre
7620: 65 56 69 65 77 3b 0a 74 79 70 65 64 65 66 20 73  eView;.typedef s
7630: 74 72 75 63 74 20 54 72 69 67 67 65 72 20 54 72  truct Trigger Tr
7640: 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73  igger;.typedef s
7650: 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72 67  truct TriggerPrg
7660: 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70   TriggerPrg;.typ
7670: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67  edef struct Trig
7680: 67 65 72 53 74 65 70 20 54 72 69 67 67 65 72 53  gerStep TriggerS
7690: 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72  tep;.typedef str
76a0: 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  uct UnpackedReco
76b0: 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  rd UnpackedRecor
76c0: 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  d;.typedef struc
76d0: 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b  t VTable VTable;
76e0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
76f0: 56 74 61 62 43 74 78 20 56 74 61 62 43 74 78 3b  VtabCtx VtabCtx;
7700: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7710: 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74  Walker Walker;.t
7720: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 68  ypedef struct Wh
7730: 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66  ereInfo WhereInf
7740: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
7750: 74 20 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f 2a  t With With;../*
7760: 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69  .** Defer sourci
7770: 6e 67 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74  ng vdbe.h and bt
7780: 72 65 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65  ree.h until afte
7790: 72 20 74 68 65 20 22 75 38 22 20 61 6e 64 20 0a  r the "u8" and .
77a0: 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65 72 22  ** "BusyHandler"
77b0: 20 74 79 70 65 64 65 66 73 2e 20 76 64 62 65 2e   typedefs. vdbe.
77c0: 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65 73 20  h also requires 
77d0: 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f 70 61  a few of the opa
77e0: 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  que.** pointer t
77f0: 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e 63 44  ypes (i.e. FuncD
7800: 65 66 29 20 64 65 66 69 6e 65 64 20 61 62 6f 76  ef) defined abov
7810: 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  e..*/.#include "
7820: 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64  btree.h".#includ
7830: 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c  e "vdbe.h".#incl
7840: 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a 23 69  ude "pager.h".#i
7850: 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65 2e 68  nclude "pcache.h
7860: 22 0a 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e  "..#include "os.
7870: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74  h".#include "mut
7880: 65 78 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  ex.h".../*.** Ea
7890: 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ch database file
78a0: 20 74 6f 20 62 65 20 61 63 63 65 73 73 65 64 20   to be accessed 
78b0: 62 79 20 74 68 65 20 73 79 73 74 65 6d 20 69 73  by the system is
78c0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
78d0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
78e0: 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65   structure.  The
78f0: 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20  re are normally 
7900: 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72  two of these str
7910: 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68  uctures.** in th
7920: 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61  e sqlite.aDb[] a
7930: 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73  rray.  aDb[0] is
7940: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
7950: 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61  se file and.** a
7960: 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74  Db[1] is the dat
7970: 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
7980: 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72  to hold temporar
7990: 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74  y tables.  Addit
79a0: 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73  ional.** databas
79b0: 65 73 20 6d 61 79 20 62 65 20 61 74 74 61 63 68  es may be attach
79c0: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62  ed..*/.struct Db
79d0: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
79e0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ;         /* Nam
79f0: 65 20 6f 66 20 74 68 69 73 20 64 61 74 61 62 61  e of this databa
7a00: 73 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  se */.  Btree *p
7a10: 42 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  Bt;          /* 
7a20: 54 68 65 20 42 2a 54 72 65 65 20 73 74 72 75 63  The B*Tree struc
7a30: 74 75 72 65 20 66 6f 72 20 74 68 69 73 20 64 61  ture for this da
7a40: 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20  tabase file */. 
7a50: 20 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c   u8 safety_level
7a60: 3b 20 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67  ;     /* How agg
7a70: 72 65 73 73 69 76 65 20 61 74 20 73 79 6e 63 69  ressive at synci
7a80: 6e 67 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20  ng data to disk 
7a90: 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
7aa0: 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69  hema;     /* Poi
7ab0: 6e 74 65 72 20 74 6f 20 64 61 74 61 62 61 73 65  nter to database
7ac0: 20 73 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c   schema (possibl
7ad0: 79 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a  y shared) */.};.
7ae0: 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
7af0: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
7b00: 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 73 74  ing structure st
7b10: 6f 72 65 73 20 61 20 64 61 74 61 62 61 73 65 20  ores a database 
7b20: 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f  schema..**.** Mo
7b30: 73 74 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  st Schema object
7b40: 73 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64  s are associated
7b50: 20 77 69 74 68 20 61 20 42 74 72 65 65 2e 20 20   with a Btree.  
7b60: 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73  The exception is
7b70: 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66  .** the Schema f
7b80: 6f 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  or the TEMP data
7b90: 62 61 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44  baes (sqlite3.aD
7ba0: 62 5b 31 5d 29 20 77 68 69 63 68 20 69 73 20 66  b[1]) which is f
7bb0: 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a  ree-standing..**
7bc0: 20 49 6e 20 73 68 61 72 65 64 20 63 61 63 68 65   In shared cache
7bd0: 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20   mode, a single 
7be0: 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61  Schema object ca
7bf0: 6e 20 62 65 20 73 68 61 72 65 64 20 62 79 20 6d  n be shared by m
7c00: 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65  ultiple.** Btree
7c10: 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20  s that refer to 
7c20: 74 68 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79  the same underly
7c30: 69 6e 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a  ing BtShared obj
7c40: 65 63 74 2e 0a 2a 2a 20 0a 2a 2a 20 53 63 68 65  ect..** .** Sche
7c50: 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61  ma objects are a
7c60: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61  utomatically dea
7c70: 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68  llocated when th
7c80: 65 20 6c 61 73 74 20 42 74 72 65 65 20 74 68 61  e last Btree tha
7c90: 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20  t.** references 
7ca0: 74 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65  them is destroye
7cb0: 64 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53 63  d.   The TEMP Sc
7cc0: 68 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79  hema is manually
7cd0: 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c   freed by.** sql
7ce0: 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a  ite3_close()..*.
7cf0: 2a 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73 74  ** A thread must
7d00: 20 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75   be holding a mu
7d10: 74 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65  tex on the corre
7d20: 73 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69  sponding Btree i
7d30: 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63  n order.** to ac
7d40: 63 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74  cess Schema cont
7d50: 65 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69  ent.  This impli
7d60: 65 73 20 74 68 61 74 20 74 68 65 20 74 68 72 65  es that the thre
7d70: 61 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a  ad must also be.
7d80: 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74  ** holding a mut
7d90: 65 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65  ex on the sqlite
7da0: 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69  3 connection poi
7db0: 6e 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74  nter that owns t
7dc0: 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72  he Btree..** For
7dd0: 20 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20   a TEMP Schema, 
7de0: 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74  only the connect
7df0: 69 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71  ion mutex is req
7e00: 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  uired..*/.struct
7e10: 20 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20   Schema {.  int 
7e20: 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20  schema_cookie;  
7e30: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63 68   /* Database sch
7e40: 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62  ema version numb
7e50: 65 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65  er for this file
7e60: 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72   */.  int iGener
7e70: 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65  ation;     /* Ge
7e80: 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
7e90: 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77  .  Incremented w
7ea0: 69 74 68 20 65 61 63 68 20 63 68 61 6e 67 65 20  ith each change 
7eb0: 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73  */.  Hash tblHas
7ec0: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  h;        /* All
7ed0: 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20   tables indexed 
7ee0: 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73  by name */.  Has
7ef0: 68 20 69 64 78 48 61 73 68 3b 20 20 20 20 20 20  h idxHash;      
7f00: 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29    /* All (named)
7f10: 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64   indices indexed
7f20: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
7f30: 73 68 20 74 72 69 67 48 61 73 68 3b 20 20 20 20  sh trigHash;    
7f40: 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65     /* All trigge
7f50: 72 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  rs indexed by na
7f60: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65  me */.  Hash fke
7f70: 79 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  yHash;       /* 
7f80: 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  All foreign keys
7f90: 20 62 79 20 72 65 66 65 72 65 6e 63 65 64 20 74   by referenced t
7fa0: 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54  able name */.  T
7fb0: 61 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20  able *pSeqTab;  
7fc0: 20 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74      /* The sqlit
7fd0: 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65  e_sequence table
7fe0: 20 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43   used by AUTOINC
7ff0: 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66  REMENT */.  u8 f
8000: 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20  ile_format;     
8010: 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61   /* Schema forma
8020: 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68  t version for th
8030: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20  is file */.  u8 
8040: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
8050: 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
8060: 6e 67 20 75 73 65 64 20 62 79 20 74 68 69 73 20  ng used by this 
8070: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31  database */.  u1
8080: 36 20 73 63 68 65 6d 61 46 6c 61 67 73 3b 20 20  6 schemaFlags;  
8090: 20 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f     /* Flags asso
80a0: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
80b0: 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74   schema */.  int
80c0: 20 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20   cache_size;    
80d0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
80e0: 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74  ages to use in t
80f0: 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a  he cache */.};..
8100: 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  /*.** These macr
8110: 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  os can be used t
8120: 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20  o test, set, or 
8130: 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68  clear bits in th
8140: 65 20 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61  e .** Db.pSchema
8150: 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ->flags field..*
8160: 2f 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 50  /.#define DbHasP
8170: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
8180: 20 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d     (((D)->aDb[I]
8190: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
81a0: 46 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29  Flags&(P))==(P))
81b0: 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e  .#define DbHasAn
81c0: 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  yProperty(D,I,P)
81d0: 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e    (((D)->aDb[I].
81e0: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
81f0: 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64  lags&(P))!=0).#d
8200: 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65  efine DbSetPrope
8210: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28  rty(D,I,P)     (
8220: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
8230: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c  ma->schemaFlags|
8240: 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43  =(P).#define DbC
8250: 6c 65 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49  learProperty(D,I
8260: 2c 50 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49  ,P)   (D)->aDb[I
8270: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
8280: 61 46 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a  aFlags&=~(P)../*
8290: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
82a0: 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53  es for the DB.pS
82b0: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65  chema->flags fie
82c0: 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42  ld..**.** The DB
82d0: 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c  _SchemaLoaded fl
82e0: 61 67 20 69 73 20 73 65 74 20 61 66 74 65 72 20  ag is set after 
82f0: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
8300: 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20  ema has been.** 
8310: 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e  read into intern
8320: 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a  al hash tables..
8330: 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74  **.** DB_Unreset
8340: 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74  Views means that
8350: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65   one or more vie
8360: 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e  ws have column n
8370: 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76  ames that.** hav
8380: 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75  e been filled ou
8390: 74 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d  t.  If the schem
83a0: 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65  a changes, these
83b0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69   column names mi
83c0: 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61  ght.** changes a
83d0: 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77 20 77  nd so the view w
83e0: 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72  ill need to be r
83f0: 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  eset..*/.#define
8400: 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
8410: 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54      0x0001  /* T
8420: 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  he schema has be
8430: 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65  en loaded */.#de
8440: 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56  fine DB_UnresetV
8450: 69 65 77 73 20 20 20 20 30 78 30 30 30 32 20 20  iews    0x0002  
8460: 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61  /* Some views ha
8470: 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d  ve defined colum
8480: 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69  n names */.#defi
8490: 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20  ne DB_Empty     
84a0: 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
84b0: 20 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70   The file is emp
84c0: 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74  ty (length 0 byt
84d0: 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  es) */../*.** Th
84e0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66 66  e number of diff
84f0: 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74  erent kinds of t
8500: 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20 62  hings that can b
8510: 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69  e limited.** usi
8520: 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6c  ng the sqlite3_l
8530: 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63 65  imit() interface
8540: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
8550: 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c  ITE_N_LIMIT (SQL
8560: 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52  ITE_LIMIT_WORKER
8570: 5f 54 48 52 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a  _THREADS+1)../*.
8580: 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** Lookaside mal
8590: 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66 20  loc is a set of 
85a0: 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65  fixed-size buffe
85b0: 72 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 75  rs that can be u
85c0: 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66  sed.** to satisf
85d0: 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e  y small transien
85e0: 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  t memory allocat
85f0: 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72  ion requests for
8600: 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f   objects.** asso
8610: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70 61  ciated with a pa
8620: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
8630: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54  e connection.  T
8640: 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f  he use of.** loo
8650: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72  kaside malloc pr
8660: 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69 66 69  ovides a signifi
8670: 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  cant performance
8680: 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20   enhancement.** 
8690: 28 61 70 70 72 6f 78 20 31 30 25 29 20 62 79 20  (approx 10%) by 
86a0: 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75  avoiding numerou
86b0: 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65  s malloc/free re
86c0: 71 75 65 73 74 73 20 77 68 69 6c 65 20 70 61 72  quests while par
86d0: 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74  sing.** SQL stat
86e0: 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  ements..**.** Th
86f0: 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75  e Lookaside stru
8700: 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66  cture holds conf
8710: 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d  iguration inform
8720: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a  ation about the.
8730: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** lookaside mal
8740: 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20  loc subsystem.  
8750: 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d  Each available m
8760: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
8770: 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61   in.** the looka
8780: 73 69 64 65 20 73 75 62 73 79 73 74 65 6d 20 69  side subsystem i
8790: 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69  s stored on a li
87a0: 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f  nked list of Loo
87b0: 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62  kasideSlot.** ob
87c0: 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f  jects..**.** Loo
87d0: 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f  kaside allocatio
87e0: 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f  ns are only allo
87f0: 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20  wed for objects 
8800: 74 68 61 74 20 61 72 65 20 61 73 73 6f 63 69 61  that are associa
8810: 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61  ted.** with a pa
8820: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
8830: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48  e connection.  H
8840: 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66  ence, schema inf
8850: 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a  ormation cannot.
8860: 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  ** be stored in 
8870: 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73  lookaside becaus
8880: 65 20 69 6e 20 73 68 61 72 65 64 20 63 61 63 68  e in shared cach
8890: 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d  e mode the schem
88a0: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  a information.**
88b0: 20 69 73 20 73 68 61 72 65 64 20 62 79 20 6d 75   is shared by mu
88c0: 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
88d0: 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68  connections.  Th
88e0: 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70  erefore, while p
88f0: 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61  arsing.** schema
8900: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68   information, th
8910: 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61  e Lookaside.bEna
8920: 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65  bled flag is cle
8930: 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20  ared so that.** 
8940: 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  lookaside alloca
8950: 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73  tions are not us
8960: 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20  ed to construct 
8970: 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  the schema objec
8980: 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f  ts..*/.struct Lo
8990: 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 31 36 20  okaside {.  u16 
89a0: 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sz;             
89b0: 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65      /* Size of e
89c0: 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62 79  ach buffer in by
89d0: 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e 61  tes */.  u8 bEna
89e0: 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  bled;           
89f0: 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64 69 73   /* False to dis
8a00: 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73 69  able new lookasi
8a10: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  de allocations *
8a20: 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64  /.  u8 bMalloced
8a30: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
8a40: 72 75 65 20 69 66 20 70 53 74 61 72 74 20 6f 62  rue if pStart ob
8a50: 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69  tained from sqli
8a60: 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a  te3_malloc() */.
8a70: 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20    int nOut;     
8a80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
8a90: 62 65 72 20 6f 66 20 62 75 66 66 65 72 73 20 63  ber of buffers c
8aa0: 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64  urrently checked
8ab0: 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78   out */.  int mx
8ac0: 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  Out;            
8ad0: 20 20 2f 2a 20 48 69 67 68 77 61 74 65 72 20 6d    /* Highwater m
8ae0: 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a  ark for nOut */.
8af0: 20 20 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b    int anStat[3];
8b00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a 20            /* 0: 
8b10: 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d  hits.  1: size m
8b20: 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20  isses.  2: full 
8b30: 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b  misses */.  Look
8b40: 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65  asideSlot *pFree
8b50: 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61  ;   /* List of a
8b60: 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73  vailable buffers
8b70: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61   */.  void *pSta
8b80: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  rt;           /*
8b90: 20 46 69 72 73 74 20 62 79 74 65 20 6f 66 20 61   First byte of a
8ba0: 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20  vailable memory 
8bb0: 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20  space */.  void 
8bc0: 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20  *pEnd;          
8bd0: 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65     /* First byte
8be0: 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61   past end of ava
8bf0: 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a  ilable space */.
8c00: 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  };.struct Lookas
8c10: 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b  ideSlot {.  Look
8c20: 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74  asideSlot *pNext
8c30: 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66  ;    /* Next buf
8c40: 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20  fer in the list 
8c50: 6f 66 20 66 72 65 65 20 62 75 66 66 65 72 73 20  of free buffers 
8c60: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68  */.};../*.** A h
8c70: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
8c80: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
8c90: 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65  ns..**.** Hash e
8ca0: 61 63 68 20 46 75 6e 63 44 65 66 20 73 74 72 75  ach FuncDef stru
8cb0: 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f  cture into one o
8cc0: 66 20 74 68 65 20 46 75 6e 63 44 65 66 48 61 73  f the FuncDefHas
8cd0: 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20  h.a[] slots..** 
8ce0: 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f  Collisions are o
8cf0: 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e 70 48  n the FuncDef.pH
8d00: 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73 74  ash chain..*/.st
8d10: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
8d20: 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b   {.  FuncDef *a[
8d30: 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61  23];       /* Ha
8d40: 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e  sh table for fun
8d50: 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69  ctions */.};..#i
8d60: 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52  fdef SQLITE_USER
8d70: 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a  _AUTHENTICATION.
8d80: 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69 6f  /*.** Informatio
8d90: 6e 20 68 65 6c 64 20 69 6e 20 74 68 65 20 22 73  n held in the "s
8da0: 71 6c 69 74 65 33 22 20 64 61 74 61 62 61 73 65  qlite3" database
8db0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65   connection obje
8dc0: 63 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74  ct and used.** t
8dd0: 6f 20 6d 61 6e 61 67 65 20 75 73 65 72 20 61 75  o manage user au
8de0: 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f  thentication..*/
8df0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8e00: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
8e10: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
8e20: 68 3b 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65  h;.struct sqlite
8e30: 33 5f 75 73 65 72 61 75 74 68 20 7b 0a 20 20 75  3_userauth {.  u
8e40: 38 20 61 75 74 68 4c 65 76 65 6c 3b 20 20 20 20  8 authLevel;    
8e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8e60: 43 75 72 72 65 6e 74 20 61 75 74 68 65 6e 74 69  Current authenti
8e70: 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a  cation level */.
8e80: 20 20 69 6e 74 20 6e 41 75 74 68 50 57 3b 20 20    int nAuthPW;  
8e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ea0: 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 7a  /* Size of the z
8eb0: 41 75 74 68 50 57 20 69 6e 20 62 79 74 65 73 20  AuthPW in bytes 
8ec0: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68  */.  char *zAuth
8ed0: 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  PW;             
8ee0: 20 20 20 2f 2a 20 50 61 73 73 77 6f 72 64 20 75     /* Password u
8ef0: 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63  sed to authentic
8f00: 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ate */.  char *z
8f10: 41 75 74 68 55 73 65 72 3b 20 20 20 20 20 20 20  AuthUser;       
8f20: 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 6e         /* User n
8f30: 61 6d 65 20 75 73 65 64 20 74 6f 20 61 75 74 68  ame used to auth
8f40: 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a  enticate */.};..
8f50: 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  /* Allowed value
8f60: 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 75 73  s for sqlite3_us
8f70: 65 72 61 75 74 68 2e 61 75 74 68 4c 65 76 65 6c  erauth.authLevel
8f80: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54   */.#define UAUT
8f90: 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30 20  H_Unknown     0 
8fa0: 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63      /* Authentic
8fb0: 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63 68  ation not yet ch
8fc0: 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  ecked */.#define
8fd0: 20 55 41 55 54 48 5f 46 61 69 6c 20 20 20 20 20   UAUTH_Fail     
8fe0: 20 20 20 31 20 20 20 20 20 2f 2a 20 55 73 65 72     1     /* User
8ff0: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   authentication 
9000: 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e  failed */.#defin
9010: 65 20 55 41 55 54 48 5f 55 73 65 72 20 20 20 20  e UAUTH_User    
9020: 20 20 20 20 32 20 20 20 20 20 2f 2a 20 41 75 74      2     /* Aut
9030: 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61 20  henticated as a 
9040: 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a 23  normal user */.#
9050: 64 65 66 69 6e 65 20 55 41 55 54 48 5f 41 64 6d  define UAUTH_Adm
9060: 69 6e 20 20 20 20 20 20 20 33 20 20 20 20 20 2f  in       3     /
9070: 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64 20  * Authenticated 
9080: 61 73 20 61 6e 20 61 64 6d 69 6e 69 73 74 72 61  as an administra
9090: 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74  tor */../* Funct
90a0: 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20 62  ions used only b
90b0: 79 20 75 73 65 72 20 61 75 74 68 6f 72 69 7a 61  y user authoriza
90c0: 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e  tion logic */.in
90d0: 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74  t sqlite3UserAut
90e0: 68 54 61 62 6c 65 28 63 6f 6e 73 74 20 63 68 61  hTable(const cha
90f0: 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
9100: 55 73 65 72 41 75 74 68 43 68 65 63 6b 4c 6f 67  UserAuthCheckLog
9110: 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  in(sqlite3*,cons
9120: 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f  t char*,u8*);.vo
9130: 69 64 20 73 71 6c 69 74 65 33 55 73 65 72 41 75  id sqlite3UserAu
9140: 74 68 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29  thInit(sqlite3*)
9150: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ;.void sqlite3Cr
9160: 79 70 74 46 75 6e 63 28 73 71 6c 69 74 65 33 5f  yptFunc(sqlite3_
9170: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
9180: 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a  ite3_value**);..
9190: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
91a0: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
91b0: 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74  TION */../*.** t
91c0: 79 70 65 64 65 66 20 66 6f 72 20 74 68 65 20 61  ypedef for the a
91d0: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c  uthorization cal
91e0: 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a  lback function..
91f0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
9200: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
9210: 54 49 4f 4e 0a 20 20 74 79 70 65 64 65 66 20 69  TION.  typedef i
9220: 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75  nt (*sqlite3_xau
9230: 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  th)(void*,int,co
9240: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
9250: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
9260: 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
9270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9280: 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63    const char*, c
9290: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c  onst char*);.#el
92a0: 73 65 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74  se.  typedef int
92b0: 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68   (*sqlite3_xauth
92c0: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
92d0: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
92e0: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
92f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9310: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
9320: 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  ndif.../*.** Eac
9330: 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
9340: 63 74 69 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74  ction is an inst
9350: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
9360: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
9370: 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69 74  .*/.struct sqlit
9380: 65 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  e3 {.  sqlite3_v
9390: 66 73 20 2a 70 56 66 73 3b 20 20 20 20 20 20 20  fs *pVfs;       
93a0: 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72       /* OS Inter
93b0: 66 61 63 65 20 2a 2f 0a 20 20 73 74 72 75 63 74  face */.  struct
93c0: 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20   Vdbe *pVdbe;   
93d0: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
93e0: 6f 66 20 61 63 74 69 76 65 20 76 69 72 74 75 61  of active virtua
93f0: 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20  l machines */.  
9400: 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f  CollSeq *pDfltCo
9410: 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ll;           /*
9420: 20 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c   The default col
9430: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
9440: 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71  (BINARY) */.  sq
9450: 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74  lite3_mutex *mut
9460: 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ex;         /* C
9470: 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20  onnection mutex 
9480: 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b 20 20 20  */.  Db *aDb;   
9490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94a0: 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e     /* All backen
94b0: 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b  ds */.  int nDb;
94c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94d0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
94e0: 6f 66 20 62 61 63 6b 65 6e 64 73 20 63 75 72 72  of backends curr
94f0: 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a  ently in use */.
9500: 20 20 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20    int flags;    
9510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9520: 2f 2a 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73  /* Miscellaneous
9530: 20 66 6c 61 67 73 2e 20 53 65 65 20 62 65 6c 6f   flags. See belo
9540: 77 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52  w */.  i64 lastR
9550: 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20 20 20  owid;           
9560: 20 20 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66       /* ROWID of
9570: 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73   most recent ins
9580: 65 72 74 20 28 73 65 65 20 61 62 6f 76 65 29 20  ert (see above) 
9590: 2a 2f 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b  */.  i64 szMmap;
95a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95b0: 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d     /* Default mm
95c0: 61 70 5f 73 69 7a 65 20 73 65 74 74 69 6e 67 20  ap_size setting 
95d0: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
95e0: 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20 20  t openFlags;    
95f0: 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61 73 73     /* Flags pass
9600: 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 66  ed to sqlite3_vf
9610: 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69  s.xOpen() */.  i
9620: 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20  nt errCode;     
9630: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9640: 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f  Most recent erro
9650: 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a  r code (SQLITE_*
9660: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61  ) */.  int errMa
9670: 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sk;             
9680: 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75 6c 74       /* & result
9690: 20 63 6f 64 65 73 20 77 69 74 68 20 74 68 69 73   codes with this
96a0: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
96b0: 67 20 2a 2f 0a 20 20 75 31 36 20 64 62 4f 70 74  g */.  u16 dbOpt
96c0: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
96d0: 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f       /* Flags to
96e0: 20 65 6e 61 62 6c 65 2f 64 69 73 61 62 6c 65 20   enable/disable 
96f0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f  optimizations */
9700: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
9710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9720: 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
9730: 67 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f  g */.  u8 autoCo
9740: 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  mmit;           
9750: 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75 74 6f       /* The auto
9760: 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f  -commit flag. */
9770: 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f 72 65  .  u8 temp_store
9780: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9790: 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d   /* 1: file 2: m
97a0: 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75 6c 74  emory 0: default
97b0: 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63 46   */.  u8 mallocF
97c0: 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  ailed;          
97d0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 77      /* True if w
97e0: 65 20 68 61 76 65 20 73 65 65 6e 20 61 20 6d 61  e have seen a ma
97f0: 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f 0a  lloc failure */.
9800: 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64    u8 dfltLockMod
9810: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
9820: 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69  /* Default locki
9830: 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74 61  ng-mode for atta
9840: 63 68 65 64 20 64 62 73 20 2a 2f 0a 20 20 73 69  ched dbs */.  si
9850: 67 6e 65 64 20 63 68 61 72 20 6e 65 78 74 41 75  gned char nextAu
9860: 74 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a 20 41  tovac;      /* A
9870: 75 74 6f 76 61 63 20 73 65 74 74 69 6e 67 20 61  utovac setting a
9880: 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e  fter VACUUM if >
9890: 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75 70 70 72  =0 */.  u8 suppr
98a0: 65 73 73 45 72 72 3b 20 20 20 20 20 20 20 20 20  essErr;         
98b0: 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20        /* Do not 
98c0: 69 73 73 75 65 20 65 72 72 6f 72 20 6d 65 73 73  issue error mess
98d0: 61 67 65 73 20 69 66 20 74 72 75 65 20 2a 2f 0a  ages if true */.
98e0: 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c    u8 vtabOnConfl
98f0: 69 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ict;            
9900: 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
9910: 72 6e 20 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f  rn for s3_vtab_o
9920: 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a  n_conflict() */.
9930: 20 20 75 38 20 69 73 54 72 61 6e 73 61 63 74 69    u8 isTransacti
9940: 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20  onSavepoint;    
9950: 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 6f  /* True if the o
9960: 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69  utermost savepoi
9970: 6e 74 20 69 73 20 61 20 54 53 20 2a 2f 0a 20 20  nt is a TS */.  
9980: 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69 7a 65  int nextPagesize
9990: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
99a0: 20 50 61 67 65 73 69 7a 65 20 61 66 74 65 72 20   Pagesize after 
99b0: 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a  VACUUM if >0 */.
99c0: 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20 20 20    u32 magic;    
99d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99e0: 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65 72 20  /* Magic number 
99f0: 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62 72 61  for detect libra
9a00: 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69  ry misuse */.  i
9a10: 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20 20 20  nt nChange;     
9a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9a30: 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  Value returned b
9a40: 79 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  y sqlite3_change
9a50: 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f  s() */.  int nTo
9a60: 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20 20 20  talChange;      
9a70: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
9a80: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
9a90: 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65  te3_total_change
9aa0: 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69  s() */.  int aLi
9ab0: 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d  mit[SQLITE_N_LIM
9ac0: 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73  IT];   /* Limits
9ad0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f   */.  int nMaxSo
9ae0: 72 74 65 72 4d 6d 61 70 3b 20 20 20 20 20 20 20  rterMmap;       
9af0: 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73      /* Maximum s
9b00: 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d  ize of regions m
9b10: 61 70 70 65 64 20 62 79 20 73 6f 72 74 65 72 20  apped by sorter 
9b20: 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 71 6c 69  */.  struct sqli
9b30: 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20  te3InitInfo {   
9b40: 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
9b50: 6e 20 75 73 65 64 20 64 75 72 69 6e 67 20 69 6e  n used during in
9b60: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a  itialization */.
9b70: 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b      int newTnum;
9b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b90: 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66 20 74  /* Rootpage of t
9ba0: 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69 74 69  able being initi
9bb0: 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38  alized */.    u8
9bc0: 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
9bd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
9be0: 63 68 20 64 62 20 66 69 6c 65 20 69 73 20 62 65  ch db file is be
9bf0: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
9c00: 2a 2f 0a 20 20 20 20 75 38 20 62 75 73 79 3b 20  */.    u8 busy; 
9c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c20: 20 20 20 2f 2a 20 54 52 55 45 20 69 66 20 63 75     /* TRUE if cu
9c30: 72 72 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69  rrently initiali
9c40: 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75 38 20 6f  zing */.    u8 o
9c50: 72 70 68 61 6e 54 72 69 67 67 65 72 3b 20 20 20  rphanTrigger;   
9c60: 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20          /* Last 
9c70: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6f 72 70  statement is orp
9c80: 68 61 6e 65 64 20 54 45 4d 50 20 74 72 69 67 67  haned TEMP trigg
9c90: 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 69 6d 70  er */.    u8 imp
9ca0: 6f 73 74 65 72 54 61 62 6c 65 3b 20 20 20 20 20  osterTable;     
9cb0: 20 20 20 20 20 20 2f 2a 20 42 75 69 6c 64 69 6e        /* Buildin
9cc0: 67 20 61 6e 20 69 6d 70 6f 73 74 65 72 20 74 61  g an imposter ta
9cd0: 62 6c 65 20 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b  ble */.  } init;
9ce0: 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63 74 69  .  int nVdbeActi
9cf0: 76 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ve;             
9d00: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56 44   /* Number of VD
9d10: 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20 72 75  BEs currently ru
9d20: 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 6e  nning */.  int n
9d30: 56 64 62 65 52 65 61 64 3b 20 20 20 20 20 20 20  VdbeRead;       
9d40: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
9d50: 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44 42  er of active VDB
9d60: 45 73 20 74 68 61 74 20 72 65 61 64 20 6f 72 20  Es that read or 
9d70: 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  write */.  int n
9d80: 56 64 62 65 57 72 69 74 65 3b 20 20 20 20 20 20  VdbeWrite;      
9d90: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
9da0: 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44 42  er of active VDB
9db0: 45 73 20 74 68 61 74 20 72 65 61 64 20 61 6e 64  Es that read and
9dc0: 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20   write */.  int 
9dd0: 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20 20 20  nVdbeExec;      
9de0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
9df0: 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61  ber of nested ca
9e00: 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63 28  lls to VdbeExec(
9e10: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44 65 73  ) */.  int nVDes
9e20: 74 72 6f 79 3b 20 20 20 20 20 20 20 20 20 20 20  troy;           
9e30: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
9e40: 66 20 61 63 74 69 76 65 20 4f 50 5f 56 44 65 73  f active OP_VDes
9e50: 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20  troy operations 
9e60: 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e 73  */.  int nExtens
9e70: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ion;            
9e80: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
9e90: 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69 6f 6e  loaded extension
9ea0: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61 45  s */.  void **aE
9eb0: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
9ec0: 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
9ed0: 20 73 68 61 72 65 64 20 6c 69 62 72 61 72 79 20   shared library 
9ee0: 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 76 6f 69  handles */.  voi
9ef0: 64 20 28 2a 78 54 72 61 63 65 29 28 76 6f 69 64  d (*xTrace)(void
9f00: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20  *,const char*); 
9f10: 20 20 20 20 20 20 20 2f 2a 20 54 72 61 63 65 20         /* Trace 
9f20: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
9f30: 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20 20  id *pTraceArg;  
9f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9f50: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
9f60: 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63 65  ent to the trace
9f70: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
9f80: 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28  oid (*xProfile)(
9f90: 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72  void*,const char
9fa0: 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66  *,u64);  /* Prof
9fb0: 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a  iling function *
9fc0: 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66 69  /.  void *pProfi
9fd0: 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  leArg;          
9fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9ff0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f   Argument to pro
a000: 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  file function */
a010: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74  .  void *pCommit
a020: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
a030: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
a040: 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62   to xCommitCallb
a050: 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20 69 6e  ack() */   .  in
a060: 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62  t (*xCommitCallb
a070: 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20  ack)(void*);    
a080: 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76  /* Invoked at ev
a090: 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20  ery commit. */. 
a0a0: 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b   void *pRollback
a0b0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
a0c0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
a0d0: 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  o xRollbackCallb
a0e0: 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20 76 6f  ack() */   .  vo
a0f0: 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43 61  id (*xRollbackCa
a100: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20  llback)(void*); 
a110: 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76  /* Invoked at ev
a120: 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20  ery commit. */. 
a130: 20 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41 72   void *pUpdateAr
a140: 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70 64  g;.  void (*xUpd
a150: 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  ateCallback)(voi
a160: 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  d*,int, const ch
a170: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
a180: 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a 23  sqlite_int64);.#
a190: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
a1a0: 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78  IT_WAL.  int (*x
a1b0: 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  WalCallback)(voi
a1c0: 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20  d *, sqlite3 *, 
a1d0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
a1e0: 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c  t);.  void *pWal
a1f0: 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f  Arg;.#endif.  vo
a200: 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29  id(*xCollNeeded)
a210: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
a220: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
a230: 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
a240: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36  d(*xCollNeeded16
a250: 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
a260: 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f  ,int eTextRep,co
a270: 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f  nst void*);.  vo
a280: 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41  id *pCollNeededA
a290: 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  rg;.  sqlite3_va
a2a0: 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20  lue *pErr;      
a2b0: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
a2c0: 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  nt error message
a2d0: 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
a2e0: 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69    volatile int i
a2f0: 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a  sInterrupted; /*
a300: 20 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33   True if sqlite3
a310: 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62  _interrupt has b
a320: 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20  een called */.  
a330: 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64    double notUsed
a340: 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  1;            /*
a350: 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75   Spacer */.  } u
a360: 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c  1;.  Lookaside l
a370: 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
a380: 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20     /* Lookaside 
a390: 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61  malloc configura
a3a0: 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20  tion */.#ifndef 
a3b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
a3c0: 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69  ORIZATION.  sqli
a3d0: 74 65 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b  te3_xauth xAuth;
a3e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63            /* Acc
a3f0: 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  ess authorizatio
a400: 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  n function */.  
a410: 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20  void *pAuthArg; 
a420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a430: 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f   1st argument to
a440: 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68   the access auth
a450: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e   function */.#en
a460: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
a470: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
a480: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20  _CALLBACK.  int 
a490: 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69  (*xProgress)(voi
a4a0: 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65  d *);     /* The
a4b0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
a4c0: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  ck */.  void *pP
a4d0: 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20  rogressArg;     
a4e0: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
a4f0: 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73  t to the progres
a500: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  s callback */.  
a510: 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65  unsigned nProgre
a520: 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a  ssOps;        /*
a530: 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64   Number of opcod
a540: 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20  es for progress 
a550: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64  callback */.#end
a560: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
a570: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
a580: 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e  BLE.  int nVTran
a590: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
a5a0: 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64      /* Allocated
a5b0: 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73   size of aVTrans
a5c0: 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75   */.  Hash aModu
a5d0: 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
a5e0: 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64      /* populated
a5f0: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61   by sqlite3_crea
a600: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
a610: 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43   VtabCtx *pVtabC
a620: 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  tx;            /
a630: 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63  * Context for ac
a640: 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63  tive vtab connec
a650: 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54  t/create */.  VT
a660: 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20  able **aVTrans; 
a670: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
a680: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69  irtual tables wi
a690: 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  th open transact
a6a0: 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65  ions */.  VTable
a6b0: 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20   *pDisconnect;  
a6c0: 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20    /* Disconnect 
a6d0: 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71  these in next sq
a6e0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
a6f0: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e 63  */.#endif.  Func
a700: 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b 20 20  DefHash aFunc;  
a710: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73            /* Has
a720: 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65  h table of conne
a730: 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20  ction functions 
a740: 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53  */.  Hash aCollS
a750: 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eq;             
a760: 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74     /* All collat
a770: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f  ing sequences */
a780: 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62  .  BusyHandler b
a790: 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20  usyHandler;     
a7a0: 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63   /* Busy callbac
a7b0: 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61  k */.  Db aDbSta
a7c0: 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20  tic[2];         
a7d0: 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73       /* Static s
a7e0: 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20 64  pace for the 2 d
a7f0: 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20  efault backends 
a800: 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  */.  Savepoint *
a810: 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  pSavepoint;     
a820: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63     /* List of ac
a830: 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20  tive savepoints 
a840: 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d  */.  int busyTim
a850: 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  eout;           
a860: 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c     /* Busy handl
a870: 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d  er timeout, in m
a880: 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61  sec */.  int nSa
a890: 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
a8a0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
a8b0: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
a8c0: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a  ion savepoints *
a8d0: 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65  /.  int nStateme
a8e0: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
a8f0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
a900: 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d  ested statement-
a910: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f  transactions  */
a920: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
a930: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cons;           
a940: 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64   /* Net deferred
a950: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69   constraints thi
a960: 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a  s transaction. *
a970: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
a980: 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20  dImmCons;       
a990: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
a9a0: 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e 73  d immediate cons
a9b0: 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  traints */.  int
a9c0: 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b 20   *pnBytesFreed; 
a9d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66             /* If
a9e0: 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65   not NULL, incre
a9f0: 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62 46  ment this in DbF
aa00: 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65 66 20  ree() */.#ifdef 
aa10: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e  SQLITE_ENABLE_UN
aa20: 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a  LOCK_NOTIFY.  /*
aa30: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76   The following v
aa40: 61 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c 6c  ariables are all
aa50: 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 74 68   protected by th
aa60: 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52 20  e STATIC_MASTER 
aa70: 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74  .  ** mutex, not
aa80: 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74 65   by sqlite3.mute
aa90: 78 2e 20 54 68 65 79 20 61 72 65 20 75 73 65 64  x. They are used
aaa0: 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69   by code in noti
aab0: 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a  fy.c. .  **.  **
aac0: 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43   When X.pUnlockC
aad0: 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68  onnection==Y, th
aae0: 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58 20  at means that X 
aaf0: 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20 59  is waiting for Y
ab00: 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20   to.  ** unlock 
ab10: 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 70  so that it can p
ab20: 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a  roceed..  **.  *
ab30: 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69  * When X.pBlocki
ab40: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ngConnection==Y,
ab50: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
ab60: 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20   something that 
ab70: 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72 69  X tried.  ** tri
ab80: 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c  ed to do recentl
ab90: 79 20 66 61 69 6c 65 64 20 77 69 74 68 20 61 6e  y failed with an
aba0: 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65   SQLITE_LOCKED e
abb0: 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b  rror due to lock
abc0: 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20 59  s.  ** held by Y
abd0: 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ..  */.  sqlite3
abe0: 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65   *pBlockingConne
abf0: 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63  ction; /* Connec
ac00: 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65 64  tion that caused
ac10: 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a   SQLITE_LOCKED *
ac20: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55 6e  /.  sqlite3 *pUn
ac30: 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20  lockConnection; 
ac40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
ac50: 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63 68  nection to watch
ac60: 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20   for unlock */. 
ac70: 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72   void *pUnlockAr
ac80: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
ac90: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
aca0: 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74  nt to xUnlockNot
acb0: 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ify */.  void (*
acc0: 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76  xUnlockNotify)(v
acd0: 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f  oid **, int);  /
ace0: 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20  * Unlock notify 
acf0: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71  callback */.  sq
ad00: 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63  lite3 *pNextBloc
ad10: 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ked;        /* N
ad20: 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20 61  ext in list of a
ad30: 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65  ll blocked conne
ad40: 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66  ctions */.#endif
ad50: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
ad60: 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49  SER_AUTHENTICATI
ad70: 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 75 73 65  ON.  sqlite3_use
ad80: 72 61 75 74 68 20 61 75 74 68 3b 20 20 20 20 20  rauth auth;     
ad90: 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65     /* User authe
ada0: 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72 6d  ntication inform
adb0: 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ation */.#endif.
adc0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72  };../*.** A macr
add0: 6f 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68  o to discover th
ade0: 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20  e encoding of a 
adf0: 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65  database..*/.#de
ae00: 66 69 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43 28  fine SCHEMA_ENC(
ae10: 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30  db) ((db)->aDb[0
ae20: 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a  ].pSchema->enc).
ae30: 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20  #define ENC(db) 
ae40: 20 20 20 20 20 20 20 28 28 64 62 29 2d 3e 65 6e         ((db)->en
ae50: 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  c)../*.** Possib
ae60: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
ae70: 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e  e sqlite3.flags.
ae80: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
ae90: 54 45 5f 56 64 62 65 54 72 61 63 65 20 20 20 20  TE_VdbeTrace    
aea0: 20 20 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a    0x00000001  /*
aeb0: 20 54 72 75 65 20 74 6f 20 74 72 61 63 65 20 56   True to trace V
aec0: 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f  DBE execution */
aed0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
aee0: 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20 30  InternChanges  0
aef0: 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20 55 6e  x00000002  /* Un
af00: 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74  committed Hash t
af10: 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a  able changes */.
af20: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
af30: 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78  ullFSync      0x
af40: 30 30 30 30 30 30 30 34 20 20 2f 2a 20 55 73 65  00000004  /* Use
af50: 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74   full fsync on t
af60: 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64  he backend */.#d
af70: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70  efine SQLITE_Ckp
af80: 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30  tFullFSync  0x00
af90: 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66  000008  /* Use f
afa0: 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68  ull fsync for ch
afb0: 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66  eckpoint */.#def
afc0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65  ine SQLITE_Cache
afd0: 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30  Spill     0x0000
afe0: 30 30 31 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73  0010  /* OK to s
aff0: 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65  pill pager cache
b000: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b010: 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20  TE_FullColNames 
b020: 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a    0x00000020  /*
b030: 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d   Show full colum
b040: 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43  n names on SELEC
b050: 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  T */.#define SQL
b060: 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65  ITE_ShortColName
b070: 73 20 20 30 78 30 30 30 30 30 30 34 30 20 20 2f  s  0x00000040  /
b080: 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c  * Show short col
b090: 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64  umns names */.#d
b0a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75  efine SQLITE_Cou
b0b0: 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78 30 30  ntRows      0x00
b0c0: 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74  000080  /* Count
b0d0: 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79   rows changed by
b0e0: 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20   INSERT, */.    
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 20 20 2f 2a 20 20 20 44 45 4c 45 54        /*   DELET
b120: 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64  E, or UPDATE and
b130: 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20   return */.     
b140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b160: 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f       /*   the co
b170: 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c  unt using a call
b180: 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65  back. */.#define
b190: 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c   SQLITE_NullCall
b1a0: 62 61 63 6b 20 20 20 30 78 30 30 30 30 30 31 30  back   0x0000010
b1b0: 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  0  /* Invoke the
b1c0: 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69   callback once i
b1d0: 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20  f the */.       
b1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b200: 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73     /*   result s
b210: 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23  et is empty */.#
b220: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71  define SQLITE_Sq
b230: 6c 54 72 61 63 65 20 20 20 20 20 20 20 30 78 30  lTrace       0x0
b240: 30 30 30 30 32 30 30 20 20 2f 2a 20 44 65 62 75  0000200  /* Debu
b250: 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69  g print SQL as i
b260: 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64  t executes */.#d
b270: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
b280: 65 4c 69 73 74 69 6e 67 20 20 20 20 30 78 30 30  eListing    0x00
b290: 30 30 30 34 30 30 20 20 2f 2a 20 44 65 62 75 67  000400  /* Debug
b2a0: 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42   listings of VDB
b2b0: 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64  E programs */.#d
b2c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72 69  efine SQLITE_Wri
b2d0: 74 65 53 63 68 65 6d 61 20 20 20 20 30 78 30 30  teSchema    0x00
b2e0: 30 30 30 38 30 30 20 20 2f 2a 20 4f 4b 20 74 6f  000800  /* OK to
b2f0: 20 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f 4d   update SQLITE_M
b300: 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65  ASTER */.#define
b310: 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f   SQLITE_VdbeAddo
b320: 70 54 72 61 63 65 20 30 78 30 30 30 30 31 30 30  pTrace 0x0000100
b330: 30 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69  0  /* Trace sqli
b340: 74 65 33 56 64 62 65 41 64 64 4f 70 28 29 20 63  te3VdbeAddOp() c
b350: 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  alls */.#define 
b360: 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65  SQLITE_IgnoreChe
b370: 63 6b 73 20 20 20 30 78 30 30 30 30 32 30 30 30  cks   0x00002000
b380: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f    /* Do not enfo
b390: 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72  rce check constr
b3a0: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
b3b0: 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f   SQLITE_ReadUnco
b3c0: 6d 6d 69 74 74 65 64 20 30 78 30 30 30 34 30 30  mmitted 0x000400
b3d0: 30 20 20 2f 2a 20 46 6f 72 20 73 68 61 72 65 64  0  /* For shared
b3e0: 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23  -cache mode */.#
b3f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65  define SQLITE_Le
b400: 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30  gacyFileFmt  0x0
b410: 30 30 30 38 30 30 30 20 20 2f 2a 20 43 72 65 61  0008000  /* Crea
b420: 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 73  te new databases
b430: 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a   in format 1 */.
b440: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
b450: 65 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30 78  ecoveryMode   0x
b460: 30 30 30 31 30 30 30 30 20 20 2f 2a 20 49 67 6e  00010000  /* Ign
b470: 6f 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f 72  ore schema error
b480: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b490: 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72  ITE_ReverseOrder
b4a0: 20 20 20 30 78 30 30 30 32 30 30 30 30 20 20 2f     0x00020000  /
b4b0: 2a 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64 65  * Reverse unorde
b4c0: 72 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23  red SELECTs */.#
b4d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
b4e0: 63 54 72 69 67 67 65 72 73 20 20 20 20 30 78 30  cTriggers    0x0
b4f0: 30 30 34 30 30 30 30 20 20 2f 2a 20 45 6e 61 62  0040000  /* Enab
b500: 6c 65 20 72 65 63 75 72 73 69 76 65 20 74 72 69  le recursive tri
b510: 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  ggers */.#define
b520: 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b   SQLITE_ForeignK
b530: 65 79 73 20 20 20 20 30 78 30 30 30 38 30 30 30  eys    0x0008000
b540: 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f  0  /* Enforce fo
b550: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
b560: 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e  aints  */.#defin
b570: 65 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64  e SQLITE_AutoInd
b580: 65 78 20 20 20 20 20 20 30 78 30 30 31 30 30 30  ex      0x001000
b590: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75  00  /* Enable au
b5a0: 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20  tomatic indexes 
b5b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b5c0: 45 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20  E_PreferBuiltin 
b5d0: 20 30 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20   0x00200000  /* 
b5e0: 50 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75  Preference to bu
b5f0: 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a  ilt-in funcs */.
b600: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
b610: 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78  oadExtension  0x
b620: 30 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61  00400000  /* Ena
b630: 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble load_extensi
b640: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
b650: 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67  LITE_EnableTrigg
b660: 65 72 20 20 30 78 30 30 38 30 30 30 30 30 20 20  er  0x00800000  
b670: 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
b680: 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64  e triggers */.#d
b690: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66  efine SQLITE_Def
b6a0: 65 72 46 4b 73 20 20 20 20 20 20 20 30 78 30 31  erFKs       0x01
b6b0: 30 30 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72  000000  /* Defer
b6c0: 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69   all FK constrai
b6d0: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
b6e0: 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20  QLITE_QueryOnly 
b6f0: 20 20 20 20 20 30 78 30 32 30 30 30 30 30 30 20       0x02000000 
b700: 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61   /* Disable data
b710: 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a  base changes */.
b720: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
b730: 64 62 65 45 51 50 20 20 20 20 20 20 20 20 30 78  dbeEQP        0x
b740: 30 34 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62  04000000  /* Deb
b750: 75 67 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59  ug EXPLAIN QUERY
b760: 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e 65   PLAN */.#define
b770: 20 53 51 4c 49 54 45 5f 56 61 63 75 75 6d 20 20   SQLITE_Vacuum  
b780: 20 20 20 20 20 20 20 30 78 30 38 30 30 30 30 30         0x0800000
b790: 30 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20  0  /* Currently 
b7a0: 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a 0a  in a VACUUM */..
b7b0: 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74  ./*.** Bits of t
b7c0: 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70 74  he sqlite3.dbOpt
b7d0: 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61 74  Flags field that
b7e0: 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68 65   are used by the
b7f0: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74  .** sqlite3_test
b800: 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f  _control(SQLITE_
b810: 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a  TESTCTRL_OPTIMIZ
b820: 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65  ATIONS,...) inte
b830: 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65  rface to.** sele
b840: 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65 20  ctively disable 
b850: 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61  various optimiza
b860: 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tions..*/.#defin
b870: 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46 6c  e SQLITE_QueryFl
b880: 61 74 74 65 6e 65 72 20 30 78 30 30 30 31 20 20  attener 0x0001  
b890: 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74 65   /* Query flatte
b8a0: 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ning */.#define 
b8b0: 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63  SQLITE_ColumnCac
b8c0: 68 65 20 20 20 20 30 78 30 30 30 32 20 20 20 2f  he    0x0002   /
b8d0: 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a  * Column cache *
b8e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b8f0: 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20 20  _GroupByOrder   
b900: 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f 55  0x0004   /* GROU
b910: 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52 44  PBY cover of ORD
b920: 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ERBY */.#define 
b930: 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75 74  SQLITE_FactorOut
b940: 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20 2f  Const 0x0008   /
b950: 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f  * Constant facto
b960: 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20 20 20  ring */./*      
b970: 20 20 20 20 20 20 20 20 20 20 6e 6f 74 20 75 73            not us
b980: 65 64 20 20 20 20 30 78 30 30 31 30 20 20 20 2f  ed    0x0010   /
b990: 2f 20 57 61 73 3a 20 53 51 4c 49 54 45 5f 49 64  / Was: SQLITE_Id
b9a0: 78 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a 23 64  xRealAsInt */.#d
b9b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73  efine SQLITE_Dis
b9c0: 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30  tinctOpt    0x00
b9d0: 32 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54  20   /* DISTINCT
b9e0: 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a   using indexes *
b9f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ba00: 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20  _CoverIdxScan   
ba10: 30 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76 65  0x0040   /* Cove
ba20: 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73  ring index scans
ba30: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ba40: 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69  TE_OrderByIdxJoi
ba50: 6e 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f 52  n 0x0080   /* OR
ba60: 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20  DER BY of joins 
ba70: 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  via index */.#de
ba80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62 71  fine SQLITE_Subq
ba90: 43 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31 30  Coroutine  0x010
baa0: 30 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65 20  0   /* Evaluate 
bab0: 73 75 62 71 75 65 72 69 65 73 20 61 73 20 63 6f  subqueries as co
bac0: 72 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66  routines */.#def
bad0: 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73  ine SQLITE_Trans
bae0: 69 74 69 76 65 20 20 20 20 20 30 78 30 32 30 30  itive     0x0200
baf0: 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65     /* Transitive
bb00: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
bb10: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f  #define SQLITE_O
bb20: 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78  mitNoopJoin   0x
bb30: 30 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75  0400   /* Omit u
bb40: 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e 20  nused tables in 
bb50: 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  joins */.#define
bb60: 20 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20 20   SQLITE_Stat34  
bb70: 20 20 20 20 20 20 20 30 78 30 38 30 30 20 20 20         0x0800   
bb80: 2f 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72 20  /* Use STAT3 or 
bb90: 53 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 23 64  STAT4 data */.#d
bba0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c  efine SQLITE_All
bbb0: 4f 70 74 73 20 20 20 20 20 20 20 20 30 78 66 66  Opts        0xff
bbc0: 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69  ff   /* All opti
bbd0: 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a  mizations */../*
bbe0: 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20 74  .** Macros for t
bbf0: 65 73 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f  esting whether o
bc00: 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69  r not optimizati
bc10: 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20  ons are enabled 
bc20: 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a  or disabled..*/.
bc30: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
bc40: 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
bc50: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
bc60: 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62  ationDisabled(db
bc70: 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62 29 2d  , mask)  (((db)-
bc80: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
bc90: 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  k))!=0).#define 
bca0: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62  OptimizationEnab
bcb0: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20  led(db, mask)   
bcc0: 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61  (((db)->dbOptFla
bcd0: 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 23  gs&(mask))==0).#
bce0: 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f 70 74  else.#define Opt
bcf0: 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65  imizationDisable
bd00: 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 30 0a 23  d(db, mask)  0.#
bd10: 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74  define Optimizat
bd20: 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d  ionEnabled(db, m
bd30: 61 73 6b 29 20 20 20 31 0a 23 65 6e 64 69 66 0a  ask)   1.#endif.
bd40: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72  ./*.** Return tr
bd50: 75 65 20 69 66 20 69 74 20 4f 4b 20 74 6f 20 66  ue if it OK to f
bd60: 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65  actor constant e
bd70: 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20  xpressions into 
bd80: 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  the initializati
bd90: 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20  on.** code. The 
bda0: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 61  argument is a Pa
bdb0: 72 73 65 20 6f 62 6a 65 63 74 20 66 6f 72 20 74  rse object for t
bdc0: 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
bdd0: 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f  r..*/.#define Co
bde0: 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50 29 20 28  nstFactorOk(P) (
bdf0: 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74  (P)->okConstFact
be00: 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  or)../*.** Possi
be10: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74  ble values for t
be20: 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20  he sqlite.magic 
be30: 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75  field..** The nu
be40: 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e  mbers are obtain
be50: 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64  ed at random and
be60: 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c   have no special
be70: 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a   meaning, other.
be80: 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69  ** than being di
be90: 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20  stinct from one 
bea0: 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66  another..*/.#def
beb0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
bec0: 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32 39  _OPEN     0xa029
bed0: 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73  a697  /* Databas
bee0: 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65  e is open */.#de
bef0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
bf00: 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33  C_CLOSED   0x9f3
bf10: 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61  c2d33  /* Databa
bf20: 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a  se is closed */.
bf30: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
bf40: 41 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78  AGIC_SICK     0x
bf50: 34 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72  4b771290  /* Err
bf60: 6f 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20  or and awaiting 
bf70: 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  close */.#define
bf80: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55   SQLITE_MAGIC_BU
bf90: 53 59 20 20 20 20 20 30 78 66 30 33 62 37 39 30  SY     0xf03b790
bfa0: 36 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63  6  /* Database c
bfb0: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20  urrently in use 
bfc0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bfd0: 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20  E_MAGIC_ERROR   
bfe0: 20 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20   0xb5357930  /* 
bff0: 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  An SQLITE_MISUSE
c000: 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20   error occurred 
c010: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c020: 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20  E_MAGIC_ZOMBIE  
c030: 20 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20   0x64cffc7f  /* 
c040: 43 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20  Close with last 
c050: 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20  statement close 
c060: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  */../*.** Each S
c070: 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64  QL function is d
c080: 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73  efined by an ins
c090: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
c0a0: 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74  lowing.** struct
c0b0: 75 72 65 2e 20 20 41 20 70 6f 69 6e 74 65 72 20  ure.  A pointer 
c0c0: 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
c0d0: 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74  e is stored in t
c0e0: 68 65 20 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a  he sqlite.aFunc.
c0f0: 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20  ** hash table.  
c100: 57 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75  When multiple fu
c110: 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 74 68 65  nctions have the
c120: 20 73 61 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20   same name, the 
c130: 68 61 73 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f  hash table.** po
c140: 69 6e 74 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64  ints to a linked
c150: 20 6c 69 73 74 20 6f 66 20 74 68 65 73 65 20 73   list of these s
c160: 74 72 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74  tructures..*/.st
c170: 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20  ruct FuncDef {. 
c180: 20 69 31 36 20 6e 41 72 67 3b 20 20 20 20 20 20   i16 nArg;      
c190: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
c1a0: 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d  of arguments.  -
c1b0: 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65  1 means unlimite
c1c0: 64 20 2a 2f 0a 20 20 75 31 36 20 66 75 6e 63 46  d */.  u16 funcF
c1d0: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53  lags;       /* S
c1e0: 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  ome combination 
c1f0: 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a  of SQLITE_FUNC_*
c200: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
c210: 72 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73  rData;     /* Us
c220: 65 72 20 64 61 74 61 20 70 61 72 61 6d 65 74 65  er data paramete
c230: 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a  r */.  FuncDef *
c240: 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e  pNext;      /* N
c250: 65 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ext function wit
c260: 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20  h same name */. 
c270: 20 76 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73   void (*xFunc)(s
c280: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
c290: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
c2a0: 65 2a 2a 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72  e**); /* Regular
c2b0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
c2c0: 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c  oid (*xStep)(sql
c2d0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
c2e0: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
c2f0: 2a 29 3b 20 2f 2a 20 41 67 67 72 65 67 61 74 65  *); /* Aggregate
c300: 20 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20   step */.  void 
c310: 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c  (*xFinalize)(sql
c320: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20  ite3_context*); 
c330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c340: 2a 20 41 67 67 72 65 67 61 74 65 20 66 69 6e 61  * Aggregate fina
c350: 6c 69 7a 65 72 20 2a 2f 0a 20 20 63 68 61 72 20  lizer */.  char 
c360: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
c370: 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74  /* SQL name of t
c380: 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a  he function. */.
c390: 20 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68    FuncDef *pHash
c3a0: 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77  ;      /* Next w
c3b0: 69 74 68 20 61 20 64 69 66 66 65 72 65 6e 74 20  ith a different 
c3c0: 6e 61 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d  name but the sam
c3d0: 65 20 68 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63  e hash */.  Func
c3e0: 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73  Destructor *pDes
c3f0: 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65  tructor;   /* Re
c400: 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20  ference counted 
c410: 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
c420: 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ion */.};../*.**
c430: 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
c440: 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75  encapsulates a u
c450: 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73  ser-function des
c460: 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b  tructor callback
c470: 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72   (as.** configur
c480: 65 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f  ed using create_
c490: 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61  function_v2()) a
c4a0: 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63  nd a reference c
c4b0: 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20  ounter. When.** 
c4c0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
c4d0: 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74  v2() is called t
c4e0: 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74  o create a funct
c4f0: 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72  ion with a destr
c500: 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67  uctor,.** a sing
c510: 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69  le object of thi
c520: 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61  s type is alloca
c530: 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63  ted. FuncDestruc
c540: 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20  tor.nRef is set 
c550: 74 6f 20 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65  to .** the numbe
c560: 72 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a  r of FuncDef obj
c570: 65 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69  ects created (ei
c580: 74 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70  ther 1 or 3, dep
c590: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
c5a0: 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20  r.** or not the 
c5b0: 73 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69  specified encodi
c5c0: 6e 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59  ng is SQLITE_ANY
c5d0: 29 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70  ). The FuncDef.p
c5e0: 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65  Destructor.** me
c5f0: 6d 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20  mber of each of 
c600: 74 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20  the new FuncDef 
c610: 6f 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74  objects is set t
c620: 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61  o point to the a
c630: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63  llocated.** Func
c640: 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a  Destructor..**.*
c650: 2a 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68  * Thereafter, wh
c660: 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75  en one of the Fu
c670: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73  ncDef objects is
c680: 20 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65   deleted, the re
c690: 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74  ference.** count
c6a0: 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20   on this object 
c6b0: 69 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20  is decremented. 
c6c0: 57 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20  When it reaches 
c6d0: 30 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f  0, the destructo
c6e0: 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20  r.** is invoked 
c6f0: 61 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74  and the FuncDest
c700: 72 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65  ructor structure
c710: 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63   freed..*/.struc
c720: 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  t FuncDestructor
c730: 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20   {.  int nRef;. 
c740: 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
c750: 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69  )(void *);.  voi
c760: 64 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b  d *pUserData;.};
c770: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
c780: 20 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63   values for Func
c790: 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65  Def.flags.  Note
c7a0: 20 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54   that the _LENGT
c7b0: 48 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a  H and _TYPEOF.**
c7c0: 20 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72   values must cor
c7d0: 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41  respond to OPFLA
c7e0: 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20  G_LENGTHARG and 
c7f0: 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
c800: 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20  .  There.** are 
c810: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
c820: 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20  nts in the code 
c830: 74 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a  to verify this..
c840: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c850: 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20  E_FUNC_ENCMASK  
c860: 30 78 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f  0x003 /* SQLITE_
c870: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46  UTF8, SQLITE_UTF
c880: 31 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20  16BE or UTF16LE 
c890: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c8a0: 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20  E_FUNC_LIKE     
c8b0: 30 78 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61  0x004 /* Candida
c8c0: 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20  te for the LIKE 
c8d0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a  optimization */.
c8e0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
c8f0: 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78 30  UNC_CASE     0x0
c900: 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69  08 /* Case-sensi
c910: 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66  tive LIKE-type f
c920: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
c930: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45  ne SQLITE_FUNC_E
c940: 50 48 45 4d 20 20 20 20 30 78 30 31 30 20 2f 2a  PHEM    0x010 /*
c950: 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c   Ephemeral.  Del
c960: 65 74 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f  ete with VDBE */
c970: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c980: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78  FUNC_NEEDCOLL 0x
c990: 30 32 30 20 2f 2a 20 73 71 6c 69 74 65 33 47 65  020 /* sqlite3Ge
c9a0: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d  tFuncCollSeq() m
c9b0: 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64 20 2a  ight be called *
c9c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c9d0: 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30  _FUNC_LENGTH   0
c9e0: 78 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  x040 /* Built-in
c9f0: 20 6c 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69   length() functi
ca00: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
ca10: 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46  LITE_FUNC_TYPEOF
ca20: 20 20 20 30 78 30 38 30 20 2f 2a 20 42 75 69 6c     0x080 /* Buil
ca30: 74 2d 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75  t-in typeof() fu
ca40: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
ca50: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
ca60: 55 4e 54 20 20 20 20 30 78 31 30 30 20 2f 2a 20  UNT    0x100 /* 
ca70: 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a  Built-in count(*
ca80: 29 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23  ) aggregate */.#
ca90: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
caa0: 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 32 30  NC_COALESCE 0x20
cab0: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f  0 /* Built-in co
cac0: 61 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75  alesce() or ifnu
cad0: 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ll() */.#define 
cae0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49  SQLITE_FUNC_UNLI
caf0: 4b 45 4c 59 20 30 78 34 30 30 20 2f 2a 20 42 75  KELY 0x400 /* Bu
cb00: 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28  ilt-in unlikely(
cb10: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
cb20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
cb30: 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 38 30 30  C_CONSTANT 0x800
cb40: 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70   /* Constant inp
cb50: 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74  uts give a const
cb60: 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64  ant output */.#d
cb70: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
cb80: 43 5f 4d 49 4e 4d 41 58 20 20 30 78 31 30 30 30  C_MINMAX  0x1000
cb90: 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69 6e   /* True for min
cba0: 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67 67  () and max() agg
cbb0: 72 65 67 61 74 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a  regates */../*.*
cbc0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
cbd0: 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55  three macros, FU
cbe0: 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55  NCTION(), LIKEFU
cbf0: 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41  NC() and AGGREGA
cc00: 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64  TE() are.** used
cc10: 20 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69   to create the i
cc20: 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20  nitializers for 
cc30: 74 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75  the FuncDef stru
cc40: 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20  ctures..**.**   
cc50: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
cc60: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
cc70: 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55   xFunc).**     U
cc80: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
cc90: 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  scalar function 
cca0: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
ccb0: 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a  function zName .
ccc0: 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74  **     implement
ccd0: 65 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e  ed by C function
cce0: 20 78 46 75 6e 63 20 74 68 61 74 20 61 63 63 65   xFunc that acce
ccf0: 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e  pts nArg argumen
cd00: 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76  ts. The.**     v
cd10: 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 69  alue passed as i
cd20: 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
cd30: 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64   (void*) and mad
cd40: 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20  e available.**  
cd50: 20 20 20 61 73 20 74 68 65 20 75 73 65 72 2d 64     as the user-d
cd60: 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65  ata (sqlite3_use
cd70: 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74 68  r_data()) for th
cd80: 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a  e function. If .
cd90: 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20  **     argument 
cda0: 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65  bNC is true, the
cdb0: 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  n the SQLITE_FUN
cdc0: 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20  C_NEEDCOLL flag 
cdd0: 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  is set..**.**   
cde0: 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  VFUNCTION(zName,
cdf0: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
ce00: 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
ce10: 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78  Like FUNCTION ex
ce20: 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68  cept it omits th
ce30: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
ce40: 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a  NSTANT flag..**.
ce50: 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45 28 7a  **   AGGREGATE(z
ce60: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
ce70: 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46  , bNC, xStep, xF
ce80: 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65  inal).**     Use
ce90: 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61  d to create an a
cea0: 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
ceb0: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70  n definition imp
cec0: 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20  lemented by.**  
ced0: 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f     the C functio
cee0: 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69  ns xStep and xFi
cef0: 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66  nal. The first f
cf00: 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a  our parameters.*
cf10: 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70  *     are interp
cf20: 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d  reted in the sam
cf30: 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72  e way as the fir
cf40: 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20  st 4 parameters 
cf50: 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49  to.**     FUNCTI
cf60: 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49  ON()..**.**   LI
cf70: 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41  KEFUNC(zName, nA
cf80: 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29  rg, pArg, flags)
cf90: 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
cfa0: 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20  create a scalar 
cfb0: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
cfc0: 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ion of a functio
cfd0: 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20  n zName .**     
cfe0: 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72  that accepts nAr
cff0: 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20  g arguments and 
d000: 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  is implemented b
d010: 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a  y a call to C .*
d020: 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c  *     function l
d030: 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e  ikeFunc. Argumen
d040: 74 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74  t pArg is cast t
d050: 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64  o a (void *) and
d060: 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61   made.**     ava
d070: 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75  ilable as the fu
d080: 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61  nction user-data
d090: 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64   (sqlite3_user_d
d0a0: 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20  ata()). The.**  
d0b0: 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73     FuncDef.flags
d0c0: 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
d0d0: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61   to the value pa
d0e0: 73 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67  ssed as the flag
d0f0: 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74  s.**     paramet
d100: 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46  er..*/.#define F
d110: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
d120: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
d130: 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
d140: 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  , SQLITE_FUNC_CO
d150: 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
d160: 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
d170: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
d180: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
d190: 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
d1a0: 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e  xFunc, 0, 0, #zN
d1b0: 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69  ame, 0, 0}.#defi
d1c0: 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ne VFUNCTION(zNa
d1d0: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
d1e0: 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
d1f0: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
d200: 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
d210: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
d220: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
d230: 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
d240: 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e  xFunc, 0, 0, #zN
d250: 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69  ame, 0, 0}.#defi
d260: 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61  ne FUNCTION2(zNa
d270: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
d280: 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72  bNC, xFunc, extr
d290: 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72  aFlags) \.  {nAr
d2a0: 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  g,SQLITE_FUNC_CO
d2b0: 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
d2c0: 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
d2d0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78  UNC_NEEDCOLL)|ex
d2e0: 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51  traFlags,\.   SQ
d2f0: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
d300: 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
d310: 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30   0, 0, #zName, 0
d320: 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 53 54 52  , 0}.#define STR
d330: 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  _FUNCTION(zName,
d340: 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43   nArg, pArg, bNC
d350: 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
d360: 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
d370: 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
d380: 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
d390: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
d3a0: 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78   \.   pArg, 0, x
d3b0: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
d3c0: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
d3d0: 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65  e LIKEFUNC(zName
d3e0: 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61  , nArg, arg, fla
d3f0: 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  gs) \.  {nArg, S
d400: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
d410: 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
d420: 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69  flags, \.   (voi
d430: 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65  d *)arg, 0, like
d440: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
d450: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
d460: 65 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d  e AGGREGATE(zNam
d470: 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63  e, nArg, arg, nc
d480: 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29  , xStep, xFinal)
d490: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
d4a0: 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49  TE_UTF8|(nc*SQLI
d4b0: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
d4c0: 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  ), \.   SQLITE_I
d4d0: 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20  NT_TO_PTR(arg), 
d4e0: 30 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e  0, 0, xStep,xFin
d4f0: 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 23  al,#zName,0,0}.#
d500: 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45  define AGGREGATE
d510: 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  2(zName, nArg, a
d520: 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78  rg, nc, xStep, x
d530: 46 69 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61 67  Final, extraFlag
d540: 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  s) \.  {nArg, SQ
d550: 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51  LITE_UTF8|(nc*SQ
d560: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
d570: 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20  LL)|extraFlags, 
d580: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
d590: 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
d5a0: 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c  0, xStep,xFinal,
d5b0: 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a  #zName,0,0}../*.
d5c0: 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73  ** All current s
d5d0: 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74  avepoints are st
d5e0: 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64  ored in a linked
d5f0: 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61   list starting a
d600: 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61  t.** sqlite3.pSa
d610: 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72  vepoint. The fir
d620: 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68  st element in th
d630: 65 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f  e list is the mo
d640: 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f  st recently.** o
d650: 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e  pened savepoint.
d660: 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20   Savepoints are 
d670: 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73  added to the lis
d680: 74 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a  t by the vdbe.**
d690: 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e   OP_Savepoint in
d6a0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  struction..*/.st
d6b0: 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b  ruct Savepoint {
d6c0: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
d6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6e0: 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f         /* Savepo
d6f0: 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65  int name (nul-te
d700: 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69  rminated) */.  i
d710: 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  64 nDeferredCons
d720: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
d730: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
d740: 64 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c  deferred fk viol
d750: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20  ations */.  i64 
d760: 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
d770: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
d780: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66  /* Number of def
d790: 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f  erred imm fk. */
d7a0: 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e  .  Savepoint *pN
d7b0: 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
d7c0: 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74         /* Parent
d7d0: 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61   savepoint (if a
d7e0: 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ny) */.};../*.**
d7f0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   The following a
d800: 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20 73  re used as the s
d810: 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20  econd parameter 
d820: 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f  to sqlite3Savepo
d830: 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73  int(),.** and as
d840: 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74   the P1 argument
d850: 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70   to the OP_Savep
d860: 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  oint instruction
d870: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56  ..*/.#define SAV
d880: 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20  EPOINT_BEGIN    
d890: 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45    0.#define SAVE
d8a0: 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20  POINT_RELEASE   
d8b0: 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50   1.#define SAVEP
d8c0: 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20  OINT_ROLLBACK   
d8d0: 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  2.../*.** Each S
d8e0: 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69  QLite module (vi
d8f0: 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69  rtual table defi
d900: 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e  nition) is defin
d910: 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74  ed by an.** inst
d920: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
d930: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c  owing structure,
d940: 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73   stored in the s
d950: 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a  qlite3.aModule.*
d960: 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f  * hash table..*/
d970: 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b  .struct Module {
d980: 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
d990: 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
d9a0: 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62  ;       /* Callb
d9b0: 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a  ack pointers */.
d9c0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
d9d0: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
d9e0: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70         /* Name p
d9f0: 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f  assed to create_
da00: 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f  module() */.  vo
da10: 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20  id *pAux;       
da20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da30: 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65     /* pAux passe
da40: 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75  d to create_modu
da50: 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28  le() */.  void (
da60: 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20  *xDestroy)(void 
da70: 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  *);            /
da80: 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63  * Module destruc
da90: 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  tor function */.
daa0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d  };../*.** inform
dab0: 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68  ation about each
dac0: 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51   column of an SQ
dad0: 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20  L table is held 
dae0: 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  in an instance.*
daf0: 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
db00: 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43  ure..*/.struct C
db10: 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a  olumn {.  char *
db20: 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61  zName;     /* Na
db30: 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  me of this colum
db40: 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66  n */.  Expr *pDf
db50: 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75  lt;     /* Defau
db60: 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  lt value of this
db70: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61   column */.  cha
db80: 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20 20 2f 2a  r *zDflt;     /*
db90: 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f   Original text o
dba0: 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  f the default va
dbb0: 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  lue */.  char *z
dbc0: 54 79 70 65 3b 20 20 20 20 20 2f 2a 20 44 61 74  Type;     /* Dat
dbd0: 61 20 74 79 70 65 20 66 6f 72 20 74 68 69 73 20  a type for this 
dbe0: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72  column */.  char
dbf0: 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20   *zColl;     /* 
dc00: 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  Collating sequen
dc10: 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73  ce.  If NULL, us
dc20: 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f  e the default */
dc30: 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20  .  u8 notNull;  
dc40: 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f      /* An OE_ co
dc50: 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20  de for handling 
dc60: 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  a NOT NULL const
dc70: 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20  raint */.  char 
dc80: 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f  affinity;   /* O
dc90: 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45  ne of the SQLITE
dca0: 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20  _AFF_... values 
dcb0: 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b 20 20  */.  u8 szEst;  
dcc0: 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74        /* Estimat
dcd0: 65 64 20 73 69 7a 65 20 6f 66 20 74 68 69 73 20  ed size of this 
dce0: 63 6f 6c 75 6d 6e 2e 20 20 49 4e 54 3d 3d 31 20  column.  INT==1 
dcf0: 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67 73  */.  u8 colFlags
dd00: 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e  ;     /* Boolean
dd10: 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20 53 65   properties.  Se
dd20: 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e  e COLFLAG_ defin
dd30: 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a  es below */.};..
dd40: 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  /* Allowed value
dd50: 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c  s for Column.col
dd60: 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e  Flags:.*/.#defin
dd70: 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45  e COLFLAG_PRIMKE
dd80: 59 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20  Y  0x0001    /* 
dd90: 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f  Column is part o
dda0: 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  f the primary ke
ddb0: 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c  y */.#define COL
ddc0: 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20 30 78  FLAG_HIDDEN   0x
ddd0: 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68 69 64  0002    /* A hid
dde0: 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20  den column in a 
ddf0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f  virtual table */
de00: 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61  ../*.** A "Colla
de10: 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69  ting Sequence" i
de20: 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20  s defined by an 
de30: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
de40: 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72  following.** str
de50: 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75  ucture. Conceptu
de60: 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e  ally, a collatin
de70: 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69  g sequence consi
de80: 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e  sts of a name an
de90: 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f  d.** a compariso
dea0: 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64  n routine that d
deb0: 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72  efines the order
dec0: 20 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e 63   of that sequenc
ded0: 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c  e..**.** If Coll
dee0: 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c  Seq.xCmp is NULL
def0: 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  , it means that 
df00: 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67  the.** collating
df10: 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64   sequence is und
df20: 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73  efined.  Indices
df30: 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64   built on an und
df40: 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74  efined.** collat
df50: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79  ing sequence may
df60: 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20   not be read or 
df70: 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75  written..*/.stru
df80: 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63  ct CollSeq {.  c
df90: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
dfa0: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
dfb0: 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  the collating se
dfc0: 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e  quence, UTF-8 en
dfd0: 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e  coded */.  u8 en
dfe0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
dff0: 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
e000: 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d  g handled by xCm
e010: 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  p() */.  void *p
e020: 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  User;          /
e030: 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
e040: 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20   to xCmp() */.  
e050: 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69 64  int (*xCmp)(void
e060: 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  *,int, const voi
e070: 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76  d*, int, const v
e080: 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a  oid*);.  void (*
e090: 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f  xDel)(void*);  /
e0a0: 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72  * Destructor for
e0b0: 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   pUser */.};../*
e0c0: 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65 72  .** A sort order
e0d0: 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 41   can be either A
e0e0: 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23  SC or DESC..*/.#
e0f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
e100: 5f 41 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a  _ASC       0  /*
e110: 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69   Sort in ascendi
e120: 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66  ng order */.#def
e130: 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45  ine SQLITE_SO_DE
e140: 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f  SC      1  /* So
e150: 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  rt in ascending 
e160: 6f 72 64 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  order */../*.** 
e170: 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  Column affinity 
e180: 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  types..**.** The
e190: 73 65 20 75 73 65 64 20 74 6f 20 68 61 76 65 20  se used to have 
e1a0: 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69  mnemonic name li
e1b0: 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54  ke 'i' for SQLIT
e1c0: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e  E_AFF_INTEGER an
e1d0: 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c  d.** 't' for SQL
e1e0: 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42  ITE_AFF_TEXT.  B
e1f0: 75 74 20 77 65 20 63 61 6e 20 73 61 76 65 20 61  ut we can save a
e200: 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e   little space an
e210: 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65  d improve.** the
e220: 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20   speed a little 
e230: 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65  by numbering the
e240: 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74   values consecut
e250: 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42  ively.  .**.** B
e260: 75 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 73  ut rather than s
e270: 74 61 72 74 20 77 69 74 68 20 30 20 6f 72 20 31  tart with 0 or 1
e280: 2c 20 77 65 20 62 65 67 69 6e 20 77 69 74 68 20  , we begin with 
e290: 27 41 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a  'A'.  That way,.
e2a0: 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65  ** when multiple
e2b0: 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 20   affinity types 
e2c0: 61 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64  are concatenated
e2d0: 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61   into a string a
e2e0: 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68  nd.** used as th
e2f0: 65 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68  e P4 operand, th
e300: 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20  ey will be more 
e310: 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  readable..**.** 
e320: 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74  Note also that t
e330: 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73  he numeric types
e340: 20 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67   are grouped tog
e350: 65 74 68 65 72 20 73 6f 20 74 68 61 74 20 74 65  ether so that te
e360: 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e  sting.** for a n
e370: 75 6d 65 72 69 63 20 74 79 70 65 20 69 73 20 61  umeric type is a
e380: 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73   single comparis
e390: 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20 4e 4f 4e  on.  And the NON
e3a0: 45 20 74 79 70 65 20 69 73 20 66 69 72 73 74 2e  E type is first.
e3b0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
e3c0: 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 20 20 20 20  TE_AFF_NONE     
e3d0: 27 41 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'A'.#define SQLI
e3e0: 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20  TE_AFF_TEXT     
e3f0: 27 42 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'B'.#define SQLI
e400: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20  TE_AFF_NUMERIC  
e410: 27 43 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'C'.#define SQLI
e420: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20  TE_AFF_INTEGER  
e430: 27 44 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'D'.#define SQLI
e440: 54 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20  TE_AFF_REAL     
e450: 27 45 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c  'E'..#define sql
e460: 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66  ite3IsNumericAff
e470: 69 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d  inity(X)  ((X)>=
e480: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
e490: 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  IC)../*.** The S
e4a0: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76  QLITE_AFF_MASK v
e4b0: 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20  alues masks off 
e4c0: 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20  the significant 
e4d0: 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66  bits of an.** af
e4e0: 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a  finity value. .*
e4f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e500: 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78  _AFF_MASK     0x
e510: 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69  47../*.** Additi
e520: 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20  onal bit values 
e530: 74 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64  that can be ORed
e540: 20 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74   with an affinit
e550: 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61  y without.** cha
e560: 6e 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  nging the affini
e570: 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51  ty..**.** The SQ
e580: 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61  LITE_NOTNULL fla
e590: 67 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69  g is a combinati
e5a0: 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64  on of NULLEQ and
e5b0: 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20   JUMPIFNULL..** 
e5c0: 49 74 20 63 61 75 73 65 73 20 61 6e 20 61 73 73  It causes an ass
e5d0: 65 72 74 28 29 20 74 6f 20 66 69 72 65 20 69 66  ert() to fire if
e5e0: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
e5f0: 74 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a  to a comparison.
e600: 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e  ** operator is N
e610: 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65  ULL.  It is adde
e620: 64 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d  d to certain com
e630: 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72  parison operator
e640: 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68  s to.** prove th
e650: 61 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20  at the operands 
e660: 61 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e  are always NOT N
e670: 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ULL..*/.#define 
e680: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
e690: 4c 20 20 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d  L   0x10  /* jum
e6a0: 70 73 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  ps if either ope
e6b0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a  rand is NULL */.
e6c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
e6d0: 54 4f 52 45 50 32 20 20 20 20 20 20 30 78 32 30  TOREP2      0x20
e6e0: 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
e6f0: 74 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74  t in reg[P2] rat
e700: 68 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f  her than jump */
e710: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e720: 4e 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38  NULLEQ       0x8
e730: 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20  0  /* NULL=NULL 
e740: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e750: 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30  E_NOTNULL      0
e760: 78 39 30 20 20 2f 2a 20 41 73 73 65 72 74 20 74  x90  /* Assert t
e770: 68 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65  hat operands are
e780: 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a   never NULL */..
e790: 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20  /*.** An object 
e7a0: 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
e7b0: 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68  created for each
e7c0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70   virtual table p
e7d0: 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65  resent in.** the
e7e0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
e7f0: 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  . .**.** If the 
e800: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
e810: 69 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20  is shared, then 
e820: 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73  there is one ins
e830: 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a  tance of this.**
e840: 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 65   structure for e
e850: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
e860: 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33  nection (sqlite3
e870: 2a 29 20 74 68 61 74 20 75 73 65 73 20 74 68 65  *) that uses the
e880: 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d   shared.** schem
e890: 61 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75  a. This is becau
e8a0: 73 65 20 65 61 63 68 20 64 61 74 61 62 61 73 65  se each database
e8b0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75   connection requ
e8c0: 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69  ires its own uni
e8d0: 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20  que.** instance 
e8e0: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  of the sqlite3_v
e8f0: 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64  tab* handle used
e900: 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76   to access the v
e910: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a  irtual table .**
e920: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
e930: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
e940: 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62  andles can not b
e950: 65 20 73 68 61 72 65 64 20 62 65 74 77 65 65 6e  e shared between
e960: 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f   .** database co
e970: 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20  nnections, even 
e980: 77 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66  when the rest of
e990: 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64   the in-memory d
e9a0: 61 74 61 62 61 73 65 20 0a 2a 2a 20 73 63 68 65  atabase .** sche
e9b0: 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73  ma is shared, as
e9c0: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
e9d0: 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73  ion often stores
e9e0: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
e9f0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
ea00: 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20  le passed to it 
ea10: 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74  via the xConnect
ea20: 28 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20  () or xCreate() 
ea30: 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67  method.** during
ea40: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
ea50: 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73  internally. This
ea60: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
ea70: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a  tion handle may.
ea80: 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20  ** then be used 
ea90: 62 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  by the virtual t
eaa0: 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  able implementat
eab0: 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65  ion to access re
eac0: 61 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69  al tables .** wi
ead0: 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  thin the databas
eae0: 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20  e. So that they 
eaf0: 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f  appear as part o
eb00: 66 20 74 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a  f the callers .*
eb10: 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  * transaction, t
eb20: 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65  hese accesses ne
eb30: 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69  ed to be made vi
eb40: 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  a the same datab
eb50: 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  ase .** connecti
eb60: 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20  on as that used 
eb70: 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f  to execute SQL o
eb80: 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65  perations on the
eb90: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a   virtual table..
eba0: 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65  **.** All VTable
ebb0: 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f   objects that co
ebc0: 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69  rrespond to a si
ebd0: 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20  ngle table in a 
ebe0: 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61  shared.** databa
ebf0: 73 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e  se schema are in
ec00: 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69  itially stored i
ec10: 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20  n a linked-list 
ec20: 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a  pointed to by.**
ec30: 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62   the Table.pVTab
ec40: 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62  le member variab
ec50: 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73  le of the corres
ec60: 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62  ponding Table ob
ec70: 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e  ject..** When an
ec80: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
ec90: 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  () operation is 
eca0: 72 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65  required to acce
ecb0: 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a  ss the virtual.*
ecc0: 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72  * table, it sear
ecd0: 63 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f  ches the list fo
ece0: 72 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61  r the VTable tha
ecf0: 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
ed00: 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
ed10: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e   connection doin
ed20: 67 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20  g the preparing 
ed30: 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65  so as to use the
ed40: 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69   correct.** sqli
ed50: 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
ed60: 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64   in the compiled
ed70: 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68   query..**.** Wh
ed80: 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20  en an in-memory 
ed90: 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20  Table object is 
eda0: 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61  deleted (for exa
edb0: 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a  mple when the.**
edc0: 20 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67   schema is being
edd0: 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f   reloaded for so
ede0: 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20  me reason), the 
edf0: 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61  VTable objects a
ee00: 72 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74  re not .** delet
ee10: 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74  ed and the sqlit
ee20: 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73  e3_vtab* handles
ee30: 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e   are not xDiscon
ee40: 6e 65 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d  nect()ed .** imm
ee50: 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61  ediately. Instea
ee60: 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65  d, they are move
ee70: 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65  d from the Table
ee80: 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f  .pVTable list to
ee90: 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b  .** another link
eea0: 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 62  ed list headed b
eeb0: 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44  y the sqlite3.pD
eec0: 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72  isconnect member
eed0: 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65   of the.** corre
eee0: 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
eef0: 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 79   structure. They
ef00: 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65   are then delete
ef10: 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 20  d/xDisconnected 
ef20: 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20  .** next time a 
ef30: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65  statement is pre
ef40: 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64  pared using said
ef50: 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20   sqlite3*. This 
ef60: 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76  is done.** to av
ef70: 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73  oid deadlock iss
ef80: 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75  ues involving mu
ef90: 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d  ltiple sqlite3.m
efa0: 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a  utex mutexes..**
efb0: 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e   Refer to commen
efc0: 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f  ts above functio
efd0: 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  n sqlite3VtabUnl
efe0: 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e  ockList() for an
eff0: 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20  .** explanation 
f000: 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20  as to why it is 
f010: 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65  safe to add an e
f020: 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74  ntry to an sqlit
f030: 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a  e3.pDisconnect.*
f040: 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68  * list without h
f050: 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65  olding the corre
f060: 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
f070: 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a  .mutex mutex..**
f080: 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66  .** The memory f
f090: 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68  or objects of th
f0a0: 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79  is type is alway
f0b0: 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a  s allocated by .
f0c0: 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  ** sqlite3DbMall
f0d0: 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20  oc(), using the 
f0e0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
f0f0: 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62  e stored in VTab
f100: 6c 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68 65  le.db as .** the
f110: 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e   first argument.
f120: 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c  .*/.struct VTabl
f130: 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e {.  sqlite3 *d
f140: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
f150: 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e  /* Database conn
f160: 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65  ection associate
f170: 64 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c  d with this tabl
f180: 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70  e */.  Module *p
f190: 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mod;            
f1a0: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d   /* Pointer to m
f1b0: 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
f1c0: 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  tion */.  sqlite
f1d0: 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20  3_vtab *pVtab;  
f1e0: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
f1f0: 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20  o vtab instance 
f200: 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20  */.  int nRef;  
f210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f220: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e  * Number of poin
f230: 74 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72  ters to this str
f240: 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62  ucture */.  u8 b
f250: 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20  Constraint;     
f260: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
f270: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65   constraints are
f280: 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20   supported */.  
f290: 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20  int iSavepoint; 
f2a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70            /* Dep
f2b0: 74 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f  th of the SAVEPO
f2c0: 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56  INT stack */.  V
f2d0: 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20  Table *pNext;   
f2e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
f2f0: 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20   in linked list 
f300: 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d  (see above) */.}
f310: 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  ;../*.** Each SQ
f320: 4c 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65  L table is repre
f330: 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
f340: 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   by an instance 
f350: 6f 66 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77  of the.** follow
f360: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
f370: 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d 65  *.** Table.zName
f380: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
f390: 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20  the table.  The 
f3a0: 63 61 73 65 20 6f 66 20 74 68 65 20 6f 72 69 67  case of the orig
f3b0: 69 6e 61 6c 0a 2a 2a 20 43 52 45 41 54 45 20 54  inal.** CREATE T
f3c0: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69  ABLE statement i
f3d0: 73 20 73 74 6f 72 65 64 2c 20 62 75 74 20 63 61  s stored, but ca
f3e0: 73 65 20 69 73 20 6e 6f 74 20 73 69 67 6e 69 66  se is not signif
f3f0: 69 63 61 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d  icant for.** com
f400: 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  parisons..**.** 
f410: 54 61 62 6c 65 2e 6e 43 6f 6c 20 69 73 20 74 68  Table.nCol is th
f420: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
f430: 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  mns in this tabl
f440: 65 2e 20 20 54 61 62 6c 65 2e 61 43 6f 6c 20 69  e.  Table.aCol i
f450: 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  s a.** pointer t
f460: 6f 20 61 6e 20 61 72 72 61 79 20 6f 66 20 43 6f  o an array of Co
f470: 6c 75 6d 6e 20 73 74 72 75 63 74 75 72 65 73 2c  lumn structures,
f480: 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f   one for each co
f490: 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  lumn..**.** If t
f4a0: 68 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e 20  he table has an 
f4b0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
f4c0: 4b 45 59 2c 20 74 68 65 6e 20 54 61 62 6c 65 2e  KEY, then Table.
f4d0: 69 50 4b 65 79 20 69 73 20 74 68 65 20 69 6e 64  iPKey is the ind
f4e0: 65 78 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6c  ex of.** the col
f4f0: 75 6d 6e 20 74 68 61 74 20 69 73 20 74 68 61 74  umn that is that
f500: 20 6b 65 79 2e 20 20 20 4f 74 68 65 72 77 69 73   key.   Otherwis
f510: 65 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69 73  e Table.iPKey is
f520: 20 6e 65 67 61 74 69 76 65 2e 20 20 4e 6f 74 65   negative.  Note
f530: 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74  .** that the dat
f540: 61 74 79 70 65 20 6f 66 20 74 68 65 20 50 52 49  atype of the PRI
f550: 4d 41 52 59 20 4b 45 59 20 6d 75 73 74 20 62 65  MARY KEY must be
f560: 20 49 4e 54 45 47 45 52 20 66 6f 72 20 74 68 69   INTEGER for thi
f570: 73 20 66 69 65 6c 64 20 74 6f 0a 2a 2a 20 62 65  s field to.** be
f580: 20 73 65 74 2e 20 20 41 6e 20 49 4e 54 45 47 45   set.  An INTEGE
f590: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73  R PRIMARY KEY is
f5a0: 20 75 73 65 64 20 61 73 20 74 68 65 20 72 6f 77   used as the row
f5b0: 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  id for each row 
f5c0: 6f 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 2e  of.** the table.
f5d0: 20 20 49 66 20 61 20 74 61 62 6c 65 20 68 61 73    If a table has
f5e0: 20 6e 6f 20 49 4e 54 45 47 45 52 20 50 52 49 4d   no INTEGER PRIM
f5f0: 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 61 20  ARY KEY, then a 
f600: 72 61 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20  random rowid.** 
f610: 69 73 20 67 65 6e 65 72 61 74 65 64 20 66 6f 72  is generated for
f620: 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65   each row of the
f630: 20 74 61 62 6c 65 2e 20 20 54 46 5f 48 61 73 50   table.  TF_HasP
f640: 72 69 6d 61 72 79 4b 65 79 20 69 73 20 73 65 74  rimaryKey is set
f650: 20 69 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65   if.** the table
f660: 20 68 61 73 20 61 6e 79 20 50 52 49 4d 41 52 59   has any PRIMARY
f670: 20 4b 45 59 2c 20 49 4e 54 45 47 45 52 20 6f 72   KEY, INTEGER or
f680: 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a   otherwise..**.*
f690: 2a 20 54 61 62 6c 65 2e 74 6e 75 6d 20 69 73 20  * Table.tnum is 
f6a0: 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20  the page number 
f6b0: 66 6f 72 20 74 68 65 20 72 6f 6f 74 20 42 54 72  for the root BTr
f6c0: 65 65 20 70 61 67 65 20 6f 66 20 74 68 65 20 74  ee page of the t
f6d0: 61 62 6c 65 20 69 6e 20 74 68 65 0a 2a 2a 20 64  able in the.** d
f6e0: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 49  atabase file.  I
f6f0: 66 20 54 61 62 6c 65 2e 69 44 62 20 69 73 20 74  f Table.iDb is t
f700: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
f710: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 62  database table b
f720: 61 63 6b 65 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c  ackend.** in sql
f730: 69 74 65 2e 61 44 62 5b 5d 2e 20 20 30 20 69 73  ite.aDb[].  0 is
f740: 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61   for the main da
f750: 74 61 62 61 73 65 20 61 6e 64 20 31 20 69 73 20  tabase and 1 is 
f760: 66 6f 72 20 74 68 65 20 66 69 6c 65 20 74 68 61  for the file tha
f770: 74 0a 2a 2a 20 68 6f 6c 64 73 20 74 65 6d 70 6f  t.** holds tempo
f780: 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20  rary tables and 
f790: 69 6e 64 69 63 65 73 2e 20 20 49 66 20 54 46 5f  indices.  If TF_
f7a0: 45 70 68 65 6d 65 72 61 6c 20 69 73 20 73 65 74  Ephemeral is set
f7b0: 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 74 61 62  .** then the tab
f7c0: 6c 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  le is stored in 
f7d0: 61 20 66 69 6c 65 20 74 68 61 74 20 69 73 20 61  a file that is a
f7e0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c  utomatically del
f7f0: 65 74 65 64 0a 2a 2a 20 77 68 65 6e 20 74 68 65  eted.** when the
f800: 20 56 44 42 45 20 63 75 72 73 6f 72 20 74 6f 20   VDBE cursor to 
f810: 74 68 65 20 74 61 62 6c 65 20 69 73 20 63 6c 6f  the table is clo
f820: 73 65 64 2e 20 20 49 6e 20 74 68 69 73 20 63 61  sed.  In this ca
f830: 73 65 20 54 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a  se Table.tnum .*
f840: 2a 20 72 65 66 65 72 73 20 56 44 42 45 20 63 75  * refers VDBE cu
f850: 72 73 6f 72 20 6e 75 6d 62 65 72 20 74 68 61 74  rsor number that
f860: 20 68 6f 6c 64 73 20 74 68 65 20 74 61 62 6c 65   holds the table
f870: 20 6f 70 65 6e 2c 20 6e 6f 74 20 74 6f 20 74 68   open, not to th
f880: 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 6e  e root.** page n
f890: 75 6d 62 65 72 2e 20 20 54 72 61 6e 73 69 65 6e  umber.  Transien
f8a0: 74 20 74 61 62 6c 65 73 20 61 72 65 20 75 73 65  t tables are use
f8b0: 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 72 65  d to hold the re
f8c0: 73 75 6c 74 73 20 6f 66 20 61 0a 2a 2a 20 73 75  sults of a.** su
f8d0: 62 2d 71 75 65 72 79 20 74 68 61 74 20 61 70 70  b-query that app
f8e0: 65 61 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20  ears instead of 
f8f0: 61 20 72 65 61 6c 20 74 61 62 6c 65 20 6e 61 6d  a real table nam
f900: 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  e in the FROM cl
f910: 61 75 73 65 20 0a 2a 2a 20 6f 66 20 61 20 53 45  ause .** of a SE
f920: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
f930: 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20  */.struct Table 
f940: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
f950: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
f960: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   of the table or
f970: 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d   view */.  Colum
f980: 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20  n *aCol;        
f990: 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
f9a0: 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
f9b0: 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e   */.  Index *pIn
f9c0: 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69  dex;       /* Li
f9d0: 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65  st of SQL indexe
f9e0: 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e  s on this table.
f9f0: 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53   */.  Select *pS
fa00: 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55  elect;     /* NU
fa10: 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20  LL for tables.  
fa20: 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69  Points to defini
fa30: 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20  tion if a view. 
fa40: 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79  */.  FKey *pFKey
fa50: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e  ;         /* Lin
fa60: 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  ked list of all 
fa70: 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20  foreign keys in 
fa80: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
fa90: 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
faa0: 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64       /* String d
fab0: 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69  efining the affi
fac0: 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c  nity of each col
fad0: 75 6d 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  umn */.#ifndef S
fae0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b  QLITE_OMIT_CHECK
faf0: 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68  .  ExprList *pCh
fb00: 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43  eck;    /* All C
fb10: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  HECK constraints
fb20: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4c 6f 67   */.#endif.  Log
fb30: 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20  Est nRowLogEst; 
fb40: 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72    /* Estimated r
fb50: 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66  ows in table - f
fb60: 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31  rom sqlite_stat1
fb70: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20   table */.  int 
fb80: 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
fb90: 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 6e   /* Root BTree n
fba0: 6f 64 65 20 66 6f 72 20 74 68 69 73 20 74 61 62  ode for this tab
fbb0: 6c 65 20 28 73 65 65 20 6e 6f 74 65 20 61 62 6f  le (see note abo
fbc0: 76 65 29 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b  ve) */.  i16 iPK
fbd0: 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ey;           /*
fbe0: 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65   If not negative
fbf0: 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79  , use aCol[iPKey
fc00: 5d 20 61 73 20 74 68 65 20 70 72 69 6d 61 72 79  ] as the primary
fc10: 20 6b 65 79 20 2a 2f 0a 20 20 69 31 36 20 6e 43   key */.  i16 nC
fc20: 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ol;            /
fc30: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
fc40: 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  mns in this tabl
fc50: 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b  e */.  u16 nRef;
fc60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
fc70: 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72  umber of pointer
fc80: 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20  s to this Table 
fc90: 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54 61  */.  LogEst szTa
fca0: 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74  bRow;     /* Est
fcb0: 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 65  imated size of e
fcc0: 61 63 68 20 74 61 62 6c 65 20 72 6f 77 20 69 6e  ach table row in
fcd0: 20 62 79 74 65 73 20 2a 2f 0a 23 69 66 64 65 66   bytes */.#ifdef
fce0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43   SQLITE_ENABLE_C
fcf0: 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74  OSTMULT.  LogEst
fd00: 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f   costMult;     /
fd10: 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65  * Cost multiplie
fd20: 72 20 66 6f 72 20 75 73 69 6e 67 20 74 68 69 73  r for using this
fd30: 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66   table */.#endif
fd40: 0a 20 20 75 38 20 74 61 62 46 6c 61 67 73 3b 20  .  u8 tabFlags; 
fd50: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
fd60: 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a  of TF_* values *
fd70: 2f 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20  /.  u8 keyConf; 
fd80: 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74           /* What
fd90: 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f   to do in case o
fda0: 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e  f uniqueness con
fdb0: 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a  flict on iPKey *
fdc0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
fdd0: 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45  _OMIT_ALTERTABLE
fde0: 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66  .  int addColOff
fdf0: 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65  set;    /* Offse
fe00: 74 20 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c  t in CREATE TABL
fe10: 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20  E stmt to add a 
fe20: 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65  new column */.#e
fe30: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
fe40: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
fe50: 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64  TABLE.  int nMod
fe60: 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20  uleArg;      /* 
fe70: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
fe80: 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c  nts to the modul
fe90: 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a  e */.  char **az
fea0: 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54  ModuleArg;  /* T
feb0: 65 78 74 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c  ext of all modul
fec0: 65 20 61 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d  e args. [0] is m
fed0: 6f 64 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  odule name */.  
fee0: 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b  VTable *pVTable;
fef0: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
ff00: 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20  VTable objects. 
ff10: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67  */.#endif.  Trig
ff20: 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20  ger *pTrigger;  
ff30: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67   /* List of trig
ff40: 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70  gers stored in p
ff50: 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65  Schema */.  Sche
ff60: 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
ff70: 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20   /* Schema that 
ff80: 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61  contains this ta
ff90: 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ble */.  Table *
ffa0: 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a  pNextZombie;  /*
ffb0: 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72   Next on the Par
ffc0: 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69  se.pZombieTab li
ffd0: 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
ffe0: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
fff0: 6f 72 20 54 61 62 6c 65 2e 74 61 62 46 6c 61 67  or Table.tabFlag
10000 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  s..*/.#define TF
10010 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20  _Readonly       
10020 20 30 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64   0x01    /* Read
10030 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62  -only system tab
10040 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  le */.#define TF
10050 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20  _Ephemeral      
10060 20 30 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65   0x02    /* An e
10070 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a  phemeral table *
10080 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73  /.#define TF_Has
10090 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30  PrimaryKey   0x0
100a0 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61  4    /* Table ha
100b0 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20  s a primary key 
100c0 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75  */.#define TF_Au
100d0 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78  toincrement   0x
100e0 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72  08    /* Integer
100f0 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20   primary key is 
10100 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f  autoincrement */
10110 0a 23 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74  .#define TF_Virt
10120 75 61 6c 20 20 20 20 20 20 20 20 20 30 78 31 30  ual         0x10
10130 20 20 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74      /* Is a virt
10140 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  ual table */.#de
10150 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52  fine TF_WithoutR
10160 6f 77 69 64 20 20 20 20 30 78 32 30 20 20 20 20  owid    0x20    
10170 2f 2a 20 4e 6f 20 72 6f 77 69 64 20 75 73 65 64  /* No rowid used
10180 2e 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73  . PRIMARY KEY is
10190 20 74 68 65 20 6b 65 79 20 2a 2f 0a 0a 0a 2f 2a   the key */.../*
101a0 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20  .** Test to see 
101b0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
101c0 20 74 61 62 6c 65 20 69 73 20 61 20 76 69 72 74   table is a virt
101d0 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73  ual table.  This
101e0 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61   is.** done as a
101f0 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69   macro so that i
10200 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69  t will be optimi
10210 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72  zed out when vir
10220 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75  tual.** table su
10230 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64  pport is omitted
10240 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e   from the build.
10250 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
10260 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
10270 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49  ABLE.#  define I
10280 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
10290 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73   (((X)->tabFlags
102a0 20 26 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d   & TF_Virtual)!=
102b0 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48  0).#  define IsH
102c0 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28  iddenColumn(X) (
102d0 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  ((X)->colFlags &
102e0 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29   COLFLAG_HIDDEN)
102f0 21 3d 30 29 0a 23 65 6c 73 65 0a 23 20 20 64 65  !=0).#else.#  de
10300 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58  fine IsVirtual(X
10310 29 20 20 20 20 20 20 30 0a 23 20 20 64 65 66 69  )      0.#  defi
10320 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ne IsHiddenColum
10330 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  n(X) 0.#endif../
10340 2a 20 44 6f 65 73 20 74 68 65 20 74 61 62 6c 65  * Does the table
10350 20 68 61 76 65 20 61 20 72 6f 77 69 64 20 2a 2f   have a rowid */
10360 0a 23 64 65 66 69 6e 65 20 48 61 73 52 6f 77 69  .#define HasRowi
10370 64 28 58 29 20 20 20 20 20 28 28 28 58 29 2d 3e  d(X)     (((X)->
10380 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 57 69  tabFlags & TF_Wi
10390 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a  thoutRowid)==0).
103a0 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65  ./*.** Each fore
103b0 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
103c0 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  nt is an instanc
103d0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
103e0 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
103f0 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65  .** A foreign ke
10400 79 20 69 73 20 61 73 73 6f 63 69 61 74 65 64 20  y is associated 
10410 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e  with two tables.
10420 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62    The "from" tab
10430 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62  le is.** the tab
10440 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  le that contains
10450 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
10460 63 6c 61 75 73 65 20 74 68 61 74 20 63 72 65 61  clause that crea
10470 74 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a  tes the foreign.
10480 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f  ** key.  The "to
10490 22 20 74 61 62 6c 65 20 69 73 20 74 68 65 20 74  " table is the t
104a0 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d  able that is nam
104b0 65 64 20 69 6e 20 74 68 65 20 52 45 46 45 52 45  ed in the REFERE
104c0 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20  NCES clause..** 
104d0 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65 78  Consider this ex
104e0 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ample:.**.**    
104f0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 78   CREATE TABLE ex
10500 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e  1(.**       a IN
10510 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
10520 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e  Y,.**       b IN
10530 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54  TEGER CONSTRAINT
10540 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20   fk1 REFERENCES 
10550 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b  ex2(x).**     );
10560 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69  .**.** For forei
10570 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68  gn key "fk1", th
10580 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20  e from-table is 
10590 22 65 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f  "ex1" and the to
105a0 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e  -table is "ex2".
105b0 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e 74 20 6e  .** Equivalent n
105c0 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ames:.**.**     
105d0 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68  from-table == ch
105e0 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20  ild-table.**    
105f0 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70     to-table == p
10600 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a  arent-table.**.*
10610 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e 43 45  * Each REFERENCE
10620 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61 74  S clause generat
10630 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  es an instance o
10640 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
10650 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68 69  structure.** whi
10660 63 68 20 69 73 20 61 74 74 61 63 68 65 64 20 74  ch is attached t
10670 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65  o the from-table
10680 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65 20  .  The to-table 
10690 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20 77  need not exist w
106a0 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d  hen.** the from-
106b0 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64  table is created
106c0 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e 63 65  .  The existence
106d0 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c 65   of the to-table
106e0 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e   is not checked.
106f0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20  .**.** The list 
10700 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74 73 20 66  of all parents f
10710 6f 72 20 63 68 69 6c 64 20 54 61 62 6c 65 20 58  or child Table X
10720 20 69 73 20 68 65 6c 64 20 61 74 20 58 2e 70 46   is held at X.pF
10730 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73  Key..**.** A lis
10740 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72 65  t of all childre
10750 6e 20 66 6f 72 20 61 20 74 61 62 6c 65 20 6e 61  n for a table na
10760 6d 65 64 20 5a 20 28 77 68 69 63 68 20 6d 69 67  med Z (which mig
10770 68 74 20 6e 6f 74 20 65 76 65 6e 20 65 78 69 73  ht not even exis
10780 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e  t).** is held in
10790 20 53 63 68 65 6d 61 2e 66 6b 65 79 48 61 73 68   Schema.fkeyHash
107a0 20 77 69 74 68 20 61 20 68 61 73 68 20 6b 65 79   with a hash key
107b0 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74   of Z..*/.struct
107c0 20 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65 20   FKey {.  Table 
107d0 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54  *pFrom;     /* T
107e0 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  able containing 
107f0 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
10800 6c 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69 6c  lause (aka: Chil
10810 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e  d) */.  FKey *pN
10820 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78  extFrom;  /* Nex
10830 74 20 46 4b 65 79 20 77 69 74 68 20 74 68 65 20  t FKey with the 
10840 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e  same in pFrom. N
10850 65 78 74 20 70 61 72 65 6e 74 20 6f 66 20 70 46  ext parent of pF
10860 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  rom */.  char *z
10870 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  To;        /* Na
10880 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74  me of table that
10890 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20   the key points 
108a0 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29  to (aka: Parent)
108b0 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78   */.  FKey *pNex
108c0 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20  tTo;    /* Next 
108d0 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54  with the same zT
108e0 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64 20 6f 66  o. Next child of
108f0 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20   zTo. */.  FKey 
10900 2a 70 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20  *pPrevTo;    /* 
10910 50 72 65 76 69 6f 75 73 20 77 69 74 68 20 74 68  Previous with th
10920 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20  e same zTo */.  
10930 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20  int nCol;       
10940 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
10950 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b  olumns in this k
10960 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52  ey */.  /* EV: R
10970 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a  -30323-21917 */.
10980 20 20 75 38 20 69 73 44 65 66 65 72 72 65 64 3b    u8 isDeferred;
10990 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
109a0 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68 65  f constraint che
109b0 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72 65  cking is deferre
109c0 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f  d till COMMIT */
109d0 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d  .  u8 aAction[2]
109e0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44  ;        /* ON D
109f0 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55 50 44  ELETE and ON UPD
10a00 41 54 45 20 61 63 74 69 6f 6e 73 2c 20 72 65 73  ATE actions, res
10a10 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54  pectively */.  T
10a20 72 69 67 67 65 72 20 2a 61 70 54 72 69 67 67 65  rigger *apTrigge
10a30 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73  r[2];/* Triggers
10a40 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61   for aAction[] a
10a50 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75  ctions */.  stru
10a60 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20  ct sColMap {    
10a70 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20    /* Mapping of 
10a80 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d  columns in pFrom
10a90 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a   to columns in z
10aa0 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46  To */.    int iF
10ab0 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  rom;            
10ac0 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75  /* Index of colu
10ad0 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20  mn in pFrom */. 
10ae0 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20     char *zCol;  
10af0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
10b00 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54   of column in zT
10b10 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75 73 65 20  o.  If NULL use 
10b20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20  PRIMARY KEY */. 
10b30 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20   } aCol[1];     
10b40 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e         /* One en
10b50 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f 66 20  try for each of 
10b60 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a  nCol columns */.
10b70 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65  };../*.** SQLite
10b80 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 64   supports many d
10b90 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74 6f  ifferent ways to
10ba0 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74   resolve a const
10bb0 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20  raint.** error. 
10bc0 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73   ROLLBACK proces
10bd0 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 20  sing means that 
10be0 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
10bf0 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73  lation.** causes
10c00 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
10c10 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66 61 69  n process to fai
10c20 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20 63 75  l and for the cu
10c30 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  rrent transactio
10c40 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65  n.** to be rolle
10c50 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54 20 70  d back.  ABORT p
10c60 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
10c70 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
10c80 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c   process.** fail
10c90 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f 72 20  s and any prior 
10ca0 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74 68 61  changes from tha
10cb0 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20  t one operation 
10cc0 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a  are backed out,.
10cd0 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61 6e 73  ** but the trans
10ce0 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f  action is not ro
10cf0 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41 49 4c  lled back.  FAIL
10d00 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
10d10 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70  s that.** the op
10d20 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72  eration in progr
10d30 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20 72 65  ess stops and re
10d40 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63  turns an error c
10d50 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f 72 0a  ode.  But prior.
10d60 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65 20 74  ** changes due t
10d70 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61  o the same opera
10d80 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61 63  tion are not bac
10d90 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72  ked out and no r
10da0 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72  ollback.** occur
10db0 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73  s.  IGNORE means
10dc0 20 74 68 61 74 20 74 68 65 20 70 61 72 74 69 63   that the partic
10dd0 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20 63 61  ular row that ca
10de0 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61  used the constra
10df0 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20  int.** error is 
10e00 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20  not inserted or 
10e10 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63 65 73  updated.  Proces
10e20 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61  sing continues a
10e30 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69  nd no error.** i
10e40 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52 45 50  s returned.  REP
10e50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61 74 20  LACE means that 
10e60 70 72 65 65 78 69 73 74 69 6e 67 20 64 61 74 61  preexisting data
10e70 62 61 73 65 20 72 6f 77 73 20 74 68 61 74 20 63  base rows that c
10e80 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55  aused.** a UNIQU
10e90 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  E constraint vio
10ea0 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76  lation are remov
10eb0 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e  ed so that the n
10ec0 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20  ew insert or.** 
10ed0 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f 63 65  update can proce
10ee0 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20  ed.  Processing 
10ef0 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f  continues and no
10f00 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f 72 74   error is report
10f10 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49  ed..**.** RESTRI
10f20 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64  CT, SETNULL, and
10f30 20 43 41 53 43 41 44 45 20 61 63 74 69 6f 6e 73   CASCADE actions
10f40 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66   apply only to f
10f50 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20  oreign keys..** 
10f60 52 45 53 54 52 49 43 54 20 69 73 20 74 68 65 20  RESTRICT is the 
10f70 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20 66 6f  same as ABORT fo
10f80 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f 72 65  r IMMEDIATE fore
10f90 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74 68 65  ign keys and the
10fa0 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c  .** same as ROLL
10fb0 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52 52 45  BACK for DEFERRE
10fc0 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c  D keys.  SETNULL
10fd0 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
10fe0 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69  foreign.** key i
10ff0 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20  s set to NULL.  
11000 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20 74 68  CASCADE means th
11010 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72 20 55  at a DELETE or U
11020 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20  PDATE of the.** 
11030 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65  referenced table
11040 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67 61 74   row is propagat
11050 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f 77 20  ed into the row 
11060 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a  that holds the.*
11070 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a  * foreign key..*
11080 2a 20 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  * .** The follow
11090 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c  ing symbolic val
110a0 75 65 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ues are used to 
110b0 72 65 63 6f 72 64 20 77 68 69 63 68 20 74 79 70  record which typ
110c0 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74  e.** of action t
110d0 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69  o take..*/.#defi
110e0 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30  ne OE_None     0
110f0 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e     /* There is n
11100 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20  o constraint to 
11110 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65  check */.#define
11120 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20   OE_Rollback 1  
11130 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65   /* Fail the ope
11140 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62  ration and rollb
11150 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74  ack the transact
11160 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
11170 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f  E_Abort    2   /
11180 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67  * Back out chang
11190 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c  es but do no rol
111a0 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f  lback transactio
111b0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  n */.#define OE_
111c0 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20  Fail     3   /* 
111d0 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69  Stop the operati
111e0 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c  on but leave all
111f0 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a   prior changes *
11200 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e  /.#define OE_Ign
11210 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e  ore   4   /* Ign
11220 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44  ore the error. D
11230 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53  o not do the INS
11240 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f  ERT or UPDATE */
11250 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c  .#define OE_Repl
11260 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65  ace  5   /* Dele
11270 74 65 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f  te existing reco
11280 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45  rd, then do INSE
11290 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a  RT or UPDATE */.
112a0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 73 74  .#define OE_Rest
112b0 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41  rict 6   /* OE_A
112c0 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44 49 41  bort for IMMEDIA
112d0 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20  TE, OE_Rollback 
112e0 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a 2f 0a  for DEFERRED */.
112f0 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75  #define OE_SetNu
11300 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74 20 74  ll  7   /* Set t
11310 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76  he foreign key v
11320 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a  alue to NULL */.
11330 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 44 66  #define OE_SetDf
11340 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74 20 74  lt  8   /* Set t
11350 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76  he foreign key v
11360 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65 66 61  alue to its defa
11370 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ult */.#define O
11380 45 5f 43 61 73 63 61 64 65 20 20 39 20 20 20 2f  E_Cascade  9   /
11390 2a 20 43 61 73 63 61 64 65 20 74 68 65 20 63 68  * Cascade the ch
113a0 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e  anges */..#defin
113b0 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20 31 30  e OE_Default  10
113c0 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72    /* Do whatever
113d0 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63 74   the default act
113e0 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  ion is */.../*.*
113f0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
11400 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
11410 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73  tructure is pass
11420 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74 0a  ed as the first.
11430 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73  ** argument to s
11440 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d  qlite3VdbeKeyCom
11450 70 61 72 65 20 61 6e 64 20 69 73 20 75 73 65 64  pare and is used
11460 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20   to control the 
11470 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  .** comparison o
11480 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20  f the two index 
11490 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  keys..**.** Note
114a0 20 74 68 61 74 20 61 53 6f 72 74 4f 72 64 65 72   that aSortOrder
114b0 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68  [] and aColl[] h
114c0 61 76 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f  ave nField+1 slo
114d0 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72  ts.  There.** ar
114e0 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20 66  e nField slots f
114f0 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  or the columns o
11500 66 20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e 20  f an index then 
11510 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a  one extra slot.*
11520 2a 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20  * for the rowid 
11530 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73  at the end..*/.s
11540 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a  truct KeyInfo {.
11550 20 20 75 33 32 20 6e 52 65 66 3b 20 20 20 20 20    u32 nRef;     
11560 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
11570 6f 66 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f  of references to
11580 20 74 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62   this KeyInfo ob
11590 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63  ject */.  u8 enc
115a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
115b0 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d   Text encoding -
115c0 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49   one of the SQLI
115d0 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a  TE_UTF* values *
115e0 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20  /.  u16 nField; 
115f0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
11600 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73  r of key columns
11610 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f   in the index */
11620 0a 20 20 75 31 36 20 6e 58 46 69 65 6c 64 3b 20  .  u16 nXField; 
11630 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
11640 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 62 65 79 6f   of columns beyo
11650 6e 64 20 74 68 65 20 6b 65 79 20 63 6f 6c 75 6d  nd the key colum
11660 6e 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  ns */.  sqlite3 
11670 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  *db;        /* T
11680 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
11690 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a  ection */.  u8 *
116a0 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20  aSortOrder;     
116b0 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f  /* Sort order fo
116c0 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a  r each column. *
116d0 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f  /.  CollSeq *aCo
116e0 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61  ll[1];  /* Colla
116f0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f  ting sequence fo
11700 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74  r each term of t
11710 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  he key */.};../*
11720 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
11730 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
11740 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
11750 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
11760 75 74 20 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69  ut a.** single i
11770 6e 64 65 78 20 72 65 63 6f 72 64 20 74 68 61 74  ndex record that
11780 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
11790 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74  n parsed out int
117a0 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20  o individual.** 
117b0 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20  values..**.** A 
117c0 72 65 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a  record is an obj
117d0 65 63 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ect that contain
117e0 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69  s one or more fi
117f0 65 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a  elds of data..**
11800 20 52 65 63 6f 72 64 73 20 61 72 65 20 75 73 65   Records are use
11810 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63  d to store the c
11820 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c  ontent of a tabl
11830 65 20 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f  e row and to sto
11840 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66  re.** the key of
11850 20 61 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c   an index.  A bl
11860 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61  ob encoding of a
11870 20 72 65 63 6f 72 64 20 69 73 20 63 72 65 61 74   record is creat
11880 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f  ed by.** the OP_
11890 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64  MakeRecord opcod
118a0 65 20 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e  e of the VDBE an
118b0 64 20 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65  d is disassemble
118c0 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43  d by the.** OP_C
118d0 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a  olumn opcode..**
118e0 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75  .** This structu
118f0 72 65 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72  re holds a recor
11900 64 20 74 68 61 74 20 68 61 73 20 61 6c 72 65 61  d that has alrea
11910 64 79 20 62 65 65 6e 20 64 69 73 61 73 73 65 6d  dy been disassem
11920 62 6c 65 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73  bled.** into its
11930 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 66 69 65   constituent fie
11940 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  lds..**.** The r
11950 31 20 61 6e 64 20 72 32 20 6d 65 6d 62 65 72 20  1 and r2 member 
11960 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e  variables are on
11970 6c 79 20 75 73 65 64 20 62 79 20 74 68 65 20 6f  ly used by the o
11980 70 74 69 6d 69 7a 65 64 20 63 6f 6d 70 61 72 69  ptimized compari
11990 73 6f 6e 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  son.** functions
119a0 20 76 64 62 65 52 65 63 6f 72 64 43 6f 6d 70 61   vdbeRecordCompa
119b0 72 65 49 6e 74 28 29 20 61 6e 64 20 76 64 62 65  reInt() and vdbe
119c0 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 53 74 72  RecordCompareStr
119d0 69 6e 67 28 29 2e 0a 2a 2f 0a 73 74 72 75 63 74  ing()..*/.struct
119e0 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
119f0 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  {.  KeyInfo *pKe
11a00 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61  yInfo;  /* Colla
11a10 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72  tion and sort-or
11a20 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  der information 
11a30 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  */.  u16 nField;
11a40 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
11a50 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
11a60 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38   apMem[] */.  i8
11a70 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20   default_rc;    
11a80 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20    /* Comparison 
11a90 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61  result if keys a
11aa0 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38  re equal */.  u8
11ab0 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20   errCode;       
11ac0 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63    /* Error detec
11ad0 74 65 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f  ted by xRecordCo
11ae0 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f  mpare (CORRUPT o
11af0 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 4d 65  r NOMEM) */.  Me
11b00 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *aMem;        
11b10 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20    /* Values */. 
11b20 20 69 6e 74 20 72 31 3b 20 20 20 20 20 20 20 20   int r1;        
11b30 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
11b40 20 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20   return if (lhs 
11b50 3e 20 72 68 73 29 20 2a 2f 0a 20 20 69 6e 74 20  > rhs) */.  int 
11b60 72 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r2;             
11b70 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
11b80 72 6e 20 69 66 20 28 72 68 73 20 3c 20 6c 68 73  rn if (rhs < lhs
11b90 29 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20  ) */.};.../*.** 
11ba0 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78 20 69  Each SQL index i
11bb0 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
11bc0 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a   memory by an.**
11bd0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
11be0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
11bf0 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ture..**.** The 
11c00 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74  columns of the t
11c10 61 62 6c 65 20 74 68 61 74 20 61 72 65 20 74 6f  able that are to
11c20 20 62 65 20 69 6e 64 65 78 65 64 20 61 72 65 20   be indexed are 
11c30 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79 20  described.** by 
11c40 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66  the aiColumn[] f
11c50 69 65 6c 64 20 6f 66 20 74 68 69 73 20 73 74 72  ield of this str
11c60 75 63 74 75 72 65 2e 20 20 46 6f 72 20 65 78 61  ucture.  For exa
11c70 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a  mple, suppose.**
11c80 20 77 65 20 68 61 76 65 20 74 68 65 20 66 6f 6c   we have the fol
11c90 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 61 6e 64  lowing table and
11ca0 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20   index:.**.**   
11cb0 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 45    CREATE TABLE E
11cc0 78 31 28 63 31 20 69 6e 74 2c 20 63 32 20 69 6e  x1(c1 int, c2 in
11cd0 74 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20  t, c3 text);.** 
11ce0 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
11cf0 20 45 78 32 20 4f 4e 20 45 78 31 28 63 33 2c 63   Ex2 ON Ex1(c3,c
11d00 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  1);.**.** In the
11d10 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65   Table structure
11d20 20 64 65 73 63 72 69 62 69 6e 67 20 45 78 31 2c   describing Ex1,
11d30 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65   nCol==3 because
11d40 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 74 68   there are.** th
11d50 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  ree columns in t
11d60 68 65 20 74 61 62 6c 65 2e 20 20 49 6e 20 74 68  he table.  In th
11d70 65 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72  e Index structur
11d80 65 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20  e describing.** 
11d90 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20  Ex2, nColumn==2 
11da0 73 69 6e 63 65 20 32 20 6f 66 20 74 68 65 20 33  since 2 of the 3
11db0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20   columns of Ex1 
11dc0 61 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20  are indexed..** 
11dd0 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61 69 43  The value of aiC
11de0 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e  olumn is {2, 0}.
11df0 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32    aiColumn[0]==2
11e00 20 62 65 63 61 75 73 65 20 74 68 65 20 0a 2a 2a   because the .**
11e10 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f   first column to
11e20 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 33 29   be indexed (c3)
11e30 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
11e40 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d   2 in Ex1.aCol[]
11e50 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20  ..** The second 
11e60 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64  column to be ind
11e70 65 78 65 64 20 28 63 31 29 20 68 61 73 20 61 6e  exed (c1) has an
11e80 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a   index of 0 in.*
11e90 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65  * Ex1.aCol[], he
11ea0 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e  nce Ex2.aiColumn
11eb0 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68  [1]==0..**.** Th
11ec0 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20  e Index.onError 
11ed0 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73  field determines
11ee0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
11ef0 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75  the indexed colu
11f00 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75  mns.** must be u
11f10 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74 20 74  nique and what t
11f20 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61 72 65  o do if they are
11f30 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65   not.  When Inde
11f40 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e  x.onError=OE_Non
11f50 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74  e,.** it means t
11f60 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69  his is not a uni
11f70 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65  que index.  Othe
11f80 72 77 69 73 65 20 69 74 20 69 73 20 61 20 75 6e  rwise it is a un
11f90 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e  ique index.** an
11fa0 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49  d the value of I
11fb0 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64  ndex.onError ind
11fc0 69 63 61 74 65 20 74 68 65 20 77 68 69 63 68 20  icate the which 
11fd0 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
11fe0 69 6f 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68  ion .** algorith
11ff0 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e  m to employ when
12000 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20  ever an attempt 
12010 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72  is made to inser
12020 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a  t a non-unique.*
12030 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74  * element..*/.st
12040 72 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63  ruct Index {.  c
12050 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
12060 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
12070 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  of this index */
12080 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e  .  i16 *aiColumn
12090 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  ;           /* W
120a0 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65  hich columns are
120b0 20 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e   used by this in
120c0 64 65 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a  dex.  1st is 0 *
120d0 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f  /.  LogEst *aiRo
120e0 77 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20  wLogEst;     /* 
120f0 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73  From ANALYZE: Es
12100 74 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64  t. rows selected
12110 20 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   by each column 
12120 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
12130 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le;           /*
12140 20 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62   The SQL table b
12150 65 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a  eing indexed */.
12160 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b    char *zColAff;
12170 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
12180 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68  ring defining th
12190 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61  e affinity of ea
121a0 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49  ch column */.  I
121b0 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20  ndex *pNext;    
121c0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
121d0 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69  ext index associ
121e0 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61  ated with the sa
121f0 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63  me table */.  Sc
12200 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
12210 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61         /* Schema
12220 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73   containing this
12230 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a   index */.  u8 *
12240 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20  aSortOrder;     
12250 20 20 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68       /* for each
12260 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44   column: True==D
12270 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20  ESC, False==ASC 
12280 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f  */.  char **azCo
12290 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ll;           /*
122a0 20 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74   Array of collat
122b0 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d  ion sequence nam
122c0 65 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a  es for index */.
122d0 20 20 45 78 70 72 20 2a 70 50 61 72 74 49 64 78    Expr *pPartIdx
122e0 57 68 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48  Where;     /* WH
122f0 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70  ERE clause for p
12300 61 72 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a  artial indices *
12310 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20  /.  int tnum;   
12320 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12330 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69  DB Page containi
12340 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20  ng root of this 
12350 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73  index */.  LogEs
12360 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20  t szIdxRow;     
12370 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
12380 20 61 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a   average row siz
12390 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  e in bytes */.  
123a0 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20  u16 nKeyCol;    
123b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
123c0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f  er of columns fo
123d0 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f  rming the key */
123e0 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20  .  u16 nColumn; 
123f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
12400 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
12410 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69   stored in the i
12420 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45  ndex */.  u8 onE
12430 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20  rror;           
12440 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20     /* OE_Abort, 
12450 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65  OE_Ignore, OE_Re
12460 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e  place, or OE_Non
12470 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  e */.  unsigned 
12480 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20  idxType:2;      
12490 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d  /* 1==UNIQUE, 2=
124a0 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d  =PRIMARY KEY, 0=
124b0 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f  =CREATE INDEX */
124c0 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f  .  unsigned bUno
124d0 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55  rdered:1;   /* U
124e0 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f  se this index fo
124f0 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69  r == or IN queri
12500 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73  es only */.  uns
12510 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c  igned uniqNotNul
12520 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66  l:1;  /* True if
12530 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20   UNIQUE and NOT 
12540 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c  NULL for all col
12550 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  umns */.  unsign
12560 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20  ed isResized:1; 
12570 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65     /* True if re
12580 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28  sizeIndexObject(
12590 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  ) has been calle
125a0 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  d */.  unsigned 
125b0 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20  isCovering:1;   
125c0 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20  /* True if this 
125d0 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e  is a covering in
125e0 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  dex */.  unsigne
125f0 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20  d noSkipScan:1; 
12600 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20    /* Do not try 
12610 74 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61 6e  to use skip-scan
12620 20 69 66 20 74 72 75 65 20 2a 2f 0a 23 69 66 64   if true */.#ifd
12630 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
12640 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
12650 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20    int nSample;  
12660 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
12670 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73  mber of elements
12680 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f   in aSample[] */
12690 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f  .  int nSampleCo
126a0 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53  l;          /* S
126b0 69 7a 65 20 6f 66 20 49 6e 64 65 78 53 61 6d 70  ize of IndexSamp
126c0 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f  le.anEq[] and so
126d0 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74   on */.  tRowcnt
126e0 20 2a 61 41 76 67 45 71 3b 20 20 20 20 20 20 20   *aAvgEq;       
126f0 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e 45 71    /* Average nEq
12700 20 76 61 6c 75 65 73 20 66 6f 72 20 6b 65 79 73   values for keys
12710 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20   not in aSample 
12720 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65  */.  IndexSample
12730 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a   *aSample;    /*
12740 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20   Samples of the 
12750 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f  left-most key */
12760 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f  .  tRowcnt *aiRo
12770 77 45 73 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e  wEst;       /* N
12780 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 73  on-logarithmic s
12790 74 61 74 31 20 64 61 74 61 20 66 6f 72 20 74 68  tat1 data for th
127a0 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52  is index */.  tR
127b0 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20  owcnt nRowEst0; 
127c0 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f         /* Non-lo
127d0 67 61 72 69 74 68 6d 69 63 20 6e 75 6d 62 65 72  garithmic number
127e0 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
127f0 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a  index */.#endif.
12800 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
12810 64 20 76 61 6c 75 65 73 20 66 6f 72 20 49 6e 64  d values for Ind
12820 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64  ex.idxType.*/.#d
12830 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58  efine SQLITE_IDX
12840 54 59 50 45 5f 41 50 50 44 45 46 20 20 20 20 20  TYPE_APPDEF     
12850 20 30 20 20 20 2f 2a 20 43 72 65 61 74 65 64 20   0   /* Created 
12860 75 73 69 6e 67 20 43 52 45 41 54 45 20 49 4e 44  using CREATE IND
12870 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  EX */.#define SQ
12880 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 55 4e 49  LITE_IDXTYPE_UNI
12890 51 55 45 20 20 20 20 20 20 31 20 20 20 2f 2a 20  QUE      1   /* 
128a0 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49  Implements a UNI
128b0 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  QUE constraint *
128c0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
128d0 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59  _IDXTYPE_PRIMARY
128e0 4b 45 59 20 20 32 20 20 20 2f 2a 20 49 73 20 74  KEY  2   /* Is t
128f0 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66  he PRIMARY KEY f
12900 6f 72 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  or the table */.
12910 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  ./* Return true 
12920 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20  if index X is a 
12930 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e 64 65  PRIMARY KEY inde
12940 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50  x */.#define IsP
12950 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 58  rimaryKeyIndex(X
12960 29 20 20 28 28 58 29 2d 3e 69 64 78 54 79 70 65  )  ((X)->idxType
12970 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  ==SQLITE_IDXTYPE
12980 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a  _PRIMARYKEY)../*
12990 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
129a0 69 6e 64 65 78 20 58 20 69 73 20 61 20 55 4e 49  index X is a UNI
129b0 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  QUE index */.#de
129c0 66 69 6e 65 20 49 73 55 6e 69 71 75 65 49 6e 64  fine IsUniqueInd
129d0 65 78 28 58 29 20 20 20 20 20 20 28 28 58 29 2d  ex(X)      ((X)-
129e0 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e  >onError!=OE_Non
129f0 65 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73  e)../*.** Each s
12a00 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20  ample stored in 
12a10 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33  the sqlite_stat3
12a20 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73   table is repres
12a30 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20  ented in memory 
12a40 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75  .** using a stru
12a50 63 74 75 72 65 20 6f 66 20 74 68 69 73 20 74 79  cture of this ty
12a60 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e  pe.  See documen
12a70 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f  tation at the to
12a80 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c  p of the.** anal
12a90 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c  yze.c source fil
12aa0 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
12ab0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
12ac0 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d  .struct IndexSam
12ad0 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b  ple {.  void *p;
12ae0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
12af0 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20  nter to sampled 
12b00 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
12b10 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
12b20 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20   Size of record 
12b30 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52  in bytes */.  tR
12b40 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20  owcnt *anEq;    
12b50 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
12b60 66 20 72 6f 77 73 20 77 68 65 72 65 20 74 68 65  f rows where the
12b70 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69 73   key equals this
12b80 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f   sample */.  tRo
12b90 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f  wcnt *anLt;    /
12ba0 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66  * Est. number of
12bb0 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20   rows where key 
12bc0 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  is less than thi
12bd0 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52  s sample */.  tR
12be0 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20  owcnt *anDLt;   
12bf0 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
12c00 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20  f distinct keys 
12c10 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73  less than this s
12c20 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ample */.};../*.
12c30 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f  ** Each token co
12c40 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65 20  ming out of the 
12c50 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73 74  lexer is an inst
12c60 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20  ance of.** this 
12c70 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b 65  structure.  Toke
12c80 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65 64  ns are also used
12c90 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 65   as part of an e
12ca0 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  xpression..**.**
12cb0 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a   Note if Token.z
12cc0 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64  ==0 then Token.d
12cd0 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61  yn and Token.n a
12ce0 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61 6e 64  re undefined and
12cf0 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20  .** may contain 
12d00 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20  random values.  
12d10 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20  Do not make any 
12d20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75  assumptions abou
12d30 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61  t Token.dyn.** a
12d40 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20  nd Token.n when 
12d50 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73  Token.z==0..*/.s
12d60 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20  truct Token {.  
12d70 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20 20  const char *z;  
12d80 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68     /* Text of th
12d90 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55  e token.  Not NU
12da0 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a  LL-terminated! *
12db0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  /.  unsigned int
12dc0 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72   n;    /* Number
12dd0 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69   of characters i
12de0 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a  n this token */.
12df0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
12e00 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
12e10 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
12e20 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65   information nee
12e30 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a  ded to generate.
12e40 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45  ** code for a SE
12e50 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69  LECT that contai
12e60 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ns aggregate fun
12e70 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  ctions..**.** If
12e80 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47   Expr.op==TK_AGG
12e90 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47  _COLUMN or TK_AG
12ea0 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20  G_FUNCTION then 
12eb0 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73  Expr.pAggInfo is
12ec0 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f   a.** pointer to
12ed0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
12ee0 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75    The Expr.iColu
12ef0 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65 20  mn field is the 
12f00 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49  index in.** AggI
12f10 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67  nfo.aCol[] or Ag
12f20 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66  gInfo.aFunc[] of
12f30 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65   information nee
12f40 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a  ded to generate.
12f50 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74  ** code for that
12f60 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67   node..**.** Agg
12f70 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e  Info.pGroupBy an
12f80 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e  d AggInfo.aFunc.
12f90 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66  pExpr point to f
12fa0 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65  ields within the
12fb0 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c  .** original Sel
12fc0 65 63 74 20 73 74 72 75 63 74 75 72 65 20 74 68  ect structure th
12fd0 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65  at describes the
12fe0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
12ff0 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65  t.  These.** fie
13000 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20  lds do not need 
13010 74 6f 20 62 65 20 66 72 65 65 64 20 77 68 65 6e  to be freed when
13020 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
13030 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74  e AggInfo struct
13040 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ure..*/.struct A
13050 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69  ggInfo {.  u8 di
13060 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20  rectMode;       
13070 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e     /* Direct ren
13080 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e  dering mode mean
13090 73 20 74 61 6b 65 20 64 61 74 61 20 64 69 72 65  s take data dire
130a0 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20  ctly.           
130b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
130c0 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61  * from source ta
130d0 62 6c 65 73 20 72 61 74 68 65 72 20 74 68 61 6e  bles rather than
130e0 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f   from accumulato
130f0 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f  rs */.  u8 useSo
13100 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20  rtingIdx;       
13110 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64  /* In direct mod
13120 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68 65  e, reference the
13130 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72   sorting index r
13140 61 74 68 65 72 0a 20 20 20 20 20 20 20 20 20 20  ather.          
13150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13160 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72  ** than the sour
13170 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e  ce table */.  in
13180 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20  t sortingIdx;   
13190 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20        /* Cursor 
131a0 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f  number of the so
131b0 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
131c0 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 50   int sortingIdxP
131d0 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72 73  Tab;     /* Curs
131e0 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65  or number of pse
131f0 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69  udo-table */.  i
13200 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d  nt nSortingColum
13210 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  n;     /* Number
13220 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
13230 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
13240 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c   */.  int mnReg,
13250 20 6d 78 52 65 67 3b 20 20 20 20 20 20 20 2f 2a   mxReg;       /*
13260 20 52 61 6e 67 65 20 6f 66 20 72 65 67 69 73 74   Range of regist
13270 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f  ers allocated fo
13280 72 20 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63  r aCol and aFunc
13290 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
132a0 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a  pGroupBy;     /*
132b0 20 54 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c   The group by cl
132c0 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74  ause */.  struct
132d0 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20   AggInfo_col {  
132e0 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f    /* For each co
132f0 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75  lumn used in sou
13300 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20  rce tables */.  
13310 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
13320 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f             /* So
13330 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
13340 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20    int iTable;   
13350 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
13360 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
13370 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
13380 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75  */.    int iColu
13390 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  mn;             
133a0 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* Column number
133b0 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72   within the sour
133c0 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
133d0 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d  int iSorterColum
133e0 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75  n;       /* Colu
133f0 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65  mn number in the
13400 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
13410 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20  /.    int iMem; 
13420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13430 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  * Memory locatio
13440 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61  n that acts as a
13450 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20  ccumulator */.  
13460 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
13470 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
13480 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65  e original expre
13490 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43  ssion */.  } *aC
134a0 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d  ol;.  int nColum
134b0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
134c0 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20   Number of used 
134d0 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b  entries in aCol[
134e0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75  ] */.  int nAccu
134f0 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f  mulator;       /
13500 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
13510 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74 68  mns that show th
13520 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74  rough to the out
13530 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20  put..           
13540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
13550 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c  * Additional col
13560 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e  umns are used on
13570 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65 72 73  ly as parameters
13580 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20   to.            
13590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
135a0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
135b0 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  ions */.  struct
135c0 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20   AggInfo_func { 
135d0 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67    /* For each ag
135e0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
135f0 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45   */.    Expr *pE
13600 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
13610 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65   /* Expression e
13620 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63  ncoding the func
13630 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63  tion */.    Func
13640 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20  Def *pFunc;     
13650 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72       /* The aggr
13660 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69  egate function i
13670 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f  mplementation */
13680 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20  .    int iMem;  
13690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
136a0 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   Memory location
136b0 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63   that acts as ac
136c0 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20  cumulator */.   
136d0 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20   int iDistinct; 
136e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68            /* Eph
136f0 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65  emeral table use
13700 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53  d to enforce DIS
13710 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46  TINCT */.  } *aF
13720 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63  unc;.  int nFunc
13730 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
13740 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
13750 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a  ies in aFunc[] *
13760 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
13770 64 61 74 61 74 79 70 65 20 79 6e 56 61 72 20 69  datatype ynVar i
13780 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67  s a signed integ
13790 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69  er, either 16-bi
137a0 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20  t or 32-bit..** 
137b0 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36  Usually it is 16
137c0 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66 20 53  -bits.  But if S
137d0 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
137e0 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65  LE_NUMBER is gre
137f0 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37  ater.** than 327
13800 36 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61  67 we have to ma
13810 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31  ke it 32-bit.  1
13820 36 2d 62 69 74 20 69 73 20 70 72 65 66 65 72 72  6-bit is preferr
13830 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74  ed because.** it
13840 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72   uses less memor
13850 79 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62  y in the Expr ob
13860 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 20 61  ject, which is a
13870 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72   big memory user
13880 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77  .** in systems w
13890 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70  ith lots of prep
138a0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e  ared statements.
138b0 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63    And few applic
138c0 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d  ations.** need m
138d0 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31  ore than about 1
138e0 30 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65  0 or 20 variable
138f0 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74  s.  But some ext
13900 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a  reme users want.
13910 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70 61  ** to have prepa
13920 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77  red statements w
13930 69 74 68 20 6f 76 65 72 20 33 32 37 36 37 20 76  ith over 32767 v
13940 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f  ariables, and fo
13950 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70  r them.** the op
13960 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c  tion is availabl
13970 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  e (at compile-ti
13980 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  me)..*/.#if SQLI
13990 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
139a0 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79  NUMBER<=32767.ty
139b0 70 65 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b  pedef i16 ynVar;
139c0 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69  .#else.typedef i
139d0 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66  nt ynVar;.#endif
139e0 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64  ../*.** Each nod
139f0 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69  e of an expressi
13a00 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65 20  on in the parse 
13a10 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61  tree is an insta
13a20 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  nce.** of this s
13a30 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
13a40 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f  Expr.op is the o
13a50 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67  pcode. The integ
13a60 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20  er parser token 
13a70 63 6f 64 65 73 20 61 72 65 20 72 65 75 73 65 64  codes are reused
13a80 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68  .** as opcodes h
13a90 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65  ere. For example
13aa0 2c 20 74 68 65 20 70 61 72 73 65 72 20 64 65 66  , the parser def
13ab0 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65  ines TK_GE to be
13ac0 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63   an integer.** c
13ad0 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67  ode representing
13ae0 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74   the ">=" operat
13af0 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e  or. This same in
13b00 74 65 67 65 72 20 63 6f 64 65 20 69 73 20 72 65  teger code is re
13b10 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65  used.** to repre
13b20 73 65 6e 74 20 74 68 65 20 67 72 65 61 74 65 72  sent the greater
13b30 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74  -than-or-equal-t
13b40 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68  o operator in th
13b50 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20  e expression.** 
13b60 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tree..**.** If t
13b70 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
13b80 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20   an SQL literal 
13b90 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f  (TK_INTEGER, TK_
13ba0 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20  FLOAT, TK_BLOB, 
13bb0 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47  .** or TK_STRING
13bc0 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ), then Expr.tok
13bd0 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  en contains the 
13be0 74 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20  text of the SQL 
13bf0 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74  literal. If.** t
13c00 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
13c10 20 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f   a variable (TK_
13c20 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20  VARIABLE), then 
13c30 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
13c40 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76 61 72 69  ins the .** vari
13c50 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c  able name. Final
13c60 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70 72 65  ly, if the expre
13c70 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20  ssion is an SQL 
13c80 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e  function (TK_FUN
13c90 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20  CTION),.** then 
13ca0 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
13cb0 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  ins the name of 
13cc0 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a  the function..**
13cd0 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20  .** Expr.pRight 
13ce0 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61  and Expr.pLeft a
13cf0 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20  re the left and 
13d00 72 69 67 68 74 20 73 75 62 65 78 70 72 65 73 73  right subexpress
13d10 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e  ions of a.** bin
13d20 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69  ary operator. Ei
13d30 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79  ther or both may
13d40 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   be NULL..**.** 
13d50 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20  Expr.x.pList is 
13d60 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65  a list of argume
13d70 6e 74 73 20 69 66 20 74 68 65 20 65 78 70 72 65  nts if the expre
13d80 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20  ssion is an SQL 
13d90 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43  function,.** a C
13da0 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f  ASE expression o
13db0 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69  r an IN expressi
13dc0 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22  on of the form "
13dd0 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c  <lhs> IN (<y>, <
13de0 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72  z>...)"..** Expr
13df0 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73  .x.pSelect is us
13e00 65 64 20 69 66 20 74 68 65 20 65 78 70 72 65 73  ed if the expres
13e10 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65  sion is a sub-se
13e20 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65  lect or an expre
13e30 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ssion of.** the 
13e40 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28  form "<lhs> IN (
13e50 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66  SELECT ...)". If
13e60 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63   the EP_xIsSelec
13e70 74 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20  t bit is set in 
13e80 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67  the.** Expr.flag
13e90 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70  s mask, then Exp
13ea0 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76  r.x.pSelect is v
13eb0 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  alid. Otherwise,
13ec0 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73   Expr.x.pList is
13ed0 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a   .** valid..**.*
13ee0 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  * An expression 
13ef0 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f  of the form ID o
13f00 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20 74  r ID.ID refers t
13f10 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20  o a column in a 
13f20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75  table..** For su
13f30 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20  ch expressions, 
13f40 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74  Expr.op is set t
13f50 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20  o TK_COLUMN and 
13f60 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a  Expr.iTable is.*
13f70 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63 75  * the integer cu
13f80 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61  rsor number of a
13f90 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69   VDBE cursor poi
13fa0 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61  nting to that ta
13fb0 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e  ble and.** Expr.
13fc0 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63  iColumn is the c
13fd0 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72  olumn number for
13fe0 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63 6f   the specific co
13ff0 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a  lumn.  If the.**
14000 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75   expression is u
14010 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  sed as a result 
14020 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  in an aggregate 
14030 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65  SELECT, then the
14040 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73  .** value is als
14050 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  o stored in the 
14060 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e  Expr.iAgg column
14070 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61 74   in the aggregat
14080 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20  e so that.** it 
14090 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20  can be accessed 
140a0 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67  after all aggreg
140b0 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65  ates are compute
140c0 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
140d0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
140e0 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c   unbound variabl
140f0 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73  e marker (a ques
14100 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63 68  tion mark .** ch
14110 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74  aracter '?' in t
14120 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29  he original SQL)
14130 20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69   then the Expr.i
14140 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20  Table holds the 
14150 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d 62 65 72  index .** number
14160 20 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62   for that variab
14170 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  le..**.** If the
14180 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
14190 20 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45   subquery then E
141a0 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64  xpr.iColumn hold
141b0 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  s an integer.** 
141c0 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20  register number 
141d0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72  containing the r
141e0 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62  esult of the sub
141f0 71 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a  query.  If the.*
14200 2a 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73  * subquery gives
14210 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75   a constant resu
14220 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20  lt, then iTable 
14230 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73  is -1.  If the s
14240 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73  ubquery.** gives
14250 20 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73   a different ans
14260 77 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74  wer at different
14270 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74   times during st
14280 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69  atement processi
14290 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c  ng.** then iTabl
142a0 65 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73  e is the address
142b0 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65   of a subroutine
142c0 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74   that computes t
142d0 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a  he subquery..**.
142e0 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72 20 69  ** If the Expr i
142f0 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c  s of type OP_Col
14300 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62  umn, and the tab
14310 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63 74 69  le it is selecti
14320 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20  ng from.** is a 
14330 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68  disk table or th
14340 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f  e "old.*" pseudo
14350 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61  -table, then pTa
14360 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a  b points to the.
14370 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ** corresponding
14380 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f   table definitio
14390 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54  n..**.** ALLOCAT
143a0 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a  ION NOTES:.**.**
143b0 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61   Expr objects ca
143c0 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d  n use a lot of m
143d0 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64  emory space in d
143e0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20  atabase schema. 
143f0 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75   To.** help redu
14400 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  ce memory requir
14410 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65  ements, sometime
14420 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74  s an Expr object
14430 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e   will be.** trun
14440 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72  cated.  And to r
14450 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72  educe the number
14460 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   of memory alloc
14470 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65  ations, sometime
14480 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65  s.** two or more
14490 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69   Expr objects wi
144a0 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  ll be stored in 
144b0 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20  a single memory 
144c0 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74  allocation,.** t
144d0 6f 67 65 74 68 65 72 20 77 69 74 68 20 45 78 70  ogether with Exp
144e0 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73  r.zToken strings
144f0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45  ..**.** If the E
14500 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45 50  P_Reduced and EP
14510 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73  _TokenOnly flags
14520 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a   are set when.**
14530 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20   an Expr object 
14540 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57  is truncated.  W
14550 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69  hen EP_Reduced i
14560 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a  s set, then all.
14570 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78 70  ** the child Exp
14580 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65  r objects in the
14590 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20   Expr.pLeft and 
145a0 45 78 70 72 2e 70 52 69 67 68 74 20 73 75 62 74  Expr.pRight subt
145b0 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74  rees.** are cont
145c0 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65  ained within the
145d0 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c   same memory all
145e0 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20  ocation.  Note, 
145f0 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a  however, that.**
14600 20 74 68 65 20 73 75 62 74 72 65 65 73 20 69 6e   the subtrees in
14610 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72   Expr.x.pList or
14620 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20   Expr.x.pSelect 
14630 61 72 65 20 61 6c 77 61 79 73 20 73 65 70 61 72  are always separ
14640 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74  ately.** allocat
14650 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  ed, regardless o
14660 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  f whether or not
14670 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73   EP_Reduced is s
14680 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78  et..*/.struct Ex
14690 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20  pr {.  u8 op;   
146a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
146b0 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f   Operation perfo
146c0 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64  rmed by this nod
146d0 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  e */.  char affi
146e0 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a  nity;         /*
146f0 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   The affinity of
14700 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30   the column or 0
14710 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e   if not a column
14720 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b   */.  u32 flags;
14730 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14740 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20  Various flags.  
14750 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a  EP_* See below *
14760 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
14770 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20  char *zToken;   
14780 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
14790 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d  value. Zero term
147a0 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f  inated and dequo
147b0 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ted */.    int i
147c0 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20  Value;          
147d0 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76    /* Non-negativ
147e0 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
147f0 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a  if EP_IntValue *
14800 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49  /.  } u;..  /* I
14810 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  f the EP_TokenOn
14820 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ly flag is set i
14830 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
14840 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20   mask, then no. 
14850 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c   ** space is all
14860 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66  ocated for the f
14870 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73  ields below this
14880 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d   point. An attem
14890 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73  pt to.  ** acces
148a0 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75  s them will resu
148b0 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74  lt in a segfault
148c0 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e   or malfunction.
148d0 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   .  ************
148e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
148f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14900 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14910 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78  *********/..  Ex
14920 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20  pr *pLeft;      
14930 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62       /* Left sub
14940 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  node */.  Expr *
14950 70 52 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  pRight;         
14960 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64   /* Right subnod
14970 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  e */.  union {. 
14980 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69     ExprList *pLi
14990 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20  st;     /* op = 
149a0 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45  IN, EXISTS, SELE
149b0 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49  CT, CASE, FUNCTI
149c0 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20  ON, BETWEEN */. 
149d0 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65     Select *pSele
149e0 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49  ct;     /* EP_xI
149f0 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d  sSelect and op =
14a00 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c   IN, EXISTS, SEL
14a10 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20  ECT */.  } x;.. 
14a20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65   /* If the EP_Re
14a30 64 75 63 65 64 20 66 6c 61 67 20 69 73 20 73 65  duced flag is se
14a40 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  t in the Expr.fl
14a50 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e  ags mask, then n
14a60 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20  o.  ** space is 
14a70 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68  allocated for th
14a80 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74  e fields below t
14a90 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74  his point. An at
14aa0 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63  tempt to.  ** ac
14ab0 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72  cess them will r
14ac0 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61  esult in a segfa
14ad0 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69  ult or malfuncti
14ae0 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  on..  **********
14af0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14b00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14b10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14b20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69  ***********/..#i
14b30 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50  f SQLITE_MAX_EXP
14b40 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20  R_DEPTH>0.  int 
14b50 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20  nHeight;        
14b60 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20     /* Height of 
14b70 74 68 65 20 74 72 65 65 20 68 65 61 64 65 64 20  the tree headed 
14b80 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a  by this node */.
14b90 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61  #endif.  int iTa
14ba0 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
14bb0 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75  /* TK_COLUMN: cu
14bc0 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
14bd0 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c  able holding col
14be0 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  umn.            
14bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
14c00 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67  TK_REGISTER: reg
14c10 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20  ister number.   
14c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c30 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47        ** TK_TRIG
14c40 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30  GER: 1 -> new, 0
14c50 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20   -> old.        
14c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c70 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a   ** EP_Unlikely:
14c80 20 20 31 33 34 32 31 37 37 32 38 20 74 69 6d 65    134217728 time
14c90 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 20 2a 2f 0a  s likelihood */.
14ca0 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b    ynVar iColumn;
14cb0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43           /* TK_C
14cc0 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e  OLUMN: column in
14cd0 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77  dex.  -1 for row
14ce0 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  id..            
14cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
14d00 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72  TK_VARIABLE: var
14d10 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c  iable number (al
14d20 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20  ways >= 1). */. 
14d30 20 69 31 36 20 69 41 67 67 3b 20 20 20 20 20 20   i16 iAgg;      
14d40 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
14d50 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e   entry in pAggIn
14d60 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e  fo->aCol[] or ->
14d70 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36  aFunc[] */.  i16
14d80 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65   iRightJoinTable
14d90 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f  ;   /* If EP_Fro
14da0 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74  mJoin, the right
14db0 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f   table of the jo
14dc0 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20  in */.  u8 op2; 
14dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14de0 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f  * TK_REGISTER: o
14df0 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66  riginal value of
14e00 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20 20 20   Expr.op.       
14e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    ** TK_COLUMN: 
14e30 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70 35 20  the value of p5 
14e40 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20  for OP_Column.  
14e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e60 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47         ** TK_AGG
14e70 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69  _FUNCTION: nesti
14e80 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67  ng depth */.  Ag
14e90 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b  gInfo *pAggInfo;
14ea0 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20       /* Used by 
14eb0 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e  TK_AGG_COLUMN an
14ec0 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  d TK_AGG_FUNCTIO
14ed0 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  N */.  Table *pT
14ee0 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ab;           /*
14ef0 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f   Table for TK_CO
14f00 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e 73  LUMN expressions
14f10 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  . */.};../*.** T
14f20 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
14f30 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   the meanings of
14f40 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70   bits in the Exp
14f50 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
14f60 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f  /.#define EP_Fro
14f70 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20  mJoin  0x000001 
14f80 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73 20 69 6e  /* Originates in
14f90 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73 65   ON/USING clause
14fa0 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a   of outer join *
14fb0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67  /.#define EP_Agg
14fc0 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32 20         0x000002 
14fd0 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  /* Contains one 
14fe0 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
14ff0 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23  e functions */.#
15000 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76  define EP_Resolv
15010 65 64 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20  ed  0x000004 /* 
15020 49 44 73 20 68 61 76 65 20 62 65 65 6e 20 72 65  IDs have been re
15030 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e  solved to COLUMN
15040 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
15050 45 72 72 6f 72 20 20 20 20 20 30 78 30 30 30 30  Error     0x0000
15060 30 38 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e  08 /* Expression
15070 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   contains one or
15080 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a   more errors */.
15090 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69  #define EP_Disti
150a0 6e 63 74 20 20 30 78 30 30 30 30 31 30 20 2f 2a  nct  0x000010 /*
150b0 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   Aggregate funct
150c0 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43  ion with DISTINC
150d0 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  T keyword */.#de
150e0 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63  fine EP_VarSelec
150f0 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53  t 0x000020 /* pS
15100 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61  elect is correla
15110 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e  ted, not constan
15120 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
15130 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30  DblQuoted 0x0000
15140 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61  40 /* token.z wa
15150 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20  s originally in 
15160 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65  "..." */.#define
15170 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78   EP_InfixFunc 0x
15180 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66  000080 /* True f
15190 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63  or an infix func
151a0 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42  tion: LIKE, GLOB
151b0 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65  , etc */.#define
151c0 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78   EP_Collate   0x
151d0 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63  000100 /* Tree c
151e0 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c  ontains a TK_COL
151f0 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f  LATE operator */
15200 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65 6e 65  .#define EP_Gene
15210 72 69 63 20 20 20 30 78 30 30 30 32 30 30 20 2f  ric   0x000200 /
15220 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45  * Ignore COLLATE
15230 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f 6e 20   or affinity on 
15240 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23 64 65  this tree */.#de
15250 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65  fine EP_IntValue
15260 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e    0x000400 /* In
15270 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74  teger value cont
15280 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75  ained in u.iValu
15290 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
152a0 78 49 73 53 65 6c 65 63 74 20 30 78 30 30 30 38  xIsSelect 0x0008
152b0 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20  00 /* x.pSelect 
152c0 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77  is valid (otherw
152d0 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20  ise x.pList is) 
152e0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b  */.#define EP_Sk
152f0 69 70 20 20 20 20 20 20 30 78 30 30 31 30 30 30  ip      0x001000
15300 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c   /* COLLATE, AS,
15310 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a   or UNLIKELY */.
15320 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63  #define EP_Reduc
15330 65 64 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a  ed   0x002000 /*
15340 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50   Expr struct EXP
15350 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62 79  R_REDUCEDSIZE by
15360 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  tes only */.#def
15370 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  ine EP_TokenOnly
15380 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70   0x004000 /* Exp
15390 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f  r struct EXPR_TO
153a0 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65  KENONLYSIZE byte
153b0 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
153c0 65 20 45 50 5f 53 74 61 74 69 63 20 20 20 20 30  e EP_Static    0
153d0 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c 64 20  x008000 /* Held 
153e0 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62  in memory not ob
153f0 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c  tained from mall
15400 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oc() */.#define 
15410 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30  EP_MemToken  0x0
15420 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f  10000 /* Need to
15430 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
15440 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a   Expr.zToken */.
15450 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64  #define EP_NoRed
15460 75 63 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a  uce  0x020000 /*
15470 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f   Cannot EXPRDUP_
15480 52 45 44 55 43 45 20 74 68 69 73 20 45 78 70 72  REDUCE this Expr
15490 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55   */.#define EP_U
154a0 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30 30 30  nlikely  0x04000
154b0 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20  0 /* unlikely() 
154c0 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20  or likelihood() 
154d0 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
154e0 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63  ine EP_ConstFunc
154f0 20 30 78 30 38 30 30 30 30 20 2f 2a 20 4e 6f 64   0x080000 /* Nod
15500 65 20 69 73 20 61 20 53 51 4c 49 54 45 5f 46 55  e is a SQLITE_FU
15510 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 75 6e 63  NC_CONSTANT func
15520 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
15530 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20 30 78 31  EP_CanBeNull 0x1
15540 30 30 30 30 30 20 2f 2a 20 43 61 6e 20 62 65 20  00000 /* Can be 
15550 6e 75 6c 6c 20 64 65 73 70 69 74 65 20 4e 4f 54  null despite NOT
15560 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
15570 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53   */.#define EP_S
15580 75 62 71 75 65 72 79 20 20 30 78 32 30 30 30 30  ubquery  0x20000
15590 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69  0 /* Tree contai
155a0 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f  ns a TK_SELECT o
155b0 70 65 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 0a 2a  perator */../*.*
155c0 2a 20 43 6f 6d 62 69 6e 61 74 69 6f 6e 73 20 6f  * Combinations o
155d0 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 50  f two or more EP
155e0 5f 2a 20 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66  _* flags.*/.#def
155f0 69 6e 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65  ine EP_Propagate
15600 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f   (EP_Collate|EP_
15610 53 75 62 71 75 65 72 79 29 20 2f 2a 20 50 72 6f  Subquery) /* Pro
15620 70 61 67 61 74 65 20 74 68 65 73 65 20 62 69 74  pagate these bit
15630 73 20 75 70 20 74 72 65 65 20 2a 2f 0a 0a 2f 2a  s up tree */../*
15640 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
15650 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
15660 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
15670 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20  ear bits in the 
15680 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66  .** Expr.flags f
15690 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
156a0 20 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79   ExprHasProperty
156b0 28 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d  (E,P)     (((E)-
156c0 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a  >flags&(P))!=0).
156d0 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 41  #define ExprHasA
156e0 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  llProperty(E,P) 
156f0 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50   (((E)->flags&(P
15700 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65  ))==(P)).#define
15710 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79   ExprSetProperty
15720 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66  (E,P)     (E)->f
15730 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e  lags|=(P).#defin
15740 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65  e ExprClearPrope
15750 72 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e  rty(E,P)   (E)->
15760 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20  flags&=~(P)../* 
15770 54 68 65 20 45 78 70 72 53 65 74 56 56 41 50 72  The ExprSetVVAPr
15780 6f 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69  operty() macro i
15790 73 20 75 73 65 64 20 66 6f 72 20 56 65 72 69 66  s used for Verif
157a0 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74  ication, Validat
157b0 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72  ion,.** and Accr
157c0 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20  editation only. 
157d0 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45   It works like E
157e0 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 29  xprSetProperty()
157f0 20 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70   during VVA.** p
15800 72 6f 63 65 73 73 65 73 20 62 75 74 20 69 73 20  rocesses but is 
15810 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69  a no-op for deli
15820 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  very..*/.#ifdef 
15830 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64  SQLITE_DEBUG.# d
15840 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41  efine ExprSetVVA
15850 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28  Property(E,P)  (
15860 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23  E)->flags|=(P).#
15870 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78  else.# define Ex
15880 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
15890 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (E,P).#endif../*
158a0 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65  .** Macros to de
158b0 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62  termine the numb
158c0 65 72 20 6f 66 20 62 79 74 65 73 20 72 65 71 75  er of bytes requ
158d0 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c  ired by a normal
158e0 20 45 78 70 72 20 0a 2a 2a 20 73 74 72 75 63 74   Expr .** struct
158f0 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74  , an Expr struct
15900 20 77 69 74 68 20 74 68 65 20 45 50 5f 52 65 64   with the EP_Red
15910 75 63 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e  uced flag set in
15920 20 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a 20   Expr.flags .** 
15930 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75  and an Expr stru
15940 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54  ct with the EP_T
15950 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65  okenOnly flag se
15960 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  t..*/.#define EX
15970 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20  PR_FULLSIZE     
15980 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70        sizeof(Exp
15990 72 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r)           /* 
159a0 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65  Full size */.#de
159b0 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45  fine EXPR_REDUCE
159c0 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66  DSIZE        off
159d0 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c  setof(Expr,iTabl
159e0 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65  e)  /* Common fe
159f0 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e  atures */.#defin
15a00 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  e EXPR_TOKENONLY
15a10 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74  SIZE      offset
15a20 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20  of(Expr,pLeft)  
15a30 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72   /* Fewer featur
15a40 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61  es */../*.** Fla
15a50 67 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  gs passed to the
15a60 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28   sqlite3ExprDup(
15a70 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20  ) function. See 
15a80 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65  the header comme
15a90 6e 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c  nt .** above sql
15aa0 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f  ite3ExprDup() fo
15ab0 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64  r details..*/.#d
15ac0 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45  efine EXPRDUP_RE
15ad0 44 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30  DUCE         0x0
15ae0 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64  001  /* Used red
15af0 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e  uced-size Expr n
15b00 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  odes */../*.** A
15b10 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
15b20 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72  ions.  Each expr
15b30 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f  ession may optio
15b40 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20  nally have a.** 
15b50 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e  name.  An expr/n
15b60 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  ame combination 
15b70 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73  can be used in s
15b80 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63  everal ways, suc
15b90 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74  h.** as the list
15ba0 20 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22   of "expr AS ID"
15bb0 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e   fields followin
15bc0 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20  g a "SELECT" or 
15bd0 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f  in the.** list o
15be0 66 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74  f "ID = expr" it
15bf0 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45  ems in an UPDATE
15c00 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70  .  A list of exp
15c10 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20  ressions can.** 
15c20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20  also be used as 
15c30 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  the argument to 
15c40 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77  a function, in w
15c50 68 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e  hich case the a.
15c60 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69  zName.** field i
15c70 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a  s not used..**.*
15c80 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65  * By default the
15c90 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c   Expr.zSpan fiel
15ca0 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d  d holds a human-
15cb0 72 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70  readable descrip
15cc0 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65  tion of.** the e
15cd0 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
15ce0 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65  s used in the ge
15cf0 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f  neration of erro
15d00 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a  r messages and.*
15d10 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e  * column labels.
15d20 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20    In this case, 
15d30 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79  Expr.zSpan is ty
15d40 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74  pically the text
15d50 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20   of a.** column 
15d60 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74  expression as it
15d70 20 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c   exists in a SEL
15d80 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
15d90 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74  However, if.** t
15da0 68 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c  he bSpanIsTab fl
15db0 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ag is set, then 
15dc0 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61  zSpan is overloa
15dd0 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20  ded to mean the 
15de0 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72  name.** of the r
15df0 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20  esult column in 
15e00 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41  the form: DATABA
15e10 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e  SE.TABLE.COLUMN.
15e20 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20    This later.** 
15e30 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72  form is used for
15e40 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e   name resolution
15e50 20 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f   with nested FRO
15e60 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74  M clauses..*/.st
15e70 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a  ruct ExprList {.
15e80 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20    int nExpr;    
15e90 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15ea0 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  er of expression
15eb0 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  s on the list */
15ec0 0a 20 20 73 74 72 75 63 74 20 45 78 70 72 4c 69  .  struct ExprLi
15ed0 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72  st_item { /* For
15ee0 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e   each expression
15ef0 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   in the list */.
15f00 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
15f10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
15f20 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65  he list of expre
15f30 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 63 68  ssions */.    ch
15f40 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
15f50 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61        /* Token a
15f60 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
15f70 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  his expression *
15f80 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70 61  /.    char *zSpa
15f90 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
15fa0 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f   Original text o
15fb0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
15fc0 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 4f   */.    u8 sortO
15fd0 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  rder;           
15fe0 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72  /* 1 for DESC or
15ff0 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20   0 for ASC */.  
16000 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20    unsigned done 
16010 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 66  :1;       /* A f
16020 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20  lag to indicate 
16030 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20  when processing 
16040 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20  is finished */. 
16050 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70 61     unsigned bSpa
16060 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53  nIsTab :1; /* zS
16070 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41 42  pan holds DB.TAB
16080 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20  LE.COLUMN */.   
16090 20 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61 62   unsigned reusab
160a0 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73  le :1;   /* Cons
160b0 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20  tant expression 
160c0 69 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20  is reusable */. 
160d0 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20     union {.     
160e0 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20   struct {.      
160f0 20 20 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f    u16 iOrderByCo
16100 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f  l;      /* For O
16110 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20  RDER BY, column 
16120 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74  number in result
16130 20 73 65 74 20 2a 2f 0a 20 20 20 20 20 20 20 20   set */.        
16140 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20  u16 iAlias;     
16150 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
16160 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73  nto Parse.aAlias
16170 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a  [] for zName */.
16180 20 20 20 20 20 20 7d 20 78 3b 0a 20 20 20 20 20        } x;.     
16190 20 69 6e 74 20 69 43 6f 6e 73 74 45 78 70 72 52   int iConstExprR
161a0 65 67 3b 20 20 20 20 20 20 2f 2a 20 52 65 67 69  eg;      /* Regi
161b0 73 74 65 72 20 69 6e 20 77 68 69 63 68 20 45 78  ster in which Ex
161c0 70 72 20 76 61 6c 75 65 20 69 73 20 63 61 63 68  pr value is cach
161d0 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20  ed */.    } u;. 
161e0 20 7d 20 2a 61 3b 20 20 20 20 20 20 20 20 20 20   } *a;          
161f0 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63          /* Alloc
16200 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 20   a power of two 
16210 67 72 65 61 74 65 72 20 6f 72 20 65 71 75 61 6c  greater or equal
16220 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a   to nExpr */.};.
16230 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
16240 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
16250 74 75 72 65 20 69 73 20 75 73 65 64 20 62 79 20  ture is used by 
16260 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 72 65  the parser to re
16270 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65  cord both.** the
16280 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72 20   parse tree for 
16290 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e  an expression an
162a0 64 20 74 68 65 20 73 70 61 6e 20 6f 66 20 69 6e  d the span of in
162b0 70 75 74 20 74 65 78 74 20 66 6f 72 20 61 6e 0a  put text for an.
162c0 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a  ** expression..*
162d0 2f 0a 73 74 72 75 63 74 20 45 78 70 72 53 70 61  /.struct ExprSpa
162e0 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70 45 78 70  n {.  Expr *pExp
162f0 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  r;          /* T
16300 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70 61  he expression pa
16310 72 73 65 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f  rse tree */.  co
16320 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61 72 74  nst char *zStart
16330 3b 20 20 20 2f 2a 20 46 69 72 73 74 20 63 68 61  ;   /* First cha
16340 72 61 63 74 65 72 20 6f 66 20 69 6e 70 75 74 20  racter of input 
16350 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  text */.  const 
16360 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20  char *zEnd;     
16370 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63 74 65 72  /* One character
16380 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66   past the end of
16390 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d   input text */.}
163a0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
163b0 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
163c0 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20  ucture can hold 
163d0 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66  a simple list of
163e0 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a   identifiers,.**
163f0 20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69 73   such as the lis
16400 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65  t "a,b,c" in the
16410 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65   following state
16420 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ments:.**.**    
16430 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28    INSERT INTO t(
16440 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e  a,b,c) VALUES ..
16450 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54  .;.**      CREAT
16460 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74  E INDEX idx ON t
16470 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20  (a,b,c);.**     
16480 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
16490 74 72 69 67 20 42 45 46 4f 52 45 20 55 50 44 41  trig BEFORE UPDA
164a0 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e  TE ON t(a,b,c) .
164b0 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64  ..;.**.** The Id
164c0 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64  List.a.idx field
164d0 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 74 68   is used when th
164e0 65 20 49 64 4c 69 73 74 20 72 65 70 72 65 73 65  e IdList represe
164f0 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a  nts the list of.
16500 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ** column names 
16510 61 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61  after a table na
16520 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20  me in an INSERT 
16530 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74  statement.  In t
16540 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a  he statement.**.
16550 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  **     INSERT IN
16560 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a  TO t(a,b,c) ....
16570 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20  **.** If "a" is 
16580 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20  the k-th column 
16590 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68  of table "t", th
165a0 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69  en IdList.a[0].i
165b0 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74  dx==k..*/.struct
165c0 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75   IdList {.  stru
165d0 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b  ct IdList_item {
165e0 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
165f0 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  ;      /* Name o
16600 66 20 74 68 65 20 69 64 65 6e 74 69 66 69 65 72  f the identifier
16610 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b   */.    int idx;
16620 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
16630 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65  ex in some Table
16640 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c  .aCol[] of a col
16650 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20  umn named zName 
16660 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74  */.  } *a;.  int
16670 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a   nId;         /*
16680 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74   Number of ident
16690 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69  ifiers on the li
166a0 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
166b0 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74 61  The bitmask data
166c0 74 79 70 65 20 64 65 66 69 6e 65 64 20 62 65 6c  type defined bel
166d0 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20 76  ow is used for v
166e0 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74  arious optimizat
166f0 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e  ions..**.** Chan
16700 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20 61  ging this from a
16710 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32 2d   64-bit to a 32-
16720 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73 20  bit type limits 
16730 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a  the number of.**
16740 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69   tables in a joi
16750 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64 20  n to 32 instead 
16760 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74 20 61  of 64.  But it a
16770 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68 65 20  lso reduces the 
16780 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c  size.** of the l
16790 69 62 72 61 72 79 20 62 79 20 37 33 38 20 62 79  ibrary by 738 by
167a0 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a  tes on ix86..*/.
167b0 74 79 70 65 64 65 66 20 75 36 34 20 42 69 74 6d  typedef u64 Bitm
167c0 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ask;../*.** The 
167d0 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 69  number of bits i
167e0 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22 42  n a Bitmask.  "B
167f0 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d 61  MS" means "BitMa
16800 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65  sk Size"..*/.#de
16810 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74 29  fine BMS  ((int)
16820 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29  (sizeof(Bitmask)
16830 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69  *8))../*.** A bi
16840 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a  t in a Bitmask.*
16850 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49  /.#define MASKBI
16860 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61 73  T(n)   (((Bitmas
16870 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69  k)1)<<(n)).#defi
16880 6e 65 20 4d 41 53 4b 42 49 54 33 32 28 6e 29 20  ne MASKBIT32(n) 
16890 28 28 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29  (((unsigned int)
168a0 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20  1)<<(n))../*.** 
168b0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  The following st
168c0 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 65  ructure describe
168d0 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  s the FROM claus
168e0 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74  e of a SELECT st
168f0 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68  atement..** Each
16900 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65   table or subque
16910 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  ry in the FROM c
16920 6c 61 75 73 65 20 69 73 20 61 20 73 65 70 61 72  lause is a separ
16930 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a  ate element of.*
16940 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b  * the SrcList.a[
16950 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57  ] array..**.** W
16960 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e  ith the addition
16970 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74   of multiple dat
16980 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74  abase support, t
16990 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
169a0 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c  ucture.** can al
169b0 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64 65  so be used to de
169c0 73 63 72 69 62 65 20 61 20 70 61 72 74 69 63 75  scribe a particu
169d0 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68 20 61  lar table such a
169e0 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  s the table that
169f0 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20  .** is modified 
16a00 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45  by an INSERT, DE
16a10 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20  LETE, or UPDATE 
16a20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73  statement.  In s
16a30 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20  tandard SQL,.** 
16a40 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73  such a table mus
16a50 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61  t be a simple na
16a60 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20  me: ID.  But in 
16a70 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c  SQLite, the tabl
16a80 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20  e can.** now be 
16a90 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20  identified by a 
16aa0 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61  database name, a
16ab0 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74   dot, then the t
16ac0 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44  able name: ID.ID
16ad0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e  ..**.** The join
16ae0 74 79 70 65 20 73 74 61 72 74 73 20 6f 75 74 20  type starts out 
16af0 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e  showing the join
16b00 20 74 79 70 65 20 62 65 74 77 65 65 6e 20 74 68   type between th
16b10 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a  e current table.
16b20 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20  ** and the next 
16b30 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73  table on the lis
16b40 74 2e 20 20 54 68 65 20 70 61 72 73 65 72 20 62  t.  The parser b
16b50 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74  uilds the list t
16b60 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20  his way..** But 
16b70 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68  sqlite3SrcListSh
16b80 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61  iftJoinType() la
16b90 74 65 72 20 73 68 69 66 74 73 20 74 68 65 20 6a  ter shifts the j
16ba0 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74  ointypes so that
16bb0 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70   each.** jointyp
16bc0 65 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20  e expresses the 
16bd0 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65  join between the
16be0 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70   table and the p
16bf0 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a  revious table..*
16c00 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55  *.** In the colU
16c10 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68  sed field, the h
16c20 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62  igh-order bit (b
16c30 69 74 20 36 33 29 20 69 73 20 73 65 74 20 69 66  it 63) is set if
16c40 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f   the table.** co
16c50 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e  ntains more than
16c60 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20   63 columns and 
16c70 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74  the 64-th or lat
16c80 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65  er column is use
16c90 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63  d..*/.struct Src
16ca0 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72  List {.  int nSr
16cb0 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  c;        /* Num
16cc0 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72  ber of tables or
16cd0 20 73 75 62 71 75 65 72 69 65 73 20 69 6e 20 74   subqueries in t
16ce0 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  he FROM clause *
16cf0 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20  /.  u32 nAlloc; 
16d00 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16d10 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61  f entries alloca
16d20 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77  ted in a[] below
16d30 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63   */.  struct Src
16d40 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20  List_item {.    
16d50 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
16d60 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77    /* Schema to w
16d70 68 69 63 68 20 74 68 69 73 20 69 74 65 6d 20 69  hich this item i
16d80 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63  s fixed */.    c
16d90 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20  har *zDatabase; 
16da0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61   /* Name of data
16db0 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69  base holding thi
16dc0 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63  s table */.    c
16dd0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
16de0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
16df0 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61  table */.    cha
16e00 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f  r *zAlias;     /
16e10 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20 6f  * The "B" part o
16e20 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68 72  f a "A AS B" phr
16e30 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74  ase.  zName is t
16e40 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61  he "A" */.    Ta
16e50 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
16e60 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20  /* An SQL table 
16e70 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
16e80 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65   zName */.    Se
16e90 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
16ea0 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61 74  /* A SELECT stat
16eb0 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c  ement used in pl
16ec0 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e  ace of a table n
16ed0 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61  ame */.    int a
16ee0 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20  ddrFillSub;  /* 
16ef0 41 64 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f  Address of subro
16f00 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73  utine to manifes
16f10 74 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a  t a subquery */.
16f20 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75 72      int regRetur
16f30 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65  n;    /* Registe
16f40 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e  r holding return
16f50 20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64 72   address of addr
16f60 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69  FillSub */.    i
16f70 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20  nt regResult;   
16f80 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68 6f   /* Registers ho
16f90 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f 66  lding results of
16fa0 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f   a co-routine */
16fb0 0a 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65  .    u8 jointype
16fc0 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f  ;      /* Type o
16fd0 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74  f join between t
16fe0 68 69 73 20 61 62 6c 65 20 61 6e 64 20 74 68 65  his able and the
16ff0 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20   previous */.   
17000 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64   unsigned notInd
17010 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54  exed :1;    /* T
17020 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20  rue if there is 
17030 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c  a NOT INDEXED cl
17040 61 75 73 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69  ause */.    unsi
17050 67 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65  gned isCorrelate
17060 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69  d :1;  /* True i
17070 66 20 73 75 62 2d 71 75 65 72 79 20 69 73 20 63  f sub-query is c
17080 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20  orrelated */.   
17090 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72   unsigned viaCor
170a0 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49  outine :1;  /* I
170b0 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20  mplemented as a 
170c0 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20  co-routine */.  
170d0 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 63    unsigned isRec
170e0 75 72 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20  ursive :1;   /* 
170f0 54 72 75 65 20 66 6f 72 20 72 65 63 75 72 73 69  True for recursi
17100 76 65 20 72 65 66 65 72 65 6e 63 65 20 69 6e 20  ve reference in 
17110 57 49 54 48 20 2a 2f 0a 23 69 66 6e 64 65 66 20  WITH */.#ifndef 
17120 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c  SQLITE_OMIT_EXPL
17130 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c 65  AIN.    u8 iSele
17140 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66 20  ctId;     /* If 
17150 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65 20  pSelect!=0, the 
17160 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73 65  id of the sub-se
17170 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23  lect in EQP */.#
17180 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69 43  endif.    int iC
17190 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54  ursor;      /* T
171a0 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e  he VDBE cursor n
171b0 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61 63  umber used to ac
171c0 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65 20  cess this table 
171d0 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e  */.    Expr *pOn
171e0 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
171f0 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a  ON clause of a j
17200 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73  oin */.    IdLis
17210 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20  t *pUsing;   /* 
17220 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65  The USING clause
17230 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20   of a join */.  
17240 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65    Bitmask colUse
17250 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c  d;  /* Bit N (1<
17260 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d  <N) set if colum
17270 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75  n N of pTab is u
17280 73 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  sed */.    char 
17290 2a 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f 2a 20  *zIndex;     /* 
172a0 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20  Identifier from 
172b0 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e  "INDEXED BY <zIn
172c0 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a  dex>" clause */.
172d0 20 20 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65      Index *pInde
172e0 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 73  x;    /* Index s
172f0 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73 70  tructure corresp
17300 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64 65 78  onding to zIndex
17310 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 7d 20  , if any */.  } 
17320 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20  a[1];           
17330 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66    /* One entry f
17340 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69 66 69  or each identifi
17350 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  er on the list *
17360 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d  /.};../*.** Perm
17370 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20  itted values of 
17380 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f  the SrcList.a.jo
17390 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a  intype field.*/.
173a0 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52  #define JT_INNER
173b0 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f       0x0001    /
173c0 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e  * Any kind of in
173d0 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69  ner or cross joi
173e0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
173f0 43 52 4f 53 53 20 20 20 20 20 30 78 30 30 30 32  CROSS     0x0002
17400 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20      /* Explicit 
17410 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53  use of the CROSS
17420 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
17430 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20  ine JT_NATURAL  
17440 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72   0x0004    /* Tr
17450 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61  ue for a "natura
17460 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  l" join */.#defi
17470 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20  ne JT_LEFT      
17480 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66  0x0008    /* Lef
17490 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  t outer join */.
174a0 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54  #define JT_RIGHT
174b0 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f       0x0010    /
174c0 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f  * Right outer jo
174d0 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
174e0 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30 30 32  _OUTER     0x002
174f0 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54  0    /* The "OUT
17500 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70  ER" keyword is p
17510 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  resent */.#defin
17520 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30  e JT_ERROR     0
17530 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e  x0040    /* unkn
17540 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74  own or unsupport
17550 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a  ed join type */.
17560 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70  ../*.** Flags ap
17570 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68  propriate for th
17580 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72  e wctrlFlags par
17590 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65  ameter of sqlite
175a0 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a  3WhereBegin().**
175b0 20 61 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e   and the WhereIn
175c0 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65  fo.wctrlFlags me
175d0 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  mber..*/.#define
175e0 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e   WHERE_ORDERBY_N
175f0 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f  ORMAL   0x0000 /
17600 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69  * No-op */.#defi
17610 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
17620 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30 31  _MIN      0x0001
17630 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f   /* ORDER BY pro
17640 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28  cessing for min(
17650 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  ) func */.#defin
17660 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
17670 4d 41 58 20 20 20 20 20 20 30 78 30 30 30 32 20  MAX      0x0002 
17680 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63  /* ORDER BY proc
17690 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29  essing for max()
176a0 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
176b0 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44   WHERE_ONEPASS_D
176c0 45 53 49 52 45 44 20 20 30 78 30 30 30 34 20 2f  ESIRED  0x0004 /
176d0 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65  * Want to do one
176e0 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c  -pass UPDATE/DEL
176f0 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ETE */.#define W
17700 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f  HERE_DUPLICATES_
17710 4f 4b 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20  OK    0x0008 /* 
17720 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72  Ok to return a r
17730 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63  ow more than onc
17740 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  e */.#define WHE
17750 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f  RE_OMIT_OPEN_CLO
17760 53 45 20 20 30 78 30 30 31 30 20 2f 2a 20 54 61  SE  0x0010 /* Ta
17770 62 6c 65 20 63 75 72 73 6f 72 73 20 61 72 65 20  ble cursors are 
17780 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f 0a  already open */.
17790 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 46 4f  #define WHERE_FO
177a0 52 43 45 5f 54 41 42 4c 45 20 20 20 20 20 20 30  RCE_TABLE      0
177b0 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74 20  x0020 /* Do not 
177c0 75 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c  use an index-onl
177d0 79 20 73 65 61 72 63 68 20 2a 2f 0a 23 64 65 66  y search */.#def
177e0 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54 41 42  ine WHERE_ONETAB
177f0 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30 34  LE_ONLY    0x004
17800 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20 74  0 /* Only code t
17810 68 65 20 31 73 74 20 74 61 62 6c 65 20 69 6e 20  he 1st table in 
17820 70 54 61 62 4c 69 73 74 20 2a 2f 0a 23 64 65 66  pTabList */.#def
17830 69 6e 65 20 57 48 45 52 45 5f 4e 4f 5f 41 55 54  ine WHERE_NO_AUT
17840 4f 49 4e 44 45 58 20 20 20 20 20 30 78 30 30 38  OINDEX     0x008
17850 30 20 2f 2a 20 44 69 73 61 6c 6c 6f 77 20 61 75  0 /* Disallow au
17860 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20  tomatic indexes 
17870 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
17880 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20 20 20  _GROUPBY        
17890 20 20 30 78 30 31 30 30 20 2f 2a 20 70 4f 72 64    0x0100 /* pOrd
178a0 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61  erBy is really a
178b0 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65   GROUP BY */.#de
178c0 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
178d0 4e 43 54 42 59 20 20 20 20 20 20 20 30 78 30 32  NCTBY       0x02
178e0 30 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69  00 /* pOrderby i
178f0 73 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49  s really a DISTI
17900 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  NCT clause */.#d
17910 65 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54  efine WHERE_WANT
17920 5f 44 49 53 54 49 4e 43 54 20 20 20 20 30 78 30  _DISTINCT    0x0
17930 34 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75  400 /* All outpu
17940 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69  t needs to be di
17950 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e  stinct */.#defin
17960 65 20 57 48 45 52 45 5f 53 4f 52 54 42 59 47 52  e WHERE_SORTBYGR
17970 4f 55 50 20 20 20 20 20 20 30 78 30 38 30 30 20  OUP      0x0800 
17980 2f 2a 20 53 75 70 70 6f 72 74 20 73 71 6c 69 74  /* Support sqlit
17990 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28  e3WhereIsSorted(
179a0 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  ) */.#define WHE
179b0 52 45 5f 52 45 4f 50 45 4e 5f 49 44 58 20 20 20  RE_REOPEN_IDX   
179c0 20 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72      0x1000 /* Tr
179d0 79 20 74 6f 20 75 73 65 20 4f 50 5f 52 65 6f 70  y to use OP_Reop
179e0 65 6e 49 64 78 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c  enIdx */../* All
179f0 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75  owed return valu
17a00 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 57  es from sqlite3W
17a10 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 29  hereIsDistinct()
17a20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52  .*/.#define WHER
17a30 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20  E_DISTINCT_NOOP 
17a40 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49       0  /* DISTI
17a50 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20  NCT keyword not 
17a60 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
17a70 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55  WHERE_DISTINCT_U
17a80 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e  NIQUE    1  /* N
17a90 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a  o duplicates */.
17aa0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
17ab0 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20  STINCT_ORDERED  
17ac0 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69   2  /* All dupli
17ad0 63 61 74 65 73 20 61 72 65 20 61 64 6a 61 63 65  cates are adjace
17ae0 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nt */.#define WH
17af0 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f  ERE_DISTINCT_UNO
17b00 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70  RDERED 3  /* Dup
17b10 6c 69 63 61 74 65 73 20 61 72 65 20 73 63 61 74  licates are scat
17b20 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tered */../*.** 
17b30 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65  A NameContext de
17b40 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20  fines a context 
17b50 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f  in which to reso
17b60 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f  lve table and co
17b70 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20  lumn.** names.  
17b80 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73  The context cons
17b90 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f  ists of a list o
17ba0 66 20 74 61 62 6c 65 73 20 28 74 68 65 20 70 53  f tables (the pS
17bb0 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e  rcList) field an
17bc0 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e  d.** a list of n
17bd0 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20  amed expression 
17be0 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e  (pEList).  The n
17bf0 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20  amed expression 
17c00 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e  list may.** be N
17c10 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63  ULL.  The pSrc c
17c20 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
17c30 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
17c40 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20   a SELECT or.** 
17c50 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  to the table bei
17c60 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62  ng operated on b
17c70 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  y INSERT, UPDATE
17c80 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68  , or DELETE.  Th
17c90 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72  e.** pEList corr
17ca0 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72  esponds to the r
17cb0 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53  esult set of a S
17cc0 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c  ELECT and is NUL
17cd0 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73  L for.** other s
17ce0 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
17cf0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61   NameContexts ca
17d00 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68  n be nested.  Wh
17d10 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  en resolving nam
17d20 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f  es, the inner-mo
17d30 73 74 20 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69  st .** context i
17d40 73 20 73 65 61 72 63 68 65 64 20 66 69 72 73 74  s searched first
17d50 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69  .  If no match i
17d60 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78  s found, the nex
17d70 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65  t outer.** conte
17d80 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20  xt is checked.  
17d90 49 66 20 74 68 65 72 65 20 69 73 20 73 74 69 6c  If there is stil
17da0 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20  l no match, the 
17db0 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20  next context.** 
17dc0 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69  is checked.  Thi
17dd0 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e  s process contin
17de0 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72  ues until either
17df0 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
17e00 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74  d.** or all cont
17e10 65 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20  exts are check. 
17e20 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73   When a match is
17e30 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66   found, the nRef
17e40 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68   member of.** th
17e50 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69  e context contai
17e60 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69  ning the match i
17e70 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 20 0a  s incremented. .
17e80 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75  **.** Each subqu
17e90 65 72 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e  ery gets a new N
17ea0 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65  ameContext.  The
17eb0 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69   pNext field poi
17ec0 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61  nts to the.** Na
17ed0 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65  meContext in the
17ee0 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20   parent query.  
17ef0 54 68 75 73 20 74 68 65 20 70 72 6f 63 65 73 73  Thus the process
17f00 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65   of scanning the
17f10 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
17f20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  list corresponds
17f30 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68   to searching th
17f40 72 6f 75 67 68 20 73 75 63 63 65 73 73 69 76 65  rough successive
17f50 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71  ly outer.** subq
17f60 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66  ueries looking f
17f70 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73  or a match..*/.s
17f80 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78  truct NameContex
17f90 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  t {.  Parse *pPa
17fa0 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  rse;       /* Th
17fb0 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72  e parser */.  Sr
17fc0 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b  cList *pSrcList;
17fd0 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72     /* One or mor
17fe0 65 20 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f  e tables used to
17ff0 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a   resolve names *
18000 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  /.  ExprList *pE
18010 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69  List;    /* Opti
18020 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72 65 73  onal list of res
18030 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20  ult-set columns 
18040 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41  */.  AggInfo *pA
18050 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66  ggInfo;   /* Inf
18060 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61  ormation about a
18070 67 67 72 65 67 61 74 65 73 20 61 74 20 74 68 69  ggregates at thi
18080 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d  s level */.  Nam
18090 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b  eContext *pNext;
180a0 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72 20    /* Next outer 
180b0 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e  name context.  N
180c0 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73  ULL for outermos
180d0 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b  t */.  int nRef;
180e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
180f0 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72  umber of names r
18100 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20  esolved by this 
18110 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74  context */.  int
18120 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20   nErr;          
18130 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
18140 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65  rrors encountere
18150 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e  d while resolvin
18160 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 31 36  g names */.  u16
18170 20 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20   ncFlags;       
18180 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72    /* Zero or mor
18190 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65 66  e NC_* flags def
181a0 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b  ined below */.};
181b0 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
181c0 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e  values for the N
181d0 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c  ameContext, ncFl
181e0 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a  ags field..**.**
181f0 20 4e 6f 74 65 3a 20 20 4e 43 5f 4d 69 6e 4d 61   Note:  NC_MinMa
18200 78 41 67 67 20 6d 75 73 74 20 68 61 76 65 20 74  xAgg must have t
18210 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 61 73  he same value as
18220 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 61 6e   SF_MinMaxAgg an
18230 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43  d.** SQLITE_FUNC
18240 5f 4d 49 4e 4d 41 58 2e 0a 2a 2a 20 0a 2a 2f 0a  _MINMAX..** .*/.
18250 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77  #define NC_Allow
18260 41 67 67 20 20 30 78 30 30 30 31 20 20 2f 2a 20  Agg  0x0001  /* 
18270 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  Aggregate functi
18280 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20  ons are allowed 
18290 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  here */.#define 
182a0 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30 78 30  NC_HasAgg    0x0
182b0 30 30 32 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d  002  /* One or m
182c0 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75  ore aggregate fu
182d0 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a  nctions seen */.
182e0 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43 68 65  #define NC_IsChe
182f0 63 6b 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20  ck   0x0004  /* 
18300 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e  True if resolvin
18310 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 48 45  g names in a CHE
18320 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  CK constraint */
18330 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67  .#define NC_InAg
18340 67 46 75 6e 63 20 30 78 30 30 30 38 20 20 2f 2a  gFunc 0x0008  /*
18350 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79 7a 69   True if analyzi
18360 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  ng arguments to 
18370 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23  an agg func */.#
18380 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49 64  define NC_PartId
18390 78 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 54  x   0x0010  /* T
183a0 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67  rue if resolving
183b0 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78   a partial index
183c0 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e   WHERE */.#defin
183d0 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 30  e NC_MinMaxAgg 0
183e0 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61  x1000  /* min/ma
183f0 78 20 61 67 67 72 65 67 61 74 65 73 20 73 65 65  x aggregates see
18400 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20 61 62 6f  n.  See note abo
18410 76 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  ve */../*.** An 
18420 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
18430 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
18440 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c  ure contains all
18450 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20   information.** 
18460 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
18470 74 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69  te code for a si
18480 6e 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  ngle SELECT stat
18490 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69  ement..**.** nLi
184a0 6d 69 74 20 69 73 20 73 65 74 20 74 6f 20 2d 31  mit is set to -1
184b0 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   if there is no 
184c0 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e 20 20 6e  LIMIT clause.  n
184d0 4f 66 66 73 65 74 20 69 73 20 73 65 74 20 74 6f  Offset is set to
184e0 20 30 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65 20   0..** If there 
184f0 69 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73  is a LIMIT claus
18500 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 73 65  e, the parser se
18510 74 73 20 6e 4c 69 6d 69 74 20 74 6f 20 74 68 65  ts nLimit to the
18520 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a   value of the.**
18530 20 6c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73   limit and nOffs
18540 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  et to the value 
18550 6f 66 20 74 68 65 20 6f 66 66 73 65 74 20 28 6f  of the offset (o
18560 72 20 30 20 69 66 20 74 68 65 72 65 20 69 73 20  r 0 if there is 
18570 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65 74 29 2e 20  not.** offset). 
18580 20 42 75 74 20 6c 61 74 65 72 20 6f 6e 2c 20 6e   But later on, n
18590 4c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65  Limit and nOffse
185a0 74 20 62 65 63 6f 6d 65 20 74 68 65 20 6d 65 6d  t become the mem
185b0 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a  ory locations.**
185c0 20 69 6e 20 74 68 65 20 56 44 42 45 20 74 68 61   in the VDBE tha
185d0 74 20 72 65 63 6f 72 64 20 74 68 65 20 6c 69 6d  t record the lim
185e0 69 74 20 61 6e 64 20 6f 66 66 73 65 74 20 63 6f  it and offset co
185f0 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64  unters..**.** ad
18600 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74  drOpenEphm[] ent
18610 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 74 68 65  ries contain the
18620 20 61 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f   address of OP_O
18630 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63  penEphemeral opc
18640 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61  odes..** These a
18650 64 64 72 65 73 73 65 73 20 6d 75 73 74 20 62 65  ddresses must be
18660 20 73 74 6f 72 65 64 20 73 6f 20 74 68 61 74 20   stored so that 
18670 77 65 20 63 61 6e 20 67 6f 20 62 61 63 6b 20 61  we can go back a
18680 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68  nd fill in.** th
18690 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64  e P4_KEYINFO and
186a0 20 50 32 20 70 61 72 61 6d 65 74 65 72 73 20 6c   P2 parameters l
186b0 61 74 65 72 2e 20 20 4e 65 69 74 68 65 72 20 74  ater.  Neither t
186c0 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a  he KeyInfo nor.*
186d0 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
186e0 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63 61  columns in P2 ca
186f0 6e 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61 74  n be computed at
18700 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a   the same time.*
18710 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e  * as the OP_Open
18720 45 70 68 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e  Ephm instruction
18730 20 69 73 20 63 6f 64 65 64 20 62 65 63 61 75 73   is coded becaus
18740 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20  e not.** enough 
18750 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
18760 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71  t the compound q
18770 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74  uery is known at
18780 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20   that point..** 
18790 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20  The KeyInfo for 
187a0 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20  addrOpenTran[0] 
187b0 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73  and [1] contains
187c0 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
187d0 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20  nces.** for the 
187e0 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68 65  result set.  The
187f0 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64   KeyInfo for add
18800 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e  rOpenEphm[2] con
18810 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a  tains collating.
18820 2a 2a 20 73 65 71 75 65 6e 63 65 73 20 66 6f 72  ** sequences for
18830 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
18840 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ause..*/.struct 
18850 53 65 6c 65 63 74 20 7b 0a 20 20 45 78 70 72 4c  Select {.  ExprL
18860 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20  ist *pEList;    
18870 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20    /* The fields 
18880 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f  of the result */
18890 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
188a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
188b0 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b   of: TK_UNION TK
188c0 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43  _ALL TK_INTERSEC
188d0 54 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20  T TK_EXCEPT */. 
188e0 20 75 31 36 20 73 65 6c 46 6c 61 67 73 3b 20 20   u16 selFlags;  
188f0 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f          /* Vario
18900 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a  us SF_* values *
18910 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20  /.  int iLimit, 
18920 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65  iOffset;   /* Me
18930 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 68  mory registers h
18940 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f  olding LIMIT & O
18950 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a  FFSET counters *
18960 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43  /.#if SELECTTRAC
18970 45 5f 45 4e 41 42 4c 45 44 0a 20 20 63 68 61 72  E_ENABLED.  char
18980 20 7a 53 65 6c 4e 61 6d 65 5b 31 32 5d 3b 20 20   zSelName[12];  
18990 20 20 20 2f 2a 20 53 79 6d 62 6f 6c 69 63 20 6e     /* Symbolic n
189a0 61 6d 65 20 6f 66 20 74 68 69 73 20 53 45 4c 45  ame of this SELE
189b0 43 54 20 75 73 65 20 66 6f 72 20 64 65 62 75 67  CT use for debug
189c0 67 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  ging */.#endif. 
189d0 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70 68   int addrOpenEph
189e0 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70  m[2];   /* OP_Op
189f0 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73 20  enEphem opcodes 
18a00 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73 20  related to this 
18a10 73 65 6c 65 63 74 20 2a 2f 0a 20 20 75 36 34 20  select */.  u64 
18a20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20  nSelectRow;     
18a30 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
18a40 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74  number of result
18a50 20 72 6f 77 73 20 2a 2f 0a 20 20 53 72 63 4c 69   rows */.  SrcLi
18a60 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20 20  st *pSrc;       
18a70 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c    /* The FROM cl
18a80 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ause */.  Expr *
18a90 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 20  pWhere;         
18aa0 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c   /* The WHERE cl
18ab0 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ause */.  ExprLi
18ac0 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
18ad0 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42 59   /* The GROUP BY
18ae0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
18af0 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20 20  r *pHaving;     
18b00 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49 4e      /* The HAVIN
18b10 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  G clause */.  Ex
18b20 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79  prList *pOrderBy
18b30 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44 45  ;    /* The ORDE
18b40 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  R BY clause */. 
18b50 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b   Select *pPrior;
18b60 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f 72          /* Prior
18b70 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d   select in a com
18b80 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61  pound select sta
18b90 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65  tement */.  Sele
18ba0 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ct *pNext;      
18bb0 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63     /* Next selec
18bc0 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69 6e  t to the left in
18bd0 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20   a compound */. 
18be0 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20   Expr *pLimit;  
18bf0 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54          /* LIMIT
18c00 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c   expression. NUL
18c10 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64  L means not used
18c20 2e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66  . */.  Expr *pOf
18c30 66 73 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  fset;         /*
18c40 20 4f 46 46 53 45 54 20 65 78 70 72 65 73 73 69   OFFSET expressi
18c50 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e  on. NULL means n
18c60 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69  ot used. */.  Wi
18c70 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20  th *pWith;      
18c80 20 20 20 20 20 2f 2a 20 57 49 54 48 20 63 6c 61       /* WITH cla
18c90 75 73 65 20 61 74 74 61 63 68 65 64 20 74 6f 20  use attached to 
18ca0 74 68 69 73 20 73 65 6c 65 63 74 2e 20 4f 72 20  this select. Or 
18cb0 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  NULL. */.};../*.
18cc0 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
18cd0 73 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c  s for Select.sel
18ce0 46 6c 61 67 73 2e 20 20 54 68 65 20 22 53 46 22  Flags.  The "SF"
18cf0 20 70 72 65 66 69 78 20 73 74 61 6e 64 73 20 66   prefix stands f
18d00 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c  or.** "Select Fl
18d10 61 67 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ag"..*/.#define 
18d20 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20  SF_Distinct     
18d30 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 75     0x0001  /* Ou
18d40 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44  tput should be D
18d50 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69  ISTINCT */.#defi
18d60 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20  ne SF_Resolved  
18d70 20 20 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a        0x0002  /*
18d80 20 49 64 65 6e 74 69 66 69 65 72 73 20 68 61 76   Identifiers hav
18d90 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20  e been resolved 
18da0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67  */.#define SF_Ag
18db0 67 72 65 67 61 74 65 20 20 20 20 20 20 20 30 78  gregate       0x
18dc0 30 30 30 34 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  0004  /* Contain
18dd0 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  s aggregate func
18de0 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
18df0 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61   SF_UsesEphemera
18e00 6c 20 20 20 30 78 30 30 30 38 20 20 2f 2a 20 55  l   0x0008  /* U
18e10 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65  ses the OpenEphe
18e20 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a  meral opcode */.
18e30 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e  #define SF_Expan
18e40 64 65 64 20 20 20 20 20 20 20 20 30 78 30 30 31  ded        0x001
18e50 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c  0  /* sqlite3Sel
18e60 65 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c  ectExpand() call
18e70 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64  ed on this */.#d
18e80 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65  efine SF_HasType
18e90 49 6e 66 6f 20 20 20 20 20 30 78 30 30 32 30 20  Info     0x0020 
18ea0 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72   /* FROM subquer
18eb0 69 65 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d  ies have Table m
18ec0 65 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69  etadata */.#defi
18ed0 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20  ne SF_Compound  
18ee0 20 20 20 20 20 20 30 78 30 30 34 30 20 20 2f 2a        0x0040  /*
18ef0 20 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f   Part of a compo
18f00 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65  und query */.#de
18f10 66 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20  fine SF_Values  
18f20 20 20 20 20 20 20 20 20 30 78 30 30 38 30 20 20          0x0080  
18f30 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66  /* Synthesized f
18f40 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73  rom VALUES claus
18f50 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
18f60 41 6c 6c 56 61 6c 75 65 73 20 20 20 20 20 20 20  AllValues       
18f70 30 78 30 31 30 30 20 20 2f 2a 20 41 6c 6c 20 74  0x0100  /* All t
18f80 65 72 6d 73 20 6f 66 20 63 6f 6d 70 6f 75 6e 64  erms of compound
18f90 20 61 72 65 20 56 41 4c 55 45 53 20 2a 2f 0a 23   are VALUES */.#
18fa0 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64  define SF_Nested
18fb0 46 72 6f 6d 20 20 20 20 20 20 30 78 30 32 30 30  From      0x0200
18fc0 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70    /* Part of a p
18fd0 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f  arenthesized FRO
18fe0 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  M clause */.#def
18ff0 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76  ine SF_MaybeConv
19000 65 72 74 20 20 20 20 30 78 30 34 30 30 20 20 2f  ert    0x0400  /
19010 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f  * Need convertCo
19020 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
19030 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66  bquery() */.#def
19040 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76 65  ine SF_Recursive
19050 20 20 20 20 20 20 20 30 78 30 38 30 30 20 20 2f         0x0800  /
19060 2a 20 54 68 65 20 72 65 63 75 72 73 69 76 65 20  * The recursive 
19070 70 61 72 74 20 6f 66 20 61 20 72 65 63 75 72 73  part of a recurs
19080 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66 69  ive CTE */.#defi
19090 6e 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20  ne SF_MinMaxAgg 
190a0 20 20 20 20 20 20 30 78 31 30 30 30 20 20 2f 2a        0x1000  /*
190b0 20 41 67 67 72 65 67 61 74 65 20 63 6f 6e 74 61   Aggregate conta
190c0 69 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d  ining min() or m
190d0 61 78 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ax() */.#define 
190e0 53 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20  SF_Converted    
190f0 20 20 20 30 78 32 30 30 30 20 20 2f 2a 20 42 79     0x2000  /* By
19100 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64   convertCompound
19110 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79  SelectToSubquery
19120 28 29 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68  () */.../*.** Th
19130 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53  e results of a S
19140 45 4c 45 43 54 20 63 61 6e 20 62 65 20 64 69 73  ELECT can be dis
19150 74 72 69 62 75 74 65 64 20 69 6e 20 73 65 76 65  tributed in seve
19160 72 61 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66  ral ways, as def
19170 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f  ined.** by one o
19180 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
19190 6d 61 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52  macros.  The "SR
191a0 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20  T" prefix means 
191b0 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a  "SELECT Result.*
191c0 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20  * Type"..**.**  
191d0 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20     SRT_Union    
191e0 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
191f0 20 61 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74   as a key in a t
19200 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 0a  emporary index .
19210 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
19220 20 20 20 20 20 20 20 69 64 65 6e 74 69 66 69 65         identifie
19230 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53 44 50  d by pDest->iSDP
19240 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  arm..**.**     S
19250 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 52  RT_Except      R
19260 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20 66 72  emove results fr
19270 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  om the temporary
19280 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e 69 53   index pDest->iS
19290 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  DParm..**.**    
192a0 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20   SRT_Exists     
192b0 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20 6d 65   Store a 1 in me
192c0 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73 74 2d  mory cell pDest-
192d0 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68 65 20  >iSDParm if the 
192e0 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20  result.**       
192f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
19300 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a  t is not empty..
19310 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
19320 73 63 61 72 64 20 20 20 20 20 54 68 72 6f 77 20  scard     Throw 
19330 74 68 65 20 72 65 73 75 6c 74 73 20 61 77 61 79  the results away
19340 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64 20  .  This is used 
19350 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20  by SELECT.**    
19360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19370 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
19380 69 6e 20 74 72 69 67 67 65 72 73 20 77 68 6f 73  in triggers whos
19390 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69  e only purpose i
193a0 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
193b0 20 20 20 20 20 20 20 20 20 74 68 65 20 73 69 64           the sid
193c0 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66 75 6e  e-effects of fun
193d0 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c  ctions..**.** Al
193e0 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61  l of the above a
193f0 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e 6f 72  re free to ignor
19400 65 20 74 68 65 69 72 20 4f 52 44 45 52 20 42 59  e their ORDER BY
19410 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65 20 74   clause. Those t
19420 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75  hat.** follow mu
19430 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44  st honor the ORD
19440 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a  ER BY clause..**
19450 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75 74 70  .**     SRT_Outp
19460 75 74 20 20 20 20 20 20 47 65 6e 65 72 61 74 65  ut      Generate
19470 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74   a row of output
19480 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 52   (using the OP_R
19490 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20  esultRow.**     
194a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194b0 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61 63 68  opcode) for each
194c0 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65 73 75   row in the resu
194d0 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  lt set..**.**   
194e0 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20    SRT_Mem       
194f0 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20    Only valid if 
19500 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 20  the result is a 
19510 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a  single column..*
19520 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19530 20 20 20 20 20 20 53 74 6f 72 65 20 74 68 65 20        Store the 
19540 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20  first column of 
19550 74 68 65 20 66 69 72 73 74 20 72 65 73 75 6c 74  the first result
19560 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20   row.**         
19570 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 20 72              in r
19580 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69  egister pDest->i
19590 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62 61 6e  SDParm then aban
195a0 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a 20  don the rest.** 
195b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195c0 20 20 20 20 6f 66 20 74 68 65 20 71 75 65 72 79      of the query
195d0 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e 61 74  .  This destinat
195e0 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d  ion implies "LIM
195f0 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  IT 1"..**.**    
19600 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20   SRT_Set        
19610 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74   The result must
19620 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c   be a single col
19630 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61 63 68  umn.  Store each
19640 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19650 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66 20 72          row of r
19660 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b 65 79  esult as the key
19670 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73 74 2d   in table pDest-
19680 3e 69 53 44 50 61 72 6d 2e 20 0a 2a 2a 20 20 20  >iSDParm. .**   
19690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196a0 20 20 41 70 70 6c 79 20 74 68 65 20 61 66 66 69    Apply the affi
196b0 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66 53  nity pDest->affS
196c0 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72 69  dst before stori
196d0 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ng.**           
196e0 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
196f0 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70 6c  s.  Used to impl
19700 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45 43  ement "IN (SELEC
19710 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20  T ...)"..**.**  
19720 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20     SRT_EphemTab 
19730 20 20 20 43 72 65 61 74 65 20 61 6e 20 74 65 6d     Create an tem
19740 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
19750 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64 20  st->iSDParm and 
19760 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20  store.**        
19770 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
19780 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20 54   result there. T
19790 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66  he cursor is lef
197a0 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20  t open after.** 
197b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197c0 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20 20      returning.  
197d0 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54  This is like SRT
197e0 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20 74 68  _Table except th
197f0 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  at.**           
19800 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 64            this d
19810 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73 20  estination uses 
19820 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
19830 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20 20   to create.**   
19840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19850 20 20 74 68 65 20 74 61 62 6c 65 20 66 69 72 73    the table firs
19860 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
19870 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65 6e  _Coroutine   Gen
19880 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74 69  erate a co-routi
19890 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e 73 20  ne that returns 
198a0 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20  a new row of.** 
198b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198c0 20 20 20 20 72 65 73 75 6c 74 73 20 65 61 63 68      results each
198d0 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76 6f   time it is invo
198e0 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79 20  ked.  The entry 
198f0 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20  point.**        
19900 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20               of 
19910 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69  the co-routine i
19920 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
19930 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50  ster pDest->iSDP
19940 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  arm.**          
19950 20 20 20 20 20 20 20 20 20 20 20 61 6e 64 20 74             and t
19960 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73  he result row is
19970 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73 74   stored in pDest
19980 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65 72  ->nDest register
19990 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
199a0 20 20 20 20 20 20 20 20 20 73 74 61 72 74 69 6e           startin
199b0 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69 53  g with pDest->iS
199c0 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  dst..**.**     S
199d0 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 53  RT_Table       S
199e0 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
199f0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
19a00 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
19a10 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f 20  **     SRT_Fifo 
19a20 20 20 20 20 20 20 20 54 68 69 73 20 69 73 20 6c         This is l
19a30 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62  ike SRT_EphemTab
19a40 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
19a50 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20   table.**       
19a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73                is
19a70 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72 65   assumed to alre
19a80 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53 52  ady be open.  SR
19a90 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20  T_Fifo has.**   
19aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ab0 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c    the additional
19ac0 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65 69   property of bei
19ad0 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72  ng able to ignor
19ae0 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
19af0 20 20 20 20 20 20 20 20 20 74 68 65 20 4f 52 44           the ORD
19b00 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a  ER BY clause..**
19b10 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74  .**     SRT_Dist
19b20 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72 65  Fifo    Store re
19b30 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70 6f  sults in a tempo
19b40 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
19b50 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
19b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b70 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20 74    But also use t
19b80 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
19b90 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20  Dest->iSDParm+1 
19ba0 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  as.**           
19bb0 20 20 20 20 20 20 20 20 20 20 61 20 72 65 63 6f            a reco
19bc0 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20  rd of all prior 
19bd0 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f  results and igno
19be0 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74 65  re any duplicate
19bf0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
19c00 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20 4e          rows.  N
19c10 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69 73  ame means:  "Dis
19c20 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a  tinct Fifo"..**.
19c30 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75 65  **     SRT_Queue
19c40 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
19c50 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79  ults in priority
19c60 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53   queue pDest->iS
19c70 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a  DParm (really.**
19c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c90 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e 20       an index). 
19ca0 20 41 70 70 65 6e 64 20 61 20 73 65 71 75 65 6e   Append a sequen
19cb0 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68 61  ce number so tha
19cc0 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a  t all entries.**
19cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ce0 20 20 20 20 20 61 72 65 20 64 69 73 74 69 6e 63       are distinc
19cf0 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
19d00 5f 44 69 73 74 51 75 65 75 65 20 20 20 53 74 6f  _DistQueue   Sto
19d10 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72  re results in pr
19d20 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65  iority queue pDe
19d30 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79  st->iSDParm only
19d40 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   if.**          
19d50 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73             the s
19d60 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20 6e  ame record has n
19d70 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65 64  ever been stored
19d80 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a   before.  The.**
19d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19da0 20 20 20 20 20 69 6e 64 65 78 20 61 74 20 70 44       index at pD
19db0 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68  est->iSDParm+1 h
19dc0 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73 74  old all prior st
19dd0 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ores..*/.#define
19de0 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20   SRT_Union      
19df0 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    1  /* Store re
19e00 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20  sult as keys in 
19e10 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  an index */.#def
19e20 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20  ine SRT_Except  
19e30 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76       2  /* Remov
19e40 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20  e result from a 
19e50 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23  UNION index */.#
19e60 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74  define SRT_Exist
19e70 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74  s       3  /* St
19e80 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73  ore 1 if the res
19e90 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  ult is not empty
19ea0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
19eb0 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20  Discard      4  
19ec0 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74  /* Do not save t
19ed0 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68  he results anywh
19ee0 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ere */.#define S
19ef0 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 20  RT_Fifo         
19f00 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  5  /* Store resu
19f10 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20  lt as data with 
19f20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77  an automatic row
19f30 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  id */.#define SR
19f40 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20 36  T_DistFifo     6
19f50 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69    /* Like SRT_Fi
19f60 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72  fo, but unique r
19f70 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23  esults only */.#
19f80 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75 65  define SRT_Queue
19f90 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74          7  /* St
19fa0 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  ore result in an
19fb0 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e   queue */.#defin
19fc0 65 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20  e SRT_DistQueue 
19fd0 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52     8  /* Like SR
19fe0 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e 69  T_Queue, but uni
19ff0 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79  que results only
1a000 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45   */../* The ORDE
1a010 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 69  R BY clause is i
1a020 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f  gnored for all o
1a030 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23  f the above */.#
1a040 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65  define Ignorable
1a050 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e  Orderby(X) ((X->
1a060 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 74  eDest)<=SRT_Dist
1a070 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65 20  Queue)..#define 
1a080 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
1a090 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61   9  /* Output ea
1a0a0 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  ch row of result
1a0b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1a0c0 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30 20 20  Mem         10  
1a0d0 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1a0e0 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  in a memory cell
1a0f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1a100 53 65 74 20 20 20 20 20 20 20 20 20 31 31 20 20  Set         11  
1a110 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73  /* Store results
1a120 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
1a130 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
1a140 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20  SRT_EphemTab    
1a150 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72  12  /* Create tr
1a160 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20  ansient tab and 
1a170 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54  store like SRT_T
1a180 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
1a190 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20  SRT_Coroutine   
1a1a0 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20  13  /* Generate 
1a1b0 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  a single row of 
1a1c0 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e  result */.#defin
1a1d0 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20  e SRT_Table     
1a1e0 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20 72    14  /* Store r
1a1f0 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69  esult as data wi
1a200 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20  th an automatic 
1a210 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  rowid */../*.** 
1a220 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
1a230 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72  his object descr
1a240 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70 75  ibes where to pu
1a250 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  t of the results
1a260 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20   of.** a SELECT 
1a270 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74  statement..*/.st
1a280 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20  ruct SelectDest 
1a290 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20 20  {.  u8 eDest;   
1a2a0 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20           /* How 
1a2b0 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68  to dispose of th
1a2c0 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f  e results.  On o
1a2d0 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a  f SRT_* above. *
1a2e0 2f 0a 20 20 63 68 61 72 20 61 66 66 53 64 73 74  /.  char affSdst
1a2f0 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 66 66 69  ;        /* Affi
1a300 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e 20 65  nity used when e
1a310 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f  Dest==SRT_Set */
1a320 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20  .  int iSDParm; 
1a330 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72          /* A par
1a340 61 6d 65 74 65 72 20 75 73 65 64 20 62 79 20 74  ameter used by t
1a350 68 65 20 65 44 65 73 74 20 64 69 73 70 6f 73 61  he eDest disposa
1a360 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e  l method */.  in
1a370 74 20 69 53 64 73 74 3b 20 20 20 20 20 20 20 20  t iSdst;        
1a380 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73     /* Base regis
1a390 74 65 72 20 77 68 65 72 65 20 72 65 73 75 6c 74  ter where result
1a3a0 73 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f  s are written */
1a3b0 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20  .  int nSdst;   
1a3c0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1a3d0 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61  r of registers a
1a3e0 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 45 78  llocated */.  Ex
1a3f0 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79  prList *pOrderBy
1a400 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e  ;  /* Key column
1a410 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65 20  s for SRT_Queue 
1a420 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65 75  and SRT_DistQueu
1a430 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44  e */.};../*.** D
1a440 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72  uring code gener
1a450 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65  ation of stateme
1a460 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65  nts that do inse
1a470 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43  rts into AUTOINC
1a480 52 45 4d 45 4e 54 20 0a 2a 2a 20 74 61 62 6c 65  REMENT .** table
1a490 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  s, the following
1a4a0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
1a4b0 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
1a4c0 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e  Table.u.autoInc.
1a4d0 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20  p.** pointer of 
1a4e0 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65  each autoincreme
1a4f0 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f  nt table to reco
1a500 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66  rd some side inf
1a510 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a  ormation that.**
1a520 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
1a530 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68  tor needs.  We h
1a540 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d  ave to keep per-
1a550 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d  table autoincrem
1a560 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ent.** informati
1a570 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72  on in case inser
1a580 74 73 20 61 72 65 20 64 6f 77 6e 20 77 69 74 68  ts are down with
1a590 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72  in triggers.  Tr
1a5a0 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a  iggers do not.**
1a5b0 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69   normally coordi
1a5c0 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76  nate their activ
1a5d0 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f  ities, but we do
1a5e0 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e   need to coordin
1a5f0 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69  ate the.** loadi
1a600 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66  ng and saving of
1a610 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69   autoincrement i
1a620 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
1a630 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66  truct AutoincInf
1a640 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  o {.  AutoincInf
1a650 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e  o *pNext;   /* N
1a660 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69  ext info block i
1a670 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d  n a list of them
1a680 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20   all */.  Table 
1a690 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
1a6a0 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e  /* Table this in
1a6b0 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20  fo block refers 
1a6c0 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b  to */.  int iDb;
1a6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a6e0 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65   Index in sqlite
1a6f0 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62  3.aDb[] of datab
1a700 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62  ase holding pTab
1a710 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72   */.  int regCtr
1a720 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ;           /* M
1a730 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68  emory register h
1a740 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64  olding the rowid
1a750 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a   counter */.};..
1a760 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68  /*.** Size of th
1a770 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a  e column cache.*
1a780 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1a790 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65  _N_COLCACHE.# de
1a7a0 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f  fine SQLITE_N_CO
1a7b0 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66  LCACHE 10.#endif
1a7c0 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74  ../*.** At least
1a7d0 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66   one instance of
1a7e0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1a7f0 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61  tructure is crea
1a800 74 65 64 20 66 6f 72 20 65 61 63 68 20 0a 2a 2a  ted for each .**
1a810 20 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61   trigger that ma
1a820 79 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65  y be fired while
1a830 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45   parsing an INSE
1a840 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45  RT, UPDATE or DE
1a850 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  LETE.** statemen
1a860 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65  t. All such obje
1a870 63 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  cts are stored i
1a880 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  n the linked lis
1a890 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50  t headed at.** P
1a8a0 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1a8b0 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63   and deleted onc
1a8c0 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70  e statement comp
1a8d0 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e  ilation has been
1a8e0 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a  .** completed..*
1a8f0 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d  *.** A Vdbe sub-
1a900 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70  program that imp
1a910 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79  lements the body
1a920 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65   and WHEN clause
1a930 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54   of trigger.** T
1a940 72 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67  riggerPrg.pTrigg
1a950 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64  er, assuming a d
1a960 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1a970 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20  CT clause of.** 
1a980 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e  TriggerPrg.orcon
1a990 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  f, is stored in 
1a9a0 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70  the TriggerPrg.p
1a9b0 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65  Program variable
1a9c0 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70  ..** The Parse.p
1a9d0 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
1a9e0 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74  never contains t
1a9f0 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20  wo entries with 
1aa00 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75  the same.** valu
1aa10 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69  es for both pTri
1aa20 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e  gger and orconf.
1aa30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67  .**.** The Trigg
1aa40 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30  erPrg.aColmask[0
1aa50 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  ] variable is se
1aa60 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f  t to a mask of o
1aa70 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20  ld.* columns.** 
1aa80 61 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74  accessed (or set
1aa90 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65   to 0 for trigge
1aaa0 72 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65  rs fired as a re
1aab0 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 20 0a  sult of INSERT .
1aac0 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20  ** statements). 
1aad0 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54  Similarly, the T
1aae0 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61  riggerPrg.aColma
1aaf0 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69  sk[1] variable i
1ab00 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61  s set to.** a ma
1ab10 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
1ab20 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20  mns used by the 
1ab30 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75  program..*/.stru
1ab40 63 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a  ct TriggerPrg {.
1ab50 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
1ab60 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69  ger;      /* Tri
1ab70 67 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61  gger this progra
1ab80 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d  m was coded from
1ab90 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67   */.  TriggerPrg
1aba0 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a   *pNext;      /*
1abb0 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50   Next entry in P
1abc0 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1abd0 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72   list */.  SubPr
1abe0 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b  ogram *pProgram;
1abf0 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d     /* Program im
1ac00 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67  plementing pTrig
1ac10 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20  ger/orconf */.  
1ac20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20  int orconf;     
1ac30 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1ac40 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70  lt ON CONFLICT p
1ac50 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61  olicy */.  u32 a
1ac60 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20  Colmask[2];     
1ac70 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f     /* Masks of o
1ac80 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75  ld.*, new.* colu
1ac90 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a  mns accessed */.
1aca0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44  };../*.** The yD
1acb0 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66  bMask datatype f
1acc0 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f  or the bitmask o
1acd0 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  f all attached d
1ace0 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66  atabases..*/.#if
1acf0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41   SQLITE_MAX_ATTA
1ad00 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65  CHED>30.  typede
1ad10 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  f unsigned char 
1ad20 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f  yDbMask[(SQLITE_
1ad30 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f  MAX_ATTACHED+9)/
1ad40 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  8];.# define DbM
1ad50 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20  askTest(M,I)    
1ad60 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c  (((M)[(I)/8]&(1<
1ad70 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23  <((I)&7)))!=0).#
1ad80 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65   define DbMaskZe
1ad90 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65  ro(M)      memse
1ada0 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d  t((M),0,sizeof(M
1adb0 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
1adc0 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28  skSet(M,I)     (
1add0 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28  M)[(I)/8]|=(1<<(
1ade0 28 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65  (I)&7)).# define
1adf0 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d   DbMaskAllZero(M
1ae00 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73  )   sqlite3DbMas
1ae10 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65  kAllZero(M).# de
1ae20 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65  fine DbMaskNonZe
1ae30 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33  ro(M)   (sqlite3
1ae40 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1ae50 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70  ==0).#else.  typ
1ae60 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e  edef unsigned in
1ae70 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66  t yDbMask;.# def
1ae80 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d  ine DbMaskTest(M
1ae90 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28 28 28  ,I)    (((M)&(((
1aea0 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29  yDbMask)1)<<(I))
1aeb0 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44  )!=0).# define D
1aec0 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20  bMaskZero(M)    
1aed0 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65    (M)=0.# define
1aee0 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20   DbMaskSet(M,I) 
1aef0 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d      (M)|=(((yDbM
1af00 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64  ask)1)<<(I)).# d
1af10 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a  efine DbMaskAllZ
1af20 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a  ero(M)   (M)==0.
1af30 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e  # define DbMaskN
1af40 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21  onZero(M)   (M)!
1af50 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  =0.#endif../*.**
1af60 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63   An SQL parser c
1af70 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20  ontext.  A copy 
1af80 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
1af90 65 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f  e is passed thro
1afa0 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65  ugh.** the parse
1afb0 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20  r and down into 
1afc0 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61  all the parser a
1afd0 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e  ction routine in
1afe0 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72   order to.** car
1aff0 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d  ry around inform
1b000 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c  ation that is gl
1b010 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69  obal to the enti
1b020 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20  re parse..**.** 
1b030 54 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73  The structure is
1b040 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77   divided into tw
1b050 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74  o parts.  When t
1b060 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f  he parser and co
1b070 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63  de.** generate c
1b080 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72  all themselves r
1b090 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20  ecursively, the 
1b0a0 66 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68  first part of th
1b0b0 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69  e structure.** i
1b0c0 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74  s constant but t
1b0d0 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69  he second part i
1b0e0 73 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62  s reset at the b
1b0f0 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64  eginning and end
1b100 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75   of.** each recu
1b110 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rsion..**.** The
1b120 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20   nTableLock and 
1b130 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61  aTableLock varia
1b140 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73  bles are only us
1b150 65 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64  ed if the shared
1b160 2d 63 61 63 68 65 20 0a 2a 2a 20 66 65 61 74 75  -cache .** featu
1b170 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69  re is enabled (i
1b180 66 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e  f sqlite3Tsd()->
1b190 75 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73  useSharedData is
1b1a0 20 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65   true). They are
1b1b0 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72  .** used to stor
1b1c0 65 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62  e the set of tab
1b1d0 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65  le-locks require
1b1e0 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65  d by the stateme
1b1f0 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70  nt being.** comp
1b200 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73  iled. Function s
1b210 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
1b220 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64  ) is used to add
1b230 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a   entries to the.
1b240 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75  ** list..*/.stru
1b250 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c  ct Parse {.  sql
1b260 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
1b270 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61    /* The main da
1b280 74 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65  tabase structure
1b290 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72   */.  char *zErr
1b2a0 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e  Msg;       /* An
1b2b0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a   error message *
1b2c0 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b  /.  Vdbe *pVdbe;
1b2d0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65           /* An e
1b2e0 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74  ngine for execut
1b2f0 69 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74  ing database byt
1b300 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72  ecode */.  int r
1b310 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
1b320 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66  /* Return code f
1b330 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f  rom execution */
1b340 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65  .  u8 colNamesSe
1b350 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20  t;      /* TRUE 
1b360 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e  after OP_ColumnN
1b370 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73  ame has been iss
1b380 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a  ued to pVdbe */.
1b390 20 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61    u8 checkSchema
1b3a0 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73  ;      /* Causes
1b3b0 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63   schema cookie c
1b3c0 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72  heck after an er
1b3d0 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74  ror */.  u8 nest
1b3e0 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
1b3f0 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
1b400 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70  d calls to the p
1b410 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72  arser/code gener
1b420 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65  ator */.  u8 nTe
1b430 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f  mpReg;         /
1b440 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70  * Number of temp
1b450 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20  orary registers 
1b460 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f  in aTempReg[] */
1b470 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69  .  u8 isMultiWri
1b480 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20  te;     /* True 
1b490 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  if statement may
1b4a0 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d   modify/insert m
1b4b0 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
1b4c0 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20    u8 mayAbort;  
1b4d0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
1b4e0 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
1b4f0 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65  throw an ABORT e
1b500 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  xception */.  u8
1b510 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20   hasCompound;   
1b520 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e     /* Need to in
1b530 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70  voke convertComp
1b540 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
1b550 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f  uery() */.  u8 o
1b560 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20  kConstFactor;   
1b570 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72   /* OK to factor
1b580 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a   out constants *
1b590 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67  /.  int aTempReg
1b5a0 5b 38 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64  [8];     /* Hold
1b5b0 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d  ing area for tem
1b5c0 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73  porary registers
1b5d0 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65   */.  int nRange
1b5e0 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69  Reg;       /* Si
1b5f0 7a 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72  ze of the tempor
1b600 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f  ary register blo
1b610 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e  ck */.  int iRan
1b620 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20  geReg;       /* 
1b630 46 69 72 73 74 20 72 65 67 69 73 74 65 72 20 69  First register i
1b640 6e 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  n temporary regi
1b650 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20  ster block */.  
1b660 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
1b670 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1b680 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f  f errors seen */
1b690 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20  .  int nTab;    
1b6a0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1b6b0 72 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20  r of previously 
1b6c0 61 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63  allocated VDBE c
1b6d0 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20  ursors */.  int 
1b6e0 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  nMem;           
1b6f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65   /* Number of me
1b700 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20  mory cells used 
1b710 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1b720 6e 53 65 74 3b 20 20 20 20 20 20 20 20 20 20 20  nSet;           
1b730 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 65   /* Number of se
1b740 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ts used so far *
1b750 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20 20  /.  int nOnce;  
1b760 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1b770 65 72 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69 6e  er of OP_Once in
1b780 73 74 72 75 63 74 69 6f 6e 73 20 73 6f 20 66 61  structions so fa
1b790 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c  r */.  int nOpAl
1b7a0 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  loc;        /* N
1b7b0 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61  umber of slots a
1b7c0 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62  llocated for Vdb
1b7d0 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  e.aOp[] */.  int
1b7e0 20 69 46 69 78 65 64 4f 70 3b 20 20 20 20 20 20   iFixedOp;      
1b7f0 20 20 2f 2a 20 4e 65 76 65 72 20 62 61 63 6b 20    /* Never back 
1b800 6f 75 74 20 6f 70 63 6f 64 65 73 20 69 46 69 78  out opcodes iFix
1b810 65 64 4f 70 2d 31 20 6f 72 20 65 61 72 6c 69 65  edOp-1 or earlie
1b820 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61 73  r */.  int ckBas
1b830 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42  e;          /* B
1b840 61 73 65 20 72 65 67 69 73 74 65 72 20 6f 66 20  ase register of 
1b850 64 61 74 61 20 64 75 72 69 6e 67 20 63 68 65 63  data during chec
1b860 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  k constraints */
1b870 0a 20 20 69 6e 74 20 69 50 61 72 74 49 64 78 54  .  int iPartIdxT
1b880 61 62 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65  ab;     /* Table
1b890 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
1b8a0 6f 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65  o a partial inde
1b8b0 78 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68  x */.  int iCach
1b8c0 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43  eLevel;     /* C
1b8d0 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77 68  olCache valid wh
1b8e0 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69  en aColCache[].i
1b8f0 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76  Level<=iCacheLev
1b900 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63  el */.  int iCac
1b910 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20  heCnt;       /* 
1b920 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20  Counter used to 
1b930 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63  generate aColCac
1b940 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20  he[].lru values 
1b950 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b  */.  int nLabel;
1b960 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1b970 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73  ber of labels us
1b980 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61  ed */.  int *aLa
1b990 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  bel;         /* 
1b9a0 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68  Space to hold th
1b9b0 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 73 74  e labels */.  st
1b9c0 72 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b  ruct yColCache {
1b9d0 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
1b9e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61             /* Ta
1b9f0 62 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ble cursor numbe
1ba00 72 20 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f  r */.    i16 iCo
1ba10 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  lumn;          /
1ba20 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e  * Table column n
1ba30 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20  umber */.    u8 
1ba40 74 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20  tempReg;        
1ba50 20 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20     /* iReg is a 
1ba60 74 65 6d 70 20 72 65 67 69 73 74 65 72 20 74 68  temp register th
1ba70 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66  at needs to be f
1ba80 72 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20  reed */.    int 
1ba90 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20  iLevel;         
1baa0 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76    /* Nesting lev
1bab0 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52  el */.    int iR
1bac0 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eg;             
1bad0 2f 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c 75  /* Reg with valu
1bae0 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
1baf0 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20  . 0 means none. 
1bb00 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20  */.    int lru; 
1bb10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1bb20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75  Least recently u
1bb30 73 65 64 20 65 6e 74 72 79 20 68 61 73 20 74 68  sed entry has th
1bb40 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65  e smallest value
1bb50 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68   */.  } aColCach
1bb60 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41  e[SQLITE_N_COLCA
1bb70 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f  CHE];  /* One fo
1bb80 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61  r each column ca
1bb90 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 45  che entry */.  E
1bba0 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45  xprList *pConstE
1bbb0 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  xpr;/* Constant 
1bbc0 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
1bbd0 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e   Token constrain
1bbe0 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66  tName;/* Name of
1bbf0 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20   the constraint 
1bc00 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20  currently being 
1bc10 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d  parsed */.  yDbM
1bc20 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20  ask writeMask;  
1bc30 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74   /* Start a writ
1bc40 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  e transaction on
1bc50 20 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73   these databases
1bc60 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f   */.  yDbMask co
1bc70 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69  okieMask;  /* Bi
1bc80 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20  tmask of schema 
1bc90 76 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73  verified databas
1bca0 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b  es */.  int cook
1bcb0 69 65 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d  ieValue[SQLITE_M
1bcc0 41 58 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20  AX_ATTACHED+2]; 
1bcd0 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f   /* Values of co
1bce0 6f 6b 69 65 73 20 74 6f 20 76 65 72 69 66 79 20  okies to verify 
1bcf0 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69  */.  int regRowi
1bd00 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67  d;        /* Reg
1bd10 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f  ister holding ro
1bd20 77 69 64 20 6f 66 20 43 52 45 41 54 45 20 54 41  wid of CREATE TA
1bd30 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69  BLE entry */.  i
1bd40 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20  nt regRoot;     
1bd50 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
1bd60 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67  holding root pag
1bd70 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77  e number for new
1bd80 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e   objects */.  in
1bd90 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20  t nMaxArg;      
1bda0 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70     /* Max args p
1bdb0 61 73 73 65 64 20 74 6f 20 75 73 65 72 20 66 75  assed to user fu
1bdc0 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72  nction by sub-pr
1bdd0 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c  ogram */.#if SEL
1bde0 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
1bdf0 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20  .  int nSelect; 
1be00 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1be10 72 20 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74  r of SELECT stat
1be20 65 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20  ements seen */. 
1be30 20 69 6e 74 20 6e 53 65 6c 65 63 74 49 6e 64 65   int nSelectInde
1be40 6e 74 3b 20 20 20 2f 2a 20 48 6f 77 20 66 61 72  nt;   /* How far
1be50 20 74 6f 20 69 6e 64 65 6e 74 20 53 45 4c 45 43   to indent SELEC
1be60 54 54 52 41 43 45 28 29 20 6f 75 74 70 75 74 20  TTRACE() output 
1be70 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
1be80 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
1be90 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74  ARED_CACHE.  int
1bea0 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20   nTableLock;    
1beb0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1bec0 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65   locks in aTable
1bed0 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c  Lock */.  TableL
1bee0 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b  ock *aTableLock;
1bef0 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62   /* Required tab
1bf00 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61  le locks for sha
1bf10 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a  red-cache mode *
1bf20 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69  /.#endif.  Autoi
1bf30 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20  ncInfo *pAinc;  
1bf40 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
1bf50 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45  bout AUTOINCREME
1bf60 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a  NT counters */..
1bf70 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
1bf80 20 75 73 65 64 20 77 68 69 6c 65 20 63 6f 64 69   used while codi
1bf90 6e 67 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  ng trigger progr
1bfa0 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20  ams. */.  Parse 
1bfb0 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f  *pToplevel;    /
1bfc0 2a 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72  * Parse structur
1bfd0 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72  e for main progr
1bfe0 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a  am (or NULL) */.
1bff0 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65    Table *pTrigge
1c000 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20  rTab;  /* Table 
1c010 74 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69  triggers are bei
1c020 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a  ng coded for */.
1c030 20 20 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b    int addrCrTab;
1c040 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73         /* Addres
1c050 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 54 61  s of OP_CreateTa
1c060 62 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52  ble opcode on CR
1c070 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20  EATE TABLE */.  
1c080 69 6e 74 20 61 64 64 72 53 6b 69 70 50 4b 3b 20  int addrSkipPK; 
1c090 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20       /* Address 
1c0a0 6f 66 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  of instruction t
1c0b0 6f 20 73 6b 69 70 20 50 52 49 4d 41 52 59 20 4b  o skip PRIMARY K
1c0c0 45 59 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 33  EY index */.  u3
1c0d0 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20  2 nQueryLoop;   
1c0e0 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72     /* Est number
1c0f0 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f   of iterations o
1c100 66 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f  f a query (10*lo
1c110 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20  g2(N)) */.  u32 
1c120 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20  oldmask;        
1c130 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e   /* Mask of old.
1c140 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65  * columns refere
1c150 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65  nced */.  u32 ne
1c160 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f  wmask;         /
1c170 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20  * Mask of new.* 
1c180 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63  columns referenc
1c190 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67  ed */.  u8 eTrig
1c1a0 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20  gerOp;       /* 
1c1b0 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e  TK_UPDATE, TK_IN
1c1c0 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54  SERT or TK_DELET
1c1d0 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e  E */.  u8 eOrcon
1c1e0 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  f;          /* D
1c1f0 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1c200 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72  CT policy for tr
1c210 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20  igger steps */. 
1c220 20 75 38 20 64 69 73 61 62 6c 65 54 72 69 67 67   u8 disableTrigg
1c230 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f  ers;  /* True to
1c240 20 64 69 73 61 62 6c 65 20 74 72 69 67 67 65 72   disable trigger
1c250 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a  s */..  /*******
1c260 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c270 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c280 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c290 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c2a0 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20  *.  ** Above is 
1c2b0 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e  constant between
1c2c0 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65   recursions.  Be
1c2d0 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66  low is reset bef
1c2e0 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20  ore and after.  
1c2f0 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f  ** each recursio
1c300 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79  n.  The boundary
1c310 20 62 65 74 77 65 65 6e 20 74 68 65 73 65 20 74   between these t
1c320 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65  wo regions is de
1c330 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73  termined.  ** us
1c340 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72  ing offsetof(Par
1c350 73 65 2c 6e 56 61 72 29 20 73 6f 20 74 68 65 20  se,nVar) so the 
1c360 6e 56 61 72 20 66 69 65 6c 64 20 6d 75 73 74 20  nVar field must 
1c370 62 65 20 74 68 65 20 66 69 72 73 74 20 66 69 65  be the first fie
1c380 6c 64 0a 20 20 2a 2a 20 69 6e 20 74 68 65 20 72  ld.  ** in the r
1c390 65 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e  ecursive region.
1c3a0 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
1c3b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c3c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c3d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c3e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20  ***********/..  
1c3f0 69 6e 74 20 6e 56 61 72 3b 20 20 20 20 20 20 20  int nVar;       
1c400 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1c410 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61  ber of '?' varia
1c420 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65  bles seen in the
1c430 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20   SQL so far */. 
1c440 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20   int nzVar;     
1c450 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1c460 6d 62 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c  mber of availabl
1c470 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72  e slots in azVar
1c480 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f  [] */.  u8 iPkSo
1c490 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
1c4a0 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43    /* ASC or DESC
1c4b0 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49   for INTEGER PRI
1c4c0 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38  MARY KEY */.  u8
1c4d0 20 62 46 72 65 65 57 69 74 68 3b 20 20 20 20 20   bFreeWith;     
1c4e0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1c4f0 69 66 20 70 57 69 74 68 20 73 68 6f 75 6c 64 20  if pWith should 
1c500 62 65 20 66 72 65 65 64 20 77 69 74 68 20 70 61  be freed with pa
1c510 72 73 65 72 20 2a 2f 0a 20 20 75 38 20 65 78 70  rser */.  u8 exp
1c520 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lain;           
1c530 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
1c540 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20  he EXPLAIN flag 
1c550 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20  is found on the 
1c560 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66  query */.#ifndef
1c570 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
1c580 54 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64  TUALTABLE.  u8 d
1c590 65 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20  eclareVtab;     
1c5a0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
1c5b0 20 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f   inside sqlite3_
1c5c0 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a  declare_vtab() *
1c5d0 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63  /.  int nVtabLoc
1c5e0 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  k;            /*
1c5f0 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75   Number of virtu
1c600 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63  al tables to loc
1c610 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  k */.#endif.  in
1c620 74 20 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20  t nAlias;       
1c630 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1c640 72 20 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73  r of aliased res
1c650 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20  ult set columns 
1c660 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74  */.  int nHeight
1c670 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1c680 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65  * Expression tre
1c690 65 20 68 65 69 67 68 74 20 6f 66 20 63 75 72 72  e height of curr
1c6a0 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a  ent sub-select *
1c6b0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1c6c0 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20  _OMIT_EXPLAIN.  
1c6d0 69 6e 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20  int iSelectId;  
1c6e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20            /* ID 
1c6f0 6f 66 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63  of current selec
1c700 74 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75  t for EXPLAIN ou
1c710 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e  tput */.  int iN
1c720 65 78 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20  extSelectId;    
1c730 20 20 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69      /* Next avai
1c740 6c 61 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20  lable select ID 
1c750 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70  for EXPLAIN outp
1c760 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63  ut */.#endif.  c
1c770 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20  har **azVar;    
1c780 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
1c790 74 65 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66  ters to names of
1c7a0 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20   parameters */. 
1c7b0 20 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72   Vdbe *pReprepar
1c7c0 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d  e;         /* VM
1c7d0 20 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65   being reprepare
1c7e0 64 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70  d (sqlite3Reprep
1c7f0 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73  are()) */.  cons
1c800 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20  t char *zTail;  
1c810 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c        /* All SQL
1c820 20 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c   text past the l
1c830 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61  ast semicolon pa
1c840 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20  rsed */.  Table 
1c850 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20  *pNewTable;     
1c860 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62      /* A table b
1c870 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64  eing constructed
1c880 20 62 79 20 43 52 45 41 54 45 20 54 41 42 4c 45   by CREATE TABLE
1c890 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
1c8a0 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20 20 20  NewTrigger;     
1c8b0 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65 72  /* Trigger under
1c8c0 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20   construct by a 
1c8d0 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 2a  CREATE TRIGGER *
1c8e0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
1c8f0 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a  zAuthContext; /*
1c900 20 54 68 65 20 36 74 68 20 70 61 72 61 6d 65 74   The 6th paramet
1c910 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20  er to db->xAuth 
1c920 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54  callbacks */.  T
1c930 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b  oken sNameToken;
1c940 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
1c950 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69  n with unqualifi
1c960 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74  ed schema object
1c970 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e   name */.  Token
1c980 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20   sLastToken;    
1c990 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74       /* The last
1c9a0 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f   token parsed */
1c9b0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1c9c0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
1c9d0 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20  E.  Token sArg; 
1c9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1c9f0 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f   Complete text o
1ca00 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d  f a module argum
1ca10 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ent */.  Table *
1ca20 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20  *apVtabLock;    
1ca30 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
1ca40 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
1ca50 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20  needing locking 
1ca60 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c  */.#endif.  Tabl
1ca70 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20  e *pZombieTab;  
1ca80 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
1ca90 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74   Table objects t
1caa0 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72 20 63  o delete after c
1cab0 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69  ode gen */.  Tri
1cac0 67 67 65 72 50 72 67 20 2a 70 54 72 69 67 67 65  ggerPrg *pTrigge
1cad0 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64  rPrg;  /* Linked
1cae0 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74   list of coded t
1caf0 72 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74  riggers */.  Wit
1cb00 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20  h *pWith;       
1cb10 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
1cb20 74 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f  t WITH clause, o
1cb30 72 20 4e 55 4c 4c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  r NULL */.};../*
1cb40 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
1cb50 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73  if currently ins
1cb60 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64  ide an sqlite3_d
1cb70 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61  eclare_vtab() ca
1cb80 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ll..*/.#ifdef SQ
1cb90 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
1cba0 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65  LTABLE.  #define
1cbb0 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
1cbc0 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69   0.#else.  #defi
1cbd0 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54  ne IN_DECLARE_VT
1cbe0 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c  AB (pParse->decl
1cbf0 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a  areVtab).#endif.
1cc00 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
1cc10 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
1cc20 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 61  ing structure ca
1cc30 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e  n be declared on
1cc40 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65   a stack and use
1cc50 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65  d.** to save the
1cc60 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74   Parse.zAuthCont
1cc70 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61  ext value so tha
1cc80 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74  t it can be rest
1cc90 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73  ored later..*/.s
1cca0 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78  truct AuthContex
1ccb0 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  t {.  const char
1ccc0 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
1ccd0 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50    /* Put saved P
1cce0 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
1ccf0 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73  t here */.  Pars
1cd00 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
1cd10 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50          /* The P
1cd20 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20 2a  arse structure *
1cd30 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66  /.};../*.** Bitf
1cd40 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50  ield flags for P
1cd50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f  5 value in vario
1cd60 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a 23  us opcodes..*/.#
1cd70 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43  define OPFLAG_NC
1cd80 48 41 4e 47 45 20 20 20 20 20 20 20 30 78 30 31  HANGE       0x01
1cd90 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70      /* Set to up
1cda0 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65  date db->nChange
1cdb0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
1cdc0 41 47 5f 45 50 48 45 4d 20 20 20 20 20 20 20 20  AG_EPHEM        
1cdd0 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43   0x01    /* OP_C
1cde0 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c  olumn: Ephemeral
1cdf0 20 6f 75 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f   output is ok */
1ce00 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1ce10 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20 30 78  LASTROWID     0x
1ce20 30 32 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20  02    /* Set to 
1ce30 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52  update db->lastR
1ce40 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
1ce50 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20  OPFLAG_ISUPDATE 
1ce60 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20       0x04    /* 
1ce70 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69  This OP_Insert i
1ce80 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20  s an sql UPDATE 
1ce90 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1cea0 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20 20  G_APPEND        
1ceb0 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20  0x08    /* This 
1cec0 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20  is likely to be 
1ced0 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65  an append */.#de
1cee0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53  fine OPFLAG_USES
1cef0 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20  EEKRESULT 0x10  
1cf00 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69    /* Try to avoi
1cf10 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65  d a seek in Btre
1cf20 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65  eInsert() */.#de
1cf30 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47  fine OPFLAG_LENG
1cf40 54 48 41 52 47 20 20 20 20 20 30 78 34 30 20 20  THARG     0x40  
1cf50 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f    /* OP_Column o
1cf60 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e  nly used for len
1cf70 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  gth() */.#define
1cf80 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
1cf90 47 20 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a  G     0x80    /*
1cfa0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20   OP_Column only 
1cfb0 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28  used for typeof(
1cfc0 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ) */.#define OPF
1cfd0 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20  LAG_BULKCSR     
1cfe0 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
1cff0 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f  Open** used to o
1d000 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20  pen bulk cursor 
1d010 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1d020 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20 20  G_SEEKEQ        
1d030 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f 70  0x02    /* OP_Op
1d040 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73 65 73  en** cursor uses
1d050 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f   EQ seek only */
1d060 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1d070 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30 78  P2ISREG       0x
1d080 30 34 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f  04    /* P2 to O
1d090 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65  P_Open** is a re
1d0a0 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f  gister number */
1d0b0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1d0c0 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30 78  PERMUTE       0x
1d0d0 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70  01    /* OP_Comp
1d0e0 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65 72  are: use the per
1d0f0 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a  mutation */../*.
1d100 20 2a 20 45 61 63 68 20 74 72 69 67 67 65 72 20   * Each trigger 
1d110 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64  present in the d
1d120 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
1d130 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69  s stored as an i
1d140 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74  nstance of. * st
1d150 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 0a 20  ruct Trigger. . 
1d160 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f  *. * Pointers to
1d170 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   instances of st
1d180 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72 65  ruct Trigger are
1d190 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77   stored in two w
1d1a0 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68  ays.. * 1. In th
1d1b0 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61 73  e "trigHash" has
1d1c0 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66  h table (part of
1d1d0 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68   the sqlite3* th
1d1e0 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  at represents th
1d1f0 65 20 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73  e . *    databas
1d200 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  e). This allows 
1d210 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75 72  Trigger structur
1d220 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 76  es to be retriev
1d230 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32  ed by name.. * 2
1d240 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61  . All triggers a
1d250 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
1d260 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f   single table fo
1d270 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  rm a linked list
1d280 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20  , using the. *  
1d290 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f    pNext member o
1d2a0 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1d2b0 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  . A pointer to t
1d2c0 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
1d2d0 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69   of the. *    li
1d2e0 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f  nked list is sto
1d2f0 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72 69  red as the "pTri
1d300 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20  gger" member of 
1d310 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20  the associated. 
1d320 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c  *    struct Tabl
1d330 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74  e.. *. * The "st
1d340 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
1d350 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
1d360 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61  rst element of a
1d370 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20   linked list. * 
1d380 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
1d390 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70  QL statements sp
1d3a0 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 74  ecified as the t
1d3b0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
1d3c0 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
1d3d0 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  er {.  char *zNa
1d3e0 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  me;            /
1d3f0 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
1d400 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20 20  e trigger       
1d410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d420 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c   */.  char *tabl
1d430 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
1d440 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   The table or vi
1d450 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  ew to which the 
1d460 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73 20  trigger applies 
1d470 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
1d480 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d490 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
1d4a0 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
1d4b0 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20 2a  INSERT         *
1d4c0 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20  /.  u8 tr_tm;   
1d4d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1d4e0 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45  ne of TRIGGER_BE
1d4f0 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46  FORE, TRIGGER_AF
1d500 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  TER */.  Expr *p
1d510 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  When;           
1d520 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61   /* The WHEN cla
1d530 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72 65  use of the expre
1d540 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55  ssion (may be NU
1d550 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20  LL) */.  IdList 
1d560 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20  *pColumns;      
1d570 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61   /* If this is a
1d580 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c  n UPDATE OF <col
1d590 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65  umn-list> trigge
1d5a0 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r,.             
1d5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5c0 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74  the <column-list
1d5d0 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72 65  > is stored here
1d5e0 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
1d5f0 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a  chema;        /*
1d600 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
1d610 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 2a  ng the trigger *
1d620 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62  /.  Schema *pTab
1d630 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
1d640 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
1d650 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
1d660 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74 65  TriggerStep *ste
1d670 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20  p_list; /* Link 
1d680 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 20  list of trigger 
1d690 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20  program steps   
1d6a0 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54            */.  T
1d6b0 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20  rigger *pNext;  
1d6c0 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74         /* Next t
1d6d0 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74 65  rigger associate
1d6e0 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65  d with the table
1d6f0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
1d700 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68 65  trigger is eithe
1d710 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e  r a BEFORE or an
1d720 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e 20   AFTER trigger. 
1d730 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
1d740 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65  onstants.** dete
1d750 72 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a 2a 2a  rmine which. .**
1d760 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65  .** If there are
1d770 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65   multiple trigge
1d780 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66  rs, you might of
1d790 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64   some BEFORE and
1d7a0 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20   some AFTER..** 
1d7b0 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74  In that cases, t
1d7c0 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c  he constants bel
1d7d0 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74  ow can be ORed t
1d7e0 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66  ogether..*/.#def
1d7f0 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f  ine TRIGGER_BEFO
1d800 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52  RE  1.#define TR
1d810 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a  IGGER_AFTER   2.
1d820 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*. * An instan
1d830 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  ce of struct Tri
1d840 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64  ggerStep is used
1d850 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67   to store a sing
1d860 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  le SQL statement
1d870 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61  . * that is a pa
1d880 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d  rt of a trigger-
1d890 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20  program. . *. * 
1d8a0 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72  Instances of str
1d8b0 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
1d8c0 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20  are stored in a 
1d8d0 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69  singly linked li
1d8e0 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73  st (linked. * us
1d8f0 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20  ing the "pNext" 
1d900 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63  member) referenc
1d910 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f  ed by the "step_
1d920 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20  list" member of 
1d930 74 68 65 20 0a 20 2a 20 61 73 73 6f 63 69 61 74  the . * associat
1d940 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ed struct Trigge
1d950 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20  r instance. The 
1d960 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
1d970 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
1d980 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74   is. * the first
1d990 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72 69   step of the tri
1d9a0 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a  gger-program.. *
1d9b0 20 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65   . * The "op" me
1d9c0 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20 77  mber indicates w
1d9d0 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61  hether this is a
1d9e0 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45   "DELETE", "INSE
1d9f0 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72  RT", "UPDATE" or
1da00 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61  . * "SELECT" sta
1da10 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e  tement. The mean
1da20 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65  ings of the othe
1da30 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74  r members is det
1da40 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 0a  ermined by the .
1da50 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22   * value of "op"
1da60 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a   as follows:. *.
1da70 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53   * (op == TK_INS
1da80 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20  ERT). * orconf  
1da90 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20    -> stores the 
1daa0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f  ON CONFLICT algo
1dab0 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74  rithm. * pSelect
1dac0 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73     -> If this is
1dad0 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
1dae0 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73  ... SELECT ... s
1daf0 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20  tatement, then. 
1db00 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
1db10 68 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69  his stores a poi
1db20 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45  nter to the SELE
1db30 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74  CT statement. Ot
1db40 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
1db50 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20   target    -> A 
1db60 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68  token holding th
1db70 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  e quoted name of
1db80 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e   the table to in
1db90 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45  sert into.. * pE
1dba0 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68  xprList -> If th
1dbb0 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
1dbc0 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20  INTO ... VALUES 
1dbd0 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
1dbe0 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
1dbf0 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
1dc00 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73  values to be ins
1dc10 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65  erted. Otherwise
1dc20 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73   NULL.. * pIdLis
1dc30 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69  t   -> If this i
1dc40 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
1dc50 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61   ... (<column-na
1dc60 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e  mes>) VALUES ...
1dc70 20 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20   . *            
1dc80 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65    statement, the
1dc90 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68  n this stores th
1dca0 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74  e column-names t
1dcb0 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20  o be. *         
1dcc0 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e       inserted in
1dcd0 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  to.. *. * (op ==
1dce0 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 74   TK_DELETE). * t
1dcf0 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f  arget    -> A to
1dd00 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ken holding the 
1dd10 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
1dd20 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65  he table to dele
1dd30 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65  te from.. * pWhe
1dd40 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45  re    -> The WHE
1dd50 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
1dd60 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
1dd70 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63  t if one is spec
1dd80 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20  ified.. *       
1dd90 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65         Otherwise
1dda0 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f   NULL.. * . * (o
1ddb0 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a  p == TK_UPDATE).
1ddc0 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20   * target    -> 
1ddd0 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20  A token holding 
1dde0 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20  the quoted name 
1ddf0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
1de00 75 70 64 61 74 65 20 72 6f 77 73 20 6f 66 2e 0a  update rows of..
1de10 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20   * pWhere    -> 
1de20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
1de30 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73   of the UPDATE s
1de40 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20  tatement if one 
1de50 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a  is specified.. *
1de60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74                Ot
1de70 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
1de80 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20   pExprList -> A 
1de90 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75  list of the colu
1dea0 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e  mns to update an
1deb0 64 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  d the expression
1dec0 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20  s to update. *  
1ded0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 6d              them
1dee0 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33   to. See sqlite3
1def0 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e  Update() documen
1df00 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e  tation of "pChan
1df10 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20  ges". *         
1df20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20       argument.. 
1df30 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72  * . */.struct Tr
1df40 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75 38  iggerStep {.  u8
1df50 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
1df60 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f     /* One of TK_
1df70 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54  DELETE, TK_UPDAT
1df80 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b  E, TK_INSERT, TK
1df90 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20  _SELECT */.  u8 
1dfa0 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  orconf;         
1dfb0 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b    /* OE_Rollback
1dfc0 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67   etc. */.  Trigg
1dfd0 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20 20  er *pTrig;      
1dfe0 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72 20 74  /* The trigger t
1dff0 68 61 74 20 74 68 69 73 20 73 74 65 70 20 69 73  hat this step is
1e000 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20   a part of */.  
1e010 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
1e020 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20 73       /* SELECT s
1e030 74 61 74 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f  tatment or RHS o
1e040 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  f INSERT INTO ..
1e050 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20   SELECT ... */. 
1e060 20 54 6f 6b 65 6e 20 74 61 72 67 65 74 3b 20 20   Token target;  
1e070 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20        /* Target 
1e080 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45  table for DELETE
1e090 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54  , UPDATE, INSERT
1e0a0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
1e0b0 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  re;        /* Th
1e0c0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  e WHERE clause f
1e0d0 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  or DELETE or UPD
1e0e0 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45  ATE steps */.  E
1e0f0 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69  xprList *pExprLi
1e100 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73  st; /* SET claus
1e110 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20 2a 2f  e for UPDATE. */
1e120 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69  .  IdList *pIdLi
1e130 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  st;     /* Colum
1e140 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45  n names for INSE
1e150 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  RT */.  TriggerS
1e160 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  tep *pNext;  /* 
1e170 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b  Next in the link
1e180 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67  -list */.  Trigg
1e190 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20  erStep *pLast;  
1e1a0 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20  /* Last element 
1e1b0 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61  in link-list. Va
1e1c0 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d  lid for 1st elem
1e1d0 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   only */.};../*.
1e1e0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
1e1f0 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
1e200 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
1e210 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  used by the sqli
1e220 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74  teFix....** rout
1e230 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c  ines as they wal
1e240 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  k the parse tree
1e250 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73   to make databas
1e260 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20  e references.** 
1e270 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a 74  explicit.  .*/.t
1e280 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
1e290 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73  Fixer DbFixer;.s
1e2a0 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a  truct DbFixer {.
1e2b0 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
1e2c0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
1e2d0 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45  sing context.  E
1e2e0 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72  rror messages wr
1e2f0 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20  itten here */.  
1e300 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
1e310 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73      /* Fix items
1e320 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20   to this schema 
1e330 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c  */.  int bVarOnl
1e340 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63  y;       /* Chec
1e350 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72  k for variable r
1e360 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a  eferences only *
1e370 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
1e380 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20  zDb;    /* Make 
1e390 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73  sure all objects
1e3a0 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69   are contained i
1e3b0 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  n this database 
1e3c0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
1e3d0 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65  *zType;  /* Type
1e3e0 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
1e3f0 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
1e400 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20  or messages */. 
1e410 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e   const Token *pN
1e420 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  ame; /* Name of 
1e430 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20  the container - 
1e440 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d  used for error m
1e450 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f  essages */.};../
1e460 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64  *.** An objected
1e470 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c   used to accumul
1e480 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66 20  ate the text of 
1e490 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20 77  a string where w
1e4a0 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65  e.** do not nece
1e4b0 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77  ssarily know how
1e4c0 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67 20   big the string 
1e4d0 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65  will be in the e
1e4e0 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74  nd..*/.struct St
1e4f0 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74  rAccum {.  sqlit
1e500 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
1e510 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61  /* Optional data
1e520 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69  base for lookasi
1e530 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c  de.  Can be NULL
1e540 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61 73   */.  char *zBas
1e550 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  e;         /* A 
1e560 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  base allocation.
1e570 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f    Not from mallo
1e580 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  c. */.  char *zT
1e590 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
1e5a0 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65  The string colle
1e5b0 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  cted so far */. 
1e5c0 20 69 6e 74 20 20 6e 43 68 61 72 3b 20 20 20 20   int  nChar;    
1e5d0 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
1e5e0 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f  of the string so
1e5f0 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e   far */.  int  n
1e600 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f  Alloc;         /
1e610 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63  * Amount of spac
1e620 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a  e allocated in z
1e630 54 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 20 6d  Text */.  int  m
1e640 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f  xAlloc;        /
1e650 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65  * Maximum allowe
1e660 64 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  d string length 
1e670 2a 2f 0a 20 20 75 38 20 20 20 75 73 65 4d 61 6c  */.  u8   useMal
1e680 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 30 3a 20  loc;      /* 0: 
1e690 6e 6f 6e 65 2c 20 20 31 3a 20 73 71 6c 69 74 65  none,  1: sqlite
1e6a0 33 44 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20 73  3DbMalloc,  2: s
1e6b0 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f  qlite3_malloc */
1e6c0 0a 20 20 75 38 20 20 20 61 63 63 45 72 72 6f 72  .  u8   accError
1e6d0 3b 20 20 20 20 20 20 20 2f 2a 20 53 54 52 41 43  ;       /* STRAC
1e6e0 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54 52  CUM_NOMEM or STR
1e6f0 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a  ACCUM_TOOBIG */.
1e700 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43  };.#define STRAC
1e710 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23 64  CUM_NOMEM   1.#d
1e720 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 54  efine STRACCUM_T
1e730 4f 4f 42 49 47 20 20 32 0a 0a 2f 2a 0a 2a 2a 20  OOBIG  2../*.** 
1e740 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  A pointer to thi
1e750 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  s structure is u
1e760 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61  sed to communica
1e770 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  te information.*
1e780 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e  * from sqlite3In
1e790 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53  it and OP_ParseS
1e7a0 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73  chema into the s
1e7b0 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
1e7c0 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  ck..*/.typedef s
1e7d0 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65  truct {.  sqlite
1e7e0 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a  3 *db;        /*
1e7f0 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65   The database be
1e800 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
1e810 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72  */.  char **pzEr
1e820 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f  rMsg;    /* Erro
1e830 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64  r message stored
1e840 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69   here */.  int i
1e850 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Db;            /
1e860 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74  * 0 for main dat
1e870 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45  abase.  1 for TE
1e880 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41  MP, 2.. for ATTA
1e890 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63  CHed */.  int rc
1e8a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1e8b0 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f   Result code sto
1e8c0 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e  red here */.} In
1e8d0 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53  itData;../*.** S
1e8e0 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
1e8f0 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69  ing global confi
1e900 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f  guration data fo
1e910 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62  r the SQLite lib
1e920 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  rary..**.** This
1e930 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20   structure also 
1e940 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74  contains some st
1e950 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ate information.
1e960 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74  .*/.struct Sqlit
1e970 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74  e3Config {.  int
1e980 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20   bMemstat;      
1e990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e9a0 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
1e9b0 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a   memory status *
1e9c0 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74  /.  int bCoreMut
1e9d0 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
1e9e0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1e9f0 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74   enable core mut
1ea00 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62  exing */.  int b
1ea10 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20  FullMutex;      
1ea20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ea30 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66  True to enable f
1ea40 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a  ull mutexing */.
1ea50 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20    int bOpenUri; 
1ea60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea70 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69      /* True to i
1ea80 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d  nterpret filenam
1ea90 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20  es as URIs */.  
1eaa0 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20 20  int bUseCis;    
1eab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eac0 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e    /* Use coverin
1ead0 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75  g indices for fu
1eae0 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e  ll-scans */.  in
1eaf0 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20  t mxStrlen;     
1eb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb10 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e  /* Maximum strin
1eb20 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e  g length */.  in
1eb30 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b 20  t neverCorrupt; 
1eb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb50 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 61  /* Database is a
1eb60 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65  lways well-forme
1eb70 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f  d */.  int szLoo
1eb80 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20  kaside;         
1eb90 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
1eba0 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75  ult lookaside bu
1ebb0 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69  ffer size */.  i
1ebc0 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20  nt nLookaside;  
1ebd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebe0 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b   /* Default look
1ebf0 61 73 69 64 65 20 62 75 66 66 65 72 20 63 6f 75  aside buffer cou
1ec00 6e 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  nt */.  sqlite3_
1ec10 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20  mem_methods m;  
1ec20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77            /* Low
1ec30 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c  -level memory al
1ec40 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61  location interfa
1ec50 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ce */.  sqlite3_
1ec60 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75  mutex_methods mu
1ec70 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77  tex;      /* Low
1ec80 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74  -level mutex int
1ec90 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69  erface */.  sqli
1eca0 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f  te3_pcache_metho
1ecb0 64 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a  ds2 pcache2;  /*
1ecc0 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d   Low-level page-
1ecd0 63 61 63 68 65 20 69 6e 74 65 72 66 61 63 65 20  cache interface 
1ece0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70  */.  void *pHeap
1ecf0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ed00 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73         /* Heap s
1ed10 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a  torage space */.
1ed20 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20    int nHeap;    
1ed30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed40 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70      /* Size of p
1ed50 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Heap[] */.  int 
1ed60 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20  mnReq, mxReq;   
1ed70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ed80 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61   Min and max hea
1ed90 70 20 72 65 71 75 65 73 74 73 20 73 69 7a 65 73  p requests sizes
1eda0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e   */.  sqlite3_in
1edb0 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20  t64 szMmap;     
1edc0 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28          /* mmap(
1edd0 29 20 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e  ) space per open
1ede0 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74   file */.  sqlit
1edf0 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b  e3_int64 mxMmap;
1ee00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ee10 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f  Maximum value fo
1ee20 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f  r szMmap */.  vo
1ee30 69 64 20 2a 70 53 63 72 61 74 63 68 3b 20 20 20  id *pScratch;   
1ee40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee50 2f 2a 20 53 63 72 61 74 63 68 20 6d 65 6d 6f 72  /* Scratch memor
1ee60 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72  y */.  int szScr
1ee70 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20  atch;           
1ee80 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
1ee90 20 6f 66 20 65 61 63 68 20 73 63 72 61 74 63 68   of each scratch
1eea0 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74   buffer */.  int
1eeb0 20 6e 53 63 72 61 74 63 68 3b 20 20 20 20 20 20   nScratch;      
1eec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1eed0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 63 72 61  * Number of scra
1eee0 74 63 68 20 62 75 66 66 65 72 73 20 2a 2f 0a 20  tch buffers */. 
1eef0 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20   void *pPage;   
1ef00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef10 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65     /* Page cache
1ef20 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74   memory */.  int
1ef30 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20   szPage;        
1ef40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ef50 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70  * Size of each p
1ef60 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a  age in pPage[] *
1ef70 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20  /.  int nPage;  
1ef80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef90 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1efa0 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67  of pages in pPag
1efb0 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50  e[] */.  int mxP
1efc0 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20  arserStack;     
1efd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61             /* ma
1efe0 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74  ximum depth of t
1eff0 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20  he parser stack 
1f000 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43  */.  int sharedC
1f010 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20  acheEnabled;    
1f020 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69         /* true i
1f030 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  f shared-cache m
1f040 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20  ode enabled */. 
1f050 20 75 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20   u32 szPma;     
1f060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f070 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f     /* Maximum So
1f080 72 74 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f  rter PMA size */
1f090 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20  .  /* The above 
1f0a0 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c  might be initial
1f0b0 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f  ized to non-zero
1f0c0 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
1f0d0 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a   need to always.
1f0e0 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62    ** initially b
1f0f0 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e  e zero, however.
1f100 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74   */.  int isInit
1f110 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1f120 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1f130 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61  after initializa
1f140 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65  tion has finishe
1f150 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f  d */.  int inPro
1f160 67 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20  gress;          
1f170 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1f180 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a   while initializ
1f190 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73  ation in progres
1f1a0 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74  s */.  int isMut
1f1b0 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  exInit;         
1f1c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1f1d0 20 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61   after mutexes a
1f1e0 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  re initialized *
1f1f0 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63  /.  int isMalloc
1f200 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
1f210 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
1f220 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e  ter malloc is in
1f230 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
1f240 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b  nt isPCacheInit;
1f250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f260 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
1f270 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c  alloc is initial
1f280 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ized */.  int nR
1f290 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  efInitMutex;    
1f2a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1f2b0 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f  umber of users o
1f2c0 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a  f pInitMutex */.
1f2d0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
1f2e0 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  *pInitMutex;    
1f2f0 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65      /* Mutex use
1f300 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69  d by sqlite3_ini
1f310 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76  tialize() */.  v
1f320 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64  oid (*xLog)(void
1f330 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
1f340 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20  *); /* Function 
1f350 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20  for logging */. 
1f360 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20   void *pLogArg; 
1f370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f380 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
1f390 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28  rgument to xLog(
1f3a0 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ) */.#ifdef SQLI
1f3b0 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47  TE_ENABLE_SQLLOG
1f3c0 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67  .  void(*xSqllog
1f3d0 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
1f3e0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e  ,const char*, in
1f3f0 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c  t);.  void *pSql
1f400 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23  logArg;.#endif.#
1f410 69 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42  ifdef SQLITE_VDB
1f420 45 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20  E_COVERAGE.  /* 
1f430 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61  The following ca
1f440 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e  llback (if not N
1f450 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20  ULL) is invoked 
1f460 6f 6e 20 65 76 65 72 79 20 56 44 42 45 20 62 72  on every VDBE br
1f470 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74  anch.  ** operat
1f480 69 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61  ion.  Set the ca
1f490 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c  llback using SQL
1f4a0 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42  ITE_TESTCTRL_VDB
1f4b0 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f  E_COVERAGE..  */
1f4c0 0a 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42  .  void (*xVdbeB
1f4d0 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74  ranch)(void*,int
1f4e0 20 69 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68   iSrcLine,u8 eTh
1f4f0 69 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20  is,u8 eMx);  /* 
1f500 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  Callback */.  vo
1f510 69 64 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41  id *pVdbeBranchA
1f520 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
1f530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f540 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61          /* 1st a
1f550 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69  rgument */.#endi
1f560 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
1f570 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
1f580 53 54 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74  ST.  int (*xTest
1f590 43 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20  Callback)(int); 
1f5a0 20 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65         /* Invoke
1f5b0 64 20 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c  d by sqlite3Faul
1f5c0 74 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66  tSim() */.#endif
1f5d0 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d  .  int bLocaltim
1f5e0 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20  eFault;         
1f5f0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1f600 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29  fail localtime()
1f610 20 63 61 6c 6c 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   calls */.};../*
1f620 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69  .** This macro i
1f630 73 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66  s used inside of
1f640 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
1f650 65 6e 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65  ents to indicate
1f660 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73   that.** the ass
1f670 65 72 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ert is only vali
1f680 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d  d on a well-form
1f690 65 64 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e  ed database.  In
1f6a0 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20  stead of:.**.** 
1f6b0 20 20 20 20 61 73 73 65 72 74 28 20 58 20 29 3b      assert( X );
1f6c0 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65  .**.** One write
1f6d0 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  s:.**.**     ass
1f6e0 65 72 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50  ert( X || CORRUP
1f6f0 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f  T_DB );.**.** CO
1f700 52 52 55 50 54 5f 44 42 20 69 73 20 74 72 75 65  RRUPT_DB is true
1f710 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f   during normal o
1f720 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55  peration.  CORRU
1f730 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69  PT_DB does not i
1f740 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20  ndicate.** that 
1f750 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
1f760 64 65 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75  definitely corru
1f770 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74  pt, only that it
1f780 20 6d 69 67 68 74 20 62 65 20 63 6f 72 72 75 70   might be corrup
1f790 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74  t..** For most t
1f7a0 65 73 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55  est cases, CORRU
1f7b0 50 54 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20  PT_DB is set to 
1f7c0 66 61 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70  false using a sp
1f7d0 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33  ecial.** sqlite3
1f7e0 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e  _test_control().
1f7f0 20 20 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61    This enables a
1f800 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
1f810 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74  ts to prove.** t
1f820 68 69 6e 67 73 20 74 68 61 74 20 61 72 65 20 61  hings that are a
1f830 6c 77 61 79 73 20 74 72 75 65 20 66 6f 72 20 77  lways true for w
1f840 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62  ell-formed datab
1f850 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ases..*/.#define
1f860 20 43 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71   CORRUPT_DB  (sq
1f870 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65  lite3Config.neve
1f880 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a  rCorrupt==0)../*
1f890 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e  .** Context poin
1f8a0 74 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20  ter passed down 
1f8b0 74 68 72 6f 75 67 68 20 74 68 65 20 74 72 65 65  through the tree
1f8c0 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74  -walk..*/.struct
1f8d0 20 57 61 6c 6b 65 72 20 7b 0a 20 20 69 6e 74 20   Walker {.  int 
1f8e0 28 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29  (*xExprCallback)
1f8f0 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29  (Walker*, Expr*)
1f900 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63  ;     /* Callbac
1f910 6b 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e  k for expression
1f920 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65  s */.  int (*xSe
1f930 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61  lectCallback)(Wa
1f940 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20  lker*,Select*); 
1f950 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72   /* Callback for
1f960 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f   SELECTs */.  vo
1f970 69 64 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c  id (*xSelectCall
1f980 62 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53  back2)(Walker*,S
1f990 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e  elect*);/* Secon
1f9a0 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53  d callback for S
1f9b0 45 4c 45 43 54 73 20 2a 2f 0a 20 20 50 61 72 73  ELECTs */.  Pars
1f9c0 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
1f9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9e0 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20        /* Parser 
1f9f0 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69  context.  */.  i
1fa00 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20  nt walkerDepth; 
1fa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1fa30 65 72 20 6f 66 20 73 75 62 71 75 65 72 69 65 73  er of subqueries
1fa40 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b 20   */.  u8 eCode; 
1fa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa70 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65  /* A small proce
1fa80 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20  ssing code */.  
1fa90 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20  union {         
1faa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fab0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74            /* Ext
1fac0 72 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c  ra data for call
1fad0 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65  back */.    Name
1fae0 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20  Context *pNC;   
1faf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb00 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67         /* Naming
1fb10 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20   context */.    
1fb20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
1fb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
1fb50 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69  counter */.    i
1fb60 6e 74 20 69 43 75 72 3b 20 20 20 20 20 20 20 20  nt iCur;        
1fb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63            /* A c
1fb90 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ursor number */.
1fba0 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72      SrcList *pSr
1fbb0 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20  cList;          
1fbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1fbd0 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  * FROM clause */
1fbe0 0a 20 20 20 20 73 74 72 75 63 74 20 53 72 63 43  .    struct SrcC
1fbf0 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b  ount *pSrcCount;
1fc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc10 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75  /* Counting colu
1fc20 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f  mn references */
1fc30 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46  .  } u;.};../* F
1fc40 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61 74 69  orward declarati
1fc50 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ons */.int sqlit
1fc60 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65  e3WalkExpr(Walke
1fc70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  r*, Expr*);.int 
1fc80 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c  sqlite3WalkExprL
1fc90 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  ist(Walker*, Exp
1fca0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
1fcb0 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57  ite3WalkSelect(W
1fcc0 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
1fcd0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
1fce0 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b  kSelectExpr(Walk
1fcf0 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
1fd00 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
1fd10 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a  lectFrom(Walker*
1fd20 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a  , Select*);../*.
1fd30 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66  ** Return code f
1fd40 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72  rom the parse-tr
1fd50 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69  ee walking primi
1fd60 74 69 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a  tives and their.
1fd70 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f  ** callbacks..*/
1fd80 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e  .#define WRC_Con
1fd90 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20  tinue    0   /* 
1fda0 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e  Continue down in
1fdb0 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23  to children */.#
1fdc0 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65  define WRC_Prune
1fdd0 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d         1   /* Om
1fde0 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20  it children but 
1fdf0 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67  continue walking
1fe00 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65   siblings */.#de
1fe10 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20  fine WRC_Abort  
1fe20 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e       2   /* Aban
1fe30 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c  don the tree wal
1fe40 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  k */../*.** An i
1fe50 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
1fe60 73 74 72 75 63 74 75 72 65 20 72 65 70 72 65 73  structure repres
1fe70 65 6e 74 73 20 61 20 73 65 74 20 6f 66 20 6f 6e  ents a set of on
1fe80 65 20 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a  e or more CTEs.*
1fe90 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  * (common table 
1fea0 65 78 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65  expressions) cre
1feb0 61 74 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65  ated by a single
1fec0 20 57 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f   WITH clause..*/
1fed0 0a 73 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20  .struct With {. 
1fee0 20 69 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20   int nCte;      
1fef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff00 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54   /* Number of CT
1ff10 45 73 20 69 6e 20 74 68 65 20 57 49 54 48 20 63  Es in the WITH c
1ff20 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69 74 68 20  lause */.  With 
1ff30 2a 70 4f 75 74 65 72 3b 20 20 20 20 20 20 20 20  *pOuter;        
1ff40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
1ff50 6e 74 61 69 6e 69 6e 67 20 57 49 54 48 20 63 6c  ntaining WITH cl
1ff60 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ause, or NULL */
1ff70 0a 20 20 73 74 72 75 63 74 20 43 74 65 20 7b 20  .  struct Cte { 
1ff80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff90 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 43     /* For each C
1ffa0 54 45 20 69 6e 20 74 68 65 20 57 49 54 48 20 63  TE in the WITH c
1ffb0 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20  lause.... */.   
1ffc0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
1ffd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ffe0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
1fff0 20 43 54 45 20 2a 2f 0a 20 20 20 20 45 78 70 72   CTE */.    Expr
20000 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20  List *pCols;    
20010 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
20020 69 73 74 20 6f 66 20 65 78 70 6c 69 63 69 74 20  ist of explicit 
20030 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72  column names, or
20040 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c   NULL */.    Sel
20050 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
20060 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20070 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  The definition o
20080 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20  f this CTE */.  
20090 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
200a0 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rr;             
200b0 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61    /* Error messa
200c0 67 65 20 66 6f 72 20 63 69 72 63 75 6c 61 72 20  ge for circular 
200d0 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20  references */.  
200e0 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64  } a[1];.};..#ifd
200f0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
20100 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
20110 65 20 6f 66 20 74 68 65 20 54 72 65 65 56 69 65  e of the TreeVie
20120 77 20 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64  w object is used
20130 20 66 6f 72 20 70 72 69 6e 74 69 6e 67 20 74 68   for printing th
20140 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
20150 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
20160 6f 6e 20 73 71 6c 69 74 65 33 44 65 62 75 67 50  on sqlite3DebugP
20170 72 69 6e 74 66 28 29 20 75 73 69 6e 67 20 61 20  rintf() using a 
20180 74 72 65 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a  tree-like view..
20190 2a 2f 0a 73 74 72 75 63 74 20 54 72 65 65 56 69  */.struct TreeVi
201a0 65 77 20 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65  ew {.  int iLeve
201b0 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  l;             /
201c0 2a 20 57 68 69 63 68 20 6c 65 76 65 6c 20 6f 66  * Which level of
201d0 20 74 68 65 20 74 72 65 65 20 77 65 20 61 72 65   the tree we are
201e0 20 6f 6e 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69   on */.  u8  bLi
201f0 6e 65 5b 31 30 30 5d 3b 20 20 20 20 20 20 20 20  ne[100];        
20200 20 2f 2a 20 44 72 61 77 20 76 65 72 74 69 63 61   /* Draw vertica
20210 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66  l in column i if
20220 20 62 4c 69 6e 65 5b 69 5d 20 69 73 20 74 72 75   bLine[i] is tru
20230 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f  e */.};.#endif /
20240 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a  * SQLITE_DEBUG *
20250 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e  /../*.** Assumin
20260 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20  g zIn points to 
20270 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
20280 66 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63  f a UTF-8 charac
20290 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20  ter,.** advance 
202a0 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  zIn to point to 
202b0 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
202c0 66 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38  f the next UTF-8
202d0 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23   character..*/.#
202e0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b  define SQLITE_SK
202f0 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20  IP_UTF8(zIn) {  
20300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20310 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a        \.  if( (*
20320 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29  (zIn++))>=0xc0 )
20330 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
20340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
20350 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49  .    while( (*zI
20360 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20  n & 0xc0)==0x80 
20370 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20  ){ zIn++; }     
20380 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20          \.  }   
20390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203c0 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   \.}../*.** The 
203d0 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61  SQLITE_*_BKPT ma
203e0 63 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74  cros are substit
203f0 75 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72  utes for the err
20400 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a  or codes with.**
20410 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62   the same name b
20420 75 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f  ut without the _
20430 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68  BKPT suffix.  Th
20440 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b  ese macros invok
20450 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68  e.** routines th
20460 61 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69  at report the li
20470 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69  ne-number on whi
20480 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69  ch the error ori
20490 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67  ginated.** using
204a0 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20   sqlite3_log(). 
204b0 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c   The routines al
204c0 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e  so provide a con
204d0 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a  venient place.**
204e0 20 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67   to set a debugg
204f0 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a  er breakpoint..*
20500 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72  /.int sqlite3Cor
20510 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a  ruptError(int);.
20520 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73  int sqlite3Misus
20530 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  eError(int);.int
20540 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
20550 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66  Error(int);.#def
20560 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ine SQLITE_CORRU
20570 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  PT_BKPT sqlite3C
20580 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49  orruptError(__LI
20590 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
205a0 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
205b0 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
205c0 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
205d0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e  efine SQLITE_CAN
205e0 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74  TOPEN_BKPT sqlit
205f0 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
20600 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a  __LINE__).../*.*
20610 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79  * FTS4 is really
20620 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f   an extension fo
20630 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20 65  r FTS3.  It is e
20640 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  nabled using the
20650 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  .** SQLITE_ENABL
20660 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42  E_FTS3 macro.  B
20670 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66  ut to avoid conf
20680 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61  usion we also ca
20690 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  ll.** the SQLITE
206a0 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63  _ENABLE_FTS4 mac
206b0 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61  ro to serve as a
206c0 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49  n alias for SQLI
206d0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a  TE_ENABLE_FTS3..
206e0 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
206f0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
20700 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  4) && !defined(S
20710 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
20720 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  3).# define SQLI
20730 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 31  TE_ENABLE_FTS3 1
20740 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
20750 68 65 20 63 74 79 70 65 2e 68 20 68 65 61 64 65  he ctype.h heade
20760 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20  r is needed for 
20770 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d  non-ASCII system
20780 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a  s.  It is also.*
20790 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54 53 33  * needed by FTS3
207a0 20 77 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e   when FTS3 is in
207b0 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d  cluded in the am
207c0 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23  algamation..*/.#
207d0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
207e0 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20  TE_ASCII) || \. 
207f0 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49     (defined(SQLI
20800 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20  TE_ENABLE_FTS3) 
20810 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
20820 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29  E_AMALGAMATION))
20830 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70  .# include <ctyp
20840 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  e.h>.#endif../*.
20850 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
20860 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68   macros mimic th
20870 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61  e standard libra
20880 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75  ry functions tou
20890 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61  pper(),.** isspa
208a0 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c  ce(), isalnum(),
208b0 20 69 73 64 69 67 69 74 28 29 20 61 6e 64 20 69   isdigit() and i
208c0 73 78 64 69 67 69 74 28 29 2c 20 72 65 73 70 65  sxdigit(), respe
208d0 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20  ctively. The.** 
208e0 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20  sqlite versions 
208f0 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53  only work for AS
20900 43 49 49 20 63 68 61 72 61 63 74 65 72 73 2c 20  CII characters, 
20910 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f  regardless of lo
20920 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  cale..*/.#ifdef 
20930 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64  SQLITE_ASCII.# d
20940 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75  efine sqlite3Tou
20950 70 70 65 72 28 78 29 20 20 28 28 78 29 26 7e 28  pper(x)  ((x)&~(
20960 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
20970 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
20980 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66  x)]&0x20)).# def
20990 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61  ine sqlite3Isspa
209a0 63 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  ce(x)   (sqlite3
209b0 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
209c0 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
209d0 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  1).# define sqli
209e0 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20  te3Isalnum(x)   
209f0 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
20a00 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
20a10 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66  (x)]&0x06).# def
20a20 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70  ine sqlite3Isalp
20a30 68 61 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  ha(x)   (sqlite3
20a40 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
20a50 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
20a60 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  2).# define sqli
20a70 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20  te3Isdigit(x)   
20a80 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
20a90 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
20aa0 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66  (x)]&0x04).# def
20ab0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69  ine sqlite3Isxdi
20ac0 67 69 74 28 78 29 20 20 28 73 71 6c 69 74 65 33  git(x)  (sqlite3
20ad0 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
20ae0 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
20af0 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  8).# define sqli
20b00 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20  te3Tolower(x)   
20b10 28 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c  (sqlite3UpperToL
20b20 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63  ower[(unsigned c
20b30 68 61 72 29 28 78 29 5d 29 0a 23 65 6c 73 65 0a  har)(x)]).#else.
20b40 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20b50 54 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f 75  Toupper(x)   tou
20b60 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63  pper((unsigned c
20b70 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
20b80 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65  e sqlite3Isspace
20b90 28 78 29 20 20 20 69 73 73 70 61 63 65 28 28 75  (x)   isspace((u
20ba0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
20bb0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
20bc0 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69  e3Isalnum(x)   i
20bd0 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64  salnum((unsigned
20be0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
20bf0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70  ine sqlite3Isalp
20c00 68 61 28 78 29 20 20 20 69 73 61 6c 70 68 61 28  ha(x)   isalpha(
20c10 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
20c20 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
20c30 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20  ite3Isdigit(x)  
20c40 20 69 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e   isdigit((unsign
20c50 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
20c60 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78  efine sqlite3Isx
20c70 64 69 67 69 74 28 78 29 20 20 69 73 78 64 69 67  digit(x)  isxdig
20c80 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  it((unsigned cha
20c90 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
20ca0 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78  sqlite3Tolower(x
20cb0 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73  )   tolower((uns
20cc0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
20cd0 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
20ce0 65 33 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a  e3IsIdChar(u8);.
20cf0 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20  ./*.** Internal 
20d00 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79  function prototy
20d10 70 65 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73  pes.*/.#define s
20d20 71 6c 69 74 65 33 53 74 72 49 43 6d 70 20 73 71  qlite3StrICmp sq
20d30 6c 69 74 65 33 5f 73 74 72 69 63 6d 70 0a 69 6e  lite3_stricmp.in
20d40 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  t sqlite3Strlen3
20d50 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  0(const char*);.
20d60 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
20d70 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f  trNICmp sqlite3_
20d80 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71  strnicmp..int sq
20d90 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28  lite3MallocInit(
20da0 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
20db0 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69  te3MallocEnd(voi
20dc0 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  d);.void *sqlite
20dd0 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f  3Malloc(u64);.vo
20de0 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
20df0 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64  cZero(u64);.void
20e00 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
20e10 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20  cZero(sqlite3*, 
20e20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
20e30 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73  te3DbMallocRaw(s
20e40 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63  qlite3*, u64);.c
20e50 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74  har *sqlite3DbSt
20e60 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f  rDup(sqlite3*,co
20e70 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72  nst char*);.char
20e80 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44   *sqlite3DbStrND
20e90 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
20ea0 74 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 76  t char*, u64);.v
20eb0 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c  oid *sqlite3Real
20ec0 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36 34 29 3b  loc(void*, u64);
20ed0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
20ee0 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71  ReallocOrFree(sq
20ef0 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c  lite3 *, void *,
20f00 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
20f10 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28 73 71  ite3DbRealloc(sq
20f20 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c  lite3 *, void *,
20f30 20 75 36 34 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u64);.void sqli
20f40 74 65 33 44 62 46 72 65 65 28 73 71 6c 69 74 65  te3DbFree(sqlite
20f50 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20  3*, void*);.int 
20f60 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a  sqlite3MallocSiz
20f70 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71  e(void*);.int sq
20f80 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a  lite3DbMallocSiz
20f90 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  e(sqlite3*, void
20fa0 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  *);.void *sqlite
20fb0 33 53 63 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69  3ScratchMalloc(i
20fc0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
20fd0 33 53 63 72 61 74 63 68 46 72 65 65 28 76 6f 69  3ScratchFree(voi
20fe0 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  d*);.void *sqlit
20ff0 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74  e3PageMalloc(int
21000 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
21010 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a  ageFree(void*);.
21020 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53  void sqlite3MemS
21030 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b  etDefault(void);
21040 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 6e  .void sqlite3Ben
21050 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76  ignMallocHooks(v
21060 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c 20 76  oid (*)(void), v
21070 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a  oid (*)(void));.
21080 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e  int sqlite3HeapN
21090 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b  earlyFull(void);
210a0 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65  ../*.** On syste
210b0 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74  ms with ample st
210c0 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68  ack space and th
210d0 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63  at support alloc
210e0 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65  a(), make.** use
210f0 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20   of alloca() to 
21100 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72  obtain space for
21110 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63   large automatic
21120 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65   objects.  By de
21130 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e  fault,.** obtain
21140 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c   space from mall
21150 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  oc()..**.** The 
21160 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65  alloca() routine
21170 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e   never returns N
21180 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20  ULL.  This will 
21190 63 61 75 73 65 20 63 6f 64 65 20 70 61 74 68 73  cause code paths
211a0 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69  .** that deal wi
211b0 74 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  th sqlite3StackA
211c0 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20  lloc() failures 
211d0 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c  to be unreachabl
211e0 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  e..*/.#ifdef SQL
211f0 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23  ITE_USE_ALLOCA.#
21200 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
21210 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e  tackAllocRaw(D,N
21220 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20  )   alloca(N).# 
21230 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
21240 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e  ackAllocZero(D,N
21250 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61  )  memset(alloca
21260 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66  (N), 0, N).# def
21270 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
21280 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20  Free(D,P)       
21290 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
212a0 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
212b0 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71 6c 69  cRaw(D,N)   sqli
212c0 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44  te3DbMallocRaw(D
212d0 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,N).# define sql
212e0 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65  ite3StackAllocZe
212f0 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74 65 33  ro(D,N)  sqlite3
21300 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e  DbMallocZero(D,N
21310 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
21320 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29  e3StackFree(D,P)
21330 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
21340 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64 69 66  Free(D,P).#endif
21350 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
21360 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63  ENABLE_MEMSYS3.c
21370 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d  onst sqlite3_mem
21380 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65  _methods *sqlite
21390 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76  3MemGetMemsys3(v
213a0 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  oid);.#endif.#if
213b0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
213c0 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20  E_MEMSYS5.const 
213d0 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
213e0 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47  ods *sqlite3MemG
213f0 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b  etMemsys5(void);
21400 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65  .#endif...#ifnde
21410 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f  f SQLITE_MUTEX_O
21420 4d 49 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  MIT.  sqlite3_mu
21430 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73  tex_methods cons
21440 74 20 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c  t *sqlite3Defaul
21450 74 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20  tMutex(void);.  
21460 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
21470 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c  thods const *sql
21480 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f  ite3NoopMutex(vo
21490 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  id);.  sqlite3_m
214a0 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74  utex *sqlite3Mut
214b0 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20  exAlloc(int);.  
214c0 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78  int sqlite3Mutex
214d0 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e  Init(void);.  in
214e0 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e  t sqlite3MutexEn
214f0 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  d(void);.#endif.
21500 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73  .sqlite3_int64 s
21510 71 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c 75  qlite3StatusValu
21520 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  e(int);.void sql
21530 69 74 65 33 53 74 61 74 75 73 55 70 28 69 6e 74  ite3StatusUp(int
21540 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
21550 69 74 65 33 53 74 61 74 75 73 44 6f 77 6e 28 69  ite3StatusDown(i
21560 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
21570 71 6c 69 74 65 33 53 74 61 74 75 73 53 65 74 28  qlite3StatusSet(
21580 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 2f 2a 20 41  int, int);../* A
21590 63 63 65 73 73 20 74 6f 20 6d 75 74 65 78 65 73  ccess to mutexes
215a0 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
215b0 5f 73 74 61 74 75 73 28 29 20 2a 2f 0a 73 71 6c  _status() */.sql
215c0 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69  ite3_mutex *sqli
215d0 74 65 33 50 63 61 63 68 65 31 4d 75 74 65 78 28  te3Pcache1Mutex(
215e0 76 6f 69 64 29 3b 0a 73 71 6c 69 74 65 33 5f 6d  void);.sqlite3_m
215f0 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 61 6c  utex *sqlite3Mal
21600 6c 6f 63 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  locMutex(void);.
21610 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
21620 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
21630 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  INT.  int sqlite
21640 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a  3IsNaN(double);.
21650 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
21660 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20  qlite3IsNaN(X)  
21670 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
21680 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
21690 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
216a0 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66  ucture holds inf
216b0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53  ormation about S
216c0 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20  QL.** functions 
216d0 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61  arguments that a
216e0 72 65 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  re the parameter
216f0 73 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28  s to the printf(
21700 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73  ) function..*/.s
21710 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75  truct PrintfArgu
21720 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41  ments {.  int nA
21730 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
21740 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62     /* Total numb
21750 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
21760 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20  */.  int nUsed; 
21770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21780 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
21790 65 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61 72  ents used so far
217a0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61   */.  sqlite3_va
217b0 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f  lue **apArg;   /
217c0 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76  * The argument v
217d0 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 23 64 65  alues */.};..#de
217e0 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
217f0 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31  TF_INTERNAL 0x01
21800 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
21810 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20  PRINTF_SQLFUNC  
21820 30 78 30 32 0a 76 6f 69 64 20 73 71 6c 69 74 65  0x02.void sqlite
21830 33 56 58 50 72 69 6e 74 66 28 53 74 72 41 63 63  3VXPrintf(StrAcc
21840 75 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20  um*, u32, const 
21850 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b  char*, va_list);
21860 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72  .void sqlite3XPr
21870 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20  intf(StrAccum*, 
21880 75 33 32 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  u32, const char*
21890 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71  , ...);.char *sq
218a0 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c  lite3MPrintf(sql
218b0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
218c0 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73  *, ...);.char *s
218d0 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73  qlite3VMPrintf(s
218e0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
218f0 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 63  ar*, va_list);.c
21900 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 41 70 70  har *sqlite3MApp
21910 65 6e 64 66 28 73 71 6c 69 74 65 33 2a 2c 63 68  endf(sqlite3*,ch
21920 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
21930 2e 2e 2e 29 3b 0a 23 69 66 20 64 65 66 69 6e 65  ...);.#if define
21940 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
21950 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
21960 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29  E_HAVE_OS_TRACE)
21970 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
21980 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74  ebugPrintf(const
21990 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65   char*, ...);.#e
219a0 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
219b0 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20  (SQLITE_TEST).  
219c0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73  void *sqlite3Tes
219d0 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74  tTextToPtr(const
219e0 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
219f0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
21a00 49 54 45 5f 44 45 42 55 47 29 0a 20 20 54 72 65  ITE_DEBUG).  Tre
21a10 65 56 69 65 77 20 2a 73 71 6c 69 74 65 33 54 72  eView *sqlite3Tr
21a20 65 65 56 69 65 77 50 75 73 68 28 54 72 65 65 56  eeViewPush(TreeV
21a30 69 65 77 2a 2c 75 38 29 3b 0a 20 20 76 6f 69 64  iew*,u8);.  void
21a40 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
21a50 50 6f 70 28 54 72 65 65 56 69 65 77 2a 29 3b 0a  Pop(TreeView*);.
21a60 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
21a70 65 65 56 69 65 77 4c 69 6e 65 28 54 72 65 65 56  eeViewLine(TreeV
21a80 69 65 77 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  iew*, const char
21a90 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 76 6f 69 64 20  *, ...);.  void 
21aa0 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 49  sqlite3TreeViewI
21ab0 74 65 6d 28 54 72 65 65 56 69 65 77 2a 2c 20 63  tem(TreeView*, c
21ac0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 38 29 3b  onst char*, u8);
21ad0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
21ae0 72 65 65 56 69 65 77 45 78 70 72 28 54 72 65 65  reeViewExpr(Tree
21af0 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70  View*, const Exp
21b00 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20  r*, u8);.  void 
21b10 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45  sqlite3TreeViewE
21b20 78 70 72 4c 69 73 74 28 54 72 65 65 56 69 65 77  xprList(TreeView
21b30 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69 73  *, const ExprLis
21b40 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68  t*, u8, const ch
21b50 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
21b60 69 74 65 33 54 72 65 65 56 69 65 77 53 65 6c 65  ite3TreeViewSele
21b70 63 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  ct(TreeView*, co
21b80 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20 75 38 29  nst Select*, u8)
21b90 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20  ;.#endif...void 
21ba0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
21bb0 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65  (char **, sqlite
21bc0 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  3*, const char*,
21bd0 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69   ...);.void sqli
21be0 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73  te3ErrorMsg(Pars
21bf0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
21c00 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69 74   ...);.int sqlit
21c10 65 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29  e3Dequote(char*)
21c20 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79  ;.int sqlite3Key
21c30 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75  wordCode(const u
21c40 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69  nsigned char*, i
21c50 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
21c60 52 75 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a  RunParser(Parse*
21c70 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
21c80 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  har **);.void sq
21c90 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e  lite3FinishCodin
21ca0 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73  g(Parse*);.int s
21cb0 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65 67  qlite3GetTempReg
21cc0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
21cd0 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d  qlite3ReleaseTem
21ce0 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29  pReg(Parse*,int)
21cf0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
21d00 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a  TempRange(Parse*
21d10 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
21d20 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61  te3ReleaseTempRa
21d30 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69  nge(Parse*,int,i
21d40 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21d50 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63  3ClearTempRegCac
21d60 68 65 28 50 61 72 73 65 2a 29 3b 0a 45 78 70 72  he(Parse*);.Expr
21d70 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c   *sqlite3ExprAll
21d80 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  oc(sqlite3*,int,
21d90 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74  const Token*,int
21da0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
21db0 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  Expr(sqlite3*,in
21dc0 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
21dd0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
21de0 41 74 74 61 63 68 53 75 62 74 72 65 65 73 28 73  AttachSubtrees(s
21df0 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78  qlite3*,Expr*,Ex
21e00 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72  pr*,Expr*);.Expr
21e10 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28 50   *sqlite3PExpr(P
21e20 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72  arse*, int, Expr
21e30 2a 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20  *, Expr*, const 
21e40 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73  Token*);.Expr *s
21e50 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73 71  qlite3ExprAnd(sq
21e60 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78  lite3*,Expr*, Ex
21e70 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
21e80 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28  te3ExprFunction(
21e90 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
21ea0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
21eb0 73 71 6c 69 74 65 33 45 78 70 72 41 73 73 69 67  sqlite3ExprAssig
21ec0 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65  nVarNumber(Parse
21ed0 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
21ee0 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74  sqlite3ExprDelet
21ef0 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72  e(sqlite3*, Expr
21f00 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  *);.ExprList *sq
21f10 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70  lite3ExprListApp
21f20 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  end(Parse*,ExprL
21f30 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69  ist*,Expr*);.voi
21f40 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
21f50 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c  tSetName(Parse*,
21f60 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a  ExprList*,Token*
21f70 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
21f80 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 70  te3ExprListSetSp
21f90 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  an(Parse*,ExprLi
21fa0 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a  st*,ExprSpan*);.
21fb0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
21fc0 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
21fd0 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  e3*, ExprList*);
21fe0 0a 75 33 32 20 73 71 6c 69 74 65 33 45 78 70 72  .u32 sqlite3Expr
21ff0 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e 73 74 20  ListFlags(const 
22000 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
22010 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69  sqlite3Init(sqli
22020 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69  te3*, char**);.i
22030 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  nt sqlite3InitCa
22040 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e  llback(void*, in
22050 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a  t, char**, char*
22060 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22070 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f  Pragma(Parse*,To
22080 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  ken*,Token*,Toke
22090 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  n*,int);.void sq
220a0 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
220b0 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
220c0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
220d0 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65   sqlite3ResetOne
220e0 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c  Schema(sqlite3*,
220f0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
22100 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61  e3CollapseDataba
22110 73 65 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a  seArray(sqlite3*
22120 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
22130 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a  eginParse(Parse*
22140 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
22150 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61  te3CommitInterna
22160 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  lChanges(sqlite3
22170 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
22180 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c  e3ResultSetOfSel
22190 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63  ect(Parse*,Selec
221a0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
221b0 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65  3OpenMasterTable
221c0 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a  (Parse *, int);.
221d0 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72  Index *sqlite3Pr
221e0 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61  imaryKeyIndex(Ta
221f0 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74  ble*);.i16 sqlit
22200 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28  e3ColumnOfIndex(
22210 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f  Index*, i16);.vo
22220 69 64 20 73 71 6c 69 74 65 33 53 74 61 72 74 54  id sqlite3StartT
22230 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  able(Parse*,Toke
22240 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e  n*,Token*,int,in
22250 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  t,int,int);.void
22260 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d   sqlite3AddColum
22270 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29  n(Parse*,Token*)
22280 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
22290 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c  dNotNull(Parse*,
222a0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
222b0 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79  te3AddPrimaryKey
222c0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
222d0 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  t*, int, int, in
222e0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
222f0 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69  AddCheckConstrai
22300 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  nt(Parse*, Expr*
22310 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
22320 64 64 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72  ddColumnType(Par
22330 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  se*,Token*);.voi
22340 64 20 73 71 6c 69 74 65 33 41 64 64 44 65 66 61  d sqlite3AddDefa
22350 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c  ultValue(Parse*,
22360 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64  ExprSpan*);.void
22370 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61   sqlite3AddColla
22380 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54  teType(Parse*, T
22390 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
223a0 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72  ite3EndTable(Par
223b0 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
223c0 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69  *,u8,Select*);.i
223d0 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 55  nt sqlite3ParseU
223e0 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  ri(const char*,c
223f0 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67  onst char*,unsig
22400 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20  ned int*,.      
22410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
22420 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72  lite3_vfs**,char
22430 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72  **,char **);.Btr
22440 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d  ee *sqlite3DbNam
22450 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33  eToBtree(sqlite3
22460 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
22470 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 4f  int sqlite3CodeO
22480 6e 63 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 23  nce(Parse *);..#
22490 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
224a0 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23  T_BUILTIN_TEST.#
224b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46   define sqlite3F
224c0 61 75 6c 74 53 69 6d 28 58 29 20 53 51 4c 49 54  aultSim(X) SQLIT
224d0 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74  E_OK.#else.  int
224e0 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
224f0 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42  (int);.#endif..B
22500 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33 42 69  itvec *sqlite3Bi
22510 74 76 65 63 43 72 65 61 74 65 28 75 33 32 29 3b  tvecCreate(u32);
22520 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
22530 65 63 54 65 73 74 28 42 69 74 76 65 63 2a 2c 20  ecTest(Bitvec*, 
22540 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
22550 33 42 69 74 76 65 63 53 65 74 28 42 69 74 76 65  3BitvecSet(Bitve
22560 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73  c*, u32);.void s
22570 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65 61  qlite3BitvecClea
22580 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20  r(Bitvec*, u32, 
22590 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
225a0 69 74 65 33 42 69 74 76 65 63 44 65 73 74 72 6f  ite3BitvecDestro
225b0 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20  y(Bitvec*);.u32 
225c0 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a  sqlite3BitvecSiz
225d0 65 28 42 69 74 76 65 63 2a 29 3b 0a 69 6e 74 20  e(Bitvec*);.int 
225e0 73 71 6c 69 74 65 33 42 69 74 76 65 63 42 75 69  sqlite3BitvecBui
225f0 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74  ltinTest(int,int
22600 2a 29 3b 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c  *);..RowSet *sql
22610 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28 73  ite3RowSetInit(s
22620 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c 20  qlite3*, void*, 
22630 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a 76  unsigned int);.v
22640 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65  oid sqlite3RowSe
22650 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a 29 3b  tClear(RowSet*);
22660 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
22670 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74  SetInsert(RowSet
22680 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  *, i64);.int sql
22690 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 52  ite3RowSetTest(R
226a0 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61 74  owSet*, int iBat
226b0 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71  ch, i64);.int sq
226c0 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28  lite3RowSetNext(
226d0 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a  RowSet*, i64*);.
226e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65  .void sqlite3Cre
226f0 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54  ateView(Parse*,T
22700 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  oken*,Token*,Tok
22710 65 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c  en*,Select*,int,
22720 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69  int);..#if !defi
22730 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
22740 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65  VIEW) || !define
22750 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
22760 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e  RTUALTABLE).  in
22770 74 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74  t sqlite3ViewGet
22780 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73  ColumnNames(Pars
22790 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73  e*,Table*);.#els
227a0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
227b0 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e  e3ViewGetColumnN
227c0 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64  ames(A,B) 0.#end
227d0 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  if..#if SQLITE_M
227e0 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20  AX_ATTACHED>30. 
227f0 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61   int sqlite3DbMa
22800 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73  skAllZero(yDbMas
22810 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  k);.#endif.void 
22820 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65  sqlite3DropTable
22830 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
22840 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
22850 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72  id sqlite3CodeDr
22860 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  opTable(Parse*, 
22870 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
22880 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
22890 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
228a0 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69  e3*, Table*);.#i
228b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
228c0 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
228d0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
228e0 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e  toincrementBegin
228f0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
22900 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
22910 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
22920 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
22930 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
22940 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
22950 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65  entBegin(X).# de
22960 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f  fine sqlite3Auto
22970 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a  incrementEnd(X).
22980 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
22990 74 65 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a  te3Insert(Parse*
229a0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65  , SrcList*, Sele
229b0 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e  ct*, IdList*, in
229c0 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
229d0 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73  3ArrayAllocate(s
229e0 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e  qlite3*,void*,in
229f0 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64  t,int*,int*);.Id
22a00 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c  List *sqlite3IdL
22a10 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65  istAppend(sqlite
22a20 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b  3*, IdList*, Tok
22a30 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
22a40 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c  3IdListIndex(IdL
22a50 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ist*,const char*
22a60 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
22a70 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67  te3SrcListEnlarg
22a80 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  e(sqlite3*, SrcL
22a90 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
22aa0 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
22ab0 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73  3SrcListAppend(s
22ac0 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
22ad0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
22ae0 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  *);.SrcList *sql
22af0 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e  ite3SrcListAppen
22b00 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a  dFromTerm(Parse*
22b10 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
22b20 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20  n*, Token*,.    
22b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b50 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74    Token*, Select
22b60 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74  *, Expr*, IdList
22b70 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22b80 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79  SrcListIndexedBy
22b90 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73  (Parse *, SrcLis
22ba0 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69  t *, Token *);.i
22bb0 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65  nt sqlite3Indexe
22bc0 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20  dByLookup(Parse 
22bd0 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69 73  *, struct SrcLis
22be0 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20  t_item *);.void 
22bf0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68  sqlite3SrcListSh
22c00 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c  iftJoinType(SrcL
22c10 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
22c20 74 65 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e  te3SrcListAssign
22c30 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20  Cursors(Parse*, 
22c40 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20  SrcList*);.void 
22c50 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c  sqlite3IdListDel
22c60 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64  ete(sqlite3*, Id
22c70 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
22c80 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74  ite3SrcListDelet
22c90 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  e(sqlite3*, SrcL
22ca0 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71  ist*);.Index *sq
22cb0 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64  lite3AllocateInd
22cc0 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33  exObject(sqlite3
22cd0 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a  *,i16,int,char**
22ce0 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
22cf0 33 43 72 65 61 74 65 49 6e 64 65 78 28 50 61 72  3CreateIndex(Par
22d00 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
22d10 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c  *,SrcList*,ExprL
22d20 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c  ist*,int,Token*,
22d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22d40 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a             Expr*
22d50 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
22d60 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64  d sqlite3DropInd
22d70 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  ex(Parse*, SrcLi
22d80 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  st*, int);.int s
22d90 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61 72  qlite3Select(Par
22da0 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65  se*, Select*, Se
22db0 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65  lectDest*);.Sele
22dc0 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63  ct *sqlite3Selec
22dd0 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72  tNew(Parse*,Expr
22de0 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  List*,SrcList*,E
22df0 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a  xpr*,ExprList*,.
22e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e10 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45           Expr*,E
22e20 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45 78 70  xprList*,u16,Exp
22e30 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  r*,Expr*);.void 
22e40 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c  sqlite3SelectDel
22e50 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65  ete(sqlite3*, Se
22e60 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  lect*);.Table *s
22e70 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f  qlite3SrcListLoo
22e80 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  kup(Parse*, SrcL
22e90 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
22ea0 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72  e3IsReadOnly(Par
22eb0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
22ec0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
22ed0 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  penTable(Parse*,
22ee0 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69   int iCur, int i
22ef0 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  Db, Table*, int)
22f00 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
22f10 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41  LITE_ENABLE_UPDA
22f20 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29  TE_DELETE_LIMIT)
22f30 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
22f40 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52  ITE_OMIT_SUBQUER
22f50 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  Y).Expr *sqlite3
22f60 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72 73 65  LimitWhere(Parse
22f70 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
22f80 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
22f90 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23  ,Expr*,char*);.#
22fa0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
22fb0 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72  e3DeleteFrom(Par
22fc0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45  se*, SrcList*, E
22fd0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
22fe0 74 65 33 55 70 64 61 74 65 28 50 61 72 73 65 2a  te3Update(Parse*
22ff0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
23000 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  List*, Expr*, in
23010 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73  t);.WhereInfo *s
23020 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e  qlite3WhereBegin
23030 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a  (Parse*,SrcList*
23040 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
23050 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69  ,ExprList*,u16,i
23060 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
23070 33 57 68 65 72 65 45 6e 64 28 57 68 65 72 65 49  3WhereEnd(WhereI
23080 6e 66 6f 2a 29 3b 0a 75 36 34 20 73 71 6c 69 74  nfo*);.u64 sqlit
23090 65 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77  e3WhereOutputRow
230a0 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a  Count(WhereInfo*
230b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
230c0 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 57 68  ereIsDistinct(Wh
230d0 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
230e0 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72 64  qlite3WhereIsOrd
230f0 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  ered(WhereInfo*)
23100 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
23110 72 65 49 73 53 6f 72 74 65 64 28 57 68 65 72 65  reIsSorted(Where
23120 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
23130 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65  te3WhereContinue
23140 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a  Label(WhereInfo*
23150 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
23160 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68  ereBreakLabel(Wh
23170 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
23180 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65  qlite3WhereOkOne
23190 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c  Pass(WhereInfo*,
231a0 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
231b0 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
231c0 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62  lumn(Parse*, Tab
231d0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
231e0 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  nt, u8);.void sq
231f0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
23200 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64  ColumnOfTable(Vd
23210 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  be*, Table*, int
23220 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
23230 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
23240 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e  eMove(Parse*, in
23250 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
23260 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
23270 63 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a 2c  cheStore(Parse*,
23280 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
23290 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
232a0 72 43 61 63 68 65 50 75 73 68 28 50 61 72 73 65  rCachePush(Parse
232b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
232c0 45 78 70 72 43 61 63 68 65 50 6f 70 28 50 61 72  ExprCachePop(Par
232d0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
232e0 65 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f 76  e3ExprCacheRemov
232f0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
23300 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
23310 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72 28  3ExprCacheClear(
23320 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
23330 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 41 66  lite3ExprCacheAf
23340 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61 72  finityChange(Par
23350 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
23360 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23370 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70  Code(Parse*, Exp
23380 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
23390 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46 61  qlite3ExprCodeFa
233a0 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c  ctorable(Parse*,
233b0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
233c0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
233d0 64 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c  deAtInit(Parse*,
233e0 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38 29   Expr*, int, u8)
233f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
23400 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a  rCodeTemp(Parse*
23410 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  , Expr*, int*);.
23420 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
23430 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65 2a  odeTarget(Parse*
23440 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
23450 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
23460 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73  odeAndCache(Pars
23470 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
23480 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
23490 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72  CodeExprList(Par
234a0 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
234b0 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e  int, u8);.#defin
234c0 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55  e SQLITE_ECEL_DU
234d0 50 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20  P      0x01  /* 
234e0 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f  Deep, not shallo
234f0 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66  w copies */.#def
23500 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
23510 46 41 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f  FACTOR   0x02  /
23520 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e  * Factor out con
23530 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 76  stant terms */.v
23540 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
23550 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78  fTrue(Parse*, Ex
23560 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
23570 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23580 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20  IfFalse(Parse*, 
23590 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
235a0 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
235b0 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65  FindTable(sqlite
235c0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
235d0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61  const char*);.Ta
235e0 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  ble *sqlite3Loca
235f0 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 69  teTable(Parse*,i
23600 6e 74 20 69 73 56 69 65 77 2c 63 6f 6e 73 74 20  nt isView,const 
23610 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
23620 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  r*);.Table *sqli
23630 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74  te3LocateTableIt
23640 65 6d 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73  em(Parse*,int is
23650 56 69 65 77 2c 73 74 72 75 63 74 20 53 72 63 4c  View,struct SrcL
23660 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64  ist_item *);.Ind
23670 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49  ex *sqlite3FindI
23680 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f  ndex(sqlite3*,co
23690 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
236a0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
236b0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
236c0 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65  leteTable(sqlite
236d0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
236e0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
236f0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
23700 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69  Index(sqlite3*,i
23710 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
23720 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63  .void sqlite3Vac
23730 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74  uum(Parse*);.int
23740 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75   sqlite3RunVacuu
23750 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65  m(char**, sqlite
23760 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  3*);.char *sqlit
23770 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28  e3NameFromToken(
23780 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a  sqlite3*, Token*
23790 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
237a0 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c  prCompare(Expr*,
237b0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
237c0 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  t sqlite3ExprLis
237d0 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73  tCompare(ExprLis
237e0 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  t*, ExprList*, i
237f0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
23800 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28  ExprImpliesExpr(
23810 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
23820 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
23830 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65  ExprAnalyzeAggre
23840 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  gates(NameContex
23850 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
23860 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c   sqlite3ExprAnal
23870 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43  yzeAggList(NameC
23880 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74  ontext*,ExprList
23890 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
238a0 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53  unctionUsesThisS
238b0 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73  rc(Expr*, SrcLis
238c0 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74  t*);.Vdbe *sqlit
238d0 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65 2a  e3GetVdbe(Parse*
238e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
238f0 72 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f 69  rngSaveState(voi
23900 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
23910 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65  PrngRestoreState
23920 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
23930 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28  ite3RollbackAll(
23940 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
23950 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56  oid sqlite3CodeV
23960 65 72 69 66 79 53 63 68 65 6d 61 28 50 61 72 73  erifySchema(Pars
23970 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
23980 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
23990 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73  NamedSchema(Pars
239a0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  e*, const char *
239b0 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  zDb);.void sqlit
239c0 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69  e3BeginTransacti
239d0 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  on(Parse*, int);
239e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
239f0 6d 69 74 54 72 61 6e 73 61 63 74 69 6f 6e 28 50  mitTransaction(P
23a00 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
23a10 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e  ite3RollbackTran
23a20 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b  saction(Parse*);
23a30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76  .void sqlite3Sav
23a40 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  epoint(Parse*, i
23a50 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  nt, Token*);.voi
23a60 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61  d sqlite3CloseSa
23a70 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33  vepoints(sqlite3
23a80 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
23a90 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c  3LeaveMutexAndCl
23aa0 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65  oseZombie(sqlite
23ab0 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
23ac0 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45  ExprIsConstant(E
23ad0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
23ae0 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
23af0 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a  NotJoin(Expr*);.
23b00 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
23b10 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74  sConstantOrFunct
23b20 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a  ion(Expr*, u8);.
23b30 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
23b40 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45  sTableConstant(E
23b50 78 70 72 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  xpr*,int);.int s
23b60 71 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74 65  qlite3ExprIsInte
23b70 67 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29  ger(Expr*, int*)
23b80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
23b90 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74  rCanBeNull(const
23ba0 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
23bb0 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41  ite3ExprNeedsNoA
23bc0 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f  ffinityChange(co
23bd0 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29  nst Expr*, char)
23be0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52  ;.int sqlite3IsR
23bf0 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a  owid(const char*
23c00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
23c10 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65  enerateRowDelete
23c20 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54  (Parse*,Table*,T
23c30 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c  rigger*,int,int,
23c40 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38  int,i16,u8,u8,u8
23c50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
23c60 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44  enerateRowIndexD
23c70 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61  elete(Parse*, Ta
23c80 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
23c90 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
23ca0 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b  e3GenerateIndexK
23cb0 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78  ey(Parse*, Index
23cc0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
23cd0 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e  , int*,Index*,in
23ce0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
23cf0 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61  ResolvePartIdxLa
23d00 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  bel(Parse*,int);
23d10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
23d20 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43  erateConstraintC
23d30 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62  hecks(Parse*,Tab
23d40 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74  le*,int*,int,int
23d50 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20  ,int,int,.      
23d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
23d80 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a  8,u8,int,int*);.
23d90 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70  void sqlite3Comp
23da0 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61  leteInsertion(Pa
23db0 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c  rse*,Table*,int,
23dc0 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74  int,int,int*,int
23dd0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  ,int,int);.int s
23de0 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41  qlite3OpenTableA
23df0 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a  ndIndices(Parse*
23e00 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
23e10 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69  nt, u8*, int*, i
23e20 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  nt*);.void sqlit
23e30 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72  e3BeginWriteOper
23e40 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e  ation(Parse*, in
23e50 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
23e60 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28  lite3MultiWrite(
23e70 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
23e80 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61  lite3MayAbort(Pa
23e90 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
23ea0 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e  te3HaltConstrain
23eb0 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  t(Parse*, int, i
23ec0 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75  nt, char*, i8, u
23ed0 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
23ee0 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74  UniqueConstraint
23ef0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e  (Parse*, int, In
23f00 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
23f10 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69  te3RowidConstrai
23f20 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
23f30 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73  Table*);.Expr *s
23f40 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 73 71  qlite3ExprDup(sq
23f50 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74  lite3*,Expr*,int
23f60 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c  );.ExprList *sql
23f70 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70 28  ite3ExprListDup(
23f80 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73  sqlite3*,ExprLis
23f90 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74  t*,int);.SrcList
23fa0 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
23fb0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63  Dup(sqlite3*,Src
23fc0 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69  List*,int);.IdLi
23fd0 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73  st *sqlite3IdLis
23fe0 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64  tDup(sqlite3*,Id
23ff0 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a  List*);.Select *
24000 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70  sqlite3SelectDup
24010 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74  (sqlite3*,Select
24020 2a 2c 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c 45  *,int);.#if SELE
24030 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a  CTTRACE_ENABLED.
24040 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
24050 63 74 53 65 74 4e 61 6d 65 28 53 65 6c 65 63 74  ctSetName(Select
24060 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
24070 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
24080 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e  qlite3SelectSetN
24090 61 6d 65 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a  ame(A,B).#endif.
240a0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 75 6e 63  void sqlite3Func
240b0 44 65 66 49 6e 73 65 72 74 28 46 75 6e 63 44 65  DefInsert(FuncDe
240c0 66 48 61 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a  fHash*, FuncDef*
240d0 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69  );.FuncDef *sqli
240e0 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28  te3FindFunction(
240f0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
24100 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c  har*,int,int,u8,
24110 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
24120 33 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e  3RegisterBuiltin
24130 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65  Functions(sqlite
24140 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
24150 33 52 65 67 69 73 74 65 72 44 61 74 65 54 69 6d  3RegisterDateTim
24160 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  eFunctions(void)
24170 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
24180 67 69 73 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63  gisterGlobalFunc
24190 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74  tions(void);.int
241a0 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
241b0 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b  eckOk(sqlite3*);
241c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
241d0 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28  tyCheckSickOrOk(
241e0 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
241f0 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f  sqlite3ChangeCoo
24200 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  kie(Parse*, int)
24210 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ;..#if !defined(
24220 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57  SQLITE_OMIT_VIEW
24230 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
24240 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
24250 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  R).void sqlite3M
24260 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50  aterializeView(P
24270 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
24280 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64  xpr*, int);.#end
24290 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
242a0 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a  TE_OMIT_TRIGGER.
242b0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65    void sqlite3Be
242c0 67 69 6e 54 72 69 67 67 65 72 28 50 61 72 73 65  ginTrigger(Parse
242d0 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  *, Token*,Token*
242e0 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a  ,int,int,IdList*
242f0 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20  ,SrcList*,.     
24300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24310 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c        Expr*,int,
24320 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
24330 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69 67 67  lite3FinishTrigg
24340 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
24350 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29  erStep*, Token*)
24360 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
24370 44 72 6f 70 54 72 69 67 67 65 72 28 50 61 72 73  DropTrigger(Pars
24380 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
24390 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
243a0 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72  e3DropTriggerPtr
243b0 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
243c0 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73  *);.  Trigger *s
243d0 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78  qlite3TriggersEx
243e0 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62  ist(Parse *, Tab
243f0 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  le*, int, ExprLi
24400 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29  st*, int *pMask)
24410 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c  ;.  Trigger *sql
24420 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28  ite3TriggerList(
24430 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a  Parse *, Table *
24440 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
24450 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28  3CodeRowTrigger(
24460 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20  Parse*, Trigger 
24470 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
24480 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c  *, int, Table *,
24490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
244a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
244b0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  , int, int);.  v
244c0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52  oid sqlite3CodeR
244d0 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28  owTriggerDirect(
244e0 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72  Parse *, Trigger
244f0 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74   *, Table *, int
24500 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  , int, int);.  v
24510 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77 54 72  oid sqliteViewTr
24520 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54  iggers(Parse*, T
24530 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  able*, Expr*, in
24540 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20  t, ExprList*);. 
24550 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c   void sqlite3Del
24560 65 74 65 54 72 69 67 67 65 72 53 74 65 70 28 73  eteTriggerStep(s
24570 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72  qlite3*, Trigger
24580 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65  Step*);.  Trigge
24590 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
245a0 69 67 67 65 72 53 65 6c 65 63 74 53 74 65 70 28  iggerSelectStep(
245b0 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a  sqlite3*,Select*
245c0 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
245d0 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
245e0 49 6e 73 65 72 74 53 74 65 70 28 73 71 6c 69 74  InsertStep(sqlit
245f0 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69  e3*,Token*, IdLi
24600 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
24610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24620 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65 6c               Sel
24630 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67  ect*,u8);.  Trig
24640 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
24650 54 72 69 67 67 65 72 55 70 64 61 74 65 53 74 65  TriggerUpdateSte
24660 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
24670 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  *,ExprList*, Exp
24680 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69 67 67  r*, u8);.  Trigg
24690 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
246a0 72 69 67 67 65 72 44 65 6c 65 74 65 53 74 65 70  riggerDeleteStep
246b0 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a  (sqlite3*,Token*
246c0 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64  , Expr*);.  void
246d0 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
246e0 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 20  igger(sqlite3*, 
246f0 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69  Trigger*);.  voi
24700 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  d sqlite3UnlinkA
24710 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  ndDeleteTrigger(
24720 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
24730 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33 32  st char*);.  u32
24740 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
24750 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54 72  olmask(Parse*,Tr
24760 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a  igger*,ExprList*
24770 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c  ,int,int,Table*,
24780 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 73  int);.# define s
24790 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65  qlite3ParseTople
247a0 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f  vel(p) ((p)->pTo
247b0 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54  plevel ? (p)->pT
247c0 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a 23  oplevel : (p)).#
247d0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
247e0 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69  lite3TriggersExi
247f0 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a  st(B,C,D,E,F) 0.
24800 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24810 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c  DeleteTrigger(A,
24820 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
24830 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74  te3DropTriggerPt
24840 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20  r(A,B).# define 
24850 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
24860 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c  DeleteTrigger(A,
24870 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71  B,C).# define sq
24880 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
24890 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c  ger(A,B,C,D,E,F,
248a0 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20  G,H,I).# define 
248b0 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
248c0 69 67 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c  iggerDirect(A,B,
248d0 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e  C,D,E,F).# defin
248e0 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
248f0 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64  List(X, Y) 0.# d
24900 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72  efine sqlite3Par
24910 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a  seToplevel(p) p.
24920 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24930 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41  TriggerColmask(A
24940 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a  ,B,C,D,E,F,G) 0.
24950 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69  #endif..int sqli
24960 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73  te3JoinType(Pars
24970 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
24980 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  n*, Token*);.voi
24990 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46  d sqlite3CreateF
249a0 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
249b0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b  , ExprList*, Tok
249c0 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  en*, ExprList*, 
249d0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
249e0 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65  e3DeferForeignKe
249f0 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  y(Parse*, int);.
24a00 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
24a10 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f  MIT_AUTHORIZATIO
24a20 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  N.  void sqlite3
24a30 41 75 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c  AuthRead(Parse*,
24a40 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72  Expr*,Schema*,Sr
24a50 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73  cList*);.  int s
24a60 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28  qlite3AuthCheck(
24a70 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73  Parse*,int, cons
24a80 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
24a90 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
24aa0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
24ab0 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73  e3AuthContextPus
24ac0 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f  h(Parse*, AuthCo
24ad0 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68  ntext*, const ch
24ae0 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
24af0 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
24b00 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29  op(AuthContext*)
24b10 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41  ;.  int sqlite3A
24b20 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65  uthReadCol(Parse
24b30 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
24b40 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
24b50 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  nt);.#else.# def
24b60 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 52  ine sqlite3AuthR
24b70 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64  ead(a,b,c,d).# d
24b80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
24b90 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65  hCheck(a,b,c,d,e
24ba0 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  )    SQLITE_OK.#
24bb0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
24bc0 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61  uthContextPush(a
24bd0 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73  ,b,c).# define s
24be0 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
24bf0 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29  tPop(a)  ((void)
24c00 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  (a)).#endif.void
24c10 20 73 71 6c 69 74 65 33 41 74 74 61 63 68 28 50   sqlite3Attach(P
24c20 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78  arse*, Expr*, Ex
24c30 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  pr*, Expr*);.voi
24c40 64 20 73 71 6c 69 74 65 33 44 65 74 61 63 68 28  d sqlite3Detach(
24c50 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
24c60 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 78 49  void sqlite3FixI
24c70 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61  nit(DbFixer*, Pa
24c80 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  rse*, int, const
24c90 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   char*, const To
24ca0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
24cb0 65 33 46 69 78 53 72 63 4c 69 73 74 28 44 62 46  e3FixSrcList(DbF
24cc0 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29  ixer*, SrcList*)
24cd0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
24ce0 53 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c  Select(DbFixer*,
24cf0 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
24d00 71 6c 69 74 65 33 46 69 78 45 78 70 72 28 44 62  qlite3FixExpr(Db
24d10 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  Fixer*, Expr*);.
24d20 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78  int sqlite3FixEx
24d30 70 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c  prList(DbFixer*,
24d40 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
24d50 20 73 71 6c 69 74 65 33 46 69 78 54 72 69 67 67   sqlite3FixTrigg
24d60 65 72 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c  erStep(DbFixer*,
24d70 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a   TriggerStep*);.
24d80 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28  int sqlite3AtoF(
24d90 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64  const char *z, d
24da0 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29  ouble*, int, u8)
24db0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
24dc0 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72  Int32(const char
24dd0 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73   *, int*);.int s
24de0 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74  qlite3Atoi(const
24df0 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
24e00 69 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e  ite3Utf16ByteLen
24e10 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61  (const void *pDa
24e20 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a  ta, int nChar);.
24e30 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 43  int sqlite3Utf8C
24e40 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61  harLen(const cha
24e50 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42  r *pData, int nB
24e60 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  yte);.u32 sqlite
24e70 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20  3Utf8Read(const 
24e80 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71  u8**);.LogEst sq
24e90 6c 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34 29  lite3LogEst(u64)
24ea0 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  ;.LogEst sqlite3
24eb0 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73 74  LogEstAdd(LogEst
24ec0 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64 65  ,LogEst);.#ifnde
24ed0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
24ee0 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73  RTUALTABLE.LogEs
24ef0 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46  t sqlite3LogEstF
24f00 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65  romDouble(double
24f10 29 3b 0a 23 65 6e 64 69 66 0a 75 36 34 20 73 71  );.#endif.u64 sq
24f20 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74  lite3LogEstToInt
24f30 28 4c 6f 67 45 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a  (LogEst);../*.**
24f40 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61   Routines to rea
24f50 64 20 61 6e 64 20 77 72 69 74 65 20 76 61 72 69  d and write vari
24f60 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65  able-length inte
24f70 67 65 72 73 2e 20 20 54 68 65 73 65 20 75 73 65  gers.  These use
24f80 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e  d to.** be defin
24f90 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20  ed locally, but 
24fa0 6e 6f 77 20 77 65 20 75 73 65 20 74 68 65 20 76  now we use the v
24fb0 61 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69  arint routines i
24fc0 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20  n the util.c.** 
24fd0 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  file..*/.int sql
24fe0 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e  ite3PutVarint(un
24ff0 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36  signed char*, u6
25000 34 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65  4);.u8 sqlite3Ge
25010 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e  tVarint(const un
25020 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75  signed char *, u
25030 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65  64 *);.u8 sqlite
25040 33 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e  3GetVarint32(con
25050 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
25060 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20   *, u32 *);.int 
25070 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
25080 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20  (u64 v);../*.** 
25090 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  The common case 
250a0 69 73 20 66 6f 72 20 61 20 76 61 72 69 6e 74 20  is for a varint 
250b0 74 6f 20 62 65 20 61 20 73 69 6e 67 6c 65 20 62  to be a single b
250c0 79 74 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f  yte.  They follo
250d0 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68  wing.** macros h
250e0 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e  andle the common
250f0 20 63 61 73 65 20 77 69 74 68 6f 75 74 20 61 20   case without a 
25100 70 72 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c 20  procedure call, 
25110 62 75 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a  but then call.**
25120 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 66   the procedure f
25130 6f 72 20 6c 61 72 67 65 72 20 76 61 72 69 6e 74  or larger varint
25140 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65  s..*/.#define ge
25150 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20  tVarint32(A,B)  
25160 5c 0a 20 20 28 75 38 29 28 28 2a 28 41 29 3c 28  \.  (u8)((*(A)<(
25170 75 38 29 30 78 38 30 29 3f 28 28 42 29 3d 28 75  u8)0x80)?((B)=(u
25180 33 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74  32)*(A)),1:sqlit
25190 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 28 41  e3GetVarint32((A
251a0 29 2c 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a  ),(u32 *)&(B))).
251b0 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e  #define putVarin
251c0 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75  t32(A,B)  \.  (u
251d0 38 29 28 28 28 75 33 32 29 28 42 29 3c 28 75 33  8)(((u32)(B)<(u3
251e0 32 29 30 78 38 30 29 3f 28 2a 28 41 29 3d 28 75  2)0x80)?(*(A)=(u
251f0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 42 29  nsigned char)(B)
25200 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50  ),1:\.  sqlite3P
25210 75 74 56 61 72 69 6e 74 28 28 41 29 2c 28 42 29  utVarint((A),(B)
25220 29 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61  )).#define getVa
25230 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47  rint    sqlite3G
25240 65 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65  etVarint.#define
25250 20 70 75 74 56 61 72 69 6e 74 20 20 20 20 73 71   putVarint    sq
25260 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a  lite3PutVarint..
25270 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
25280 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74  ite3IndexAffinit
25290 79 53 74 72 28 56 64 62 65 20 2a 2c 20 49 6e 64  yStr(Vdbe *, Ind
252a0 65 78 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ex *);.void sqli
252b0 74 65 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79  te3TableAffinity
252c0 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  (Vdbe*, Table*, 
252d0 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  int);.char sqlit
252e0 65 33 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74  e3CompareAffinit
252f0 79 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63  y(Expr *pExpr, c
25300 68 61 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73  har aff2);.int s
25310 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e  qlite3IndexAffin
25320 69 74 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70  ityOk(Expr *pExp
25330 72 2c 20 63 68 61 72 20 69 64 78 5f 61 66 66 69  r, char idx_affi
25340 6e 69 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69  nity);.char sqli
25350 74 65 33 45 78 70 72 41 66 66 69 6e 69 74 79 28  te3ExprAffinity(
25360 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e  Expr *pExpr);.in
25370 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28  t sqlite3Atoi64(
25380 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34  const char*, i64
25390 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
253a0 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78   sqlite3DecOrHex
253b0 54 6f 49 36 34 28 63 6f 6e 73 74 20 63 68 61 72  ToI64(const char
253c0 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73  *, i64*);.void s
253d0 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d  qlite3ErrorWithM
253e0 73 67 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  sg(sqlite3*, int
253f0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e  , const char*,..
25400 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .);.void sqlite3
25410 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69  Error(sqlite3*,i
25420 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
25430 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69  e3HexToBlob(sqli
25440 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  te3*, const char
25450 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20   *z, int n);.u8 
25460 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28  sqlite3HexToInt(
25470 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69  int h);.int sqli
25480 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50  te3TwoPartName(P
25490 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c  arse *, Token *,
254a0 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20   Token *, Token 
254b0 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65  **);..#if define
254c0 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
254d0 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
254e0 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29  E_HAVE_OS_TRACE)
254f0 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
25500 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74 29  ite3ErrName(int)
25510 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20  ;.#endif..const 
25520 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72  char *sqlite3Err
25530 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  Str(int);.int sq
25540 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
25550 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
25560 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
25570 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69  FindCollSeq(sqli
25580 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e  te3*,u8 enc, con
25590 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43  st char*,int);.C
255a0 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c  ollSeq *sqlite3L
255b0 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72  ocateCollSeq(Par
255c0 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73  se *pParse, cons
255d0 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43  t char*zName);.C
255e0 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45  ollSeq *sqlite3E
255f0 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  xprCollSeq(Parse
25600 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a   *pParse, Expr *
25610 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71  pExpr);.Expr *sq
25620 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c  lite3ExprAddColl
25630 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a  ateToken(Parse *
25640 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 63  pParse, Expr*, c
25650 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74  onst Token*, int
25660 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
25670 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 53 74  ExprAddCollateSt
25680 72 69 6e 67 28 50 61 72 73 65 2a 2c 45 78 70 72  ring(Parse*,Expr
25690 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
256a0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
256b0 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78 70  rSkipCollate(Exp
256c0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
256d0 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72  CheckCollSeq(Par
256e0 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29  se *, CollSeq *)
256f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65  ;.int sqlite3Che
25700 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72  ckObjectName(Par
25710 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  se *, const char
25720 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
25730 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28  3VdbeSetChanges(
25740 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b  sqlite3 *, int);
25750 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49  .int sqlite3AddI
25760 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
25770 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e  int sqlite3SubIn
25780 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
25790 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74  nt sqlite3MulInt
257a0 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
257b0 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33  t sqlite3AbsInt3
257c0 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53  2(int);.#ifdef S
257d0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33  QLITE_ENABLE_8_3
257e0 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69  _NAMES.void sqli
257f0 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 63  te3FileSuffix3(c
25800 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72  onst char*, char
25810 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
25820 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75  ne sqlite3FileSu
25830 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69  ffix3(X,Y).#endi
25840 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 42  f.u8 sqlite3GetB
25850 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61  oolean(const cha
25860 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74  r *z,u8);..const
25870 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61   void *sqlite3Va
25880 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f  lueText(sqlite3_
25890 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74  value*, u8);.int
258a0 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74   sqlite3ValueByt
258b0 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  es(sqlite3_value
258c0 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  *, u8);.void sql
258d0 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28  ite3ValueSetStr(
258e0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
258f0 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  int, const void 
25900 2a 2c 75 38 2c 20 0a 20 20 20 20 20 20 20 20 20  *,u8, .         
25910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
25920 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a  oid(*)(void*));.
25930 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
25940 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33  eSetNull(sqlite3
25950 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73  _value*);.void s
25960 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28  qlite3ValueFree(
25970 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b  sqlite3_value*);
25980 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  .sqlite3_value *
25990 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28  sqlite3ValueNew(
259a0 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63 68 61 72  sqlite3 *);.char
259b0 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f   *sqlite3Utf16to
259c0 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  8(sqlite3 *, con
259d0 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75  st void*, int, u
259e0 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  8);.int sqlite3V
259f0 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c  alueFromExpr(sql
25a00 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20  ite3 *, Expr *, 
25a10 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f  u8, u8, sqlite3_
25a20 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20  value **);.void 
25a30 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c  sqlite3ValueAppl
25a40 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65  yAffinity(sqlite
25a50 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75  3_value *, u8, u
25a60 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  8);.#ifndef SQLI
25a70 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a  TE_AMALGAMATION.
25a80 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
25a90 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
25aa0 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79  e3OpcodeProperty
25ab0 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
25ac0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
25ad0 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
25ae0 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  er[];.extern con
25af0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
25b00 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70   sqlite3CtypeMap
25b10 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
25b20 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e   Token sqlite3In
25b30 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72  tTokens[];.exter
25b40 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72  n SQLITE_WSD str
25b50 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
25b60 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b  g sqlite3Config;
25b70 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57  .extern SQLITE_W
25b80 53 44 20 46 75 6e 63 44 65 66 48 61 73 68 20 73  SD FuncDefHash s
25b90 71 6c 69 74 65 33 47 6c 6f 62 61 6c 46 75 6e 63  qlite3GlobalFunc
25ba0 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53  tions;.#ifndef S
25bb0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65  QLITE_OMIT_WSD.e
25bc0 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
25bd0 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65  3PendingByte;.#e
25be0 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64  ndif.#endif.void
25bf0 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65   sqlite3RootPage
25c00 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20  Moved(sqlite3*, 
25c10 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
25c20 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e  void sqlite3Rein
25c30 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  dex(Parse*, Toke
25c40 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  n*, Token*);.voi
25c50 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75  d sqlite3AlterFu
25c60 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
25c70 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
25c80 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73  RenameTable(Pars
25c90 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
25ca0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
25cb0 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74  e3GetToken(const
25cc0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
25cd0 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73  , int *);.void s
25ce0 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73  qlite3NestedPars
25cf0 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  e(Parse*, const 
25d00 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  char*, ...);.voi
25d10 64 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50  d sqlite3ExpireP
25d20 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
25d30 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  s(sqlite3*);.int
25d40 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73   sqlite3CodeSubs
25d50 65 6c 65 63 74 28 50 61 72 73 65 20 2a 2c 20 45  elect(Parse *, E
25d60 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  xpr *, int, int)
25d70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
25d80 6c 65 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c  lectPrep(Parse*,
25d90 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f   Select*, NameCo
25da0 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  ntext*);.int sql
25db0 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d  ite3MatchSpanNam
25dc0 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  e(const char*, c
25dd0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
25de0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
25df0 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
25e00 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d  e3ResolveExprNam
25e10 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
25e20 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
25e30 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65  lite3ResolveSele
25e40 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20  ctNames(Parse*, 
25e50 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e  Select*, NameCon
25e60 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  text*);.void sql
25e70 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52  ite3ResolveSelfR
25e80 65 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c  eference(Parse*,
25e90 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a  Table*,int,Expr*
25ea0 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74  ,ExprList*);.int
25eb0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f   sqlite3ResolveO
25ec0 72 64 65 72 47 72 6f 75 70 42 79 28 50 61 72 73  rderGroupBy(Pars
25ed0 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70  e*, Select*, Exp
25ee0 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
25ef0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
25f00 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28  e3ColumnDefault(
25f10 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c  Vdbe *, Table *,
25f20 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
25f30 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e   sqlite3AlterFin
25f40 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ishAddColumn(Par
25f50 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a  se *, Token *);.
25f60 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
25f70 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28  rBeginAddColumn(
25f80 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74  Parse *, SrcList
25f90 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71   *);.CollSeq *sq
25fa0 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28  lite3GetCollSeq(
25fb0 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c  Parse*, u8, Coll
25fc0 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Seq *, const cha
25fd0 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  r*);.char sqlite
25fe0 33 41 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f  3AffinityType(co
25ff0 6e 73 74 20 63 68 61 72 2a 2c 20 75 38 2a 29 3b  nst char*, u8*);
26000 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61  .void sqlite3Ana
26010 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  lyze(Parse*, Tok
26020 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  en*, Token*);.in
26030 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42  t sqlite3InvokeB
26040 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48  usyHandler(BusyH
26050 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71  andler*);.int sq
26060 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69  lite3FindDb(sqli
26070 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  te3*, Token*);.i
26080 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62  nt sqlite3FindDb
26090 4e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  Name(sqlite3 *, 
260a0 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69  const char *);.i
260b0 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73  nt sqlite3Analys
260c0 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c  isLoad(sqlite3*,
260d0 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73  int iDB);.void s
260e0 71 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65  qlite3DeleteInde
260f0 78 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33  xSamples(sqlite3
26100 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  *,Index*);.void 
26110 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f  sqlite3DefaultRo
26120 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f  wEst(Index*);.vo
26130 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
26140 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28  erLikeFunctions(
26150 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a  sqlite3*, int);.
26160 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b  int sqlite3IsLik
26170 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  eFunction(sqlite
26180 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68  3*,Expr*,int*,ch
26190 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
261a0 65 33 4d 69 6e 69 6d 75 6d 46 69 6c 65 46 6f 72  e3MinimumFileFor
261b0 6d 61 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  mat(Parse*, int,
261c0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
261d0 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76  te3SchemaClear(v
261e0 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a  oid *);.Schema *
261f0 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74  sqlite3SchemaGet
26200 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65  (sqlite3 *, Btre
26210 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e *);.int sqlite
26220 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73  3SchemaToIndex(s
26230 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65  qlite3 *db, Sche
26240 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a  ma *);.KeyInfo *
26250 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c  sqlite3KeyInfoAl
26260 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  loc(sqlite3*,int
26270 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
26280 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28  te3KeyInfoUnref(
26290 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e  KeyInfo*);.KeyIn
262a0 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
262b0 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b  foRef(KeyInfo*);
262c0 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
262d0 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28  3KeyInfoOfIndex(
262e0 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b  Parse*, Index*);
262f0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
26300 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33  EBUG.int sqlite3
26310 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65 61 62  KeyInfoIsWriteab
26320 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65  le(KeyInfo*);.#e
26330 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
26340 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74  CreateFunc(sqlit
26350 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
26360 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f   *, int, int, vo
26370 69 64 20 2a 2c 20 0a 20 20 76 6f 69 64 20 28 2a  id *, .  void (*
26380 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
26390 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
263a0 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64  alue **),.  void
263b0 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
263c0 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
263d0 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69  3_value **), voi
263e0 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
263f0 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44  ntext*),.  FuncD
26400 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74  estructor *pDest
26410 72 75 63 74 6f 72 0a 29 3b 0a 69 6e 74 20 73 71  ructor.);.int sq
26420 6c 69 74 65 33 41 70 69 45 78 69 74 28 73 71 6c  lite3ApiExit(sql
26430 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a  ite3 *db, int);.
26440 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54  int sqlite3OpenT
26450 65 6d 70 44 61 74 61 62 61 73 65 28 50 61 72 73  empDatabase(Pars
26460 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  e *);..void sqli
26470 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28  te3StrAccumInit(
26480 53 74 72 41 63 63 75 6d 2a 2c 20 63 68 61 72 2a  StrAccum*, char*
26490 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
264a0 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
264b0 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d  mAppend(StrAccum
264c0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
264d0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
264e0 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 41 6c  StrAccumAppendAl
264f0 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73  l(StrAccum*,cons
26500 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
26510 71 6c 69 74 65 33 41 70 70 65 6e 64 43 68 61 72  qlite3AppendChar
26520 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74 2c 63  (StrAccum*,int,c
26530 68 61 72 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  har);.char *sqli
26540 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73  te3StrAccumFinis
26550 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f  h(StrAccum*);.vo
26560 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
26570 75 6d 52 65 73 65 74 28 53 74 72 41 63 63 75 6d  umReset(StrAccum
26580 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26590 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53  SelectDestInit(S
265a0 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69  electDest*,int,i
265b0 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
265c0 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78  e3CreateColumnEx
265d0 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72  pr(sqlite3 *, Sr
265e0 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e  cList *, int, in
265f0 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  t);..void sqlite
26600 33 42 61 63 6b 75 70 52 65 73 74 61 72 74 28 73  3BackupRestart(s
26610 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29  qlite3_backup *)
26620 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61  ;.void sqlite3Ba
26630 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69 74  ckupUpdate(sqlit
26640 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e  e3_backup *, Pgn
26650 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a  o, const u8 *);.
26660 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
26670 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
26680 54 41 54 34 0a 76 6f 69 64 20 73 71 6c 69 74 65  TAT4.void sqlite
26690 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e  3AnalyzeFunction
266a0 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c  s(void);.int sql
266b0 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 53 65  ite3Stat4ProbeSe
266c0 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 49 6e  tValue(Parse*,In
266d0 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63  dex*,UnpackedRec
266e0 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 75 38 2c 69  ord**,Expr*,u8,i
266f0 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  nt,int*);.int sq
26700 6c 69 74 65 33 53 74 61 74 34 56 61 6c 75 65 46  lite3Stat4ValueF
26710 72 6f 6d 45 78 70 72 28 50 61 72 73 65 2a 2c 20  romExpr(Parse*, 
26720 45 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74  Expr*, u8, sqlit
26730 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69  e3_value**);.voi
26740 64 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72  d sqlite3Stat4Pr
26750 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b 65 64  obeFree(Unpacked
26760 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71  Record*);.int sq
26770 6c 69 74 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e  lite3Stat4Column
26780 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74  (sqlite3*, const
26790 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74   void*, int, int
267a0 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  , sqlite3_value*
267b0 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  *);.#endif../*.*
267c0 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
267d0 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e  to the LEMON-gen
267e0 65 72 61 74 65 64 20 70 61 72 73 65 72 0a 2a 2f  erated parser.*/
267f0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61  .void *sqlite3Pa
26800 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28  rserAlloc(void*(
26810 2a 29 28 75 36 34 29 29 3b 0a 76 6f 69 64 20 73  *)(u64));.void s
26820 71 6c 69 74 65 33 50 61 72 73 65 72 46 72 65 65  qlite3ParserFree
26830 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28  (void*, void(*)(
26840 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71  void*));.void sq
26850 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f 69 64  lite3Parser(void
26860 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50  *, int, Token, P
26870 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 59  arse*);.#ifdef Y
26880 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45  YTRACKMAXSTACKDE
26890 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  PTH.  int sqlite
268a0 33 50 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b  3ParserStackPeak
268b0 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a  (void*);.#endif.
268c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74  .void sqlite3Aut
268d0 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28  oLoadExtensions(
268e0 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64  sqlite3*);.#ifnd
268f0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c  ef SQLITE_OMIT_L
26900 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20  OAD_EXTENSION.  
26910 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73  void sqlite3Clos
26920 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69  eExtensions(sqli
26930 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  te3*);.#else.# d
26940 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f  efine sqlite3Clo
26950 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a  seExtensions(X).
26960 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
26970 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
26980 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20  ED_CACHE.  void 
26990 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
269a0 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69  (Parse *, int, i
269b0 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68  nt, u8, const ch
269c0 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  ar *);.#else.  #
269d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61  define sqlite3Ta
269e0 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c  bleLock(v,w,x,y,
269f0 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  z).#endif..#ifde
26a00 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
26a10 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 54  int sqlite3Utf8T
26a20 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  o8(unsigned char
26a30 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  *);.#endif..#ifd
26a40 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
26a50 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64  IRTUALTABLE.#  d
26a60 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
26a70 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66  bClear(Y).#  def
26a80 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53  ine sqlite3VtabS
26a90 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f  ync(X,Y) SQLITE_
26aa0 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  OK.#  define sql
26ab0 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b  ite3VtabRollback
26ac0 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
26ad0 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28  lite3VtabCommit(
26ae0 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
26af0 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64  ite3VtabInSync(d
26b00 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73  b) 0.#  define s
26b10 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58  qlite3VtabLock(X
26b20 29 20 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  ) .#  define sql
26b30 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58  ite3VtabUnlock(X
26b40 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
26b50 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
26b60 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
26b70 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
26b80 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c  int(X, Y, Z) SQL
26b90 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65  ITE_OK.#  define
26ba0 20 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c   sqlite3GetVTabl
26bb0 65 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65  e(X,Y)  ((VTable
26bc0 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f  *)0).#else.   vo
26bd0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c  id sqlite3VtabCl
26be0 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ear(sqlite3 *db,
26bf0 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69   Table*);.   voi
26c00 64 20 73 71 6c 69 74 65 33 56 74 61 62 44 69 73  d sqlite3VtabDis
26c10 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20  connect(sqlite3 
26c20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a  *db, Table *p);.
26c30 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
26c40 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a  abSync(sqlite3 *
26c50 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69  db, Vdbe*);.   i
26c60 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f  nt sqlite3VtabRo
26c70 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a  llback(sqlite3 *
26c80 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  db);.   int sqli
26c90 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71  te3VtabCommit(sq
26ca0 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76  lite3 *db);.   v
26cb0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c  oid sqlite3VtabL
26cc0 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20  ock(VTable *);. 
26cd0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
26ce0 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20  abUnlock(VTable 
26cf0 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
26d00 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
26d10 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20  t(sqlite3*);.   
26d20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53  int sqlite3VtabS
26d30 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33  avepoint(sqlite3
26d40 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20   *, int, int);. 
26d50 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
26d60 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56  abImportErrmsg(V
26d70 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74  dbe*, sqlite3_vt
26d80 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20  ab*);.   VTable 
26d90 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c  *sqlite3GetVTabl
26da0 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c  e(sqlite3*, Tabl
26db0 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73  e*);.#  define s
26dc0 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
26dd0 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72  (db) ((db)->nVTr
26de0 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61  ans>0 && (db)->a
26df0 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69  VTrans==0).#endi
26e00 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  f.void sqlite3Vt
26e10 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50  abMakeWritable(P
26e20 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76  arse*,Table*);.v
26e30 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 42  oid sqlite3VtabB
26e40 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a  eginParse(Parse*
26e50 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
26e60 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a  , Token*, int);.
26e70 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
26e80 46 69 6e 69 73 68 50 61 72 73 65 28 50 61 72 73  FinishParse(Pars
26e90 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  e*, Token*);.voi
26ea0 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67  d sqlite3VtabArg
26eb0 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f  Init(Parse*);.vo
26ec0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72  id sqlite3VtabAr
26ed0 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20  gExtend(Parse*, 
26ee0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
26ef0 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61  ite3VtabCallCrea
26f00 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  te(sqlite3*, int
26f10 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
26f20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71  char **);.int sq
26f30 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e  lite3VtabCallCon
26f40 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62  nect(Parse*, Tab
26f50 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
26f60 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79  3VtabCallDestroy
26f70 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
26f80 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69  const char *);.i
26f90 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 42 65  nt sqlite3VtabBe
26fa0 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56  gin(sqlite3 *, V
26fb0 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65  Table *);.FuncDe
26fc0 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76  f *sqlite3VtabOv
26fd0 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73  erloadFunction(s
26fe0 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66  qlite3 *,FuncDef
26ff0 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70  *, int nArg, Exp
27000 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
27010 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e  3InvalidFunction
27020 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
27030 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
27040 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f  lue**);.sqlite3_
27050 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d  int64 sqlite3Stm
27060 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c  tCurrentTime(sql
27070 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a  ite3_context*);.
27080 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 50  int sqlite3VdbeP
27090 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64  arameterIndex(Vd
270a0 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  be*, const char*
270b0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
270c0 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69  te3TransferBindi
270d0 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ngs(sqlite3_stmt
270e0 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74   *, sqlite3_stmt
270f0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
27100 33 50 61 72 73 65 72 52 65 73 65 74 28 50 61 72  3ParserReset(Par
27110 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  se*);.int sqlite
27120 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65 2a  3Reprepare(Vdbe*
27130 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
27140 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67  xprListCheckLeng
27150 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  th(Parse*, ExprL
27160 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ist*, const char
27170 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  *);.CollSeq *sql
27180 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72  ite3BinaryCompar
27190 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  eCollSeq(Parse *
271a0 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a  , Expr *, Expr *
271b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65  );.int sqlite3Te
271c0 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74  mpInMemory(const
271d0 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73   sqlite3*);.cons
271e0 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a  t char *sqlite3J
271f0 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69  ournalModename(i
27200 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  nt);.#ifndef SQL
27210 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69  ITE_OMIT_WAL.  i
27220 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70  nt sqlite3Checkp
27230 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69  oint(sqlite3*, i
27240 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
27250 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  nt*);.  int sqli
27260 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f  te3WalDefaultHoo
27270 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  k(void*,sqlite3*
27280 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
27290 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  );.#endif.#ifnde
272a0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54  f SQLITE_OMIT_CT
272b0 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65  E.  With *sqlite
272c0 33 57 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c  3WithAdd(Parse*,
272d0 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70  With*,Token*,Exp
272e0 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b  rList*,Select*);
272f0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57  .  void sqlite3W
27300 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65  ithDelete(sqlite
27310 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69  3*,With*);.  voi
27320 64 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73  d sqlite3WithPus
27330 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c  h(Parse*, With*,
27340 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66   u8);.#else.#def
27350 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 50  ine sqlite3WithP
27360 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69  ush(x,y,z).#defi
27370 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 44 65  ne sqlite3WithDe
27380 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66  lete(x,y).#endif
27390 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e  ../* Declaration
273a0 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  s for functions 
273b0 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f  in fkey.c. All o
273c0 66 20 74 68 65 73 65 20 61 72 65 20 72 65 70 6c  f these are repl
273d0 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70  aced by.** no-op
273e0 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f   macros if OMIT_
273f0 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64  FOREIGN_KEY is d
27400 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20  efined. In this 
27410 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a  case no foreign.
27420 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61  ** key functiona
27430 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c  lity is availabl
27440 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47  e. If OMIT_TRIGG
27450 45 52 20 69 73 20 64 65 66 69 6e 65 64 20 62 75  ER is defined bu
27460 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47  t.** OMIT_FOREIG
27470 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e  N_KEY is not, on
27480 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66  ly some of the f
27490 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d  unctions are no-
274a0 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73  oped. In.** this
274b0 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65   case foreign ke
274c0 79 73 20 61 72 65 20 70 61 72 73 65 64 2c 20 62  ys are parsed, b
274d0 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63  ut no other func
274e0 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a  tionality is .**
274f0 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72   provided (enfor
27500 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e  cement of FK con
27510 73 74 72 61 69 6e 74 73 20 72 65 71 75 69 72 65  straints require
27520 73 20 74 68 65 20 74 72 69 67 67 65 72 73 20 73  s the triggers s
27530 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23  ub-system)..*/.#
27540 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
27550 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
27560 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64  KEY) && !defined
27570 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
27580 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c  GGER).  void sql
27590 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73  ite3FkCheck(Pars
275a0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
275b0 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29   int, int*, int)
275c0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
275d0 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  FkDropTable(Pars
275e0 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54  e*, SrcList *, T
275f0 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73  able*);.  void s
27600 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28  qlite3FkActions(
27610 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
27620 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
27630 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e  int*, int);.  in
27640 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69  t sqlite3FkRequi
27650 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  red(Parse*, Tabl
27660 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  e*, int*, int);.
27670 20 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f    u32 sqlite3FkO
27680 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54  ldmask(Parse*, T
27690 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a  able*);.  FKey *
276a0 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e  sqlite3FkReferen
276b0 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65  ces(Table *);.#e
276c0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
276d0 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61  lite3FkActions(a
276e0 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64  ,b,c,d,e,f).  #d
276f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43  efine sqlite3FkC
27700 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66  heck(a,b,c,d,e,f
27710 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
27720 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61  te3FkDropTable(a
27730 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20  ,b,c).  #define 
27740 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
27750 28 61 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a  (a,b)         0.
27760 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
27770 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c  3FkRequired(a,b,
27780 63 2c 64 29 20 20 20 20 30 0a 23 65 6e 64 69 66  c,d)    0.#endif
27790 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
277a0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
277b0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
277c0 6b 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20  kDelete(sqlite3 
277d0 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e  *, Table*);.  in
277e0 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74  t sqlite3FkLocat
277f0 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61  eIndex(Parse*,Ta
27800 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78  ble*,FKey*,Index
27810 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65  **,int**);.#else
27820 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
27830 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a  e3FkDelete(a,b).
27840 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
27850 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61  3FkLocateIndex(a
27860 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66  ,b,c,d,e).#endif
27870 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62  .../*.** Availab
27880 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f  le fault injecto
27890 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e  rs.  Should be n
278a0 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e  umbered beginnin
278b0 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65  g with 0..*/.#de
278c0 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c  fine SQLITE_FAUL
278d0 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43  TINJECTOR_MALLOC
278e0 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53       0.#define S
278f0 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43  QLITE_FAULTINJEC
27900 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31  TOR_COUNT      1
27910 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65  ../*.** The inte
27920 72 66 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64  rface to the cod
27930 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65  e in fault.c use
27940 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e  d for identifyin
27950 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61  g "benign".** ma
27960 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54  lloc failures. T
27970 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73  his is only pres
27980 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d  ent if SQLITE_OM
27990 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
279a0 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65  ** is not define
279b0 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  d..*/.#ifndef SQ
279c0 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
279d0 4e 5f 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71  N_TEST.  void sq
279e0 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
279f0 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20  Malloc(void);.  
27a00 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42  void sqlite3EndB
27a10 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64  enignMalloc(void
27a20 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
27a30 6e 65 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42  ne sqlite3BeginB
27a40 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20  enignMalloc().  
27a50 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45  #define sqlite3E
27a60 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  ndBenignMalloc()
27a70 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
27a80 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61  llowed return va
27a90 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65  lues from sqlite
27aa0 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a  3FindInIndex().*
27ab0 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
27ac0 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20  EX_ROWID        
27ad0 31 20 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68  1   /* Search th
27ae0 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74  e rowid of the t
27af0 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
27b00 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20  IN_INDEX_EPH    
27b10 20 20 20 20 20 20 32 20 20 20 2f 2a 20 53 65 61        2   /* Sea
27b20 72 63 68 20 61 6e 20 65 70 68 65 6d 65 72 61 6c  rch an ephemeral
27b30 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66 69   b-tree */.#defi
27b40 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45  ne IN_INDEX_INDE
27b50 58 5f 41 53 43 20 20 20 20 33 20 20 20 2f 2a 20  X_ASC    3   /* 
27b60 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 41  Existing index A
27b70 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66  SCENDING */.#def
27b80 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44  ine IN_INDEX_IND
27b90 45 58 5f 44 45 53 43 20 20 20 34 20 20 20 2f 2a  EX_DESC   4   /*
27ba0 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20   Existing index 
27bb0 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64  DESCENDING */.#d
27bc0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e  efine IN_INDEX_N
27bd0 4f 4f 50 20 20 20 20 20 20 20 20 20 35 20 20 20  OOP         5   
27be0 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69  /* No table avai
27bf0 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61  lable. Use compa
27c00 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20  risons */./*.** 
27c10 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73 20 66 6f  Allowed flags fo
27c20 72 20 74 68 65 20 33 72 64 20 70 61 72 61 6d 65  r the 3rd parame
27c30 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 46 69  ter to sqlite3Fi
27c40 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a  ndInIndex()..*/.
27c50 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
27c60 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30  _NOOP_OK     0x0
27c70 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65  001  /* OK to re
27c80 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f  turn IN_INDEX_NO
27c90 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  OP */.#define IN
27ca0 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48 49  _INDEX_MEMBERSHI
27cb0 50 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 4e  P  0x0002  /* IN
27cc0 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20 66   operator used f
27cd0 6f 72 20 6d 65 6d 62 65 72 73 68 69 70 20 74 65  or membership te
27ce0 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  st */.#define IN
27cf0 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20  _INDEX_LOOP     
27d00 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e     0x0004  /* IN
27d10 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20 61   operator used a
27d20 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20  s a loop */.int 
27d30 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
27d40 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72  ex(Parse *, Expr
27d50 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a 29 3b 0a   *, u32, int*);.
27d60 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
27d70 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49  NABLE_ATOMIC_WRI
27d80 54 45 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  TE.  int sqlite3
27d90 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69  JournalOpen(sqli
27da0 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74  te3_vfs *, const
27db0 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33   char *, sqlite3
27dc0 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  _file *, int, in
27dd0 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
27de0 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c  3JournalSize(sql
27df0 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69  ite3_vfs *);.  i
27e00 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
27e10 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f  lCreate(sqlite3_
27e20 66 69 6c 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73  file *);.  int s
27e30 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69  qlite3JournalExi
27e40 73 74 73 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  sts(sqlite3_file
27e50 20 2a 70 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64   *p);.#else.  #d
27e60 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75  efine sqlite3Jou
27e70 72 6e 61 6c 53 69 7a 65 28 70 56 66 73 29 20 28  rnalSize(pVfs) (
27e80 28 70 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65  (pVfs)->szOsFile
27e90 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
27ea0 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73  te3JournalExists
27eb0 28 70 29 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f  (p) 1.#endif..vo
27ec0 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75  id sqlite3MemJou
27ed0 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
27ee0 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71  _file *);.int sq
27ef0 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53  lite3MemJournalS
27f00 69 7a 65 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73  ize(void);.int s
27f10 71 6c 69 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e  qlite3IsMemJourn
27f20 61 6c 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  al(sqlite3_file 
27f30 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  *);..void sqlite
27f40 33 45 78 70 72 53 65 74 48 65 69 67 68 74 41 6e  3ExprSetHeightAn
27f50 64 46 6c 61 67 73 28 50 61 72 73 65 20 2a 70 50  dFlags(Parse *pP
27f60 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a  arse, Expr *p);.
27f70 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45  #if SQLITE_MAX_E
27f80 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e  XPR_DEPTH>0.  in
27f90 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  t sqlite3SelectE
27fa0 78 70 72 48 65 69 67 68 74 28 53 65 6c 65 63 74  xprHeight(Select
27fb0 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74   *);.  int sqlit
27fc0 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
27fd0 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  t(Parse*, int);.
27fe0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
27ff0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
28000 72 48 65 69 67 68 74 28 78 29 20 30 0a 20 20 23  rHeight(x) 0.  #
28010 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
28020 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c  prCheckHeight(x,
28030 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73  y).#endif..u32 s
28040 71 6c 69 74 65 33 47 65 74 34 62 79 74 65 28 63  qlite3Get4byte(c
28050 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20  onst u8*);.void 
28060 73 71 6c 69 74 65 33 50 75 74 34 62 79 74 65 28  sqlite3Put4byte(
28070 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64  u8*, u32);..#ifd
28080 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
28090 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20  _UNLOCK_NOTIFY. 
280a0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
280b0 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73  nectionBlocked(s
280c0 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65  qlite3 *, sqlite
280d0 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  3 *);.  void sql
280e0 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e  ite3ConnectionUn
280f0 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a  locked(sqlite3 *
28100 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  db);.  void sqli
28110 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f  te3ConnectionClo
28120 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29  sed(sqlite3 *db)
28130 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
28140 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
28150 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a  ionBlocked(x,y).
28160 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
28170 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63  3ConnectionUnloc
28180 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65  ked(x).  #define
28190 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
281a0 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64  onClosed(x).#end
281b0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
281c0 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73  E_DEBUG.  void s
281d0 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63  qlite3ParserTrac
281e0 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29  e(FILE*, char *)
281f0 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
28200 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e  If the SQLITE_EN
28210 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69  ABLE IOTRACE exi
28220 73 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f  sts then the glo
28230 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  bal variable.** 
28240 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69  sqlite3IoTrace i
28250 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
28260 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75   printf-like rou
28270 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  tine used to.** 
28280 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e  print I/O tracin
28290 67 20 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f 0a  g messages. .*/.
282a0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
282b0 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64  ABLE_IOTRACE.# d
282c0 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29  efine IOTRACE(A)
282d0 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54    if( sqlite3IoT
282e0 72 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49  race ){ sqlite3I
282f0 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f  oTrace A; }.  vo
28300 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f  id sqlite3VdbeIO
28310 54 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b  TraceSql(Vdbe*);
28320 0a 53 51 4c 49 54 45 5f 41 50 49 20 53 51 4c 49  .SQLITE_API SQLI
28330 54 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28  TE_EXTERN void (
28340 53 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73 71  SQLITE_CDECL *sq
28350 6c 69 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f  lite3IoTrace)(co
28360 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a  nst char*,...);.
28370 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49  #else.# define I
28380 4f 54 52 41 43 45 28 41 29 0a 23 20 64 65 66 69  OTRACE(A).# defi
28390 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f  ne sqlite3VdbeIO
283a0 54 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64  TraceSql(X).#end
283b0 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20  if../*.** These 
283c0 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76 61  routines are ava
283d0 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d  ilable for the m
283e0 65 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20  em2.c debugging 
283f0 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72  memory allocator
28400 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20  .** only.  They 
28410 61 72 65 20 75 73 65 64 20 74 6f 20 76 65 72 69  are used to veri
28420 66 79 20 74 68 61 74 20 64 69 66 66 65 72 65 6e  fy that differen
28430 74 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d  t "types" of mem
28440 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f  ory.** allocatio
28450 6e 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20  ns are properly 
28460 74 72 61 63 6b 65 64 20 62 79 20 74 68 65 20 73  tracked by the s
28470 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  ystem..**.** sql
28480 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
28490 79 70 65 28 29 20 73 65 74 73 20 74 68 65 20 22  ype() sets the "
284a0 74 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f  type" of an allo
284b0 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66  cation to one of
284c0 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f  .** the MEMTYPE_
284d0 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64  * macros defined
284e0 20 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70   below.  The typ
284f0 65 20 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d  e must be a bitm
28500 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69  ask with.** a si
28510 6e 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a  ngle bit set..**
28520 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
28530 62 75 67 48 61 73 54 79 70 65 28 29 20 72 65 74  bugHasType() ret
28540 75 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79  urns true if any
28550 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20   of the bits in 
28560 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72  its second.** ar
28570 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65  gument match the
28580 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65   type set by the
28590 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65   previous sqlite
285a0 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
285b0 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  ()..** sqlite3Me
285c0 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20  mdebugHasType() 
285d0 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20  is intended for 
285e0 75 73 65 20 69 6e 73 69 64 65 20 61 73 73 65 72  use inside asser
285f0 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  t() statements..
28600 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  **.** sqlite3Mem
28610 64 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65  debugNoType() re
28620 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f  turns true if no
28630 6e 65 20 6f 66 20 74 68 65 20 62 69 74 73 20 69  ne of the bits i
28640 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20  n its second.** 
28650 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74  argument match t
28660 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74  he type set by t
28670 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69  he previous sqli
28680 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
28690 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68  pe()..**.** Perh
286a0 61 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70  aps the most imp
286b0 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20  ortant point is 
286c0 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62  the difference b
286d0 65 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48  etween MEMTYPE_H
286e0 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59  EAP.** and MEMTY
286f0 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49  PE_LOOKASIDE.  I
28700 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  f an allocation 
28710 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41  is MEMTYPE_LOOKA
28720 53 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73  SIDE, that means
28730 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76  .** it might hav
28740 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64  e been allocated
28750 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65   by lookaside, e
28760 78 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61  xcept the alloca
28770 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20  tion was.** too 
28780 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69  large or lookasi
28790 64 65 20 77 61 73 20 61 6c 72 65 61 64 79 20 66  de was already f
287a0 75 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f  ull.  It is impo
287b0 72 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a  rtant to verify.
287c0 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69  ** that allocati
287d0 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 68  ons that might h
287e0 61 76 65 20 62 65 65 6e 20 73 61 74 69 73 66 69  ave been satisfi
287f0 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20  ed by lookaside 
28800 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65  are not.** passe
28810 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f  d back to non-lo
28820 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72  okaside free() r
28830 6f 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74  outines.  Assert
28840 73 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a  s such as the.**
28850 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61   example above a
28860 72 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65  re placed on the
28870 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66   non-lookaside f
28880 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74  ree() routines t
28890 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73  o verify.** this
288a0 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a 2a   constraint. .**
288b0 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20  .** All of this 
288c0 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70  is no-op for a p
288d0 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e  roduction build.
288e0 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20    It only comes 
288f0 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65  into.** play whe
28900 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d  n the SQLITE_MEM
28910 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69  DEBUG compile-ti
28920 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65  me option is use
28930 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  d..*/.#ifdef SQL
28940 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76  ITE_MEMDEBUG.  v
28950 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  oid sqlite3Memde
28960 62 75 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a  bugSetType(void*
28970 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  ,u8);.  int sqli
28980 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
28990 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20  pe(void*,u8);.  
289a0 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  int sqlite3Memde
289b0 62 75 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c  bugNoType(void*,
289c0 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  u8);.#else.# def
289d0 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
289e0 62 75 67 53 65 74 54 79 70 65 28 58 2c 59 29 20  bugSetType(X,Y) 
289f0 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64   /* no-op */.# d
28a00 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
28a10 64 65 62 75 67 48 61 73 54 79 70 65 28 58 2c 59  debugHasType(X,Y
28a20 29 20 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71  )  1.# define sq
28a30 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
28a40 79 70 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e  ype(X,Y)   1.#en
28a50 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54  dif.#define MEMT
28a60 59 50 45 5f 48 45 41 50 20 20 20 20 20 20 20 30  YPE_HEAP       0
28a70 78 30 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20  x01  /* General 
28a80 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  heap allocations
28a90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54   */.#define MEMT
28aa0 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30  YPE_LOOKASIDE  0
28ab0 78 30 32 20 20 2f 2a 20 48 65 61 70 20 74 68 61  x02  /* Heap tha
28ac0 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65  t might have bee
28ad0 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23  n lookaside */.#
28ae0 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53  define MEMTYPE_S
28af0 43 52 41 54 43 48 20 20 20 20 30 78 30 34 20 20  CRATCH    0x04  
28b00 2f 2a 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63  /* Scratch alloc
28b10 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ations */.#defin
28b20 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45  e MEMTYPE_PCACHE
28b30 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61       0x08  /* Pa
28b40 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74  ge cache allocat
28b50 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  ions */../*.** T
28b60 68 72 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61  hreading interfa
28b70 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  ce.*/.#if SQLITE
28b80 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
28b90 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65  ADS>0.int sqlite
28ba0 33 54 68 72 65 61 64 43 72 65 61 74 65 28 53 51  3ThreadCreate(SQ
28bb0 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69  LiteThread**,voi
28bc0 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69  d*(*)(void*),voi
28bd0 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
28be0 54 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74  ThreadJoin(SQLit
28bf0 65 54 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a  eThread*, void**
28c00 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69  );.#endif..#endi
28c10 66 20 2f 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f  f /* _SQLITEINT_
28c20 48 5f 20 2a 2f 0a                                H_ */.