/ Hex Artifact Content
Login

Artifact 98c49cbd565f08f2e516399734e497340ca9549c:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  ef _SQLITEINT_H_
01c0: 0a 23 64 65 66 69 6e 65 20 5f 53 51 4c 49 54 45  .#define _SQLITE
01d0: 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a 2a 2a 20 49 6e  INT_H_../*.** In
01e0: 63 6c 75 64 65 20 74 68 65 20 68 65 61 64 65 72  clude the header
01f0: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 63 75   file used to cu
0200: 73 74 6f 6d 69 7a 65 20 74 68 65 20 63 6f 6d 70  stomize the comp
0210: 69 6c 65 72 20 6f 70 74 69 6f 6e 73 20 66 6f 72  iler options for
0220: 20 4d 53 56 43 2e 0a 2a 2a 20 54 68 69 73 20 73   MSVC..** This s
0230: 68 6f 75 6c 64 20 62 65 20 64 6f 6e 65 20 66 69  hould be done fi
0240: 72 73 74 20 73 6f 20 74 68 61 74 20 69 74 20 63  rst so that it c
0250: 61 6e 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20  an successfully 
0260: 70 72 65 76 65 6e 74 20 73 70 75 72 69 6f 75 73  prevent spurious
0270: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  .** compiler war
0280: 6e 69 6e 67 73 20 64 75 65 20 74 6f 20 73 75 62  nings due to sub
0290: 73 65 71 75 65 6e 74 20 63 6f 6e 74 65 6e 74 20  sequent content 
02a0: 69 6e 20 74 68 69 73 20 66 69 6c 65 20 61 6e 64  in this file and
02b0: 20 6f 74 68 65 72 20 66 69 6c 65 73 0a 2a 2a 20   other files.** 
02c0: 74 68 61 74 20 61 72 65 20 69 6e 63 6c 75 64 65  that are include
02d0: 64 20 62 79 20 74 68 69 73 20 66 69 6c 65 2e 0a  d by this file..
02e0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 6d 73 76  */.#include "msv
02f0: 63 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 53 70 65 63  c.h"../*.** Spec
0300: 69 61 6c 20 73 65 74 75 70 20 66 6f 72 20 56 78  ial setup for Vx
0310: 57 6f 72 6b 73 0a 2a 2f 0a 23 69 6e 63 6c 75 64  Works.*/.#includ
0320: 65 20 22 76 78 77 6f 72 6b 73 2e 68 22 0a 0a 2f  e "vxworks.h"../
0330: 2a 0a 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69  *.** These #defi
0340: 6e 65 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c  nes should enabl
0350: 65 20 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70  e >2GB file supp
0360: 6f 72 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20  ort on POSIX if 
0370: 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e  the.** underlyin
0380: 67 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74  g operating syst
0390: 65 6d 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20  em supports it. 
03a0: 20 49 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73   If the OS lacks
03b0: 0a 2a 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73  .** large file s
03c0: 75 70 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68  upport, or if th
03d0: 65 20 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c  e OS is windows,
03e0: 20 74 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65   these should be
03f0: 20 6e 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54   no-ops..**.** T
0400: 69 63 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68  icket #2739:  Th
0410: 65 20 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55  e _LARGEFILE_SOU
0420: 52 43 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61  RCE macro must a
0430: 70 70 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79  ppear before any
0440: 0a 2a 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c  .** system #incl
0450: 75 64 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68  udes.  Hence, th
0460: 69 73 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65  is block of code
0470: 20 6d 75 73 74 20 62 65 20 74 68 65 20 76 65 72   must be the ver
0480: 79 20 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20  y first.** code 
0490: 69 6e 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69  in all source fi
04a0: 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65  les..**.** Large
04b0: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61   file support ca
04c0: 6e 20 62 65 20 64 69 73 61 62 6c 65 64 20 75 73  n be disabled us
04d0: 69 6e 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45  ing the -DSQLITE
04e0: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69  _DISABLE_LFS swi
04f0: 74 63 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f  tch.** on the co
0500: 6d 70 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c  mpiler command l
0510: 69 6e 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65  ine.  This is ne
0520: 63 65 73 73 61 72 79 20 69 66 20 79 6f 75 20 61  cessary if you a
0530: 72 65 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20  re compiling.** 
0540: 6f 6e 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68  on a recent mach
0550: 69 6e 65 20 28 65 78 3a 20 52 65 64 20 48 61 74  ine (ex: Red Hat
0560: 20 37 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61   7.2) but you wa
0570: 6e 74 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20  nt your code to 
0580: 77 6f 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c  work.** on an ol
0590: 64 65 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a  der machine (ex:
05a0: 20 52 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20   Red Hat 6.0).  
05b0: 49 66 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f  If you compile o
05c0: 6e 20 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a  n Red Hat 7.2.**
05d0: 20 77 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70   without this op
05e0: 74 69 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61  tion, LFS is ena
05f0: 62 6c 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f  ble.  But LFS do
0600: 65 73 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20  es not exist in 
0610: 74 68 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e  the kernel.** in
0620: 20 52 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f   Red Hat 6.0, so
0630: 20 74 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20   the code won't 
0640: 77 6f 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f  work.  Hence, fo
0650: 72 20 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79  r maximum binary
0660: 0a 2a 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20  .** portability 
0670: 79 6f 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20  you should omit 
0680: 4c 46 53 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70  LFS..**.** The p
0690: 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61 70  revious paragrap
06a0: 68 20 77 61 73 20 77 72 69 74 74 65 6e 20 69 6e  h was written in
06b0: 20 32 30 30 35 2e 20 20 28 54 68 69 73 20 70 61   2005.  (This pa
06c0: 72 61 67 72 61 70 68 20 69 73 20 77 72 69 74 74  ragraph is writt
06d0: 65 6e 0a 2a 2a 20 6f 6e 20 32 30 30 38 2d 31 31  en.** on 2008-11
06e0: 2d 32 38 2e 29 20 54 68 65 73 65 20 64 61 79 73  -28.) These days
06f0: 2c 20 61 6c 6c 20 4c 69 6e 75 78 20 6b 65 72 6e  , all Linux kern
0700: 65 6c 73 20 73 75 70 70 6f 72 74 20 6c 61 72 67  els support larg
0710: 65 20 66 69 6c 65 73 2c 20 73 6f 0a 2a 2a 20 79  e files, so.** y
0720: 6f 75 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62  ou should probab
0730: 6c 79 20 6c 65 61 76 65 20 4c 46 53 20 65 6e 61  ly leave LFS ena
0740: 62 6c 65 64 2e 20 20 42 75 74 20 73 6f 6d 65 20  bled.  But some 
0750: 65 6d 62 65 64 64 65 64 20 70 6c 61 74 66 6f 72  embedded platfor
0760: 6d 73 20 6d 69 67 68 74 0a 2a 2a 20 6c 61 63 6b  ms might.** lack
0770: 20 4c 46 53 20 69 6e 20 77 68 69 63 68 20 63 61   LFS in which ca
0780: 73 65 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49  se the SQLITE_DI
0790: 53 41 42 4c 45 5f 4c 46 53 20 6d 61 63 72 6f 20  SABLE_LFS macro 
07a0: 6d 69 67 68 74 20 73 74 69 6c 6c 20 62 65 20 75  might still be u
07b0: 73 65 66 75 6c 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d  seful..**.** Sim
07c0: 69 6c 61 72 20 69 73 20 74 72 75 65 20 66 6f 72  ilar is true for
07d0: 20 4d 61 63 20 4f 53 20 58 2e 20 20 4c 46 53 20   Mac OS X.  LFS 
07e0: 69 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65  is only supporte
07f0: 64 20 6f 6e 20 4d 61 63 20 4f 53 20 58 20 39 20  d on Mac OS X 9 
0800: 61 6e 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69  and later..*/.#i
0810: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53  fndef SQLITE_DIS
0820: 41 42 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69 6e  ABLE_LFS.# defin
0830: 65 20 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20 20  e _LARGE_FILE   
0840: 20 20 20 20 31 0a 23 20 69 66 6e 64 65 66 20 5f      1.# ifndef _
0850: 46 49 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53  FILE_OFFSET_BITS
0860: 0a 23 20 20 20 64 65 66 69 6e 65 20 5f 46 49 4c  .#   define _FIL
0870: 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34  E_OFFSET_BITS 64
0880: 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e  .# endif.# defin
0890: 65 20 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55  e _LARGEFILE_SOU
08a0: 52 43 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  RCE 1.#endif../*
08b0: 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72 69   Needed for vari
08c0: 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e  ous definitions.
08d0: 2e 2e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  .. */.#if define
08e0: 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26 20 21  d(__GNUC__) && !
08f0: 64 65 66 69 6e 65 64 28 5f 47 4e 55 5f 53 4f 55  defined(_GNU_SOU
0900: 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 47  RCE).# define _G
0910: 4e 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66  NU_SOURCE.#endif
0920: 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  ..#if defined(__
0930: 4f 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21 64  OpenBSD__) && !d
0940: 65 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55 52  efined(_BSD_SOUR
0950: 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42 53  CE).# define _BS
0960: 44 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a  D_SOURCE.#endif.
0970: 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47 57  ./*.** For MinGW
0980: 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20 69  , check to see i
0990: 66 20 77 65 20 63 61 6e 20 69 6e 63 6c 75 64 65  f we can include
09a0: 20 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65   the header file
09b0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 74 73 0a   containing its.
09c0: 2a 2a 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72  ** version infor
09d0: 6d 61 74 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74  mation, among ot
09e0: 68 65 72 20 74 68 69 6e 67 73 2e 20 20 4e 6f 72  her things.  Nor
09f0: 6d 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 74 65  mally, this inte
0a00: 72 6e 61 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68 65  rnal MinGW.** he
0a10: 61 64 65 72 20 66 69 6c 65 20 77 6f 75 6c 64 20  ader file would 
0a20: 5b 6f 6e 6c 79 5d 20 62 65 20 69 6e 63 6c 75 64  [only] be includ
0a30: 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
0a40: 20 62 79 20 6f 74 68 65 72 20 4d 69 6e 47 57 20   by other MinGW 
0a50: 68 65 61 64 65 72 0a 2a 2a 20 66 69 6c 65 73 3b  header.** files;
0a60: 20 68 6f 77 65 76 65 72 2c 20 74 68 65 20 63 6f   however, the co
0a70: 6e 74 61 69 6e 65 64 20 76 65 72 73 69 6f 6e 20  ntained version 
0a80: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e  information is n
0a90: 6f 77 20 72 65 71 75 69 72 65 64 20 62 79 20 74  ow required by t
0aa0: 68 69 73 0a 2a 2a 20 68 65 61 64 65 72 20 66 69  his.** header fi
0ab0: 6c 65 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75 6e  le to work aroun
0ac0: 64 20 62 69 6e 61 72 79 20 63 6f 6d 70 61 74 69  d binary compati
0ad0: 62 69 6c 69 74 79 20 69 73 73 75 65 73 20 28 73  bility issues (s
0ae0: 65 65 20 62 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a  ee below) and.**
0af0: 20 74 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c   this is the onl
0b00: 79 20 6b 6e 6f 77 6e 20 77 61 79 20 74 6f 20 72  y known way to r
0b10: 65 6c 69 61 62 6c 79 20 6f 62 74 61 69 6e 20 69  eliably obtain i
0b20: 74 2e 20 20 54 68 69 73 20 65 6e 74 69 72 65 20  t.  This entire 
0b30: 23 69 66 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75  #if block.** wou
0b40: 6c 64 20 62 65 20 63 6f 6d 70 6c 65 74 65 6c 79  ld be completely
0b50: 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69 66 20   unnecessary if 
0b60: 74 68 65 72 65 20 77 61 73 20 61 6e 79 20 6f 74  there was any ot
0b70: 68 65 72 20 77 61 79 20 6f 66 20 64 65 74 65 63  her way of detec
0b80: 74 69 6e 67 0a 2a 2a 20 4d 69 6e 47 57 20 76 69  ting.** MinGW vi
0b90: 61 20 74 68 65 69 72 20 70 72 65 70 72 6f 63 65  a their preproce
0ba0: 73 73 6f 72 20 28 65 2e 67 2e 20 69 66 20 74 68  ssor (e.g. if th
0bb0: 65 79 20 63 75 73 74 6f 6d 69 7a 65 64 20 74 68  ey customized th
0bc0: 65 69 72 20 47 43 43 20 74 6f 20 64 65 66 69 6e  eir GCC to defin
0bd0: 65 0a 2a 2a 20 73 6f 6d 65 20 4d 69 6e 47 57 2d  e.** some MinGW-
0be0: 73 70 65 63 69 66 69 63 20 6d 61 63 72 6f 73 29  specific macros)
0bf0: 2e 20 20 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e  .  When compilin
0c00: 67 20 66 6f 72 20 4d 69 6e 47 57 2c 20 65 69 74  g for MinGW, eit
0c10: 68 65 72 20 74 68 65 0a 2a 2a 20 5f 48 41 56 45  her the.** _HAVE
0c20: 5f 4d 49 4e 47 57 5f 48 20 6f 72 20 5f 48 41 56  _MINGW_H or _HAV
0c30: 45 5f 5f 4d 49 4e 47 57 5f 48 20 28 6e 6f 74 65  E__MINGW_H (note
0c40: 20 74 68 65 20 65 78 74 72 61 20 75 6e 64 65 72   the extra under
0c50: 73 63 6f 72 65 29 20 6d 61 63 72 6f 20 6d 75 73  score) macro mus
0c60: 74 20 62 65 0a 2a 2a 20 64 65 66 69 6e 65 64 3b  t be.** defined;
0c70: 20 6f 74 68 65 72 77 69 73 65 2c 20 64 65 74 65   otherwise, dete
0c80: 63 74 69 6f 6e 20 6f 66 20 63 6f 6e 64 69 74 69  ction of conditi
0c90: 6f 6e 73 20 73 70 65 63 69 66 69 63 20 74 6f 20  ons specific to 
0ca0: 4d 69 6e 47 57 20 77 69 6c 6c 20 62 65 0a 2a 2a  MinGW will be.**
0cb0: 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69   disabled..*/.#i
0cc0: 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56 45 5f  f defined(_HAVE_
0cd0: 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75  MINGW_H).# inclu
0ce0: 64 65 20 22 6d 69 6e 67 77 2e 68 22 0a 23 65 6c  de "mingw.h".#el
0cf0: 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56 45  if defined(_HAVE
0d00: 5f 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63  __MINGW_H).# inc
0d10: 6c 75 64 65 20 22 5f 6d 69 6e 67 77 2e 68 22 0a  lude "_mingw.h".
0d20: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f  #endif../*.** Fo
0d30: 72 20 4d 69 6e 47 57 20 76 65 72 73 69 6f 6e 20  r MinGW version 
0d40: 34 2e 78 20 28 61 6e 64 20 68 69 67 68 65 72 29  4.x (and higher)
0d50: 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20 69  , check to see i
0d60: 66 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54  f the _USE_32BIT
0d70: 5f 54 49 4d 45 5f 54 0a 2a 2a 20 64 65 66 69 6e  _TIME_T.** defin
0d80: 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f  e is required to
0d90: 20 6d 61 69 6e 74 61 69 6e 20 62 69 6e 61 72 79   maintain binary
0da0: 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77   compatibility w
0db0: 69 74 68 20 74 68 65 20 4d 53 56 43 20 72 75 6e  ith the MSVC run
0dc0: 74 69 6d 65 0a 2a 2a 20 6c 69 62 72 61 72 79 20  time.** library 
0dd0: 69 6e 20 75 73 65 20 28 65 2e 67 2e 20 66 6f 72  in use (e.g. for
0de0: 20 57 69 6e 64 6f 77 73 20 58 50 29 2e 0a 2a 2f   Windows XP)..*/
0df0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f 55  .#if !defined(_U
0e00: 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54 29  SE_32BIT_TIME_T)
0e10: 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 55 53   && !defined(_US
0e20: 45 5f 36 34 42 49 54 5f 54 49 4d 45 5f 54 29 20  E_64BIT_TIME_T) 
0e30: 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  && \.    defined
0e40: 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65 66  (_WIN32) && !def
0e50: 69 6e 65 64 28 5f 57 49 4e 36 34 29 20 26 26 20  ined(_WIN64) && 
0e60: 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f  \.    defined(__
0e70: 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53  MINGW_MAJOR_VERS
0e80: 49 4f 4e 29 20 26 26 20 5f 5f 4d 49 4e 47 57 5f  ION) && __MINGW_
0e90: 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 20 3e 3d  MAJOR_VERSION >=
0ea0: 20 34 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69   4 && \.    defi
0eb0: 6e 65 64 28 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a  ned(__MSVCRT__).
0ec0: 23 20 64 65 66 69 6e 65 20 5f 55 53 45 5f 33 32  # define _USE_32
0ed0: 42 49 54 5f 54 49 4d 45 5f 54 0a 23 65 6e 64 69  BIT_TIME_T.#endi
0ee0: 66 0a 0a 2f 2a 20 54 68 65 20 70 75 62 6c 69 63  f../* The public
0ef0: 20 53 51 4c 69 74 65 20 69 6e 74 65 72 66 61 63   SQLite interfac
0f00: 65 2e 20 20 54 68 65 20 5f 46 49 4c 45 5f 4f 46  e.  The _FILE_OF
0f10: 46 53 45 54 5f 42 49 54 53 20 6d 61 63 72 6f 20  FSET_BITS macro 
0f20: 6d 75 73 74 20 61 70 70 65 61 72 0a 2a 2a 20 66  must appear.** f
0f30: 69 72 73 74 20 69 6e 20 51 4e 58 2e 20 20 41 6c  irst in QNX.  Al
0f40: 73 6f 2c 20 74 68 65 20 5f 55 53 45 5f 33 32 42  so, the _USE_32B
0f50: 49 54 5f 54 49 4d 45 5f 54 20 6d 61 63 72 6f 20  IT_TIME_T macro 
0f60: 6d 75 73 74 20 61 70 70 65 61 72 20 66 69 72 73  must appear firs
0f70: 74 20 66 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a  t for.** MinGW..
0f80: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c  */.#include "sql
0f90: 69 74 65 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49  ite3.h"../*.** I
0fa0: 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e 66 69  nclude the confi
0fb0: 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65 72 20  guration header 
0fc0: 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e 66 69  output by 'confi
0fd0: 67 75 72 65 27 20 69 66 20 77 65 27 72 65 20 75  gure' if we're u
0fe0: 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75 74 6f  sing the.** auto
0ff0: 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69 6c 64  conf-based build
1000: 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 48 41 56 45  .*/.#ifdef _HAVE
1010: 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48  _SQLITE_CONFIG_H
1020: 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66 69  .#include "confi
1030: 67 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 23 69 6e  g.h".#endif..#in
1040: 63 6c 75 64 65 20 22 73 71 6c 69 74 65 4c 69 6d  clude "sqliteLim
1050: 69 74 2e 68 22 0a 0a 2f 2a 20 44 69 73 61 62 6c  it.h"../* Disabl
1060: 65 20 6e 75 69 73 61 6e 63 65 20 77 61 72 6e 69  e nuisance warni
1070: 6e 67 73 20 6f 6e 20 42 6f 72 6c 61 6e 64 20 63  ngs on Borland c
1080: 6f 6d 70 69 6c 65 72 73 20 2a 2f 0a 23 69 66 20  ompilers */.#if 
1090: 64 65 66 69 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e  defined(__BORLAN
10a0: 44 43 5f 5f 29 0a 23 70 72 61 67 6d 61 20 77 61  DC__).#pragma wa
10b0: 72 6e 20 2d 72 63 68 20 2f 2a 20 75 6e 72 65 61  rn -rch /* unrea
10c0: 63 68 61 62 6c 65 20 63 6f 64 65 20 2a 2f 0a 23  chable code */.#
10d0: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 63 63  pragma warn -ccc
10e0: 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 20 69 73   /* Condition is
10f0: 20 61 6c 77 61 79 73 20 74 72 75 65 20 6f 72 20   always true or 
1100: 66 61 6c 73 65 20 2a 2f 0a 23 70 72 61 67 6d 61  false */.#pragma
1110: 20 77 61 72 6e 20 2d 61 75 73 20 2f 2a 20 41 73   warn -aus /* As
1120: 73 69 67 6e 65 64 20 76 61 6c 75 65 20 69 73 20  signed value is 
1130: 6e 65 76 65 72 20 75 73 65 64 20 2a 2f 0a 23 70  never used */.#p
1140: 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 73 75 20  ragma warn -csu 
1150: 2f 2a 20 43 6f 6d 70 61 72 69 6e 67 20 73 69 67  /* Comparing sig
1160: 6e 65 64 20 61 6e 64 20 75 6e 73 69 67 6e 65 64  ned and unsigned
1170: 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72 6e   */.#pragma warn
1180: 20 2d 73 70 61 20 2f 2a 20 53 75 73 70 69 63 69   -spa /* Suspici
1190: 6f 75 73 20 70 6f 69 6e 74 65 72 20 61 72 69 74  ous pointer arit
11a0: 68 6d 65 74 69 63 20 2a 2f 0a 23 65 6e 64 69 66  hmetic */.#endif
11b0: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20  ../*.** Include 
11c0: 73 74 61 6e 64 61 72 64 20 68 65 61 64 65 72 20  standard header 
11d0: 66 69 6c 65 73 20 61 73 20 6e 65 63 65 73 73 61  files as necessa
11e0: 72 79 0a 2a 2f 0a 23 69 66 64 65 66 20 48 41 56  ry.*/.#ifdef HAV
11f0: 45 5f 53 54 44 49 4e 54 5f 48 0a 23 69 6e 63 6c  E_STDINT_H.#incl
1200: 75 64 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a 23  ude <stdint.h>.#
1210: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41 56  endif.#ifdef HAV
1220: 45 5f 49 4e 54 54 59 50 45 53 5f 48 0a 23 69 6e  E_INTTYPES_H.#in
1230: 63 6c 75 64 65 20 3c 69 6e 74 74 79 70 65 73 2e  clude <inttypes.
1240: 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  h>.#endif../*.**
1250: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
1260: 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20 74  acros are used t
1270: 6f 20 63 61 73 74 20 70 6f 69 6e 74 65 72 73 20  o cast pointers 
1280: 74 6f 20 69 6e 74 65 67 65 72 73 20 61 6e 64 0a  to integers and.
1290: 2a 2a 20 69 6e 74 65 67 65 72 73 20 74 6f 20 70  ** integers to p
12a0: 6f 69 6e 74 65 72 73 2e 20 20 54 68 65 20 77 61  ointers.  The wa
12b0: 79 20 79 6f 75 20 64 6f 20 74 68 69 73 20 76 61  y you do this va
12c0: 72 69 65 73 20 66 72 6f 6d 20 6f 6e 65 20 63 6f  ries from one co
12d0: 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 74 68 65  mpiler.** to the
12e0: 20 6e 65 78 74 2c 20 73 6f 20 77 65 20 68 61 76   next, so we hav
12f0: 65 20 64 65 76 65 6c 6f 70 65 64 20 74 68 65 20  e developed the 
1300: 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 74 20 6f 66  following set of
1310: 20 23 69 66 20 73 74 61 74 65 6d 65 6e 74 73 0a   #if statements.
1320: 2a 2a 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ** to generate a
1330: 70 70 72 6f 70 72 69 61 74 65 20 6d 61 63 72 6f  ppropriate macro
1340: 73 20 66 6f 72 20 61 20 77 69 64 65 20 72 61 6e  s for a wide ran
1350: 67 65 20 6f 66 20 63 6f 6d 70 69 6c 65 72 73 2e  ge of compilers.
1360: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 72 72 65  .**.** The corre
1370: 63 74 20 22 41 4e 53 49 22 20 77 61 79 20 74 6f  ct "ANSI" way to
1380: 20 64 6f 20 74 68 69 73 20 69 73 20 74 6f 20 75   do this is to u
1390: 73 65 20 74 68 65 20 69 6e 74 70 74 72 5f 74 20  se the intptr_t 
13a0: 74 79 70 65 2e 20 0a 2a 2a 20 55 6e 66 6f 72 74  type. .** Unfort
13b0: 75 6e 61 74 65 6c 79 2c 20 74 68 61 74 20 74 79  unately, that ty
13c0: 70 65 64 65 66 20 69 73 20 6e 6f 74 20 61 76 61  pedef is not ava
13d0: 69 6c 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f  ilable on all co
13e0: 6d 70 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69  mpilers, or.** i
13f0: 66 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c  f it is availabl
1400: 65 2c 20 69 74 20 72 65 71 75 69 72 65 73 20 61  e, it requires a
1410: 6e 20 23 69 6e 63 6c 75 64 65 20 6f 66 20 73 70  n #include of sp
1420: 65 63 69 66 69 63 20 68 65 61 64 65 72 73 0a 2a  ecific headers.*
1430: 2a 20 74 68 61 74 20 76 61 72 79 20 66 72 6f 6d  * that vary from
1440: 20 6f 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f 20   one machine to 
1450: 74 68 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  the next..**.** 
1460: 54 69 63 6b 65 74 20 23 33 38 36 30 3a 20 20 54  Ticket #3860:  T
1470: 68 65 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20  he llvm-gcc-4.2 
1480: 63 6f 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41 70  compiler from Ap
1490: 70 6c 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a  ple chokes on.**
14a0: 20 74 68 65 20 28 28 76 6f 69 64 2a 29 26 28 28   the ((void*)&((
14b0: 63 68 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e  char*)0)[X]) con
14c0: 73 74 72 75 63 74 2e 20 20 42 75 74 20 4d 53 56  struct.  But MSV
14d0: 43 20 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f  C chokes on ((vo
14e0: 69 64 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20  id*)(X))..** So 
14f0: 77 65 20 68 61 76 65 20 74 6f 20 64 65 66 69 6e  we have to defin
1500: 65 20 74 68 65 20 6d 61 63 72 6f 73 20 69 6e 20  e the macros in 
1510: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 64  different ways d
1520: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a  epending on the.
1530: 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a  ** compiler..*/.
1540: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 50 54  #if defined(__PT
1550: 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f  RDIFF_TYPE__)  /
1560: 2a 20 54 68 69 73 20 63 61 73 65 20 73 68 6f 75  * This case shou
1570: 6c 64 20 77 6f 72 6b 20 66 6f 72 20 47 43 43 20  ld work for GCC 
1580: 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  */.# define SQLI
1590: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29  TE_INT_TO_PTR(X)
15a0: 20 20 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52    ((void*)(__PTR
15b0: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
15c0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
15d0: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
15e0: 28 28 69 6e 74 29 28 5f 5f 50 54 52 44 49 46 46  ((int)(__PTRDIFF
15f0: 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c  _TYPE__)(X)).#el
1600: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e  if !defined(__GN
1610: 55 43 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20 57  UC__)       /* W
1620: 6f 72 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65  orks for compile
1630: 72 73 20 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c  rs other than LL
1640: 56 4d 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53  VM */.# define S
1650: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
1660: 28 58 29 20 20 28 28 76 6f 69 64 2a 29 26 28 28  (X)  ((void*)&((
1670: 63 68 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64  char*)0)[X]).# d
1680: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
1690: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
16a0: 74 29 28 28 28 63 68 61 72 2a 29 58 29 2d 28 63  t)(((char*)X)-(c
16b0: 68 61 72 2a 29 30 29 29 0a 23 65 6c 69 66 20 64  har*)0)).#elif d
16c0: 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49  efined(HAVE_STDI
16d0: 4e 54 5f 48 29 20 20 20 2f 2a 20 55 73 65 20 74  NT_H)   /* Use t
16e0: 68 69 73 20 63 61 73 65 20 69 66 20 77 65 20 68  his case if we h
16f0: 61 76 65 20 41 4e 53 49 20 68 65 61 64 65 72 73  ave ANSI headers
1700: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
1710: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
1720: 29 20 20 28 28 76 6f 69 64 2a 29 28 69 6e 74 70  )  ((void*)(intp
1730: 74 72 5f 74 29 28 58 29 29 0a 23 20 64 65 66 69  tr_t)(X)).# defi
1740: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
1750: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
1760: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 65  intptr_t)(X)).#e
1770: 6c 73 65 20 20 20 20 20 20 20 20 20 20 20 20 20  lse             
1780: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1790: 47 65 6e 65 72 61 74 65 73 20 61 20 77 61 72 6e  Generates a warn
17a0: 69 6e 67 20 2d 20 62 75 74 20 69 74 20 61 6c 77  ing - but it alw
17b0: 61 79 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64  ays works */.# d
17c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
17d0: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
17e0: 69 64 2a 29 28 58 29 29 0a 23 20 64 65 66 69 6e  id*)(X)).# defin
17f0: 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f  e SQLITE_PTR_TO_
1800: 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 58  INT(X)  ((int)(X
1810: 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  )).#endif../*.**
1820: 20 41 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e 74   A macro to hint
1830: 20 74 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   to the compiler
1840: 20 74 68 61 74 20 61 20 66 75 6e 63 74 69 6f 6e   that a function
1850: 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a   should not be.*
1860: 2a 20 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23 69  * inlined..*/.#i
1870: 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43  f defined(__GNUC
1880: 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 53 51  __).#  define SQ
1890: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f  LITE_NOINLINE  _
18a0: 5f 61 74 74 72 69 62 75 74 65 5f 5f 28 28 6e 6f  _attribute__((no
18b0: 69 6e 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20 64  inline)).#elif d
18c0: 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29  efined(_MSC_VER)
18d0: 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33   && _MSC_VER>=13
18e0: 31 30 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c  10.#  define SQL
18f0: 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f  ITE_NOINLINE  __
1900: 64 65 63 6c 73 70 65 63 28 6e 6f 69 6e 6c 69 6e  declspec(noinlin
1910: 65 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  e).#else.#  defi
1920: 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49  ne SQLITE_NOINLI
1930: 4e 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  NE.#endif../*.**
1940: 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48 52 45   The SQLITE_THRE
1950: 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d 75 73  ADSAFE macro mus
1960: 74 20 62 65 20 64 65 66 69 6e 65 64 20 61 73 20  t be defined as 
1970: 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a 20 30  0, 1, or 2..** 0
1980: 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73 20 61   means mutexes a
1990: 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64  re permanently d
19a0: 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65 20 6c  isable and the l
19b0: 69 62 72 61 72 79 20 69 73 20 6e 65 76 65 72 0a  ibrary is never.
19c0: 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e 20 20  ** threadsafe.  
19d0: 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69 62 72  1 means the libr
19e0: 61 72 79 20 69 73 20 73 65 72 69 61 6c 69 7a 65  ary is serialize
19f0: 64 20 77 68 69 63 68 20 69 73 20 74 68 65 20 68  d which is the h
1a00: 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65 6c 20  ighest.** level 
1a10: 6f 66 20 74 68 72 65 61 64 73 61 66 65 74 79 2e  of threadsafety.
1a20: 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    2 means the li
1a30: 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69 74 68  brary is multith
1a40: 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69 70 6c  readed - multipl
1a50: 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63 61 6e  e.** threads can
1a60: 20 75 73 65 20 53 51 4c 69 74 65 20 61 73 20 6c   use SQLite as l
1a70: 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20 74 68  ong as no two th
1a80: 72 65 61 64 73 20 74 72 79 20 74 6f 20 75 73 65  reads try to use
1a90: 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64 61 74   the same.** dat
1aa0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
1ab0: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
1ac0: 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72 20 76  e..**.** Older v
1ad0: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
1ae0: 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69 6f 6e  e used an option
1af0: 61 6c 20 54 48 52 45 41 44 53 41 46 45 20 6d 61  al THREADSAFE ma
1b00: 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70 70 6f  cro..** We suppo
1b10: 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65 67 61  rt that for lega
1b20: 63 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  cy..*/.#if !defi
1b30: 6e 65 64 28 53 51 4c 49 54 45 5f 54 48 52 45 41  ned(SQLITE_THREA
1b40: 44 53 41 46 45 29 0a 23 20 69 66 20 64 65 66 69  DSAFE).# if defi
1b50: 6e 65 64 28 54 48 52 45 41 44 53 41 46 45 29 0a  ned(THREADSAFE).
1b60: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
1b70: 45 5f 54 48 52 45 41 44 53 41 46 45 20 54 48 52  E_THREADSAFE THR
1b80: 45 41 44 53 41 46 45 0a 23 20 65 6c 73 65 0a 23  EADSAFE.# else.#
1b90: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
1ba0: 5f 54 48 52 45 41 44 53 41 46 45 20 31 20 2f 2a  _THREADSAFE 1 /*
1bb0: 20 49 4d 50 3a 20 52 2d 30 37 32 37 32 2d 32 32   IMP: R-07272-22
1bc0: 33 30 39 20 2a 2f 0a 23 20 65 6e 64 69 66 0a 23  309 */.# endif.#
1bd0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77  endif../*.** Pow
1be0: 65 72 73 61 66 65 20 6f 76 65 72 77 72 69 74 65  ersafe overwrite
1bf0: 20 69 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c   is on by defaul
1c00: 74 2e 20 20 42 75 74 20 63 61 6e 20 62 65 20 74  t.  But can be t
1c10: 75 72 6e 65 64 20 6f 66 66 20 75 73 69 6e 67 0a  urned off using.
1c20: 2a 2a 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f  ** the -DSQLITE_
1c30: 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52  POWERSAFE_OVERWR
1c40: 49 54 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69  ITE=0 command-li
1c50: 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69  ne option..*/.#i
1c60: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 50 4f 57  fndef SQLITE_POW
1c70: 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45  ERSAFE_OVERWRITE
1c80: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1c90: 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57  _POWERSAFE_OVERW
1ca0: 52 49 54 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  RITE 1.#endif../
1cb0: 2a 0a 2a 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46  *.** EVIDENCE-OF
1cc0: 3a 20 52 2d 32 35 37 31 35 2d 33 37 30 37 32 20  : R-25715-37072 
1cd0: 4d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  Memory allocatio
1ce0: 6e 20 73 74 61 74 69 73 74 69 63 73 20 61 72 65  n statistics are
1cf0: 20 65 6e 61 62 6c 65 64 20 62 79 0a 2a 2a 20 64   enabled by.** d
1d00: 65 66 61 75 6c 74 20 75 6e 6c 65 73 73 20 53 51  efault unless SQ
1d10: 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64  Lite is compiled
1d20: 20 77 69 74 68 20 53 51 4c 49 54 45 5f 44 45 46   with SQLITE_DEF
1d30: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 3d 30  AULT_MEMSTATUS=0
1d40: 20 69 6e 0a 2a 2a 20 77 68 69 63 68 20 63 61 73   in.** which cas
1d50: 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
1d60: 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20 61  ion statistics a
1d70: 72 65 20 64 69 73 61 62 6c 65 64 20 62 79 20 64  re disabled by d
1d80: 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 21  efault..*/.#if !
1d90: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
1da0: 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53  EFAULT_MEMSTATUS
1db0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
1dc0: 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41  E_DEFAULT_MEMSTA
1dd0: 54 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  TUS 1.#endif../*
1de0: 0a 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20  .** Exactly one 
1df0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1e00: 20 6d 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20   macros must be 
1e10: 64 65 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72  defined in order
1e20: 20 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77   to.** specify w
1e30: 68 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  hich memory allo
1e40: 63 61 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d  cation subsystem
1e50: 20 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   to use..**.**  
1e60: 20 20 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d     SQLITE_SYSTEM
1e70: 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20  _MALLOC         
1e80: 20 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73   // Use normal s
1e90: 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a  ystem malloc().*
1ea0: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e  *     SQLITE_WIN
1eb0: 33 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20  32_MALLOC       
1ec0: 20 20 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32      // Use Win32
1ed0: 20 6e 61 74 69 76 65 20 68 65 61 70 20 41 50 49   native heap API
1ee0: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a  .**     SQLITE_Z
1ef0: 45 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20  ERO_MALLOC      
1f00: 20 20 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73        // Use a s
1f10: 74 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68  tub allocator th
1f20: 61 74 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a  at always fails.
1f30: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45  **     SQLITE_ME
1f40: 4d 44 45 42 55 47 20 20 20 20 20 20 20 20 20 20  MDEBUG          
1f50: 20 20 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e       // Debuggin
1f60: 67 20 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73  g version of sys
1f70: 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a  tem malloc().**.
1f80: 2a 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69  ** On Windows, i
1f90: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e  f the SQLITE_WIN
1fa0: 33 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41  32_MALLOC_VALIDA
1fb0: 54 45 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69  TE macro is defi
1fc0: 6e 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61  ned and the.** a
1fd0: 73 73 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73  ssert() macro is
1fe0: 20 65 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63   enabled, each c
1ff0: 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e  all into the Win
2000: 33 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 73  32 native heap s
2010: 75 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c  ubsystem.** will
2020: 20 63 61 75 73 65 20 48 65 61 70 56 61 6c 69 64   cause HeapValid
2030: 61 74 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64  ate to be called
2040: 2e 20 20 49 66 20 68 65 61 70 20 76 61 6c 69 64  .  If heap valid
2050: 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69  ation should fai
2060: 6c 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69  l, an.** asserti
2070: 6f 6e 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67  on will be trigg
2080: 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e  ered..**.** If n
2090: 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65  one of the above
20a0: 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68   are defined, th
20b0: 65 6e 20 73 65 74 20 53 51 4c 49 54 45 5f 53 59  en set SQLITE_SY
20c0: 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a  STEM_MALLOC as.*
20d0: 2a 20 74 68 65 20 64 65 66 61 75 6c 74 2e 0a 2a  * the default..*
20e0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
20f0: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
2100: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
2110: 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d  d(SQLITE_WIN32_M
2120: 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66  ALLOC) \.  + def
2130: 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f  ined(SQLITE_ZERO
2140: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
2150: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45  efined(SQLITE_ME
2160: 4d 44 45 42 55 47 29 3e 31 0a 23 20 65 72 72 6f  MDEBUG)>1.# erro
2170: 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20 6f  r "Two or more o
2180: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
2190: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e  compile-time con
21a0: 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f  figuration optio
21b0: 6e 73 5c 0a 20 61 72 65 20 64 65 66 69 6e 65 64  ns\. are defined
21c0: 20 62 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e 65   but at most one
21d0: 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53   is allowed:\. S
21e0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
21f0: 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e 33  LOC, SQLITE_WIN3
2200: 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45  2_MALLOC, SQLITE
2210: 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51 4c  _MEMDEBUG,\. SQL
2220: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22  ITE_ZERO_MALLOC"
2230: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
2240: 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45  ned(SQLITE_SYSTE
2250: 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  M_MALLOC) \.  + 
2260: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57  defined(SQLITE_W
2270: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  IN32_MALLOC) \. 
2280: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
2290: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c  E_ZERO_MALLOC) \
22a0: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
22b0: 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d 30  ITE_MEMDEBUG)==0
22c0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
22d0: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31  _SYSTEM_MALLOC 1
22e0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
22f0: 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f  f SQLITE_MALLOC_
2300: 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f  SOFT_LIMIT is no
2310: 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79  t zero, then try
2320: 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20   to keep the.** 
2330: 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20  sizes of memory 
2340: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f  allocations belo
2350: 77 20 74 68 69 73 20 76 61 6c 75 65 20 77 68 65  w this value whe
2360: 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a  re possible..*/.
2370: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2380: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
2390: 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20  LIMIT).# define 
23a0: 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f  SQLITE_MALLOC_SO
23b0: 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65  FT_LIMIT 1024.#e
23c0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e  ndif../*.** We n
23d0: 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58  eed to define _X
23e0: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66  OPEN_SOURCE as f
23f0: 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20  ollows in order 
2400: 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63  to enable.** rec
2410: 75 72 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f  ursive mutexes o
2420: 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74  n most Unix syst
2430: 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64 28 29  ems and fchmod()
2440: 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20   on OpenBSD..** 
2450: 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  But _XOPEN_SOURC
2460: 45 20 64 65 66 69 6e 65 20 63 61 75 73 65 73 20  E define causes 
2470: 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63  problems for Mac
2480: 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a   OS X, so omit.*
2490: 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  * it..*/.#if !de
24a0: 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55  fined(_XOPEN_SOU
24b0: 52 43 45 29 20 26 26 20 21 64 65 66 69 6e 65 64  RCE) && !defined
24c0: 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20  (__DARWIN__) && 
24d0: 21 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45  !defined(__APPLE
24e0: 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 5f 58  __).#  define _X
24f0: 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a  OPEN_SOURCE 600.
2500: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44  #endif../*.** ND
2510: 45 42 55 47 20 61 6e 64 20 53 51 4c 49 54 45 5f  EBUG and SQLITE_
2520: 44 45 42 55 47 20 61 72 65 20 6f 70 70 6f 73 69  DEBUG are opposi
2530: 74 65 73 2e 20 20 49 74 20 73 68 6f 75 6c 64 20  tes.  It should 
2540: 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20 74  always be true t
2550: 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e  hat.** defined(N
2560: 44 45 42 55 47 29 3d 3d 21 64 65 66 69 6e 65 64  DEBUG)==!defined
2570: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 2e 20  (SQLITE_DEBUG). 
2580: 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20   If this is not 
2590: 63 75 72 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a  currently true,.
25a0: 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72 75 65 20  ** make it true 
25b0: 62 79 20 64 65 66 69 6e 69 6e 67 20 6f 72 20 75  by defining or u
25c0: 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45 42 55 47  ndefining NDEBUG
25d0: 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20  ..**.** Setting 
25e0: 4e 44 45 42 55 47 20 6d 61 6b 65 73 20 74 68 65  NDEBUG makes the
25f0: 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e   code smaller an
2600: 64 20 66 61 73 74 65 72 20 62 79 20 64 69 73 61  d faster by disa
2610: 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73  bling the.** ass
2620: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
2630: 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53   in the code.  S
2640: 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20 64 65  o we want the de
2650: 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20  fault action.** 
2660: 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47  to be for NDEBUG
2670: 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e   to be set and N
2680: 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65  DEBUG to be unde
2690: 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51  fined only if SQ
26a0: 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73  LITE_DEBUG.** is
26b0: 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42   set.  Thus NDEB
26c0: 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70  UG becomes an op
26d0: 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e  t-in rather than
26e0: 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66   an opt-out.** f
26f0: 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21  eature..*/.#if !
2700: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20  defined(NDEBUG) 
2710: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
2720: 54 45 5f 44 45 42 55 47 29 20 0a 23 20 64 65 66  TE_DEBUG) .# def
2730: 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e  ine NDEBUG 1.#en
2740: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
2750: 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69 6e  NDEBUG) && defin
2760: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
2770: 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a  .# undef NDEBUG.
2780: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e  #endif../*.** En
2790: 61 62 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  able SQLITE_ENAB
27a0: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
27b0: 4e 54 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45  NTS if SQLITE_DE
27c0: 42 55 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e  BUG is turned on
27d0: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
27e0: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
27f0: 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53  EXPLAIN_COMMENTS
2800: 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
2810: 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66  ITE_DEBUG).# def
2820: 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
2830: 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e  E_EXPLAIN_COMMEN
2840: 54 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  TS 1.#endif../*.
2850: 2a 2a 20 54 68 65 20 74 65 73 74 63 61 73 65 28  ** The testcase(
2860: 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  ) macro is used 
2870: 74 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61  to aid in covera
2880: 67 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65  ge testing.  Whe
2890: 6e 20 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65  n .** doing cove
28a0: 72 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68  rage testing, th
28b0: 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69  e condition insi
28c0: 64 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  de the argument 
28d0: 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29  to.** testcase()
28e0: 20 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61 74   must be evaluat
28f0: 65 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64  ed both true and
2900: 20 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20   false in order 
2910: 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62  to.** get full b
2920: 72 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20  ranch coverage. 
2930: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
2940: 6d 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65  macro is inserte
2950: 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73  d.** to help ens
2960: 75 72 65 20 61 64 65 71 75 61 74 65 20 74 65 73  ure adequate tes
2970: 74 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c  t coverage in pl
2980: 61 63 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c  aces where simpl
2990: 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64  e.** condition/d
29a0: 65 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65  ecision coverage
29b0: 20 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20   is inadequate. 
29c0: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65   For example, te
29d0: 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20  stcase().** can 
29e0: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
29f0: 73 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61  sure boundary va
2a00: 6c 75 65 73 20 61 72 65 20 74 65 73 74 65 64 2e  lues are tested.
2a10: 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b    For.** bitmask
2a20: 20 74 65 73 74 73 2c 20 74 65 73 74 63 61 73 65   tests, testcase
2a30: 28 29 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  () can be used t
2a40: 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68  o make sure each
2a50: 20 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69   bit.** is signi
2a60: 66 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20  ficant and used 
2a70: 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20  at least once.  
2a80: 4f 6e 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  On switch statem
2a90: 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75  ents.** where mu
2aa0: 6c 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20  ltiple cases go 
2ab0: 74 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63  to the same bloc
2ac0: 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63  k of code, testc
2ad0: 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73  ase().** can ins
2ae0: 75 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73  ure that all cas
2af0: 65 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  es are evaluated
2b00: 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ..**.*/.#ifdef S
2b10: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
2b20: 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  EST.  void sqlit
2b30: 65 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b  e3Coverage(int);
2b40: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
2b50: 73 65 28 58 29 20 20 69 66 28 20 58 20 29 7b 20  se(X)  if( X ){ 
2b60: 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28  sqlite3Coverage(
2b70: 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c  __LINE__); }.#el
2b80: 73 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74  se.# define test
2b90: 63 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a  case(X).#endif..
2ba0: 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e  /*.** The TESTON
2bb0: 4c 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  LY macro is used
2bc0: 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69   to enclose vari
2bd0: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
2be0: 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69  s or.** other bi
2bf0: 74 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  ts of code that 
2c00: 61 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75  are needed to su
2c10: 70 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65  pport the argume
2c20: 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65  nts.** within te
2c30: 73 74 63 61 73 65 28 29 20 61 6e 64 20 61 73 73  stcase() and ass
2c40: 65 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f  ert() macros..*/
2c50: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  .#if !defined(ND
2c60: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
2c70: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
2c80: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
2c90: 54 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23  TESTONLY(X)  X.#
2ca0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45  else.# define TE
2cb0: 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66  STONLY(X).#endif
2cc0: 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65  ../*.** Sometime
2cd0: 73 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c  s we need a smal
2ce0: 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65  l amount of code
2cf0: 20 73 75 63 68 20 61 73 20 61 20 76 61 72 69 61   such as a varia
2d00: 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ble initializati
2d10: 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66  on.** to setup f
2d20: 6f 72 20 61 20 6c 61 74 65 72 20 61 73 73 65 72  or a later asser
2d30: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  t() statement.  
2d40: 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  We do not want t
2d50: 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61  his code to.** a
2d60: 70 70 65 61 72 20 77 68 65 6e 20 61 73 73 65 72  ppear when asser
2d70: 74 28 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e  t() is disabled.
2d80: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
2d90: 6d 61 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f  macro is therefo
2da0: 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f  re.** used to co
2db0: 6e 74 61 69 6e 20 74 68 61 74 20 73 65 74 75 70  ntain that setup
2dc0: 20 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41   code.  The "VVA
2dd0: 22 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73  " acronym stands
2de0: 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63   for.** "Verific
2df0: 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f  ation, Validatio
2e00: 6e 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74 61  n, and Accredita
2e10: 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72  tion".  In other
2e20: 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63   words, the.** c
2e30: 6f 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f  ode within VVA_O
2e40: 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20  NLY() will only 
2e50: 72 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66  run during verif
2e60: 69 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65  ication processe
2e70: 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44  s..*/.#ifndef ND
2e80: 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56  EBUG.# define VV
2e90: 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  A_ONLY(X)  X.#el
2ea0: 73 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  se.# define VVA_
2eb0: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
2ec0: 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53  /*.** The ALWAYS
2ed0: 20 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f   and NEVER macro
2ee0: 73 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65  s surround boole
2ef0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77  an expressions w
2f00: 68 69 63 68 20 0a 2a 2a 20 61 72 65 20 69 6e 74  hich .** are int
2f10: 65 6e 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20  ended to always 
2f20: 62 65 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  be true or false
2f30: 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
2f40: 20 53 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73   Such.** express
2f50: 69 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d  ions could be om
2f60: 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63  itted from the c
2f70: 6f 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20  ode completely. 
2f80: 20 42 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65   But they.** are
2f90: 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66   included in a f
2fa0: 65 77 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65  ew cases in orde
2fb0: 72 20 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65  r to enhance the
2fc0: 20 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f   resilience.** o
2fd0: 66 20 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78  f SQLite to unex
2fe0: 70 65 63 74 65 64 20 62 65 68 61 76 69 6f 72 20  pected behavior 
2ff0: 2d 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f  - to make the co
3000: 64 65 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67  de "self-healing
3010: 22 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65  ".** or "ductile
3020: 22 20 72 61 74 68 65 72 20 74 68 61 6e 20 62 65  " rather than be
3030: 69 6e 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e  ing "brittle" an
3040: 64 20 63 72 61 73 68 69 6e 67 20 61 74 20 74 68  d crashing at th
3050: 65 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20  e first.** hint 
3060: 6f 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68  of unplanned beh
3070: 61 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  avior..**.** In 
3080: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57  other words, ALW
3090: 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72  AYS and NEVER ar
30a0: 65 20 61 64 64 65 64 20 66 6f 72 20 64 65 66 65  e added for defe
30b0: 6e 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a  nsive code..**.*
30c0: 2a 20 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76  * When doing cov
30d0: 65 72 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c  erage testing AL
30e0: 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61  WAYS and NEVER a
30f0: 72 65 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f  re hard-coded to
3100: 0a 2a 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20  .** be true and 
3110: 66 61 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68  false so that th
3120: 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f  e unreachable co
3130: 64 65 20 74 68 65 79 20 73 70 65 63 69 66 79 20  de they specify 
3140: 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63  will.** not be c
3150: 6f 75 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74  ounted as untest
3160: 65 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20  ed code..*/.#if 
3170: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43  defined(SQLITE_C
3180: 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20  OVERAGE_TEST).# 
3190: 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29  define ALWAYS(X)
31a0: 20 20 20 20 20 20 28 31 29 0a 23 20 64 65 66 69        (1).# defi
31b0: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
31c0: 20 20 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66    (0).#elif !def
31d0: 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64  ined(NDEBUG).# d
31e0: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
31f0: 20 20 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73       ((X)?1:(ass
3200: 65 72 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66  ert(0),0)).# def
3210: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
3220: 20 20 20 28 28 58 29 3f 28 61 73 73 65 72 74 28     ((X)?(assert(
3230: 30 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23  0),1):0).#else.#
3240: 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58   define ALWAYS(X
3250: 29 20 20 20 20 20 20 28 58 29 0a 23 20 64 65 66  )      (X).# def
3260: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
3270: 20 20 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f     (X).#endif../
3280: 2a 0a 2a 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e  *.** Declaration
3290: 73 20 75 73 65 64 20 66 6f 72 20 74 72 61 63 69  s used for traci
32a0: 6e 67 20 74 68 65 20 6f 70 65 72 61 74 69 6e 67  ng the operating
32b0: 20 73 79 73 74 65 6d 20 69 6e 74 65 72 66 61 63   system interfac
32c0: 65 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  es..*/.#if defin
32d0: 65 64 28 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f  ed(SQLITE_FORCE_
32e0: 4f 53 5f 54 52 41 43 45 29 20 7c 7c 20 64 65 66  OS_TRACE) || def
32f0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
3300: 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69  ) || \.    (defi
3310: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3320: 29 20 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57  ) && SQLITE_OS_W
3330: 49 4e 29 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  IN).  extern int
3340: 20 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65 3b   sqlite3OSTrace;
3350: 0a 23 20 64 65 66 69 6e 65 20 4f 53 54 52 41 43  .# define OSTRAC
3360: 45 28 58 29 20 20 20 20 20 20 20 20 20 20 69 66  E(X)          if
3370: 28 20 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65  ( sqlite3OSTrace
3380: 20 29 20 73 71 6c 69 74 65 33 44 65 62 75 67 50   ) sqlite3DebugP
3390: 72 69 6e 74 66 20 58 0a 23 20 64 65 66 69 6e 65  rintf X.# define
33a0: 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f   SQLITE_HAVE_OS_
33b0: 54 52 41 43 45 0a 23 65 6c 73 65 0a 23 20 64 65  TRACE.#else.# de
33c0: 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58 29 0a  fine OSTRACE(X).
33d0: 23 20 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f  # undef  SQLITE_
33e0: 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65  HAVE_OS_TRACE.#e
33f0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74  ndif../*.** Is t
3400: 68 65 20 73 71 6c 69 74 65 33 45 72 72 4e 61 6d  he sqlite3ErrNam
3410: 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65  e() function nee
3420: 64 65 64 20 69 6e 20 74 68 65 20 62 75 69 6c 64  ded in the build
3430: 3f 20 20 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a  ?  Currently,.**
3440: 20 69 74 20 69 73 20 6e 65 65 64 65 64 20 62 79   it is needed by
3450: 20 22 6d 75 74 65 78 5f 77 33 32 2e 63 22 20 28   "mutex_w32.c" (
3460: 77 68 65 6e 20 64 65 62 75 67 67 69 6e 67 29 2c  when debugging),
3470: 20 22 6f 73 5f 77 69 6e 2e 63 22 20 28 77 68 65   "os_win.c" (whe
3480: 6e 0a 2a 2a 20 4f 53 54 52 41 43 45 20 69 73 20  n.** OSTRACE is 
3490: 65 6e 61 62 6c 65 64 29 2c 20 61 6e 64 20 62 79  enabled), and by
34a0: 20 73 65 76 65 72 61 6c 20 22 74 65 73 74 2a 2e   several "test*.
34b0: 63 22 20 66 69 6c 65 73 20 28 77 68 69 63 68 20  c" files (which 
34c0: 61 72 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20  are.** compiled 
34d0: 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53  using SQLITE_TES
34e0: 54 29 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  T)..*/.#if defin
34f0: 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f  ed(SQLITE_HAVE_O
3500: 53 5f 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69  S_TRACE) || defi
3510: 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
3520: 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e   || \.    (defin
3530: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
3540: 20 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49   && SQLITE_OS_WI
3550: 4e 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  N).# define SQLI
3560: 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45  TE_NEED_ERR_NAME
3570: 0a 23 65 6c 73 65 0a 23 20 75 6e 64 65 66 20 20  .#else.# undef  
3580: 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f  SQLITE_NEED_ERR_
3590: 4e 41 4d 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  NAME.#endif../*.
35a0: 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 28  ** Return true (
35b0: 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74 68 65  non-zero) if the
35c0: 20 69 6e 70 75 74 20 69 73 20 61 6e 20 69 6e 74   input is an int
35d0: 65 67 65 72 20 74 68 61 74 20 69 73 20 74 6f 6f  eger that is too
35e0: 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74   large.** to fit
35f0: 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20 54 68   in 32-bits.  Th
3600: 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  is macro is used
3610: 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72 69 6f   inside of vario
3620: 75 73 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a  us testcase().**
3630: 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72 69 66   macros to verif
3640: 79 20 74 68 61 74 20 77 65 20 68 61 76 65 20 74  y that we have t
3650: 65 73 74 65 64 20 53 51 4c 69 74 65 20 66 6f 72  ested SQLite for
3660: 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75 70 70   large-file supp
3670: 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ort..*/.#define 
3680: 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20 20 28  IS_BIG_INT(X)  (
3690: 28 28 58 29 26 7e 28 69 36 34 29 30 78 66 66 66  ((X)&~(i64)0xfff
36a0: 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a  fffff)!=0)../*.*
36b0: 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69  * The macro unli
36c0: 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69 6e 74  kely() is a hint
36d0: 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64 73 20   that surrounds 
36e0: 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70  a boolean.** exp
36f0: 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
3700: 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20  usually false.  
3710: 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73  Macro likely() s
3720: 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f  urrounds.** a bo
3730: 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
3740: 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79   that is usually
3750: 20 74 72 75 65 2e 20 20 54 68 65 73 65 20 68 69   true.  These hi
3760: 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e  nts could,.** in
3770: 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73 65 64   theory, be used
3780: 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   by the compiler
3790: 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62 65 74   to generate bet
37a0: 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a  ter code, but.**
37b0: 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65 79 20   currently they 
37c0: 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74  are just comment
37d0: 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65 61 64  s for human read
37e0: 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ers..*/.#define 
37f0: 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28 58 29  likely(X)    (X)
3800: 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c  .#define unlikel
3810: 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c  y(X)  (X)..#incl
3820: 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23 69 6e  ude "hash.h".#in
3830: 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68 22 0a  clude "parse.h".
3840: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e  #include <stdio.
3850: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h>.#include <std
3860: 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  lib.h>.#include 
3870: 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c  <string.h>.#incl
3880: 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23  ude <assert.h>.#
3890: 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65 66 2e  include <stddef.
38a0: 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d  h>../*.** If com
38b0: 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70 72 6f  piling for a pro
38c0: 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61 63 6b  cessor that lack
38d0: 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  s floating point
38e0: 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62   support,.** sub
38f0: 73 74 69 74 75 74 65 20 69 6e 74 65 67 65 72 20  stitute integer 
3900: 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69  for floating-poi
3910: 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  nt.*/.#ifdef SQL
3920: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
3930: 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65  G_POINT.# define
3940: 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f 69   double sqlite_i
3950: 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 66 6c  nt64.# define fl
3960: 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  oat sqlite_int64
3970: 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f  .# define LONGDO
3980: 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74 65  UBLE_TYPE sqlite
3990: 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65 66 20  _int64.# ifndef 
39a0: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23  SQLITE_BIG_DBL.#
39b0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
39c0: 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71 6c 69  _BIG_DBL (((sqli
39d0: 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30  te3_int64)1)<<50
39e0: 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69  ).# endif.# defi
39f0: 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  ne SQLITE_OMIT_D
3a00: 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a  ATETIME_FUNCS 1.
3a10: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3a20: 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23 20 75  OMIT_TRACE 1.# u
3a30: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49 58 45  ndef SQLITE_MIXE
3a40: 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46  D_ENDIAN_64BIT_F
3a50: 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53 51 4c  LOAT.# undef SQL
3a60: 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23  ITE_HAVE_ISNAN.#
3a70: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
3a80: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64  LITE_BIG_DBL.# d
3a90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
3aa0: 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65 6e 64  _DBL (1e99).#end
3ab0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54  if../*.** OMIT_T
3ac0: 45 4d 50 44 42 20 69 73 20 73 65 74 20 74 6f 20  EMPDB is set to 
3ad0: 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  1 if SQLITE_OMIT
3ae0: 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66 69 6e  _TEMPDB is defin
3af0: 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65  ed, or 0.** afte
3b00: 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20 74 68  rward. Having th
3b10: 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20  is macro allows 
3b20: 75 73 20 74 6f 20 63 61 75 73 65 20 74 68 65 20  us to cause the 
3b30: 43 20 63 6f 6d 70 69 6c 65 72 20 0a 2a 2a 20 74  C compiler .** t
3b40: 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65 64  o omit code used
3b50: 20 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73 20   by TEMP tables 
3b60: 77 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23 69  without messy #i
3b70: 66 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74 73  fndef statements
3b80: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
3b90: 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23  TE_OMIT_TEMPDB.#
3ba0: 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50  define OMIT_TEMP
3bb0: 44 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66 69  DB 1.#else.#defi
3bc0: 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30  ne OMIT_TEMPDB 0
3bd0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
3be0: 68 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74 22  he "file format"
3bf0: 20 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69 6e   number is an in
3c00: 74 65 67 65 72 20 74 68 61 74 20 69 73 20 69 6e  teger that is in
3c10: 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76  cremented whenev
3c20: 65 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c  er.** the VDBE-l
3c30: 65 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74  evel file format
3c40: 20 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20 66   changes.  The f
3c50: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
3c60: 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68  define the.** th
3c70: 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20 66  e default file f
3c80: 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64 61  ormat for new da
3c90: 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65 20  tabases and the 
3ca0: 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72  maximum file for
3cb0: 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65 20  mat.** that the 
3cc0: 6c 69 62 72 61 72 79 20 63 61 6e 20 72 65 61 64  library can read
3cd0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
3ce0: 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52  ITE_MAX_FILE_FOR
3cf0: 4d 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53 51  MAT 4.#ifndef SQ
3d00: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c  LITE_DEFAULT_FIL
3d10: 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e  E_FORMAT.# defin
3d20: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
3d30: 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23  _FILE_FORMAT 4.#
3d40: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74  endif../*.** Det
3d50: 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74  ermine whether t
3d60: 72 69 67 67 65 72 73 20 61 72 65 20 72 65 63 75  riggers are recu
3d70: 72 73 69 76 65 20 62 79 20 64 65 66 61 75 6c 74  rsive by default
3d80: 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a 2a  .  This can be.*
3d90: 2a 20 63 68 61 6e 67 65 64 20 61 74 20 72 75 6e  * changed at run
3da0: 2d 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70 72  -time using a pr
3db0: 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  agma..*/.#ifndef
3dc0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
3dd0: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
3de0: 52 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  RS.# define SQLI
3df0: 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52  TE_DEFAULT_RECUR
3e00: 53 49 56 45 5f 54 52 49 47 47 45 52 53 20 30 0a  SIVE_TRIGGERS 0.
3e10: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72  #endif../*.** Pr
3e20: 6f 76 69 64 65 20 61 20 64 65 66 61 75 6c 74 20  ovide a default 
3e30: 76 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54 45  value for SQLITE
3e40: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63  _TEMP_STORE in c
3e50: 61 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73 70  ase it is not sp
3e60: 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68  ecified.** on th
3e70: 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a  e command-line.*
3e80: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
3e90: 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65  _TEMP_STORE.# de
3ea0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50  fine SQLITE_TEMP
3eb0: 5f 53 54 4f 52 45 20 31 0a 23 20 64 65 66 69 6e  _STORE 1.# defin
3ec0: 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  e SQLITE_TEMP_ST
3ed0: 4f 52 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63  ORE_xc 1  /* Exc
3ee0: 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e  lude from ctime.
3ef0: 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  c */.#endif../*.
3f00: 2a 2a 20 49 66 20 6e 6f 20 76 61 6c 75 65 20 68  ** If no value h
3f10: 61 73 20 62 65 65 6e 20 70 72 6f 76 69 64 65 64  as been provided
3f20: 20 66 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f   for SQLITE_MAX_
3f30: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20  WORKER_THREADS, 
3f40: 6f 72 20 69 66 0a 2a 2a 20 53 51 4c 49 54 45 5f  or if.** SQLITE_
3f50: 54 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 73 65  TEMP_STORE is se
3f60: 74 20 74 6f 20 33 20 28 6e 65 76 65 72 20 75 73  t to 3 (never us
3f70: 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65  e temporary file
3f80: 73 29 2c 20 73 65 74 20 69 74 20 0a 2a 2a 20 74  s), set it .** t
3f90: 6f 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53  o zero..*/.#if S
3fa0: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
3fb0: 3d 3d 33 20 7c 7c 20 53 51 4c 49 54 45 5f 54 48  ==3 || SQLITE_TH
3fc0: 52 45 41 44 53 41 46 45 3d 3d 30 0a 23 20 75 6e  READSAFE==0.# un
3fd0: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  def SQLITE_MAX_W
3fe0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
3ff0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
4000: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
4010: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   0.#endif.#ifnde
4020: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
4030: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
4040: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
4050: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 38  WORKER_THREADS 8
4060: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
4070: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
4080: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
4090: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
40a0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
40b0: 45 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69  EADS 0.#endif.#i
40c0: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
40d0: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e  _WORKER_THREADS>
40e0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
40f0: 52 5f 54 48 52 45 41 44 53 0a 23 20 75 6e 64 65  R_THREADS.# unde
4100: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
4110: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
4120: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
4130: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 53  WORKER_THREADS S
4140: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
4150: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 65 6e  RKER_THREADS.#en
4160: 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20  dif.../*.** GCC 
4170: 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20  does not define 
4180: 74 68 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d  the offsetof() m
4190: 61 63 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61  acro so we'll ha
41a0: 76 65 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f  ve to do it.** o
41b0: 75 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66  urselves..*/.#if
41c0: 6e 64 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64  ndef offsetof.#d
41d0: 65 66 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53  efine offsetof(S
41e0: 54 52 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20  TRUCTURE,FIELD) 
41f0: 28 28 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28  ((int)((char*)&(
4200: 28 53 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e  (STRUCTURE*)0)->
4210: 46 49 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a  FIELD)).#endif..
4220: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
4230: 63 6f 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20  compute minimum 
4240: 61 6e 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74  and maximum of t
4250: 77 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23  wo numbers..*/.#
4260: 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29 20  define MIN(A,B) 
4270: 28 28 41 29 3c 28 42 29 3f 28 41 29 3a 28 42 29  ((A)<(B)?(A):(B)
4280: 29 0a 23 64 65 66 69 6e 65 20 4d 41 58 28 41 2c  ).#define MAX(A,
4290: 42 29 20 28 28 41 29 3e 28 42 29 3f 28 41 29 3a  B) ((A)>(B)?(A):
42a0: 28 42 29 29 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70  (B))../*.** Swap
42b0: 20 74 77 6f 20 6f 62 6a 65 63 74 73 20 6f 66 20   two objects of 
42c0: 74 79 70 65 20 54 59 50 45 2e 0a 2a 2f 0a 23 64  type TYPE..*/.#d
42d0: 65 66 69 6e 65 20 53 57 41 50 28 54 59 50 45 2c  efine SWAP(TYPE,
42e0: 41 2c 42 29 20 7b 54 59 50 45 20 74 3d 41 3b 20  A,B) {TYPE t=A; 
42f0: 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a  A=B; B=t;}../*.*
4300: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
4310: 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75  f this machine u
4320: 73 65 73 20 45 42 43 44 49 43 2e 20 20 28 59 65  ses EBCDIC.  (Ye
4330: 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72  s, believe it or
4340: 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61  .** not, there a
4350: 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65  re still machine
4360: 73 20 6f 75 74 20 74 68 65 72 65 20 74 68 61 74  s out there that
4370: 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f   use EBCDIC.).*/
4380: 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30  .#if 'A' == '\30
4390: 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1'.# define SQLI
43a0: 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73  TE_EBCDIC 1.#els
43b0: 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  e.# define SQLIT
43c0: 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66  E_ASCII 1.#endif
43d0: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73  ../*.** Integers
43e0: 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e   of known sizes.
43f0: 20 20 54 68 65 73 65 20 74 79 70 65 64 65 66 73    These typedefs
4400: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f   might change fo
4410: 72 20 61 72 63 68 69 74 65 63 74 75 72 65 73 0a  r architectures.
4420: 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73 69 7a  ** where the siz
4430: 65 73 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f  es very.  Prepro
4440: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72  cessor macros ar
4450: 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74  e available so t
4460: 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73  hat the.** types
4470: 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65   can be convenie
4480: 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61  ntly redefined a
4490: 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20  t compile-type. 
44a0: 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a   Like this:.**.*
44b0: 2a 20 20 20 20 20 20 20 20 20 63 63 20 27 2d 44  *         cc '-D
44c0: 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e  UINTPTR_TYPE=lon
44d0: 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a  g long int' ....
44e0: 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33  */.#ifndef UINT3
44f0: 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  2_TYPE.# ifdef H
4500: 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20  AVE_UINT32_T.#  
4510: 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59  define UINT32_TY
4520: 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c  PE uint32_t.# el
4530: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
4540: 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  T32_TYPE unsigne
4550: 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  d int.# endif.#e
4560: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e  ndif.#ifndef UIN
4570: 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T16_TYPE.# ifdef
4580: 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23   HAVE_UINT16_T.#
4590: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f    define UINT16_
45a0: 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20  TYPE uint16_t.# 
45b0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
45c0: 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67  INT16_TYPE unsig
45d0: 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  ned short int.# 
45e0: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
45f0: 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a  ndef INT16_TYPE.
4600: 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54  # ifdef HAVE_INT
4610: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49  16_T.#  define I
4620: 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f  NT16_TYPE int16_
4630: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
4640: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68  ne INT16_TYPE sh
4650: 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ort int.# endif.
4660: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
4670: 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65  INT8_TYPE.# ifde
4680: 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23  f HAVE_UINT8_T.#
4690: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
46a0: 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c  YPE uint8_t.# el
46b0: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
46c0: 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  T8_TYPE unsigned
46d0: 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65   char.# endif.#e
46e0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54  ndif.#ifndef INT
46f0: 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  8_TYPE.# ifdef H
4700: 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65  AVE_INT8_T.#  de
4710: 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69  fine INT8_TYPE i
4720: 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  nt8_t.# else.#  
4730: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
4740: 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65   signed char.# e
4750: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
4760: 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  def LONGDOUBLE_T
4770: 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e  YPE.# define LON
4780: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e  GDOUBLE_TYPE lon
4790: 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a  g double.#endif.
47a0: 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69  typedef sqlite_i
47b0: 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20 20 20  nt64 i64;       
47c0: 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67     /* 8-byte sig
47d0: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
47e0: 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69  ypedef sqlite_ui
47f0: 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20 20 20  nt64 u64;       
4800: 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69    /* 8-byte unsi
4810: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
4820: 74 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54  typedef UINT32_T
4830: 59 50 45 20 75 33 32 3b 20 20 20 20 20 20 20 20  YPE u32;        
4840: 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73     /* 4-byte uns
4850: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
4860: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f  .typedef UINT16_
4870: 54 59 50 45 20 75 31 36 3b 20 20 20 20 20 20 20  TYPE u16;       
4880: 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e      /* 2-byte un
4890: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
48a0: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f  /.typedef INT16_
48b0: 54 59 50 45 20 69 31 36 3b 20 20 20 20 20 20 20  TYPE i16;       
48c0: 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73       /* 2-byte s
48d0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
48e0: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54  .typedef UINT8_T
48f0: 59 50 45 20 75 38 3b 20 20 20 20 20 20 20 20 20  YPE u8;         
4900: 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e      /* 1-byte un
4910: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
4920: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54  /.typedef INT8_T
4930: 59 50 45 20 69 38 3b 20 20 20 20 20 20 20 20 20  YPE i8;         
4940: 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73       /* 1-byte s
4950: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
4960: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d  ../*.** SQLITE_M
4970: 41 58 5f 55 33 32 20 69 73 20 61 20 75 36 34 20  AX_U32 is a u64 
4980: 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73  constant that is
4990: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34   the maximum u64
49a0: 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63   value.** that c
49b0: 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  an be stored in 
49c0: 61 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f  a u32 without lo
49d0: 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65  ss of data.  The
49e0: 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30   value.** is 0x0
49f0: 30 30 30 30 30 30 30 66 66 66 66 66 66 66 66 2e  0000000ffffffff.
4a00: 20 20 42 75 74 20 62 65 63 61 75 73 65 20 6f 66    But because of
4a10: 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20   quirks of some 
4a20: 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a  compilers, we.**
4a30: 20 68 61 76 65 20 74 6f 20 73 70 65 63 69 66 79   have to specify
4a40: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68   the value in th
4a50: 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65  e less intuitive
4a60: 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a   manner shown:.*
4a70: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
4a80: 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75 36  _MAX_U32  ((((u6
4a90: 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a  4)1)<<32)-1)../*
4aa0: 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65  .** The datatype
4ab0: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 65   used to store e
4ac0: 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68 65 20  stimates of the 
4ad0: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
4ae0: 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  n a.** table or 
4af0: 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73 20  index.  This is 
4b00: 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  an unsigned inte
4b10: 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72 20 39  ger type.  For 9
4b20: 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77  9.9% of.** the w
4b30: 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74 20 69  orld, a 32-bit i
4b40: 6e 74 65 67 65 72 20 69 73 20 73 75 66 66 69 63  nteger is suffic
4b50: 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36 34 2d  ient.  But a 64-
4b60: 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63  bit integer.** c
4b70: 61 6e 20 62 65 20 75 73 65 64 20 61 74 20 63 6f  an be used at co
4b80: 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20 64 65  mpile-time if de
4b90: 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66  sired..*/.#ifdef
4ba0: 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f 53 54   SQLITE_64BIT_ST
4bb0: 41 54 53 0a 20 74 79 70 65 64 65 66 20 75 36 34  ATS. typedef u64
4bc0: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
4bd0: 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20 72  64-bit only if r
4be0: 65 71 75 65 73 74 65 64 20 61 74 20 63 6f 6d 70  equested at comp
4bf0: 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73  ile-time */.#els
4c00: 65 0a 20 74 79 70 65 64 65 66 20 75 33 32 20 74  e. typedef u32 t
4c10: 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32  Rowcnt;    /* 32
4c20: 2d 62 69 74 20 69 73 20 74 68 65 20 64 65 66 61  -bit is the defa
4c30: 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  ult */.#endif../
4c40: 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64 20 71  *.** Estimated q
4c50: 75 61 6e 74 69 74 69 65 73 20 75 73 65 64 20 66  uantities used f
4c60: 6f 72 20 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e  or query plannin
4c70: 67 20 61 72 65 20 73 74 6f 72 65 64 20 61 73 20  g are stored as 
4c80: 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69  16-bit.** logari
4c90: 74 68 6d 73 2e 20 20 46 6f 72 20 71 75 61 6e 74  thms.  For quant
4ca0: 69 74 79 20 58 2c 20 74 68 65 20 76 61 6c 75 65  ity X, the value
4cb0: 20 73 74 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f   stored is 10*lo
4cc0: 67 32 28 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20  g2(X).  This.** 
4cd0: 67 69 76 65 73 20 61 20 70 6f 73 73 69 62 6c 65  gives a possible
4ce0: 20 72 61 6e 67 65 20 6f 66 20 76 61 6c 75 65 73   range of values
4cf0: 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74 65 6c   of approximatel
4d00: 79 20 31 2e 30 65 39 38 36 20 74 6f 20 31 65 2d  y 1.0e986 to 1e-
4d10: 39 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20  986..** But the 
4d20: 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 61  allowed values a
4d30: 72 65 20 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f  re "grainy".  No
4d40: 74 20 65 76 65 72 79 20 76 61 6c 75 65 20 69 73  t every value is
4d50: 20 72 65 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a   representable..
4d60: 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  ** For example, 
4d70: 71 75 61 6e 74 69 74 69 65 73 20 31 36 20 61 6e  quantities 16 an
4d80: 64 20 31 37 20 61 72 65 20 62 6f 74 68 20 72 65  d 17 are both re
4d90: 70 72 65 73 65 6e 74 65 64 20 62 79 20 61 20 4c  presented by a L
4da0: 6f 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20  ogEst.** of 40. 
4db0: 20 48 6f 77 65 76 65 72 2c 20 73 69 6e 63 65 20   However, since 
4dc0: 4c 6f 67 45 73 74 20 71 75 61 6e 74 69 74 69 65  LogEst quantitie
4dd0: 73 20 61 72 65 20 73 75 70 70 6f 73 65 20 74 6f  s are suppose to
4de0: 20 62 65 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a   be estimates,.*
4df0: 2a 20 6e 6f 74 20 65 78 61 63 74 20 76 61 6c 75  * not exact valu
4e00: 65 73 2c 20 74 68 69 73 20 69 6d 70 72 65 63 69  es, this impreci
4e10: 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20 70 72  sion is not a pr
4e20: 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f  oblem..**.** "Lo
4e30: 67 45 73 74 22 20 69 73 20 73 68 6f 72 74 20 66  gEst" is short f
4e40: 6f 72 20 22 4c 6f 67 61 72 69 74 68 6d 69 63 20  or "Logarithmic 
4e50: 45 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a  Estimate"..**.**
4e60: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20   Examples:.**   
4e70: 20 20 20 31 20 2d 3e 20 30 20 20 20 20 20 20 20     1 -> 0       
4e80: 20 20 20 20 20 20 20 32 30 20 2d 3e 20 34 33 20         20 -> 43 
4e90: 20 20 20 20 20 20 20 20 20 31 30 30 30 30 20 2d           10000 -
4ea0: 3e 20 31 33 32 0a 2a 2a 20 20 20 20 20 20 32 20  > 132.**      2 
4eb0: 2d 3e 20 31 30 20 20 20 20 20 20 20 20 20 20 20  -> 10           
4ec0: 20 20 32 35 20 2d 3e 20 34 36 20 20 20 20 20 20    25 -> 46      
4ed0: 20 20 20 20 32 35 30 30 30 20 2d 3e 20 31 34 36      25000 -> 146
4ee0: 0a 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20 31 36  .**      3 -> 16
4ef0: 20 20 20 20 20 20 20 20 20 20 20 20 31 30 30 20              100 
4f00: 2d 3e 20 36 36 20 20 20 20 20 20 20 20 31 30 30  -> 66        100
4f10: 30 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20  0000 -> 199.**  
4f20: 20 20 20 20 34 20 2d 3e 20 32 30 20 20 20 20 20      4 -> 20     
4f30: 20 20 20 20 20 20 31 30 30 30 20 2d 3e 20 39 39        1000 -> 99
4f40: 20 20 20 20 20 20 20 20 31 30 34 38 35 37 36 20          1048576 
4f50: 2d 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20 31 30  -> 200.**     10
4f60: 20 2d 3e 20 33 33 20 20 20 20 20 20 20 20 20 20   -> 33          
4f70: 20 31 30 32 34 20 2d 3e 20 31 30 30 20 20 20 20   1024 -> 100    
4f80: 34 32 39 34 39 36 37 32 39 36 20 2d 3e 20 33 32  4294967296 -> 32
4f90: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45  0.**.** The LogE
4fa0: 73 74 20 63 61 6e 20 62 65 20 6e 65 67 61 74 69  st can be negati
4fb0: 76 65 20 74 6f 20 69 6e 64 69 63 61 74 65 20 66  ve to indicate f
4fc0: 72 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73  ractional values
4fd0: 2e 20 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a  . .** Examples:.
4fe0: 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20  **.**    0.5 -> 
4ff0: 2d 31 30 20 20 20 20 20 20 20 20 20 20 20 30 2e  -10           0.
5000: 31 20 2d 3e 20 2d 33 33 20 20 20 20 20 20 20 20  1 -> -33        
5010: 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f  0.0625 -> -40.*/
5020: 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54  .typedef INT16_T
5030: 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a  YPE LogEst;../*.
5040: 2a 2a 20 53 65 74 20 74 68 65 20 53 51 4c 49 54  ** Set the SQLIT
5050: 45 5f 50 54 52 53 49 5a 45 20 6d 61 63 72 6f 20  E_PTRSIZE macro 
5060: 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
5070: 20 62 79 74 65 73 20 69 6e 20 61 20 70 6f 69 6e   bytes in a poin
5080: 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ter.*/.#ifndef S
5090: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 0a 23 20  QLITE_PTRSIZE.# 
50a0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 53 49 5a  if defined(__SIZ
50b0: 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 29 0a 23  EOF_POINTER__).#
50c0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
50d0: 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49 5a 45 4f  _PTRSIZE __SIZEO
50e0: 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23 20 65 6c  F_POINTER__.# el
50f0: 69 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29  if defined(i386)
5100: 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28       || defined(
5110: 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64  __i386__)   || d
5120: 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20  efined(_M_IX86) 
5130: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 20 64  ||    \.       d
5140: 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20  efined(_M_ARM)  
5150: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61 72   || defined(__ar
5160: 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65 66 69 6e  m__)    || defin
5170: 65 64 28 5f 5f 78 38 36 29 0a 23 20 20 20 64 65  ed(__x86).#   de
5180: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53  fine SQLITE_PTRS
5190: 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20 20  IZE 4.# else.#  
51a0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
51b0: 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69 66  TRSIZE 8.# endif
51c0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
51d0: 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
51e0: 6e 65 20 77 68 65 74 68 65 72 20 74 68 65 20 6d  ne whether the m
51f0: 61 63 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72  achine is big or
5200: 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a   little endian,.
5210: 2a 2a 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f  ** and whether o
5220: 72 20 6e 6f 74 20 74 68 61 74 20 64 65 74 65 72  r not that deter
5230: 6d 69 6e 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d  mination is run-
5240: 74 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d  time or compile-
5250: 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20  time..**.** For 
5260: 62 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  best performance
5270: 2c 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  , an attempt is 
5280: 6d 61 64 65 20 74 6f 20 67 75 65 73 73 20 61 74  made to guess at
5290: 20 74 68 65 20 62 79 74 65 2d 6f 72 64 65 72 0a   the byte-order.
52a0: 2a 2a 20 75 73 69 6e 67 20 43 2d 70 72 65 70 72  ** using C-prepr
52b0: 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20  ocessor macros. 
52c0: 20 49 66 20 74 68 61 74 20 69 73 20 75 6e 73 75   If that is unsu
52d0: 63 63 65 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a  ccessful, or if.
52e0: 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 52 55 4e 54  ** -DSQLITE_RUNT
52f0: 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 3d 31 20  IME_BYTEORDER=1 
5300: 69 73 20 73 65 74 2c 20 74 68 65 6e 20 62 79 74  is set, then byt
5310: 65 2d 6f 72 64 65 72 20 69 73 20 64 65 74 65 72  e-order is deter
5320: 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72 75 6e 2d  mined.** at run-
5330: 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  time..*/.#ifdef 
5340: 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54  SQLITE_AMALGAMAT
5350: 49 4f 4e 0a 63 6f 6e 73 74 20 69 6e 74 20 73 71  ION.const int sq
5360: 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 65  lite3one = 1;.#e
5370: 6c 73 65 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  lse.extern const
5380: 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b   int sqlite3one;
5390: 0a 23 65 6e 64 69 66 0a 23 69 66 20 28 64 65 66  .#endif.#if (def
53a0: 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20 7c  ined(i386)     |
53b0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36  | defined(__i386
53c0: 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  __)   || defined
53d0: 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20 20  (_M_IX86) ||    
53e0: 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f  \.     defined(_
53f0: 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64 65 66 69  _x86_64) || defi
5400: 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20  ned(__x86_64__) 
5410: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36  || defined(_M_X6
5420: 34 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20  4)  ||    \.    
5430: 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36   defined(_M_AMD6
5440: 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d  4) || defined(_M
5450: 5f 41 52 4d 29 20 20 20 20 20 7c 7c 20 64 65 66  _ARM)     || def
5460: 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c  ined(__x86)   ||
5470: 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e      \.     defin
5480: 65 64 28 5f 5f 61 72 6d 5f 5f 29 29 20 26 26 20  ed(__arm__)) && 
5490: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
54a0: 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45  RUNTIME_BYTEORDE
54b0: 52 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  R).# define SQLI
54c0: 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20  TE_BYTEORDER    
54d0: 31 32 33 34 0a 23 20 64 65 66 69 6e 65 20 53 51  1234.# define SQ
54e0: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20  LITE_BIGENDIAN  
54f0: 20 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c    0.# define SQL
5500: 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e  ITE_LITTLEENDIAN
5510: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
5520: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20  TE_UTF16NATIVE  
5530: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a 23  SQLITE_UTF16LE.#
5540: 65 6e 64 69 66 0a 23 69 66 20 28 64 65 66 69 6e  endif.#if (defin
5550: 65 64 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20  ed(sparc)    || 
5560: 64 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29  defined(__ppc__)
5570: 29 20 20 5c 0a 20 20 20 20 26 26 20 21 64 65 66  )  \.    && !def
5580: 69 6e 65 64 28 53 51 4c 49 54 45 5f 52 55 4e 54  ined(SQLITE_RUNT
5590: 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23  IME_BYTEORDER).#
55a0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
55b0: 59 54 45 4f 52 44 45 52 20 20 20 20 34 33 32 31  YTEORDER    4321
55c0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
55d0: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 31 0a  _BIGENDIAN    1.
55e0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
55f0: 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a 23  LITTLEENDIAN 0.#
5600: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55   define SQLITE_U
5610: 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49  TF16NATIVE  SQLI
5620: 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6e 64 69  TE_UTF16BE.#endi
5630: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
5640: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 29  QLITE_BYTEORDER)
5650: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5660: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 30 20  _BYTEORDER    0 
5670: 20 20 20 20 2f 2a 20 30 20 6d 65 61 6e 73 20 22      /* 0 means "
5680: 75 6e 6b 6e 6f 77 6e 20 61 74 20 63 6f 6d 70 69  unknown at compi
5690: 6c 65 2d 74 69 6d 65 22 20 2a 2f 0a 23 20 64 65  le-time" */.# de
56a0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45  fine SQLITE_BIGE
56b0: 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72  NDIAN    (*(char
56c0: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
56d0: 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==0).# define SQ
56e0: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
56f0: 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71  N (*(char *)(&sq
5700: 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20  lite3one)==1).# 
5710: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54  define SQLITE_UT
5720: 46 31 36 4e 41 54 49 56 45 20 20 28 53 51 4c 49  F16NATIVE  (SQLI
5730: 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c  TE_BIGENDIAN?SQL
5740: 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49  ITE_UTF16BE:SQLI
5750: 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64  TE_UTF16LE).#end
5760: 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61  if../*.** Consta
5770: 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67  nts for the larg
5780: 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74  est and smallest
5790: 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74   possible 64-bit
57a0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73   signed integers
57b0: 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  ..** These macro
57c0: 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20 74  s are designed t
57d0: 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79  o work correctly
57e0: 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20   on both 32-bit 
57f0: 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f  and 64-bit.** co
5800: 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66  mpilers..*/.#def
5810: 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36  ine LARGEST_INT6
5820: 34 20 20 28 30 78 66 66 66 66 66 66 66 66 7c 28  4  (0xffffffff|(
5830: 28 28 69 36 34 29 30 78 37 66 66 66 66 66 66 66  ((i64)0x7fffffff
5840: 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20  )<<32)).#define 
5850: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28  SMALLEST_INT64 (
5860: 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47  ((i64)-1) - LARG
5870: 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20 0a  EST_INT64)../* .
5880: 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e 75  ** Round up a nu
5890: 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78 74  mber to the next
58a0: 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c 65   larger multiple
58b0: 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73 20   of 8.  This is 
58c0: 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65  used.** to force
58d0: 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e   8-byte alignmen
58e0: 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63 68  t on 64-bit arch
58f0: 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64  itectures..*/.#d
5900: 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29 20  efine ROUND8(x) 
5910: 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37 29      (((x)+7)&~7)
5920: 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f  ../*.** Round do
5930: 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65 73  wn to the neares
5940: 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a  t multiple of 8.
5950: 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44  */.#define ROUND
5960: 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e 37  DOWN8(x) ((x)&~7
5970: 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20  )../*.** Assert 
5980: 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65 72  that the pointer
5990: 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74 6f   X is aligned to
59a0: 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e 64   an 8-byte bound
59b0: 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61  ary.  This.** ma
59c0: 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c 79  cro is used only
59d0: 20 77 69 74 68 69 6e 20 61 73 73 65 72 74 28 29   within assert()
59e0: 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
59f0: 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a  the code gets.**
5a00: 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72   all alignment r
5a10: 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72 72  estrictions corr
5a20: 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70  ect..**.** Excep
5a30: 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f 42  t, if SQLITE_4_B
5a40: 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c  YTE_ALIGNED_MALL
5a50: 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74  OC is defined, t
5a60: 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72  hen the.** under
5a70: 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69  lying malloc() i
5a80: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69  mplementation mi
5a90: 67 68 74 20 72 65 74 75 72 6e 20 75 73 20 34 2d  ght return us 4-
5aa0: 62 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20  byte aligned.** 
5ab0: 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74 68  pointers.  In th
5ac0: 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65  at case, only ve
5ad0: 72 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69 67  rify 4-byte alig
5ae0: 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66  nment..*/.#ifdef
5af0: 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41   SQLITE_4_BYTE_A
5b00: 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20  LIGNED_MALLOC.# 
5b10: 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54  define EIGHT_BYT
5b20: 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20  E_ALIGNMENT(X)  
5b30: 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d   ((((char*)(X) -
5b40: 20 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d 30   (char*)0)&3)==0
5b50: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
5b60: 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47   EIGHT_BYTE_ALIG
5b70: 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63  NMENT(X)   ((((c
5b80: 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72  har*)(X) - (char
5b90: 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64  *)0)&7)==0).#end
5ba0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c  if../*.** Disabl
5bb0: 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f  e MMAP on platfo
5bc0: 72 6d 73 20 77 68 65 72 65 20 69 74 20 69 73 20  rms where it is 
5bd0: 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72  known to not wor
5be0: 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  k.*/.#if defined
5bf0: 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c  (__OpenBSD__) ||
5c00: 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54   defined(__QNXNT
5c10: 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51 4c  O__).# undef SQL
5c20: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
5c30: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
5c40: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
5c50: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
5c60: 44 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20  Default maximum 
5c70: 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75  size of memory u
5c80: 73 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61  sed by memory-ma
5c90: 70 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65 20  pped I/O in the 
5ca0: 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f  VFS.*/.#ifdef __
5cb0: 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64  APPLE__.# includ
5cc0: 65 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74 69  e <TargetConditi
5cd0: 6f 6e 61 6c 73 2e 68 3e 0a 23 20 69 66 20 54 41  onals.h>.# if TA
5ce0: 52 47 45 54 5f 4f 53 5f 49 50 48 4f 4e 45 0a 23  RGET_OS_IPHONE.#
5cf0: 20 20 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f     undef SQLITE_
5d00: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  MAX_MMAP_SIZE.# 
5d10: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
5d20: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a  MAX_MMAP_SIZE 0.
5d30: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
5d40: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41  ifndef SQLITE_MA
5d50: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66  X_MMAP_SIZE.# if
5d60: 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78   defined(__linux
5d70: 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e  __) \.  || defin
5d80: 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c  ed(_WIN32) \.  |
5d90: 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50  | (defined(__APP
5da0: 4c 45 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64  LE__) && defined
5db0: 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20  (__MACH__)) \.  
5dc0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e  || defined(__sun
5dd0: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
5de0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
5df0: 45 20 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a  E 0x7fff0000  /*
5e00: 20 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23   2147418112 */.#
5e10: 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65   else.#   define
5e20: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
5e30: 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a  _SIZE 0.# endif.
5e40: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
5e50: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63  MAX_MMAP_SIZE_xc
5e60: 20 31 20 2f 2a 20 65 78 63 6c 75 64 65 20 66 72   1 /* exclude fr
5e70: 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65  om ctime.c */.#e
5e80: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
5e90: 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a  default MMAP_SIZ
5ea0: 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c  E is zero on all
5eb0: 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c   platforms.  Or,
5ec0: 20 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65   even if a large
5ed0: 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41  r.** default MMA
5ee0: 50 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66  P_SIZE is specif
5ef0: 69 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ied at compile-t
5f00: 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74  ime, make sure t
5f10: 68 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e  hat it does.** n
5f20: 6f 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61  ot exceed the ma
5f30: 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e  ximum mmap size.
5f40: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
5f50: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
5f60: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
5f70: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
5f80: 50 5f 53 49 5a 45 20 30 0a 23 20 64 65 66 69 6e  P_SIZE 0.# defin
5f90: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
5fa0: 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20  _MMAP_SIZE_xc 1 
5fb0: 20 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d   /* Exclude from
5fc0: 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64   ctime.c */.#end
5fd0: 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45  if.#if SQLITE_DE
5fe0: 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e  FAULT_MMAP_SIZE>
5ff0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
6000: 53 49 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c  SIZE.# undef SQL
6010: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
6020: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
6030: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
6040: 41 50 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d  AP_SIZE SQLITE_M
6050: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e  AX_MMAP_SIZE.#en
6060: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20  dif../*.** Only 
6070: 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e  one of SQLITE_EN
6080: 41 42 4c 45 5f 53 54 41 54 33 20 6f 72 20 53 51  ABLE_STAT3 or SQ
6090: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
60a0: 34 20 63 61 6e 20 62 65 20 64 65 66 69 6e 65 64  4 can be defined
60b0: 2e 0a 2a 2a 20 50 72 69 6f 72 69 74 79 20 69 73  ..** Priority is
60c0: 20 67 69 76 65 6e 20 74 6f 20 53 51 4c 49 54 45   given to SQLITE
60d0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20 20  _ENABLE_STAT4.  
60e0: 49 66 20 65 69 74 68 65 72 20 61 72 65 20 64 65  If either are de
60f0: 66 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64  fined, also.** d
6100: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
6110: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
6120: 54 34 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  T4.*/.#ifdef SQL
6130: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
6140: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
6150: 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64  ENABLE_STAT3.# d
6160: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
6170: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
6180: 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54  T4 1.#elif SQLIT
6190: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23  E_ENABLE_STAT3.#
61a0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
61b0: 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
61c0: 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c  TAT4 1.#elif SQL
61d0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
61e0: 5f 4f 52 5f 53 54 41 54 34 0a 23 20 75 6e 64 65  _OR_STAT4.# unde
61f0: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
6200: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23  STAT3_OR_STAT4.#
6210: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c  endif../*.** SEL
6220: 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
6230: 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20   will be either 
6240: 31 20 6f 72 20 30 20 64 65 70 65 6e 64 69 6e 67  1 or 0 depending
6250: 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e   on whether or n
6260: 6f 74 0a 2a 2a 20 74 68 65 20 53 65 6c 65 63 74  ot.** the Select
6270: 20 71 75 65 72 79 20 67 65 6e 65 72 61 74 6f 72   query generator
6280: 20 74 72 61 63 69 6e 67 20 6c 6f 67 69 63 20 69   tracing logic i
6290: 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a  s turned on..*/.
62a0: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
62b0: 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
62c0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
62d0: 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29 0a  LE_SELECTTRACE).
62e0: 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54  # define SELECTT
62f0: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 31 0a 23  RACE_ENABLED 1.#
6300: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 45  else.# define SE
6310: 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
6320: 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D 0.#endif../*.*
6330: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
6340: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
6350: 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
6360: 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75   to store the bu
6370: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
6380: 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76  llback for a giv
6390: 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65  en sqlite handle
63a0: 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c  . .**.** The sql
63b0: 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20  ite.busyHandler 
63c0: 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71  member of the sq
63d0: 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74  lite struct cont
63e0: 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a  ains the busy.**
63f0: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68   callback for th
6400: 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
6410: 65 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70  e. Each pager op
6420: 65 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c  ened via the sql
6430: 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73  ite.** handle is
6440: 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65   passed a pointe
6450: 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79  r to sqlite.busy
6460: 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73  Handler. The bus
6470: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
6480: 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74  lback is current
6490: 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20  ly invoked only 
64a0: 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65  from within page
64b0: 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  r.c..*/.typedef 
64c0: 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c  struct BusyHandl
64d0: 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a  er BusyHandler;.
64e0: 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c  struct BusyHandl
64f0: 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75  er {.  int (*xFu
6500: 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b  nc)(void *,int);
6510: 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61    /* The busy ca
6520: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
6530: 20 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20   *pArg;         
6540: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
6550: 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c  arg to busy call
6560: 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  back */.  int nB
6570: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
6580: 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e       /* Incremen
6590: 74 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75  ted with each bu
65a0: 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f  sy call */.};../
65b0: 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  *.** Name of the
65c0: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
65d0: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73   table.  The mas
65e0: 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62  ter database tab
65f0: 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69  le.** is a speci
6600: 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f  al table that ho
6610: 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e  lds the names an
6620: 64 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20  d attributes of 
6630: 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c  all.** user tabl
6640: 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a  es and indices..
6650: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45  */.#define MASTE
6660: 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71  R_NAME       "sq
6670: 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65  lite_master".#de
6680: 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52  fine TEMP_MASTER
6690: 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74  _NAME  "sqlite_t
66a0: 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a  emp_master"../*.
66b0: 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65  ** The root-page
66c0: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64   of the master d
66d0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a  atabase table..*
66e0: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
66f0: 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f  _ROOT       1../
6700: 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66  *.** The name of
6710: 20 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c   the schema tabl
6720: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43  e..*/.#define SC
6730: 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28  HEMA_TABLE(x)  (
6740: 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26  (!OMIT_TEMPDB)&&
6750: 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54  (x==1)?TEMP_MAST
6760: 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e  ER_NAME:MASTER_N
6770: 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f  AME)../*.** A co
6780: 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20  nvenience macro 
6790: 74 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65  that returns the
67a0: 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   number of eleme
67b0: 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72  nts in.** an arr
67c0: 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41  ay..*/.#define A
67d0: 72 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28  rraySize(X)    (
67e0: 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f  (int)(sizeof(X)/
67f0: 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a  sizeof(X[0])))..
6800: 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20  /*.** Determine 
6810: 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  if the argument 
6820: 69 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77  is a power of tw
6830: 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50  o.*/.#define IsP
6840: 6f 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28  owerOfTwo(X) (((
6850: 58 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a  X)&((X)-1))==0).
6860: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
6870: 77 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20  wing value as a 
6880: 64 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73  destructor means
6890: 20 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44   to use sqlite3D
68a0: 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20  bFree()..** The 
68b0: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20  sqlite3DbFree() 
68c0: 72 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73  routine requires
68d0: 20 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20   two parameters 
68e0: 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a  instead of the .
68f0: 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72  ** one parameter
6900: 20 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72   that destructor
6910: 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e  s normally want.
6920: 20 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20    So we have to 
6930: 69 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68  introduce .** th
6940: 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74  is magic value t
6950: 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f  hat the code kno
6960: 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66  ws to handle dif
6970: 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a  ferently.  Any .
6980: 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20  ** pointer will 
6990: 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e  work here as lon
69a0: 67 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69  g as it is disti
69b0: 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f  nct from SQLITE_
69c0: 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51  STATIC.** and SQ
69d0: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a  LITE_TRANSIENT..
69e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
69f0: 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71  E_DYNAMIC   ((sq
6a00: 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72  lite3_destructor
6a10: 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c  _type)sqlite3Mal
6a20: 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20  locSize)../*.** 
6a30: 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54  When SQLITE_OMIT
6a40: 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c  _WSD is defined,
6a50: 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74   it means that t
6a60: 68 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f  he target platfo
6a70: 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73  rm does.** not s
6a80: 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20  upport Writable 
6a90: 53 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44  Static Data (WSD
6aa0: 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c  ) such as global
6ab0: 20 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69   and static vari
6ac0: 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61  ables..** All va
6ad0: 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74  riables must eit
6ae0: 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74  her be on the st
6af0: 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c  ack or dynamical
6b00: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f  ly allocated fro
6b10: 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20  m.** the heap.  
6b20: 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75  When WSD is unsu
6b30: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72  pported, the var
6b40: 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f  iable declaratio
6b50: 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20  ns scattered.** 
6b60: 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53  throughout the S
6b70: 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20  QLite code must 
6b80: 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73  become constants
6b90: 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53   instead.  The S
6ba0: 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63  QLITE_WSD.** mac
6bb0: 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74  ro is used for t
6bc0: 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e  his purpose.  An
6bd0: 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66  d instead of ref
6be0: 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72  erencing the var
6bf0: 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c  iable.** directl
6c00: 79 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f  y, we use its co
6c10: 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20  nstant as a key 
6c20: 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75  to lookup the ru
6c30: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
6c40: 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20  .** buffer that 
6c50: 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61  holds real varia
6c60: 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61  ble.  The consta
6c70: 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69  nt is also the i
6c80: 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f  nitializer.** fo
6c90: 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  r the run-time a
6ca0: 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e  llocated buffer.
6cb0: 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73  .**.** In the us
6cc0: 75 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57  ual case where W
6cd0: 53 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c  SD is supported,
6ce0: 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20   the SQLITE_WSD 
6cf0: 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61  and GLOBAL.** ma
6d00: 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f  cros become no-o
6d10: 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f  ps and have zero
6d20: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70   performance imp
6d30: 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  act..*/.#ifdef S
6d40: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20  QLITE_OMIT_WSD. 
6d50: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
6d60: 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66  WSD const.  #def
6d70: 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20  ine GLOBAL(t,v) 
6d80: 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73  (*(t*)sqlite3_ws
6d90: 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28  d_find((void*)&(
6da0: 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a  v), sizeof(v))).
6db0: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
6dc0: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c  3GlobalConfig GL
6dd0: 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69  OBAL(struct Sqli
6de0: 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74  te3Config, sqlit
6df0: 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20  e3Config).  int 
6e00: 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74  sqlite3_wsd_init
6e10: 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a  (int N, int J);.
6e20: 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f    void *sqlite3_
6e30: 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b  wsd_find(void *K
6e40: 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a  , int L);.#else.
6e50: 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
6e60: 5f 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20  _WSD .  #define 
6e70: 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20  GLOBAL(t,v) v.  
6e80: 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47  #define sqlite3G
6e90: 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69  lobalConfig sqli
6ea0: 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66  te3Config.#endif
6eb0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
6ec0: 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65  owing macros are
6ed0: 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73   used to suppres
6ee0: 73 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  s compiler warni
6ef0: 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61  ngs and to.** ma
6f00: 6b 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68  ke it clear to h
6f10: 75 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65  uman readers whe
6f20: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
6f30: 61 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65  ameter is delibe
6f40: 72 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20  rately .** left 
6f50: 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68  unused within th
6f60: 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63  e body of a func
6f70: 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c  tion. This usual
6f80: 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a  ly happens when.
6f90: 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73  ** a function is
6fa0: 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75   called via a fu
6fb0: 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20  nction pointer. 
6fc0: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20  For example the 
6fd0: 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  .** implementati
6fe0: 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67  on of an SQL agg
6ff0: 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c  regate step call
7000: 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65  back may not use
7010: 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65   the.** paramete
7020: 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65  r indicating the
7030: 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
7040: 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74  ents passed to t
7050: 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a  he aggregate,.**
7060: 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61   if it knows tha
7070: 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63  t this is enforc
7080: 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a  ed elsewhere..**
7090: 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74  .** When a funct
70a0: 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73  ion parameter is
70b0: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
70c0: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
70d0: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a   of a function,.
70e0: 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c  ** it is general
70f0: 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65  ly named "NotUse
7100: 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22  d" or "NotUsed2"
7110: 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20   to make things 
7120: 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a  even clearer..**
7130: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20   However, these 
7140: 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20  macros may also 
7150: 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72  be used to suppr
7160: 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c  ess warnings rel
7170: 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d  ated to.** param
7180: 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f  eters that may o
7190: 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65  r may not be use
71a0: 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63  d depending on c
71b0: 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f  ompilation optio
71c0: 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70  ns..** For examp
71d0: 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74  le those paramet
71e0: 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e  ers only used in
71f0: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
7200: 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a  ents. In these.*
7210: 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61  * cases the para
7220: 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64  meters are named
7230: 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61   as per the usua
7240: 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a  l conventions..*
7250: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  /.#define UNUSED
7260: 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76  _PARAMETER(x) (v
7270: 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20  oid)(x).#define 
7280: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
7290: 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41  2(x,y) UNUSED_PA
72a0: 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45  RAMETER(x),UNUSE
72b0: 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a  D_PARAMETER(y)..
72c0: 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65  /*.** Forward re
72d0: 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75  ferences to stru
72e0: 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65  ctures.*/.typede
72f0: 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  f struct AggInfo
7300: 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65   AggInfo;.typede
7310: 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e  f struct AuthCon
7320: 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74  text AuthContext
7330: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7340: 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74   AutoincInfo Aut
7350: 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65  oincInfo;.typede
7360: 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20  f struct Bitvec 
7370: 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20  Bitvec;.typedef 
7380: 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43  struct CollSeq C
7390: 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20  ollSeq;.typedef 
73a0: 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f  struct Column Co
73b0: 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  lumn;.typedef st
73c0: 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65  ruct Db Db;.type
73d0: 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d  def struct Schem
73e0: 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65  a Schema;.typede
73f0: 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78  f struct Expr Ex
7400: 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  pr;.typedef stru
7410: 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72  ct ExprList Expr
7420: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
7430: 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78  ruct ExprSpan Ex
7440: 70 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20  prSpan;.typedef 
7450: 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79  struct FKey FKey
7460: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7470: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
7480: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a  FuncDestructor;.
7490: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
74a0: 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a  uncDef FuncDef;.
74b0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46  typedef struct F
74c0: 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44  uncDefHash FuncD
74d0: 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20  efHash;.typedef 
74e0: 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64  struct IdList Id
74f0: 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74  List;.typedef st
7500: 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78  ruct Index Index
7510: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7520: 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64   IndexSample Ind
7530: 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65  exSample;.typede
7540: 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73  f struct KeyClas
7550: 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65  s KeyClass;.type
7560: 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e  def struct KeyIn
7570: 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65  fo KeyInfo;.type
7580: 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61  def struct Looka
7590: 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a  side Lookaside;.
75a0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c  typedef struct L
75b0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f  ookasideSlot Loo
75c0: 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65  kasideSlot;.type
75d0: 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c  def struct Modul
75e0: 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65  e Module;.typede
75f0: 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  f struct NameCon
7600: 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  text NameContext
7610: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
7620: 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79   Parse Parse;.ty
7630: 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72 69  pedef struct Pri
7640: 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69  ntfArguments Pri
7650: 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79  ntfArguments;.ty
7660: 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77  pedef struct Row
7670: 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65  Set RowSet;.type
7680: 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70  def struct Savep
7690: 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a  oint Savepoint;.
76a0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
76b0: 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79  elect Select;.ty
76c0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 51 4c  pedef struct SQL
76d0: 69 74 65 54 68 72 65 61 64 20 53 51 4c 69 74 65  iteThread SQLite
76e0: 54 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66 20  Thread;.typedef 
76f0: 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
7700: 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79  t SelectDest;.ty
7710: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 72 63  pedef struct Src
7720: 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79  List SrcList;.ty
7730: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 74 72  pedef struct Str
7740: 41 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a  Accum StrAccum;.
7750: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
7760: 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65  able Table;.type
7770: 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65  def struct Table
7780: 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a  Lock TableLock;.
7790: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
77a0: 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65  oken Token;.type
77b0: 64 65 66 20 73 74 72 75 63 74 20 54 72 65 65 56  def struct TreeV
77c0: 69 65 77 20 54 72 65 65 56 69 65 77 3b 0a 74 79  iew TreeView;.ty
77d0: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
77e0: 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74 79  gger Trigger;.ty
77f0: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
7800: 67 67 65 72 50 72 67 20 54 72 69 67 67 65 72 50  ggerPrg TriggerP
7810: 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  rg;.typedef stru
7820: 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 54  ct TriggerStep T
7830: 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70 65  riggerStep;.type
7840: 64 65 66 20 73 74 72 75 63 74 20 55 6e 70 61 63  def struct Unpac
7850: 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63 6b  kedRecord Unpack
7860: 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64 65  edRecord;.typede
7870: 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  f struct VTable 
7880: 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20  VTable;.typedef 
7890: 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20 56  struct VtabCtx V
78a0: 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20  tabCtx;.typedef 
78b0: 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61  struct Walker Wa
78c0: 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74  lker;.typedef st
78d0: 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57  ruct WhereInfo W
78e0: 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65  hereInfo;.typede
78f0: 66 20 73 74 72 75 63 74 20 57 69 74 68 20 57 69  f struct With Wi
7900: 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72  th;../*.** Defer
7910: 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68   sourcing vdbe.h
7920: 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74   and btree.h unt
7930: 69 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38  il after the "u8
7940: 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75 73 79 48  " and .** "BusyH
7950: 61 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66 73  andler" typedefs
7960: 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72 65  . vdbe.h also re
7970: 71 75 69 72 65 73 20 61 20 66 65 77 20 6f 66 20  quires a few of 
7980: 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f  the opaque.** po
7990: 69 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e 65  inter types (i.e
79a0: 2e 20 46 75 6e 63 44 65 66 29 20 64 65 66 69 6e  . FuncDef) defin
79b0: 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e  ed above..*/.#in
79c0: 63 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22 0a  clude "btree.h".
79d0: 23 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68  #include "vdbe.h
79e0: 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67 65  ".#include "page
79f0: 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  r.h".#include "p
7a00: 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e 63 6c 75  cache.h"..#inclu
7a10: 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75  de "os.h".#inclu
7a20: 64 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a 0a 2f  de "mutex.h".../
7a30: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
7a40: 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63  se file to be ac
7a50: 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73 79  cessed by the sy
7a60: 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61  stem is an insta
7a70: 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f  nce.** of the fo
7a80: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
7a90: 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f  e.  There are no
7aa0: 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68  rmally two of th
7ab0: 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a  ese structures.*
7ac0: 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e  * in the sqlite.
7ad0: 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44  aDb[] array.  aD
7ae0: 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e  b[0] is the main
7af0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
7b00: 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20  nd.** aDb[1] is 
7b10: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
7b20: 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74  e used to hold t
7b30: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
7b40: 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20    Additional.** 
7b50: 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62 65  databases may be
7b60: 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74   attached..*/.st
7b70: 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72  ruct Db {.  char
7b80: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
7b90: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
7ba0: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 42   database */.  B
7bb0: 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20  tree *pBt;      
7bc0: 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65      /* The B*Tre
7bd0: 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  e structure for 
7be0: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 66 69  this database fi
7bf0: 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74  le */.  u8 safet
7c00: 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20  y_level;     /* 
7c10: 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20 61  How aggressive a
7c20: 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74  t syncing data t
7c30: 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53 63 68 65  o disk */.  Sche
7c40: 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
7c50: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 64   /* Pointer to d
7c60: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28  atabase schema (
7c70: 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64 29  possibly shared)
7c80: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
7c90: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
7ca0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
7cb0: 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64 61  ture stores a da
7cc0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a  tabase schema..*
7cd0: 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61  *.** Most Schema
7ce0: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73 73   objects are ass
7cf0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 42  ociated with a B
7d00: 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65 70  tree.  The excep
7d10: 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53  tion is.** the S
7d20: 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54 45  chema for the TE
7d30: 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71 6c  MP databaes (sql
7d40: 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68 69  ite3.aDb[1]) whi
7d50: 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e 64  ch is free-stand
7d60: 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65  ing..** In share
7d70: 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61 20  d cache mode, a 
7d80: 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f 62  single Schema ob
7d90: 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61 72  ject can be shar
7da0: 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a  ed by multiple.*
7db0: 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72 65  * Btrees that re
7dc0: 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20  fer to the same 
7dd0: 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68 61  underlying BtSha
7de0: 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 0a  red object..** .
7df0: 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  ** Schema object
7e00: 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  s are automatica
7e10: 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20  lly deallocated 
7e20: 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74  when the last Bt
7e30: 72 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65  ree that.** refe
7e40: 72 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64  rences them is d
7e50: 65 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20  estroyed.   The 
7e60: 54 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d  TEMP Schema is m
7e70: 61 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79  anually freed by
7e80: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  .** sqlite3_clos
7e90: 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65  e()..*.** A thre
7ea0: 61 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69  ad must be holdi
7eb0: 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68  ng a mutex on th
7ec0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
7ed0: 42 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a  Btree in order.*
7ee0: 2a 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65  * to access Sche
7ef0: 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69  ma content.  Thi
7f00: 73 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74  s implies that t
7f10: 68 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61  he thread must a
7f20: 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e  lso be.** holdin
7f30: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
7f40: 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74   sqlite3 connect
7f50: 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74  ion pointer that
7f60: 20 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e   owns the Btree.
7f70: 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53  .** For a TEMP S
7f80: 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20  chema, only the 
7f90: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78  connection mutex
7fa0: 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f   is required..*/
7fb0: 0a 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b  .struct Schema {
7fc0: 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f  .  int schema_co
7fd0: 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62  okie;   /* Datab
7fe0: 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  ase schema versi
7ff0: 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  on number for th
8000: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74  is file */.  int
8010: 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20   iGeneration;   
8020: 20 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20    /* Generation 
8030: 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d  counter.  Increm
8040: 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20  ented with each 
8050: 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68  change */.  Hash
8060: 20 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20   tblHash;       
8070: 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69   /* All tables i
8080: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
8090: 2f 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68  /.  Hash idxHash
80a0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
80b0: 28 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20  (named) indices 
80c0: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
80d0: 2a 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61  */.  Hash trigHa
80e0: 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  sh;       /* All
80f0: 20 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65   triggers indexe
8100: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
8110: 61 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20  ash fkeyHash;   
8120: 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69      /* All forei
8130: 67 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72  gn keys by refer
8140: 65 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65  enced table name
8150: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65   */.  Table *pSe
8160: 71 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68  qTab;      /* Th
8170: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
8180: 65 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20  e table used by 
8190: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
81a0: 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61  .  u8 file_forma
81b0: 74 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  t;      /* Schem
81c0: 61 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e  a format version
81d0: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
81e0: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
81f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
8200: 20 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62   encoding used b
8210: 79 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  y this database 
8220: 2a 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46  */.  u16 schemaF
8230: 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61  lags;     /* Fla
8240: 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
8250: 74 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a  th this schema *
8260: 2f 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69  /.  int cache_si
8270: 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ze;      /* Numb
8280: 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75  er of pages to u
8290: 73 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20  se in the cache 
82a0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
82b0: 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
82c0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
82d0: 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
82e0: 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 44 62 2e  s in the .** Db.
82f0: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66  pSchema->flags f
8300: 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
8310: 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 44   DbHasProperty(D
8320: 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d  ,I,P)     (((D)-
8330: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
8340: 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29  >schemaFlags&(P)
8350: 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
8360: 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79  DbHasAnyProperty
8370: 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e  (D,I,P)  (((D)->
8380: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
8390: 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29  schemaFlags&(P))
83a0: 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53  !=0).#define DbS
83b0: 65 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  etProperty(D,I,P
83c0: 29 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49  )     (D)->aDb[I
83d0: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
83e0: 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  aFlags|=(P).#def
83f0: 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65  ine DbClearPrope
8400: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29  rty(D,I,P)   (D)
8410: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
8420: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e  ->schemaFlags&=~
8430: 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  (P)../*.** Allow
8440: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  ed values for th
8450: 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  e DB.pSchema->fl
8460: 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a  ags field..**.**
8470: 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f   The DB_SchemaLo
8480: 61 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74  aded flag is set
8490: 20 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62   after the datab
84a0: 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62  ase schema has b
84b0: 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f  een.** read into
84c0: 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74   internal hash t
84d0: 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f  ables..**.** DB_
84e0: 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61  UnresetViews mea
84f0: 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d  ns that one or m
8500: 6f 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63  ore views have c
8510: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74  olumn names that
8520: 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69  .** have been fi
8530: 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68  lled out.  If th
8540: 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  e schema changes
8550: 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e  , these column n
8560: 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68  ames might.** ch
8570: 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65  anges and so the
8580: 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20   view will need 
8590: 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a  to be reset..*/.
85a0: 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d  #define DB_Schem
85b0: 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30  aLoaded    0x000
85c0: 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61  1  /* The schema
85d0: 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64   has been loaded
85e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55   */.#define DB_U
85f0: 6e 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30  nresetViews    0
8600: 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76  x0002  /* Some v
8610: 69 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65  iews have define
8620: 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a  d column names *
8630: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70  /.#define DB_Emp
8640: 74 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30  ty           0x0
8650: 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65  004  /* The file
8660: 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74   is empty (lengt
8670: 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f  h 0 bytes) */../
8680: 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20  *.** The number 
8690: 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e  of different kin
86a0: 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61  ds of things tha
86b0: 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64  t can be limited
86c0: 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71  .** using the sq
86d0: 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e  lite3_limit() in
86e0: 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66  terface..*/.#def
86f0: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d  ine SQLITE_N_LIM
8700: 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54  IT (SQLITE_LIMIT
8710: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2b  _WORKER_THREADS+
8720: 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73  1)../*.** Lookas
8730: 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20  ide malloc is a 
8740: 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a  set of fixed-siz
8750: 65 20 62 75 66 66 65 72 73 20 74 68 61 74 20 63  e buffers that c
8760: 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f  an be used.** to
8770: 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74   satisfy small t
8780: 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20  ransient memory 
8790: 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65  allocation reque
87a0: 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a  sts for objects.
87b0: 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ** associated wi
87c0: 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  th a particular 
87d0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
87e0: 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66  ion.  The use of
87f0: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** lookaside ma
8800: 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20  lloc provides a 
8810: 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66  significant perf
8820: 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d  ormance enhancem
8830: 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31  ent.** (approx 1
8840: 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20  0%) by avoiding 
8850: 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f  numerous malloc/
8860: 66 72 65 65 20 72 65 71 75 65 73 74 73 20 77 68  free requests wh
8870: 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53  ile parsing.** S
8880: 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  QL statements..*
8890: 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69  *.** The Lookasi
88a0: 64 65 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  de structure hol
88b0: 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ds configuration
88c0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
88d0: 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73  ut the.** lookas
88e0: 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79  ide malloc subsy
88f0: 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69  stem.  Each avai
8900: 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  lable memory all
8910: 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68  ocation in.** th
8920: 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73  e lookaside subs
8930: 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20  ystem is stored 
8940: 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  on a linked list
8950: 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f   of LookasideSlo
8960: 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a  t.** objects..**
8970: 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c  .** Lookaside al
8980: 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e  locations are on
8990: 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f  ly allowed for o
89a0: 62 6a 65 63 74 73 20 74 68 61 74 20 61 72 65 20  bjects that are 
89b0: 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69  associated.** wi
89c0: 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  th a particular 
89d0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
89e0: 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68  ion.  Hence, sch
89f0: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ema information 
8a00: 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f  cannot.** be sto
8a10: 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65  red in lookaside
8a20: 20 62 65 63 61 75 73 65 20 69 6e 20 73 68 61 72   because in shar
8a30: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68  ed cache mode th
8a40: 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  e schema informa
8a50: 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65  tion.** is share
8a60: 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61  d by multiple da
8a70: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
8a80: 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20  ns.  Therefore, 
8a90: 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a  while parsing.**
8aa0: 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   schema informat
8ab0: 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69  ion, the Lookasi
8ac0: 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67  de.bEnabled flag
8ad0: 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74   is cleared so t
8ae0: 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65  hat.** lookaside
8af0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
8b00: 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e   not used to con
8b10: 73 74 72 75 63 74 20 74 68 65 20 73 63 68 65 6d  struct the schem
8b20: 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74  a objects..*/.st
8b30: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b  ruct Lookaside {
8b40: 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20  .  u16 sz;      
8b50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
8b60: 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66 66 65  ze of each buffe
8b70: 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  r in bytes */.  
8b80: 75 38 20 62 45 6e 61 62 6c 65 64 3b 20 20 20 20  u8 bEnabled;    
8b90: 20 20 20 20 20 20 20 20 2f 2a 20 46 61 6c 73 65          /* False
8ba0: 20 74 6f 20 64 69 73 61 62 6c 65 20 6e 65 77 20   to disable new 
8bb0: 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  lookaside alloca
8bc0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62 4d  tions */.  u8 bM
8bd0: 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20  alloced;        
8be0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53     /* True if pS
8bf0: 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72  tart obtained fr
8c00: 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  om sqlite3_mallo
8c10: 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75  c() */.  int nOu
8c20: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
8c30: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75   /* Number of bu
8c40: 66 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20  ffers currently 
8c50: 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20  checked out */. 
8c60: 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20   int mxOut;     
8c70: 20 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68           /* High
8c80: 77 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e  water mark for n
8c90: 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53  Out */.  int anS
8ca0: 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20  tat[3];         
8cb0: 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a   /* 0: hits.  1:
8cc0: 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32   size misses.  2
8cd0: 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f  : full misses */
8ce0: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
8cf0: 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69   *pFree;   /* Li
8d00: 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  st of available 
8d10: 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69  buffers */.  voi
8d20: 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20  d *pStart;      
8d30: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79       /* First by
8d40: 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  te of available 
8d50: 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a  memory space */.
8d60: 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20    void *pEnd;   
8d70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
8d80: 73 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64  st byte past end
8d90: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70   of available sp
8da0: 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74  ace */.};.struct
8db0: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b   LookasideSlot {
8dc0: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
8dd0: 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e   *pNext;    /* N
8de0: 65 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68  ext buffer in th
8df0: 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62  e list of free b
8e00: 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  uffers */.};../*
8e10: 0a 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65  .** A hash table
8e20: 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 64 65   for function de
8e30: 66 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  finitions..**.**
8e40: 20 48 61 73 68 20 65 61 63 68 20 46 75 6e 63 44   Hash each FuncD
8e50: 65 66 20 73 74 72 75 63 74 75 72 65 20 69 6e 74  ef structure int
8e60: 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  o one of the Fun
8e70: 63 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f  cDefHash.a[] slo
8e80: 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e  ts..** Collision
8e90: 73 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e  s are on the Fun
8ea0: 63 44 65 66 2e 70 48 61 73 68 20 63 68 61 69 6e  cDef.pHash chain
8eb0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63  ..*/.struct Func
8ec0: 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63  DefHash {.  Func
8ed0: 44 65 66 20 2a 61 5b 32 33 5d 3b 20 20 20 20 20  Def *a[23];     
8ee0: 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20    /* Hash table 
8ef0: 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  for functions */
8f00: 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  .};..#ifdef SQLI
8f10: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
8f20: 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66  CATION./*.** Inf
8f30: 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e  ormation held in
8f40: 20 74 68 65 20 22 73 71 6c 69 74 65 33 22 20 64   the "sqlite3" d
8f50: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
8f60: 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73  on object and us
8f70: 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20  ed.** to manage 
8f80: 75 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74  user authenticat
8f90: 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ion..*/.typedef 
8fa0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75  struct sqlite3_u
8fb0: 73 65 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f  serauth sqlite3_
8fc0: 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74  userauth;.struct
8fd0: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
8fe0: 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76  h {.  u8 authLev
8ff0: 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  el;             
9000: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61      /* Current a
9010: 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65  uthentication le
9020: 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75  vel */.  int nAu
9030: 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20  thPW;           
9040: 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
9050: 66 20 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e  f the zAuthPW in
9060: 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72   bytes */.  char
9070: 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20   *zAuthPW;      
9080: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73            /* Pas
9090: 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75  sword used to au
90a0: 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20  thenticate */.  
90b0: 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b  char *zAuthUser;
90c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
90d0: 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20   User name used 
90e0: 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20  to authenticate 
90f0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  */.};../* Allowe
9100: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c  d values for sql
9110: 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75  ite3_userauth.au
9120: 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69  thLevel */.#defi
9130: 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e  ne UAUTH_Unknown
9140: 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75       0     /* Au
9150: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74  thentication not
9160: 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a   yet checked */.
9170: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61  #define UAUTH_Fa
9180: 69 6c 20 20 20 20 20 20 20 20 31 20 20 20 20 20  il        1     
9190: 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69  /* User authenti
91a0: 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f  cation failed */
91b0: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55  .#define UAUTH_U
91c0: 73 65 72 20 20 20 20 20 20 20 20 32 20 20 20 20  ser        2    
91d0: 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65   /* Authenticate
91e0: 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73  d as a normal us
91f0: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  er */.#define UA
9200: 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20  UTH_Admin       
9210: 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  3     /* Authent
9220: 69 63 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d  icated as an adm
9230: 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f  inistrator */../
9240: 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64  * Functions used
9250: 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75   only by user au
9260: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69  thorization logi
9270: 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  c */.int sqlite3
9280: 55 73 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f  UserAuthTable(co
9290: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
92a0: 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 43  sqlite3UserAuthC
92b0: 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65  heckLogin(sqlite
92c0: 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75  3*,const char*,u
92d0: 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
92e0: 33 55 73 65 72 41 75 74 68 49 6e 69 74 28 73 71  3UserAuthInit(sq
92f0: 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
9300: 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63 28 73  lite3CryptFunc(s
9310: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
9320: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
9330: 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a  e**);..#endif /*
9340: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
9350: 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a  HENTICATION */..
9360: 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f  /*.** typedef fo
9370: 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74  r the authorizat
9380: 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e  ion callback fun
9390: 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66  ction..*/.#ifdef
93a0: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
93b0: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79  HENTICATION.  ty
93c0: 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69  pedef int (*sqli
93d0: 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a  te3_xauth)(void*
93e0: 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
93f0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
9400: 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20  st char*,.      
9410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9420: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
9430: 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
9440: 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  *);.#else.  type
9450: 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65  def int (*sqlite
9460: 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69  3_xauth)(void*,i
9470: 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  nt,const char*,c
9480: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
9490: 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20   char*,.        
94a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94b0: 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
94c0: 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  r*);.#endif.../*
94d0: 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73  .** Each databas
94e0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
94f0: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
9500: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
9510: 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
9520: 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71  t sqlite3 {.  sq
9530: 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b  lite3_vfs *pVfs;
9540: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
9550: 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  S Interface */. 
9560: 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70 56   struct Vdbe *pV
9570: 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dbe;           /
9580: 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65  * List of active
9590: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
95a0: 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  s */.  CollSeq *
95b0: 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20  pDfltColl;      
95c0: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61       /* The defa
95d0: 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ult collating se
95e0: 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20  quence (BINARY) 
95f0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
9600: 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20  ex *mutex;      
9610: 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e     /* Connection
9620: 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a   mutex */.  Db *
9630: 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  aDb;            
9640: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
9650: 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69   backends */.  i
9660: 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20  nt nDb;         
9670: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9680: 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e  Number of backen
9690: 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ds currently in 
96a0: 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61  use */.  int fla
96b0: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
96c0: 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c         /* Miscel
96d0: 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20 53  laneous flags. S
96e0: 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36  ee below */.  i6
96f0: 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20  4 lastRowid;    
9700: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
9710: 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63  OWID of most rec
9720: 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65 20  ent insert (see 
9730: 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20  above) */.  i64 
9740: 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  szMmap;         
9750: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
9760: 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73  ault mmap_size s
9770: 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73 69  etting */.  unsi
9780: 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61  gned int openFla
9790: 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c 61  gs;       /* Fla
97a0: 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c  gs passed to sql
97b0: 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29  ite3_vfs.xOpen()
97c0: 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f 64   */.  int errCod
97d0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
97e0: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
97f0: 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28 53  nt error code (S
9800: 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e  QLITE_*) */.  in
9810: 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20 20  t errMask;      
9820: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 26              /* &
9830: 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77 69   result codes wi
9840: 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20 72  th this before r
9850: 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75 31  eturning */.  u1
9860: 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20  6 dbOptFlags;   
9870: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
9880: 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64  lags to enable/d
9890: 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74  isable optimizat
98a0: 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 65 6e 63  ions */.  u8 enc
98b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
98c0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
98d0: 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 75 38  encoding */.  u8
98e0: 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20   autoCommit;    
98f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
9900: 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66  he auto-commit f
9910: 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d  lag. */.  u8 tem
9920: 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20  p_store;        
9930: 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69          /* 1: fi
9940: 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20  le 2: memory 0: 
9950: 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20  default */.  u8 
9960: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20  mallocFailed;   
9970: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
9980: 75 65 20 69 66 20 77 65 20 68 61 76 65 20 73 65  ue if we have se
9990: 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c  en a malloc fail
99a0: 75 72 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74  ure */.  u8 dflt
99b0: 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20  LockMode;       
99c0: 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
99d0: 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66  t locking-mode f
99e0: 6f 72 20 61 74 74 61 63 68 65 64 20 64 62 73 20  or attached dbs 
99f0: 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72  */.  signed char
9a00: 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20   nextAutovac;   
9a10: 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65     /* Autovac se
9a20: 74 74 69 6e 67 20 61 66 74 65 72 20 56 41 43 55  tting after VACU
9a30: 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75  UM if >=0 */.  u
9a40: 38 20 73 75 70 70 72 65 73 73 45 72 72 3b 20 20  8 suppressErr;  
9a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9a60: 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72  Do not issue err
9a70: 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66 20 74  or messages if t
9a80: 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62  rue */.  u8 vtab
9a90: 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20  OnConflict;     
9aa0: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
9ab0: 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33  to return for s3
9ac0: 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63  _vtab_on_conflic
9ad0: 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72  t() */.  u8 isTr
9ae0: 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
9af0: 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  nt;    /* True i
9b00: 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20  f the outermost 
9b10: 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54  savepoint is a T
9b20: 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50  S */.  int nextP
9b30: 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20  agesize;        
9b40: 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65       /* Pagesize
9b50: 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66   after VACUUM if
9b60: 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67   >0 */.  u32 mag
9b70: 69 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ic;             
9b80: 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20         /* Magic 
9b90: 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63  number for detec
9ba0: 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65  t library misuse
9bb0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67   */.  int nChang
9bc0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
9bd0: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74      /* Value ret
9be0: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
9bf0: 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20  _changes() */.  
9c00: 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65  int nTotalChange
9c10: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
9c20: 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   Value returned 
9c30: 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c  by sqlite3_total
9c40: 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20  _changes() */.  
9c50: 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54  int aLimit[SQLIT
9c60: 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a  E_N_LIMIT];   /*
9c70: 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74   Limits */.  int
9c80: 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b   nMaxSorterMmap;
9c90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
9ca0: 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65  ximum size of re
9cb0: 67 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20  gions mapped by 
9cc0: 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75  sorter */.  stru
9cd0: 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e  ct sqlite3InitIn
9ce0: 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66  fo {      /* Inf
9cf0: 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75  ormation used du
9d00: 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74  ring initializat
9d10: 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e  ion */.    int n
9d20: 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  ewTnum;         
9d30: 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61         /* Rootpa
9d40: 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e  ge of table bein
9d50: 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
9d60: 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20  .    u8 iDb;    
9d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d80: 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c   /* Which db fil
9d90: 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69  e is being initi
9da0: 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38  alized */.    u8
9db0: 20 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20   busy;          
9dc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55            /* TRU
9dd0: 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69  E if currently i
9de0: 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20  nitializing */. 
9df0: 20 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67     u8 orphanTrig
9e00: 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ger;           /
9e10: 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  * Last statement
9e20: 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d   is orphaned TEM
9e30: 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 20  P trigger */.   
9e40: 20 75 38 20 69 6d 70 6f 73 74 65 72 54 61 62 6c   u8 imposterTabl
9e50: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
9e60: 42 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f  Building an impo
9e70: 73 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20  ster table */.  
9e80: 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56  } init;.  int nV
9e90: 64 62 65 41 63 74 69 76 65 3b 20 20 20 20 20 20  dbeActive;      
9ea0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
9eb0: 72 20 6f 66 20 56 44 42 45 73 20 63 75 72 72 65  r of VDBEs curre
9ec0: 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a  ntly running */.
9ed0: 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b    int nVdbeRead;
9ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ef0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
9f00: 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72  ive VDBEs that r
9f10: 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a  ead or write */.
9f20: 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65    int nVdbeWrite
9f30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9f40: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
9f50: 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72  ive VDBEs that r
9f60: 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f  ead and write */
9f70: 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63  .  int nVdbeExec
9f80: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
9f90: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
9fa0: 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64  sted calls to Vd
9fb0: 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e  beExec() */.  in
9fc0: 74 20 6e 56 44 65 73 74 72 6f 79 3b 20 20 20 20  t nVDestroy;    
9fd0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
9fe0: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
9ff0: 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f 70 65 72  OP_VDestroy oper
a000: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  ations */.  int 
a010: 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  nExtension;     
a020: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
a030: 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78  ber of loaded ex
a040: 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f  tensions */.  vo
a050: 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b  id **aExtension;
a060: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
a070: 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c  rray of shared l
a080: 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a  ibrary handles *
a090: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63  /.  void (*xTrac
a0a0: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
a0b0: 68 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a  har*);        /*
a0c0: 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   Trace function 
a0d0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63  */.  void *pTrac
a0e0: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
a0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a100: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
a110: 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  e trace function
a120: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72   */.  void (*xPr
a130: 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  ofile)(void*,con
a140: 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20  st char*,u64);  
a150: 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e  /* Profiling fun
a160: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
a170: 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20  *pProfileArg;   
a180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a190: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
a1a0: 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63   to profile func
a1b0: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
a1c0: 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20  pCommitArg;     
a1d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
a1e0: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d  rgument to xComm
a1f0: 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20  itCallback() */ 
a200: 20 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d    .  int (*xComm
a210: 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  itCallback)(void
a220: 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65  *);    /* Invoke
a230: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
a240: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52  t. */.  void *pR
a250: 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20  ollbackArg;     
a260: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
a270: 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61  ument to xRollba
a280: 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20  ckCallback() */ 
a290: 20 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c    .  void (*xRol
a2a0: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76  lbackCallback)(v
a2b0: 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65  oid*); /* Invoke
a2c0: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
a2d0: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  t. */.  void *pU
a2e0: 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64  pdateArg;.  void
a2f0: 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61   (*xUpdateCallba
a300: 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  ck)(void*,int, c
a310: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
a320: 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e   char*,sqlite_in
a330: 74 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  t64);.#ifndef SQ
a340: 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
a350: 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61  int (*xWalCallba
a360: 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69  ck)(void *, sqli
a370: 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
a380: 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  r *, int);.  voi
a390: 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64  d *pWalArg;.#end
a3a0: 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  if.  void(*xColl
a3b0: 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71  Needed)(void*,sq
a3c0: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
a3d0: 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  Rep,const char*)
a3e0: 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  ;.  void(*xCollN
a3f0: 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73  eeded16)(void*,s
a400: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
a410: 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a  tRep,const void*
a420: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c  );.  void *pColl
a430: 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c  NeededArg;.  sql
a440: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72  ite3_value *pErr
a450: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f  ;          /* Mo
a460: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
a470: 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69  message */.  uni
a480: 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c  on {.    volatil
a490: 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70  e int isInterrup
a4a0: 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20  ted; /* True if 
a4b0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
a4c0: 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  t has been calle
a4d0: 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20  d */.    double 
a4e0: 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20  notUsed1;       
a4f0: 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a       /* Spacer *
a500: 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b  /.  } u1;.  Look
a510: 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b  aside lookaside;
a520: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
a530: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f  kaside malloc co
a540: 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23  nfiguration */.#
a550: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
a560: 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
a570: 0a 20 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68  .  sqlite3_xauth
a580: 20 78 41 75 74 68 3b 20 20 20 20 20 20 20 20 20   xAuth;         
a590: 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f   /* Access autho
a5a0: 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f  rization functio
a5b0: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  n */.  void *pAu
a5c0: 74 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  thArg;          
a5d0: 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75       /* 1st argu
a5e0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65  ment to the acce
a5f0: 73 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e  ss auth function
a600: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
a610: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
a620: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
a630: 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65  .  int (*xProgre
a640: 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  ss)(void *);    
a650: 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73   /* The progress
a660: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76   callback */.  v
a670: 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72  oid *pProgressAr
a680: 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
a690: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
a6a0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
a6b0: 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  k */.  unsigned 
a6c0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20  nProgressOps;   
a6d0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
a6e0: 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72  f opcodes for pr
a6f0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
a700: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
a710: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
a720: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
a730: 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20   nVTrans;       
a740: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
a750: 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20  located size of 
a760: 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73  aVTrans */.  Has
a770: 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20  h aModule;      
a780: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f             /* po
a790: 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74  pulated by sqlit
a7a0: 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  e3_create_module
a7b0: 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20  () */.  VtabCtx 
a7c0: 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20  *pVtabCtx;      
a7d0: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74        /* Context
a7e0: 20 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62   for active vtab
a7f0: 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20   connect/create 
a800: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56  */.  VTable **aV
a810: 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20  Trans;          
a820: 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61     /* Virtual ta
a830: 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74  bles with open t
a840: 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  ransactions */. 
a850: 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e   VTable *pDiscon
a860: 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63  nect;    /* Disc
a870: 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20  onnect these in 
a880: 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65  next sqlite3_pre
a890: 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66  pare() */.#endif
a8a0: 0a 20 20 46 75 6e 63 44 65 66 48 61 73 68 20 61  .  FuncDefHash a
a8b0: 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20  Func;           
a8c0: 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f   /* Hash table o
a8d0: 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e  f connection fun
a8e0: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68  ctions */.  Hash
a8f0: 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20   aCollSeq;      
a900: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
a910: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
a920: 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61  nces */.  BusyHa
a930: 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65  ndler busyHandle
a940: 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20  r;      /* Busy 
a950: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62  callback */.  Db
a960: 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20   aDbStatic[2];  
a970: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
a980: 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20  tatic space for 
a990: 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61  the 2 default ba
a9a0: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65  ckends */.  Save
a9b0: 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
a9c0: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  t;        /* Lis
a9d0: 74 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65  t of active save
a9e0: 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  points */.  int 
a9f0: 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20  busyTimeout;    
aa00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73            /* Bus
aa10: 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75  y handler timeou
aa20: 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20  t, in msec */.  
aa30: 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20  int nSavepoint; 
aa40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
aa50: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74   Number of non-t
aa60: 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
aa70: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  oints */.  int n
aa80: 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20  Statement;      
aa90: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
aaa0: 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61  er of nested sta
aab0: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
aac0: 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ons  */.  i64 nD
aad0: 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20  eferredCons;    
aae0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
aaf0: 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
ab00: 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63  nts this transac
ab10: 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e  tion. */.  i64 n
ab20: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
ab30: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20           /* Net 
ab40: 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61  deferred immedia
ab50: 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  te constraints *
ab60: 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73  /.  int *pnBytes
ab70: 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20  Freed;          
ab80: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c    /* If not NULL
ab90: 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73  , increment this
aba0: 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a   in DbFree() */.
abb0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
abc0: 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
abd0: 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  FY.  /* The foll
abe0: 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20  owing variables 
abf0: 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65  are all protecte
ac00: 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f  d by the STATIC_
ac10: 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75 74  MASTER .  ** mut
ac20: 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74  ex, not by sqlit
ac30: 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61  e3.mutex. They a
ac40: 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20  re used by code 
ac50: 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20 20  in notify.c. .  
ac60: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
ac70: 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e  UnlockConnection
ac80: 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ==Y, that means 
ac90: 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e  that X is waitin
aca0: 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20  g for Y to.  ** 
acb0: 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69  unlock so that i
acc0: 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20  t can proceed.. 
acd0: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
ace0: 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74  pBlockingConnect
acf0: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
ad00: 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e  ns that somethin
ad10: 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20  g that X tried. 
ad20: 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20   ** tried to do 
ad30: 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20  recently failed 
ad40: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c  with an SQLITE_L
ad50: 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20  OCKED error due 
ad60: 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65  to locks.  ** he
ad70: 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20  ld by Y..  */.  
ad80: 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69  sqlite3 *pBlocki
ad90: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a  ngConnection; /*
ada0: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74   Connection that
adb0: 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c   caused SQLITE_L
adc0: 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74  OCKED */.  sqlit
add0: 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65  e3 *pUnlockConne
ade0: 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  ction;          
adf0: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
ae00: 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f  o watch for unlo
ae10: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  ck */.  void *pU
ae20: 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20  nlockArg;       
ae30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ae40: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e   Argument to xUn
ae50: 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20  lockNotify */.  
ae60: 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f  void (*xUnlockNo
ae70: 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69  tify)(void **, i
ae80: 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20  nt);  /* Unlock 
ae90: 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20  notify callback 
aea0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e  */.  sqlite3 *pN
aeb0: 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20  extBlocked;     
aec0: 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
aed0: 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65  st of all blocke
aee0: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f  d connections */
aef0: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
af00: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
af10: 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69  NTICATION.  sqli
af20: 74 65 33 5f 75 73 65 72 61 75 74 68 20 61 75 74  te3_userauth aut
af30: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65  h;        /* Use
af40: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
af50: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
af60: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
af70: 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63   A macro to disc
af80: 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e  over the encodin
af90: 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e  g of a database.
afa0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45  .*/.#define SCHE
afb0: 4d 41 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29  MA_ENC(db) ((db)
afc0: 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61  ->aDb[0].pSchema
afd0: 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45  ->enc).#define E
afe0: 4e 43 28 64 62 29 20 20 20 20 20 20 20 20 28 28  NC(db)        ((
aff0: 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a  db)->enc)../*.**
b000: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
b010: 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33   for the sqlite3
b020: 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69  .flags..*/.#defi
b030: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72  ne SQLITE_VdbeTr
b040: 61 63 65 20 20 20 20 20 20 30 78 30 30 30 30 30  ace      0x00000
b050: 30 30 31 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  001  /* True to 
b060: 74 72 61 63 65 20 56 44 42 45 20 65 78 65 63 75  trace VDBE execu
b070: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
b080: 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
b090: 6e 67 65 73 20 20 30 78 30 30 30 30 30 30 30 32  nges  0x00000002
b0a0: 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64    /* Uncommitted
b0b0: 20 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e   Hash table chan
b0c0: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ges */.#define S
b0d0: 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20  QLITE_FullFSync 
b0e0: 20 20 20 20 20 30 78 30 30 30 30 30 30 30 34 20       0x00000004 
b0f0: 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79   /* Use full fsy
b100: 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e  nc on the backen
b110: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
b120: 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e  ITE_CkptFullFSyn
b130: 63 20 20 30 78 30 30 30 30 30 30 30 38 20 20 2f  c  0x00000008  /
b140: 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63  * Use full fsync
b150: 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 20   for checkpoint 
b160: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b170: 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20  E_CacheSpill    
b180: 20 30 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20   0x00000010  /* 
b190: 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61 67 65  OK to spill page
b1a0: 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69  r cache */.#defi
b1b0: 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f  ne SQLITE_FullCo
b1c0: 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30 30  lNames   0x00000
b1d0: 30 32 30 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c  020  /* Show ful
b1e0: 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f  l column names o
b1f0: 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66  n SELECT */.#def
b200: 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74  ine SQLITE_Short
b210: 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30  ColNames  0x0000
b220: 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73 68  0040  /* Show sh
b230: 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65  ort columns name
b240: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b250: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20  ITE_CountRows   
b260: 20 20 20 30 78 30 30 30 30 30 30 38 30 20 20 2f     0x00000080  /
b270: 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61  * Count rows cha
b280: 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20  nged by INSERT, 
b290: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
b2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b2c0: 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44    DELETE, or UPD
b2d0: 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a  ATE and return *
b2e0: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
b2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b300: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
b310: 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67   the count using
b320: 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a   a callback. */.
b330: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
b340: 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78  ullCallback   0x
b350: 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e 76  00000100  /* Inv
b360: 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  oke the callback
b370: 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a   once if the */.
b380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72            /*   r
b3b0: 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70  esult set is emp
b3c0: 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ty */.#define SQ
b3d0: 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20  LITE_SqlTrace   
b3e0: 20 20 20 20 30 78 30 30 30 30 30 32 30 30 20 20      0x00000200  
b3f0: 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20 53  /* Debug print S
b400: 51 4c 20 61 73 20 69 74 20 65 78 65 63 75 74 65  QL as it execute
b410: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b420: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20  ITE_VdbeListing 
b430: 20 20 20 30 78 30 30 30 30 30 34 30 30 20 20 2f     0x00000400  /
b440: 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73  * Debug listings
b450: 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61 6d   of VDBE program
b460: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b470: 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20  ITE_WriteSchema 
b480: 20 20 20 30 78 30 30 30 30 30 38 30 30 20 20 2f     0x00000800  /
b490: 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53  * OK to update S
b4a0: 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a  QLITE_MASTER */.
b4b0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
b4c0: 64 62 65 41 64 64 6f 70 54 72 61 63 65 20 30 78  dbeAddopTrace 0x
b4d0: 30 30 30 30 31 30 30 30 20 20 2f 2a 20 54 72 61  00001000  /* Tra
b4e0: 63 65 20 73 71 6c 69 74 65 33 56 64 62 65 41 64  ce sqlite3VdbeAd
b4f0: 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23  dOp() calls */.#
b500: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67  define SQLITE_Ig
b510: 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78 30  noreChecks   0x0
b520: 30 30 30 32 30 30 30 20 20 2f 2a 20 44 6f 20 6e  0002000  /* Do n
b530: 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b  ot enforce check
b540: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
b550: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
b560: 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20 30  eadUncommitted 0
b570: 78 30 30 30 34 30 30 30 20 20 2f 2a 20 46 6f 72  x0004000  /* For
b580: 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
b590: 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  de */.#define SQ
b5a0: 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46  LITE_LegacyFileF
b5b0: 6d 74 20 20 30 78 30 30 30 30 38 30 30 30 20 20  mt  0x00008000  
b5c0: 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64 61  /* Create new da
b5d0: 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61  tabases in forma
b5e0: 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  t 1 */.#define S
b5f0: 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f  QLITE_RecoveryMo
b600: 64 65 20 20 20 30 78 30 30 30 31 30 30 30 30 20  de   0x00010000 
b610: 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65 6d   /* Ignore schem
b620: 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66  a errors */.#def
b630: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72  ine SQLITE_Rever
b640: 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30 32  seOrder   0x0002
b650: 30 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65  0000  /* Reverse
b660: 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43   unordered SELEC
b670: 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  Ts */.#define SQ
b680: 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73  LITE_RecTriggers
b690: 20 20 20 20 30 78 30 30 30 34 30 30 30 30 20 20      0x00040000  
b6a0: 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73  /* Enable recurs
b6b0: 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ive triggers */.
b6c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
b6d0: 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78  oreignKeys    0x
b6e0: 30 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e 66  00080000  /* Enf
b6f0: 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  orce foreign key
b700: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f   constraints  */
b710: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
b720: 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30  AutoIndex      0
b730: 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20 45 6e  x00100000  /* En
b740: 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69  able automatic i
b750: 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndexes */.#defin
b760: 65 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72 42  e SQLITE_PreferB
b770: 75 69 6c 74 69 6e 20 20 30 78 30 30 32 30 30 30  uiltin  0x002000
b780: 30 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63  00  /* Preferenc
b790: 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75  e to built-in fu
b7a0: 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ncs */.#define S
b7b0: 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73  QLITE_LoadExtens
b7c0: 69 6f 6e 20 20 30 78 30 30 34 30 30 30 30 30 20  ion  0x00400000 
b7d0: 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f   /* Enable load_
b7e0: 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65  extension */.#de
b7f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62  fine SQLITE_Enab
b800: 6c 65 54 72 69 67 67 65 72 20 20 30 78 30 30 38  leTrigger  0x008
b810: 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74  00000  /* True t
b820: 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72  o enable trigger
b830: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
b840: 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20  ITE_DeferFKs    
b850: 20 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f     0x01000000  /
b860: 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b 20 63  * Defer all FK c
b870: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
b880: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65  efine SQLITE_Que
b890: 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78 30 32  ryOnly      0x02
b8a0: 30 30 30 30 30 30 20 20 2f 2a 20 44 69 73 61 62  000000  /* Disab
b8b0: 6c 65 20 64 61 74 61 62 61 73 65 20 63 68 61 6e  le database chan
b8c0: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ges */.#define S
b8d0: 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 20 20  QLITE_VdbeEQP   
b8e0: 20 20 20 20 20 30 78 30 34 30 30 30 30 30 30 20       0x04000000 
b8f0: 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49   /* Debug EXPLAI
b900: 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a  N QUERY PLAN */.
b910: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
b920: 61 63 75 75 6d 20 20 20 20 20 20 20 20 20 30 78  acuum         0x
b930: 30 38 30 30 30 30 30 30 20 20 2f 2a 20 43 75 72  08000000  /* Cur
b940: 72 65 6e 74 6c 79 20 69 6e 20 61 20 56 41 43 55  rently in a VACU
b950: 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  UM */.#define SQ
b960: 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43 6b 20  LITE_CellSizeCk 
b970: 20 20 20 20 30 78 31 30 30 30 30 30 30 30 20 20      0x10000000  
b980: 2f 2a 20 43 68 65 63 6b 20 62 74 72 65 65 20 63  /* Check btree c
b990: 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c 6f 61  ell sizes on loa
b9a0: 64 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74  d */.../*.** Bit
b9b0: 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  s of the sqlite3
b9c0: 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c  .dbOptFlags fiel
b9d0: 64 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  d that are used 
b9e0: 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  by the.** sqlite
b9f0: 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53  3_test_control(S
ba00: 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f  QLITE_TESTCTRL_O
ba10: 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e  PTIMIZATIONS,...
ba20: 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a  ) interface to.*
ba30: 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69  * selectively di
ba40: 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70  sable various op
ba50: 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a  timizations..*/.
ba60: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
ba70: 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78  ueryFlattener 0x
ba80: 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20  0001   /* Query 
ba90: 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64  flattening */.#d
baa0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c  efine SQLITE_Col
bab0: 75 6d 6e 43 61 63 68 65 20 20 20 20 30 78 30 30  umnCache    0x00
bac0: 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63  02   /* Column c
bad0: 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ache */.#define 
bae0: 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72  SQLITE_GroupByOr
baf0: 64 65 72 20 20 20 30 78 30 30 30 34 20 20 20 2f  der   0x0004   /
bb00: 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20  * GROUPBY cover 
bb10: 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64  of ORDERBY */.#d
bb20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63  efine SQLITE_Fac
bb30: 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30  torOutConst 0x00
bb40: 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74  08   /* Constant
bb50: 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a   factoring */./*
bb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb70: 6e 6f 74 20 75 73 65 64 20 20 20 20 30 78 30 30  not used    0x00
bb80: 31 30 20 20 20 2f 2f 20 57 61 73 3a 20 53 51 4c  10   // Was: SQL
bb90: 49 54 45 5f 49 64 78 52 65 61 6c 41 73 49 6e 74  ITE_IdxRealAsInt
bba0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
bbb0: 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20  TE_DistinctOpt  
bbc0: 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44 49    0x0020   /* DI
bbd0: 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64  STINCT using ind
bbe0: 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  exes */.#define 
bbf0: 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53  SQLITE_CoverIdxS
bc00: 63 61 6e 20 20 20 30 78 30 30 34 30 20 20 20 2f  can   0x0040   /
bc10: 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78  * Covering index
bc20: 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e   scans */.#defin
bc30: 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79  e SQLITE_OrderBy
bc40: 49 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20 20  IdxJoin 0x0080  
bc50: 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20   /* ORDER BY of 
bc60: 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20  joins via index 
bc70: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
bc80: 45 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65 20  E_SubqCoroutine 
bc90: 20 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76 61   0x0100   /* Eva
bca0: 6c 75 61 74 65 20 73 75 62 71 75 65 72 69 65 73  luate subqueries
bcb0: 20 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a   as coroutines *
bcc0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
bcd0: 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20 20 20  _Transitive     
bce0: 30 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61 6e  0x0200   /* Tran
bcf0: 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e  sitive constrain
bd00: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
bd10: 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69  LITE_OmitNoopJoi
bd20: 6e 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20  n   0x0400   /* 
bd30: 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c  Omit unused tabl
bd40: 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23  es in joins */.#
bd50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74  define SQLITE_St
bd60: 61 74 33 34 20 20 20 20 20 20 20 20 20 30 78 30  at34         0x0
bd70: 38 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41  800   /* Use STA
bd80: 54 33 20 6f 72 20 53 54 41 54 34 20 64 61 74 61  T3 or STAT4 data
bd90: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
bda0: 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20 20  TE_AllOpts      
bdb0: 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41 6c    0xffff   /* Al
bdc0: 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  l optimizations 
bdd0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  */../*.** Macros
bde0: 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68 65   for testing whe
bdf0: 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69  ther or not opti
be00: 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65 6e  mizations are en
be10: 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65  abled or disable
be20: 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  d..*/.#ifndef SQ
be30: 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
be40: 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e 65 20 4f  N_TEST.#define O
be50: 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62  ptimizationDisab
be60: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 28  led(db, mask)  (
be70: 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67  ((db)->dbOptFlag
be80: 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64  s&(mask))!=0).#d
be90: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
bea0: 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61  onEnabled(db, ma
beb0: 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64 62  sk)   (((db)->db
bec0: 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29  OptFlags&(mask))
bed0: 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64 65 66 69  ==0).#else.#defi
bee0: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44  ne OptimizationD
bef0: 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  isabled(db, mask
bf00: 29 20 20 30 0a 23 64 65 66 69 6e 65 20 4f 70 74  )  0.#define Opt
bf10: 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64  imizationEnabled
bf20: 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 31 0a 23  (db, mask)   1.#
bf30: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  endif../*.** Ret
bf40: 75 72 6e 20 74 72 75 65 20 69 66 20 69 74 20 4f  urn true if it O
bf50: 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73  K to factor cons
bf60: 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73  tant expressions
bf70: 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69 61   into the initia
bf80: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65  lization.** code
bf90: 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69  . The argument i
bfa0: 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63 74  s a Parse object
bfb0: 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67 65   for the code ge
bfc0: 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66  nerator..*/.#def
bfd0: 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f  ine ConstFactorO
bfe0: 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e  k(P) ((P)->okCon
bff0: 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a  stFactor)../*.**
c000: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
c010: 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e   for the sqlite.
c020: 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20  magic field..** 
c030: 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20  The numbers are 
c040: 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64  obtained at rand
c050: 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73  om and have no s
c060: 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20  pecial meaning, 
c070: 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65  other.** than be
c080: 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f  ing distinct fro
c090: 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a  m one another..*
c0a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c0b0: 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20  _MAGIC_OPEN     
c0c0: 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44  0xa029a697  /* D
c0d0: 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20  atabase is open 
c0e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c0f0: 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20  E_MAGIC_CLOSED  
c100: 20 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20   0x9f3c2d33  /* 
c110: 44 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73  Database is clos
c120: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
c130: 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20  LITE_MAGIC_SICK 
c140: 20 20 20 20 30 78 34 62 37 37 31 32 39 30 20 20      0x4b771290  
c150: 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61  /* Error and awa
c160: 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23  iting close */.#
c170: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
c180: 47 49 43 5f 42 55 53 59 20 20 20 20 20 30 78 66  GIC_BUSY     0xf
c190: 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61  03b7906  /* Data
c1a0: 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69  base currently i
c1b0: 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  n use */.#define
c1c0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52   SQLITE_MAGIC_ER
c1d0: 52 4f 52 20 20 20 20 30 78 62 35 33 35 37 39 33  ROR    0xb535793
c1e0: 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f  0  /* An SQLITE_
c1f0: 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63  MISUSE error occ
c200: 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  urred */.#define
c210: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f   SQLITE_MAGIC_ZO
c220: 4d 42 49 45 20 20 20 30 78 36 34 63 66 66 63 37  MBIE   0x64cffc7
c230: 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68  f  /* Close with
c240: 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20   last statement 
c250: 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  close */../*.** 
c260: 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f  Each SQL functio
c270: 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  n is defined by 
c280: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
c290: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  he following.** 
c2a0: 73 74 72 75 63 74 75 72 65 2e 20 20 41 20 70 6f  structure.  A po
c2b0: 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
c2c0: 72 75 63 74 75 72 65 20 69 73 20 73 74 6f 72 65  ructure is store
c2d0: 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e  d in the sqlite.
c2e0: 61 46 75 6e 63 0a 2a 2a 20 68 61 73 68 20 74 61  aFunc.** hash ta
c2f0: 62 6c 65 2e 20 20 57 68 65 6e 20 6d 75 6c 74 69  ble.  When multi
c300: 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20 68 61  ple functions ha
c310: 76 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  ve the same name
c320: 2c 20 74 68 65 20 68 61 73 68 20 74 61 62 6c 65  , the hash table
c330: 0a 2a 2a 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  .** points to a 
c340: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 74  linked list of t
c350: 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73 2e  hese structures.
c360: 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44  .*/.struct FuncD
c370: 65 66 20 7b 0a 20 20 69 31 36 20 6e 41 72 67 3b  ef {.  i16 nArg;
c380: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c390: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
c3a0: 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e  ts.  -1 means un
c3b0: 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31 36  limited */.  u16
c3c0: 20 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20 20   funcFlags;     
c3d0: 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e    /* Some combin
c3e0: 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f  ation of SQLITE_
c3f0: 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64  FUNC_* */.  void
c400: 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20 20   *pUserData;    
c410: 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70 61   /* User data pa
c420: 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e  rameter */.  Fun
c430: 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20  cDef *pNext;    
c440: 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69    /* Next functi
c450: 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d  on with same nam
c460: 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46  e */.  void (*xF
c470: 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  unc)(sqlite3_con
c480: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
c490: 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 52  3_value**); /* R
c4a0: 65 67 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  egular function 
c4b0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65  */.  void (*xSte
c4c0: 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  p)(sqlite3_conte
c4d0: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
c4e0: 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67 67  value**); /* Agg
c4f0: 72 65 67 61 74 65 20 73 74 65 70 20 2a 2f 0a 20  regate step */. 
c500: 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a   void (*xFinaliz
c510: 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  e)(sqlite3_conte
c520: 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20  xt*);           
c530: 20 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74       /* Aggregat
c540: 65 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20  e finalizer */. 
c550: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
c560: 20 20 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d        /* SQL nam
c570: 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
c580: 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20  n. */.  FuncDef 
c590: 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20  *pHash;      /* 
c5a0: 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66 66  Next with a diff
c5b0: 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74  erent name but t
c5c0: 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a  he same hash */.
c5d0: 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72    FuncDestructor
c5e0: 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20   *pDestructor;  
c5f0: 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f   /* Reference co
c600: 75 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f 72  unted destructor
c610: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a   function */.};.
c620: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75  ./*.** This stru
c630: 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61 74  cture encapsulat
c640: 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69  es a user-functi
c650: 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63 61  on destructor ca
c660: 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f  llback (as.** co
c670: 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67 20 63  nfigured using c
c680: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76  reate_function_v
c690: 32 28 29 29 20 61 6e 64 20 61 20 72 65 66 65 72  2()) and a refer
c6a0: 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57 68  ence counter. Wh
c6b0: 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e  en.** create_fun
c6c0: 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63 61  ction_v2() is ca
c6d0: 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  lled to create a
c6e0: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61   function with a
c6f0: 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20   destructor,.** 
c700: 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20  a single object 
c710: 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
c720: 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63 44  allocated. FuncD
c730: 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20 69  estructor.nRef i
c740: 73 20 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68 65  s set to .** the
c750: 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44   number of FuncD
c760: 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74  ef objects creat
c770: 65 64 20 28 65 69 74 68 65 72 20 31 20 6f 72 20  ed (either 1 or 
c780: 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  3, depending on 
c790: 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f  whether.** or no
c7a0: 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  t the specified 
c7b0: 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49  encoding is SQLI
c7c0: 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e  TE_ANY). The Fun
c7d0: 63 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72  cDef.pDestructor
c7e0: 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61  .** member of ea
c7f0: 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75  ch of the new Fu
c800: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73  ncDef objects is
c810: 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f   set to point to
c820: 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a   the allocated.*
c830: 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  * FuncDestructor
c840: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74  ..**.** Thereaft
c850: 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20  er, when one of 
c860: 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65  the FuncDef obje
c870: 63 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20  cts is deleted, 
c880: 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a  the reference.**
c890: 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f   count on this o
c8a0: 62 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d 65  bject is decreme
c8b0: 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65  nted. When it re
c8c0: 61 63 68 65 73 20 30 2c 20 74 68 65 20 64 65 73  aches 0, the des
c8d0: 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e  tructor.** is in
c8e0: 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75  voked and the Fu
c8f0: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73 74 72  ncDestructor str
c900: 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f  ucture freed..*/
c910: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74  .struct FuncDest
c920: 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e  ructor {.  int n
c930: 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44  Ref;.  void (*xD
c940: 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b  estroy)(void *);
c950: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61  .  void *pUserDa
c960: 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f  ta;.};../*.** Po
c970: 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f  ssible values fo
c980: 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e  r FuncDef.flags.
c990: 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20    Note that the 
c9a0: 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50  _LENGTH and _TYP
c9b0: 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75  EOF.** values mu
c9c0: 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f  st correspond to
c9d0: 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
c9e0: 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50  G and OPFLAG_TYP
c9f0: 45 4f 46 41 52 47 2e 20 20 54 68 65 72 65 0a 2a  EOFARG.  There.*
ca00: 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73  * are assert() s
ca10: 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65  tatements in the
ca20: 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20   code to verify 
ca30: 74 68 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  this..*/.#define
ca40: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43   SQLITE_FUNC_ENC
ca50: 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f 2a 20  MASK  0x0003 /* 
ca60: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
ca70: 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55  ITE_UTF16BE or U
ca80: 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e  TF16LE */.#defin
ca90: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49  e SQLITE_FUNC_LI
caa0: 4b 45 20 20 20 20 20 30 78 30 30 30 34 20 2f 2a  KE     0x0004 /*
cab0: 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74   Candidate for t
cac0: 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61  he LIKE optimiza
cad0: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
cae0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45  SQLITE_FUNC_CASE
caf0: 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 43       0x0008 /* C
cb00: 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49  ase-sensitive LI
cb10: 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e  KE-type function
cb20: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
cb30: 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20  TE_FUNC_EPHEM   
cb40: 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68 65 6d   0x0010 /* Ephem
cb50: 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69  eral.  Delete wi
cb60: 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69  th VDBE */.#defi
cb70: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  ne SQLITE_FUNC_N
cb80: 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f  EEDCOLL 0x0020 /
cb90: 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63  * sqlite3GetFunc
cba0: 43 6f 6c 6c 53 65 71 20 6d 69 67 68 74 20 62 65  CollSeq might be
cbb0: 20 63 61 6c 6c 65 64 20 2a 2f 0a 23 64 65 66 69   called */.#defi
cbc0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
cbd0: 45 4e 47 54 48 20 20 20 30 78 30 30 34 30 20 2f  ENGTH   0x0040 /
cbe0: 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74  * Built-in lengt
cbf0: 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  h() function */.
cc00: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
cc10: 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78 30  UNC_TYPEOF   0x0
cc20: 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  080 /* Built-in 
cc30: 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f  typeof() functio
cc40: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
cc50: 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20  ITE_FUNC_COUNT  
cc60: 20 20 30 78 30 31 30 30 20 2f 2a 20 42 75 69 6c    0x0100 /* Buil
cc70: 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67  t-in count(*) ag
cc80: 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69  gregate */.#defi
cc90: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
cca0: 4f 41 4c 45 53 43 45 20 30 78 30 32 30 30 20 2f  OALESCE 0x0200 /
ccb0: 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65  * Built-in coale
ccc0: 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28  sce() or ifnull(
ccd0: 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ) */.#define SQL
cce0: 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c  ITE_FUNC_UNLIKEL
ccf0: 59 20 30 78 30 34 30 30 20 2f 2a 20 42 75 69 6c  Y 0x0400 /* Buil
cd00: 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20  t-in unlikely() 
cd10: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
cd20: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
cd30: 43 4f 4e 53 54 41 4e 54 20 30 78 30 38 30 30 20  CONSTANT 0x0800 
cd40: 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75  /* Constant inpu
cd50: 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61  ts give a consta
cd60: 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65  nt output */.#de
cd70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
cd80: 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31 30 30 30  _MINMAX   0x1000
cd90: 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69 6e   /* True for min
cda0: 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67 67  () and max() agg
cdb0: 72 65 67 61 74 65 73 20 2a 2f 0a 23 64 65 66 69  regates */.#defi
cdc0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 41  ne SQLITE_FUNC_A
cdd0: 46 46 49 4e 49 54 59 20 30 78 32 30 30 30 20 2f  FFINITY 0x2000 /
cde0: 2a 20 42 75 69 6c 74 2d 69 6e 20 61 66 66 69 6e  * Built-in affin
cdf0: 69 74 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  ity() function *
ce00: 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  /../*.** The fol
ce10: 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63  lowing three mac
ce20: 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c  ros, FUNCTION(),
ce30: 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20   LIKEFUNC() and 
ce40: 41 47 47 52 45 47 41 54 45 28 29 20 61 72 65 0a  AGGREGATE() are.
ce50: 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61 74  ** used to creat
ce60: 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65  e the initialize
ce70: 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44  rs for the FuncD
ce80: 65 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a  ef structures..*
ce90: 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28  *.**   FUNCTION(
cea0: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
ceb0: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
cec0: 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
ced0: 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75  eate a scalar fu
cee0: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
cef0: 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  n of a function 
cf00: 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 69 6d  zName .**     im
cf10: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66  plemented by C f
cf20: 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68  unction xFunc th
cf30: 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
cf40: 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a  arguments. The.*
cf50: 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61 73 73  *     value pass
cf60: 65 64 20 61 73 20 69 41 72 67 20 69 73 20 63 61  ed as iArg is ca
cf70: 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20  st to a (void*) 
cf80: 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62  and made availab
cf90: 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65  le.**     as the
cfa0: 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69   user-data (sqli
cfb0: 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29  te3_user_data())
cfc0: 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f   for the functio
cfd0: 6e 2e 20 49 66 20 0a 2a 2a 20 20 20 20 20 61 72  n. If .**     ar
cfe0: 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72  gument bNC is tr
cff0: 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c  ue, then the SQL
d000: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
d010: 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a  L flag is set..*
d020: 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e  *.**   VFUNCTION
d030: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
d040: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
d050: 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43  **     Like FUNC
d060: 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f  TION except it o
d070: 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f  mits the SQLITE_
d080: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c  FUNC_CONSTANT fl
d090: 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52  ag..**.**   AGGR
d0a0: 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  EGATE(zName, nAr
d0b0: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 53  g, iArg, bNC, xS
d0c0: 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20  tep, xFinal).** 
d0d0: 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
d0e0: 74 65 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  te an aggregate 
d0f0: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
d100: 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  ion implemented 
d110: 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20  by.**     the C 
d120: 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20  functions xStep 
d130: 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20  and xFinal. The 
d140: 66 69 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d  first four param
d150: 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65  eters.**     are
d160: 20 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20   interpreted in 
d170: 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20  the same way as 
d180: 74 68 65 20 66 69 72 73 74 20 34 20 70 61 72 61  the first 4 para
d190: 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20  meters to.**    
d1a0: 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a   FUNCTION()..**.
d1b0: 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e  **   LIKEFUNC(zN
d1c0: 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c  ame, nArg, pArg,
d1d0: 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55   flags).**     U
d1e0: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
d1f0: 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  scalar function 
d200: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
d210: 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a  function zName .
d220: 2a 2a 20 20 20 20 20 74 68 61 74 20 61 63 63 65  **     that acce
d230: 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e  pts nArg argumen
d240: 74 73 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d  ts and is implem
d250: 65 6e 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20  ented by a call 
d260: 74 6f 20 43 20 0a 2a 2a 20 20 20 20 20 66 75 6e  to C .**     fun
d270: 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20  ction likeFunc. 
d280: 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20 69 73  Argument pArg is
d290: 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64   cast to a (void
d2a0: 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20   *) and made.** 
d2b0: 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20 61 73      available as
d2c0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 75 73   the function us
d2d0: 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33  er-data (sqlite3
d2e0: 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e 20 54  _user_data()). T
d2f0: 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44 65  he.**     FuncDe
d300: 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62 6c 65  f.flags variable
d310: 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 76   is set to the v
d320: 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 74  alue passed as t
d330: 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20  he flags.**     
d340: 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64  parameter..*/.#d
d350: 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a  efine FUNCTION(z
d360: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
d370: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
d380: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
d390: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51  FUNC_CONSTANT|SQ
d3a0: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
d3b0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
d3c0: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54  OLL), \.   SQLIT
d3d0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
d3e0: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
d3f0: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
d400: 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e 43 54  }.#define VFUNCT
d410: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
d420: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
d430: 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
d440: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
d450: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
d460: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54  OLL), \.   SQLIT
d470: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
d480: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
d490: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
d4a0: 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49  }.#define FUNCTI
d4b0: 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ON2(zName, nArg,
d4c0: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
d4d0: 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c  c, extraFlags) \
d4e0: 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f  .  {nArg,SQLITE_
d4f0: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51  FUNC_CONSTANT|SQ
d500: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
d510: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
d520: 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c  OLL)|extraFlags,
d530: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
d540: 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
d550: 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a   xFunc, 0, 0, #z
d560: 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66  Name, 0, 0}.#def
d570: 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e  ine STR_FUNCTION
d580: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
d590: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
d5a0: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
d5b0: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
d5c0: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
d5d0: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
d5e0: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72  DCOLL), \.   pAr
d5f0: 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  g, 0, xFunc, 0, 
d600: 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d  0, #zName, 0, 0}
d610: 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e  .#define LIKEFUN
d620: 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  C(zName, nArg, a
d630: 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b  rg, flags) \.  {
d640: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
d650: 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54  C_CONSTANT|SQLIT
d660: 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a  E_UTF8|flags, \.
d670: 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20     (void *)arg, 
d680: 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20  0, likeFunc, 0, 
d690: 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d  0, #zName, 0, 0}
d6a0: 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41  .#define AGGREGA
d6b0: 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  TE(zName, nArg, 
d6c0: 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20  arg, nc, xStep, 
d6d0: 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72  xFinal) \.  {nAr
d6e0: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
d6f0: 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  nc*SQLITE_FUNC_N
d700: 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53  EEDCOLL), \.   S
d710: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
d720: 28 61 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74  (arg), 0, 0, xSt
d730: 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65  ep,xFinal,#zName
d740: 2c 30 2c 30 7d 0a 23 64 65 66 69 6e 65 20 41 47  ,0,0}.#define AG
d750: 47 52 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20  GREGATE2(zName, 
d760: 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
d770: 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78  Step, xFinal, ex
d780: 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e  traFlags) \.  {n
d790: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
d7a0: 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43  |(nc*SQLITE_FUNC
d7b0: 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61  _NEEDCOLL)|extra
d7c0: 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49  Flags, \.   SQLI
d7d0: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
d7e0: 67 29 2c 20 30 2c 20 30 2c 20 78 53 74 65 70 2c  g), 0, 0, xStep,
d7f0: 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c  xFinal,#zName,0,
d800: 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75  0}../*.** All cu
d810: 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73  rrent savepoints
d820: 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
d830: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61   linked list sta
d840: 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69  rting at.** sqli
d850: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20  te3.pSavepoint. 
d860: 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
d870: 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73  t in the list is
d880: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
d890: 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76  ly.** opened sav
d8a0: 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e  epoint. Savepoin
d8b0: 74 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20  ts are added to 
d8c0: 74 68 65 20 6c 69 73 74 20 62 79 20 74 68 65 20  the list by the 
d8d0: 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70  vdbe.** OP_Savep
d8e0: 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  oint instruction
d8f0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65  ..*/.struct Save
d900: 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a  point {.  char *
d910: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
d920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d930: 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20   Savepoint name 
d940: 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29  (nul-terminated)
d950: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
d960: 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  redCons;        
d970: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
d980: 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
d990: 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f  fk violations */
d9a0: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
d9b0: 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  ImmCons;        
d9c0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
d9d0: 20 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d   of deferred imm
d9e0: 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f   fk. */.  Savepo
d9f0: 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  int *pNext;     
da00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
da10: 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e   Parent savepoin
da20: 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b  t (if any) */.};
da30: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
da40: 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61  owing are used a
da50: 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72  s the second par
da60: 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
da70: 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a  3Savepoint(),.**
da80: 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61   and as the P1 a
da90: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f  rgument to the O
daa0: 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
dab0: 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66  ruction..*/.#def
dac0: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  ine SAVEPOINT_BE
dad0: 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69  GIN      0.#defi
dae0: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  ne SAVEPOINT_REL
daf0: 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e  EASE    1.#defin
db00: 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  e SAVEPOINT_ROLL
db10: 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a  BACK   2.../*.**
db20: 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64   Each SQLite mod
db30: 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62  ule (virtual tab
db40: 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69  le definition) i
db50: 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a  s defined by an.
db60: 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
db70: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
db80: 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69  ucture, stored i
db90: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d  n the sqlite3.aM
dba0: 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61  odule.** hash ta
dbb0: 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d  ble..*/.struct M
dbc0: 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20  odule {.  const 
dbd0: 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
dbe0: 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f  pModule;       /
dbf0: 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74  * Callback point
dc00: 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ers */.  const c
dc10: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
dc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
dc30: 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20   Name passed to 
dc40: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20  create_module() 
dc50: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b  */.  void *pAux;
dc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75            /* pAu
dc80: 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  x passed to crea
dc90: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
dca0: 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
dcb0: 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20  )(void *);      
dcc0: 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20        /* Module 
dcd0: 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
dce0: 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ion */.};../*.**
dcf0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
dd00: 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  ut each column o
dd10: 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69  f an SQL table i
dd20: 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73  s held in an ins
dd30: 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73  tance.** of this
dd40: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
dd50: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20  truct Column {. 
dd60: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
dd70: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
dd80: 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78  s column */.  Ex
dd90: 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f  pr *pDflt;     /
dda0: 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20  * Default value 
ddb0: 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a  of this column *
ddc0: 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c 74 3b  /.  char *zDflt;
ddd0: 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
dde0: 20 74 65 78 74 20 6f 66 20 74 68 65 20 64 65 66   text of the def
ddf0: 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20  ault value */.  
de00: 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 20 20  char *zType;    
de10: 20 2f 2a 20 44 61 74 61 20 74 79 70 65 20 66 6f   /* Data type fo
de20: 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  r this column */
de30: 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20  .  char *zColl; 
de40: 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67      /* Collating
de50: 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e   sequence.  If N
de60: 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66  ULL, use the def
de70: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74  ault */.  u8 not
de80: 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e  Null;      /* An
de90: 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61   OE_ code for ha
dea0: 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c  ndling a NOT NUL
deb0: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  L constraint */.
dec0: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
ded0: 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65     /* One of the
dee0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20   SQLITE_AFF_... 
def0: 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 73  values */.  u8 s
df00: 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  zEst;        /* 
df10: 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f  Estimated size o
df20: 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 20  f this column.  
df30: 49 4e 54 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63  INT==1 */.  u8 c
df40: 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20  olFlags;     /* 
df50: 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69  Boolean properti
df60: 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47  es.  See COLFLAG
df70: 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20  _ defines below 
df80: 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  */.};../* Allowe
df90: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c  d values for Col
dfa0: 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f  umn.colFlags:.*/
dfb0: 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
dfc0: 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31  _PRIMKEY  0x0001
dfd0: 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73      /* Column is
dfe0: 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 69   part of the pri
dff0: 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66  mary key */.#def
e000: 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44  ine COLFLAG_HIDD
e010: 45 4e 20 20 20 30 78 30 30 30 32 20 20 20 20 2f  EN   0x0002    /
e020: 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  * A hidden colum
e030: 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74  n in a virtual t
e040: 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  able */../*.** A
e050: 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75   "Collating Sequ
e060: 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65 64  ence" is defined
e070: 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   by an instance 
e080: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
e090: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 43  .** structure. C
e0a0: 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20 63  onceptually, a c
e0b0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
e0c0: 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  e consists of a 
e0d0: 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f  name and.** a co
e0e0: 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65  mparison routine
e0f0: 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68   that defines th
e100: 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74 20  e order of that 
e110: 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20  sequence..**.** 
e120: 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20  If CollSeq.xCmp 
e130: 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e  is NULL, it mean
e140: 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f  s that the.** co
e150: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
e160: 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20   is undefined.  
e170: 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e  Indices built on
e180: 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a   an undefined.**
e190: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
e1a0: 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72  nce may not be r
e1b0: 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a  ead or written..
e1c0: 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65  */.struct CollSe
e1d0: 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  q {.  char *zNam
e1e0: 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  e;          /* N
e1f0: 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61  ame of the colla
e200: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55  ting sequence, U
e210: 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a  TF-8 encoded */.
e220: 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
e230: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
e240: 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64  encoding handled
e250: 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20   by xCmp() */.  
e260: 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20  void *pUser;    
e270: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
e280: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28  rgument to xCmp(
e290: 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d  ) */.  int (*xCm
e2a0: 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  p)(void*,int, co
e2b0: 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
e2c0: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20  const void*);.  
e2d0: 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69  void (*xDel)(voi
e2e0: 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75 63  d*);  /* Destruc
e2f0: 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a 2f  tor for pUser */
e300: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72  .};../*.** A sor
e310: 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65  t order can be e
e320: 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45 53  ither ASC or DES
e330: 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  C..*/.#define SQ
e340: 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20  LITE_SO_ASC     
e350: 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20    0  /* Sort in 
e360: 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20  ascending order 
e370: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e380: 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31  E_SO_DESC      1
e390: 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63    /* Sort in asc
e3a0: 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a  ending order */.
e3b0: 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66  ./*.** Column af
e3c0: 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a  finity types..**
e3d0: 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20 74  .** These used t
e3e0: 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20  o have mnemonic 
e3f0: 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f  name like 'i' fo
e400: 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  r SQLITE_AFF_INT
e410: 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20  EGER and.** 't' 
e420: 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  for SQLITE_AFF_T
e430: 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e  EXT.  But we can
e440: 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73   save a little s
e450: 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65  pace and improve
e460: 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61 20  .** the speed a 
e470: 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72  little by number
e480: 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 63  ing the values c
e490: 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 20 20 0a  onsecutively.  .
e4a0: 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72  **.** But rather
e4b0: 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68   than start with
e4c0: 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69   0 or 1, we begi
e4d0: 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54 68 61  n with 'A'.  Tha
e4e0: 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d  t way,.** when m
e4f0: 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79  ultiple affinity
e500: 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61   types are conca
e510: 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73  tenated into a s
e520: 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65  tring and.** use
e530: 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72  d as the P4 oper
e540: 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62  and, they will b
e550: 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e  e more readable.
e560: 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f  .**.** Note also
e570: 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69   that the numeri
e580: 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75  c types are grou
e590: 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20  ped together so 
e5a0: 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20  that testing.** 
e5b0: 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79  for a numeric ty
e5c0: 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  pe is a single c
e5d0: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20  omparison.  And 
e5e0: 74 68 65 20 42 4c 4f 42 20 74 79 70 65 20 69 73  the BLOB type is
e5f0: 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69   first..*/.#defi
e600: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c  ne SQLITE_AFF_BL
e610: 4f 42 20 20 20 20 20 27 41 27 0a 23 64 65 66 69  OB     'A'.#defi
e620: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ne SQLITE_AFF_TE
e630: 58 54 20 20 20 20 20 27 42 27 0a 23 64 65 66 69  XT     'B'.#defi
e640: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ne SQLITE_AFF_NU
e650: 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65 66 69  MERIC  'C'.#defi
e660: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  ne SQLITE_AFF_IN
e670: 54 45 47 45 52 20 20 27 44 27 0a 23 64 65 66 69  TEGER  'D'.#defi
e680: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  ne SQLITE_AFF_RE
e690: 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64 65 66  AL     'E'..#def
e6a0: 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d  ine sqlite3IsNum
e6b0: 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20  ericAffinity(X) 
e6c0: 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46   ((X)>=SQLITE_AF
e6d0: 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a  F_NUMERIC)../*.*
e6e0: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
e6f0: 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73  _MASK values mas
e700: 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69  ks off the signi
e710: 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61  ficant bits of a
e720: 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61  n.** affinity va
e730: 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69 6e 65  lue. .*/.#define
e740: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
e750: 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a       0x47../*.**
e760: 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20   Additional bit 
e770: 76 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20  values that can 
e780: 62 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20  be ORed with an 
e790: 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74  affinity without
e7a0: 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65  .** changing the
e7b0: 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a   affinity..**.**
e7c0: 20 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e   The SQLITE_NOTN
e7d0: 55 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f  ULL flag is a co
e7e0: 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c  mbination of NUL
e7f0: 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55  LEQ and JUMPIFNU
e800: 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73  LL..** It causes
e810: 20 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20   an assert() to 
e820: 66 69 72 65 20 69 66 20 65 69 74 68 65 72 20 6f  fire if either o
e830: 70 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70  perand to a comp
e840: 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74  arison.** operat
e850: 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20  or is NULL.  It 
e860: 69 73 20 61 64 64 65 64 20 74 6f 20 63 65 72 74  is added to cert
e870: 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  ain comparison o
e880: 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70  perators to.** p
e890: 72 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f 70  rove that the op
e8a0: 65 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79  erands are alway
e8b0: 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23  s NOT NULL..*/.#
e8c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55  define SQLITE_JU
e8d0: 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20  MPIFNULL   0x10 
e8e0: 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74   /* jumps if eit
e8f0: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
e900: 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ULL */.#define S
e910: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20  QLITE_STOREP2   
e920: 20 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72     0x20  /* Stor
e930: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b  e result in reg[
e940: 50 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20  P2] rather than 
e950: 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  jump */.#define 
e960: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20  SQLITE_NULLEQ   
e970: 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c      0x80  /* NUL
e980: 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  L=NULL */.#defin
e990: 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c  e SQLITE_NOTNULL
e9a0: 20 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41        0x90  /* A
e9b0: 73 73 65 72 74 20 74 68 61 74 20 6f 70 65 72 61  ssert that opera
e9c0: 6e 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55  nds are never NU
e9d0: 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  LL */../*.** An 
e9e0: 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74  object of this t
e9f0: 79 70 65 20 69 73 20 63 72 65 61 74 65 64 20 66  ype is created f
ea00: 6f 72 20 65 61 63 68 20 76 69 72 74 75 61 6c 20  or each virtual 
ea10: 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e  table present in
ea20: 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65  .** the database
ea30: 20 73 63 68 65 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20   schema. .**.** 
ea40: 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
ea50: 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64  schema is shared
ea60: 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69 73 20  , then there is 
ea70: 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  one instance of 
ea80: 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72  this.** structur
ea90: 65 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62  e for each datab
eaa0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28  ase connection (
eab0: 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75  sqlite3*) that u
eac0: 73 65 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a  ses the shared.*
ead0: 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69  * schema. This i
eae0: 73 20 62 65 63 61 75 73 65 20 65 61 63 68 20 64  s because each d
eaf0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
eb00: 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74 73 20  on requires its 
eb10: 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e  own unique.** in
eb20: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71  stance of the sq
eb30: 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
eb40: 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  le used to acces
eb50: 73 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  s the virtual ta
eb60: 62 6c 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e  ble .** implemen
eb70: 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f  tation. sqlite3_
eb80: 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 63 61  vtab* handles ca
eb90: 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65 64 20  n not be shared 
eba0: 62 65 74 77 65 65 6e 20 0a 2a 2a 20 64 61 74 61  between .** data
ebb0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
ebc0: 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20  , even when the 
ebd0: 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d  rest of the in-m
ebe0: 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 20 0a  emory database .
ebf0: 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68 61  ** schema is sha
ec00: 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c  red, as the impl
ec10: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e  ementation often
ec20: 20 73 74 6f 72 65 73 20 74 68 65 20 64 61 74 61   stores the data
ec30: 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  base.** connecti
ec40: 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64  on handle passed
ec50: 20 74 6f 20 69 74 20 76 69 61 20 74 68 65 20 78   to it via the x
ec60: 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72  Connect() or xCr
ec70: 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a  eate() method.**
ec80: 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69   during initiali
ec90: 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c  zation internall
eca0: 79 2e 20 54 68 69 73 20 64 61 74 61 62 61 73 65  y. This database
ecb0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
ecc0: 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62  le may.** then b
ecd0: 65 20 75 73 65 64 20 62 79 20 74 68 65 20 76 69  e used by the vi
ece0: 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c  rtual table impl
ecf0: 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63  ementation to ac
ed00: 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73  cess real tables
ed10: 20 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20   .** within the 
ed20: 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61  database. So tha
ed30: 74 20 74 68 65 79 20 61 70 70 65 61 72 20 61 73  t they appear as
ed40: 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c   part of the cal
ed50: 6c 65 72 73 20 0a 2a 2a 20 74 72 61 6e 73 61 63  lers .** transac
ed60: 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65  tion, these acce
ed70: 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20  sses need to be 
ed80: 6d 61 64 65 20 76 69 61 20 74 68 65 20 73 61 6d  made via the sam
ed90: 65 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 63  e database .** c
eda0: 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61  onnection as tha
edb0: 74 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74  t used to execut
edc0: 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73  e SQL operations
edd0: 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   on the virtual 
ede0: 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  table..**.** All
edf0: 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20   VTable objects 
ee00: 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20  that correspond 
ee10: 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  to a single tabl
ee20: 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a  e in a shared.**
ee30: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
ee40: 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73   are initially s
ee50: 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65  tored in a linke
ee60: 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74  d-list pointed t
ee70: 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c  o by.** the Tabl
ee80: 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72  e.pVTable member
ee90: 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65   variable of the
eea0: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54   corresponding T
eeb0: 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20  able object..** 
eec0: 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f  When an sqlite3_
eed0: 70 72 65 70 61 72 65 28 29 20 6f 70 65 72 61 74  prepare() operat
eee0: 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64 20  ion is required 
eef0: 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69  to access the vi
ef00: 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20  rtual.** table, 
ef10: 69 74 20 73 65 61 72 63 68 65 73 20 74 68 65 20  it searches the 
ef20: 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56 54 61  list for the VTa
ef30: 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73 70  ble that corresp
ef40: 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64  onds to the.** d
ef50: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
ef60: 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65  on doing the pre
ef70: 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20  paring so as to 
ef80: 75 73 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a  use the correct.
ef90: 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  ** sqlite3_vtab*
efa0: 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63   handle in the c
efb0: 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a  ompiled query..*
efc0: 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d  *.** When an in-
efd0: 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a  memory Table obj
efe0: 65 63 74 20 69 73 20 64 65 6c 65 74 65 64 20 28  ect is deleted (
eff0: 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e  for example when
f000: 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69   the.** schema i
f010: 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64  s being reloaded
f020: 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e   for some reason
f030: 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62  ), the VTable ob
f040: 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 20 0a 2a  jects are not .*
f050: 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68  * deleted and th
f060: 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  e sqlite3_vtab* 
f070: 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20  handles are not 
f080: 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 20  xDisconnect()ed 
f090: 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  .** immediately.
f0a0: 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61   Instead, they a
f0b0: 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68  re moved from th
f0c0: 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20  e Table.pVTable 
f0d0: 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68  list to.** anoth
f0e0: 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68  er linked list h
f0f0: 65 61 64 65 64 20 62 79 20 74 68 65 20 73 71 6c  eaded by the sql
f100: 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74  ite3.pDisconnect
f110: 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a   member of the.*
f120: 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
f130: 73 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72  sqlite3 structur
f140: 65 2e 20 54 68 65 79 20 61 72 65 20 74 68 65 6e  e. They are then
f150: 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e   deleted/xDiscon
f160: 6e 65 63 74 65 64 20 0a 2a 2a 20 6e 65 78 74 20  nected .** next 
f170: 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65 6e 74  time a statement
f180: 20 69 73 20 70 72 65 70 61 72 65 64 20 75 73 69   is prepared usi
f190: 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65 33 2a  ng said sqlite3*
f1a0: 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a  . This is done.*
f1b0: 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c  * to avoid deadl
f1c0: 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76 6f 6c  ock issues invol
f1d0: 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73 71  ving multiple sq
f1e0: 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65  lite3.mutex mute
f1f0: 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f  xes..** Refer to
f200: 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20   comments above 
f210: 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33  function sqlite3
f220: 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29  VtabUnlockList()
f230: 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61   for an.** expla
f240: 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77 68 79  nation as to why
f250: 20 69 74 20 69 73 20 73 61 66 65 20 74 6f 20 61   it is safe to a
f260: 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 61  dd an entry to a
f270: 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f  n sqlite3.pDisco
f280: 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69  nnect.** list wi
f290: 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74 68  thout holding th
f2a0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
f2b0: 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75  sqlite3.mutex mu
f2c0: 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d  tex..**.** The m
f2d0: 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63 74  emory for object
f2e0: 73 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  s of this type i
f2f0: 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74  s always allocat
f300: 65 64 20 62 79 20 0a 2a 2a 20 73 71 6c 69 74 65  ed by .** sqlite
f310: 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69  3DbMalloc(), usi
f320: 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ng the connectio
f330: 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65 64 20  n handle stored 
f340: 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61 73 20  in VTable.db as 
f350: 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61 72  .** the first ar
f360: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  gument..*/.struc
f370: 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c  t VTable {.  sql
f380: 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
f390: 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
f3a0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73  se connection as
f3b0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
f3c0: 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f  is table */.  Mo
f3d0: 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20  dule *pMod;     
f3e0: 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
f3f0: 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70  er to module imp
f400: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20  lementation */. 
f410: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
f420: 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f  Vtab;      /* Po
f430: 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e  inter to vtab in
f440: 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20  stance */.  int 
f450: 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
f460: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
f470: 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  of pointers to t
f480: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f  his structure */
f490: 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69 6e  .  u8 bConstrain
f4a0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
f4b0: 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69  True if constrai
f4c0: 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72 74 65  nts are supporte
f4d0: 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76 65  d */.  int iSave
f4e0: 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  point;          
f4f0: 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68 65   /* Depth of the
f500: 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63 6b   SAVEPOINT stack
f510: 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e   */.  VTable *pN
f520: 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
f530: 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65  /* Next in linke
f540: 64 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f 76  d list (see abov
f550: 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  e) */.};../*.** 
f560: 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20 65  The schema for e
f570: 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20 61 6e  ach SQL table an
f580: 64 20 76 69 65 77 20 69 73 20 72 65 70 72 65 73  d view is repres
f590: 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a  ented in memory.
f5a0: 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ** by an instanc
f5b0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
f5c0: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  ng structure..*/
f5d0: 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a  .struct Table {.
f5e0: 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
f5f0: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
f600: 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76  f the table or v
f610: 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20  iew */.  Column 
f620: 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a  *aCol;        /*
f630: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
f640: 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  ut each column *
f650: 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65  /.  Index *pInde
f660: 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  x;       /* List
f670: 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20   of SQL indexes 
f680: 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a  on this table. *
f690: 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
f6a0: 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c  ect;     /* NULL
f6b0: 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f   for tables.  Po
f6c0: 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69  ints to definiti
f6d0: 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f  on if a view. */
f6e0: 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20  .  FKey *pFKey; 
f6f0: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65          /* Linke
f700: 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f  d list of all fo
f710: 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68  reign keys in th
f720: 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68  is table */.  ch
f730: 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20  ar *zColAff;    
f740: 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66     /* String def
f750: 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  ining the affini
f760: 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ty of each colum
f770: 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  n */.#ifndef SQL
f780: 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20  ITE_OMIT_CHECK. 
f790: 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63   ExprList *pChec
f7a0: 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45  k;    /* All CHE
f7b0: 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  CK constraints *
f7c0: 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 74  /.#endif.  int t
f7d0: 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
f7e0: 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 70 61  /* Root BTree pa
f7f0: 67 65 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c  ge for this tabl
f800: 65 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79  e */.  i16 iPKey
f810: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
f820: 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20  f not negative, 
f830: 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20  use aCol[iPKey] 
f840: 61 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a  as the rowid */.
f850: 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20    i16 nCol;     
f860: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
f870: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
f880: 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75  his table */.  u
f890: 31 36 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  16 nRef;        
f8a0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
f8b0: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69   pointers to thi
f8c0: 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67  s Table */.  Log
f8d0: 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20  Est nRowLogEst; 
f8e0: 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72    /* Estimated r
f8f0: 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66  ows in table - f
f900: 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31  rom sqlite_stat1
f910: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45   table */.  LogE
f920: 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20  st szTabRow;    
f930: 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69   /* Estimated si
f940: 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65  ze of each table
f950: 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f   row in bytes */
f960: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
f970: 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20  NABLE_COSTMULT. 
f980: 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74   LogEst costMult
f990: 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75  ;     /* Cost mu
f9a0: 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69  ltiplier for usi
f9b0: 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ng this table */
f9c0: 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 74 61 62  .#endif.  u8 tab
f9d0: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f  Flags;         /
f9e0: 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76  * Mask of TF_* v
f9f0: 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 6b 65  alues */.  u8 ke
fa00: 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  yConf;          
fa10: 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e  /* What to do in
fa20: 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e   case of uniquen
fa30: 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20  ess conflict on 
fa40: 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66  iPKey */.#ifndef
fa50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54   SQLITE_OMIT_ALT
fa60: 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61 64  ERTABLE.  int ad
fa70: 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f  dColOffset;    /
fa80: 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41  * Offset in CREA
fa90: 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74 6f  TE TABLE stmt to
faa0: 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d   add a new colum
fab0: 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  n */.#endif.#ifn
fac0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
fad0: 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69  VIRTUALTABLE.  i
fae0: 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20  nt nModuleArg;  
faf0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
fb00: 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68   arguments to th
fb10: 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68  e module */.  ch
fb20: 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67  ar **azModuleArg
fb30: 3b 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 61 6c  ;  /* Text of al
fb40: 6c 20 6d 6f 64 75 6c 65 20 61 72 67 73 2e 20 5b  l module args. [
fb50: 30 5d 20 69 73 20 6d 6f 64 75 6c 65 20 6e 61 6d  0] is module nam
fb60: 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70  e */.  VTable *p
fb70: 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c  VTable;     /* L
fb80: 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62  ist of VTable ob
fb90: 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66  jects. */.#endif
fba0: 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69  .  Trigger *pTri
fbb0: 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20  gger;   /* List 
fbc0: 6f 66 20 74 72 69 67 67 65 72 73 20 73 74 6f 72  of triggers stor
fbd0: 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f  ed in pSchema */
fbe0: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
fbf0: 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  ma;     /* Schem
fc00: 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  a that contains 
fc10: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
fc20: 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62  Table *pNextZomb
fc30: 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20  ie;  /* Next on 
fc40: 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69  the Parse.pZombi
fc50: 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a  eTab list */.};.
fc60: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
fc70: 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c 65 2e  alues for Table.
fc80: 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20  tabFlags..**.** 
fc90: 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 70 70  TF_OOOHidden app
fca0: 6c 69 65 73 20 74 6f 20 76 69 72 74 75 61 6c 20  lies to virtual 
fcb0: 74 61 62 6c 65 73 20 74 68 61 74 20 68 61 76 65  tables that have
fcc0: 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20   hidden columns 
fcd0: 74 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c  that are.** foll
fce0: 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69 64 64  owed by non-hidd
fcf0: 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 78 61  en columns.  Exa
fd00: 6d 70 6c 65 3a 20 20 22 43 52 45 41 54 45 20 56  mple:  "CREATE V
fd10: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78 20 55  IRTUAL TABLE x U
fd20: 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28 61 20  SING.** vtab1(a 
fd30: 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20 20 53  HIDDEN, b);".  S
fd40: 69 6e 63 65 20 22 62 22 20 69 73 20 61 20 6e 6f  ince "b" is a no
fd50: 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20  n-hidden column 
fd60: 62 75 74 20 22 61 22 20 69 73 20 68 69 64 64 65  but "a" is hidde
fd70: 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f 4f 4f  n,.** the TF_OOO
fd80: 48 69 64 64 65 6e 20 61 74 74 72 69 62 75 74 65  Hidden attribute
fd90: 20 77 6f 75 6c 64 20 61 70 70 6c 79 20 69 6e 20   would apply in 
fda0: 74 68 69 73 20 63 61 73 65 2e 20 20 53 75 63 68  this case.  Such
fdb0: 20 74 61 62 6c 65 73 20 72 65 71 75 69 72 65 0a   tables require.
fdc0: 2a 2a 20 73 70 65 63 69 61 6c 20 68 61 6e 64 6c  ** special handl
fdd0: 69 6e 67 20 64 75 72 69 6e 67 20 49 4e 53 45 52  ing during INSER
fde0: 54 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f  T processing..*/
fdf0: 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64  .#define TF_Read
fe00: 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30 31  only        0x01
fe10: 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79      /* Read-only
fe20: 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f   system table */
fe30: 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65  .#define TF_Ephe
fe40: 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78 30 32  meral       0x02
fe50: 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65      /* An epheme
fe60: 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  ral table */.#de
fe70: 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61  fine TF_HasPrima
fe80: 72 79 4b 65 79 20 20 20 30 78 30 34 20 20 20 20  ryKey   0x04    
fe90: 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61 20 70  /* Table has a p
fea0: 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64  rimary key */.#d
feb0: 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63  efine TF_Autoinc
fec0: 72 65 6d 65 6e 74 20 20 20 30 78 30 38 20 20 20  rement   0x08   
fed0: 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72 69 6d   /* Integer prim
fee0: 61 72 79 20 6b 65 79 20 69 73 20 61 75 74 6f 69  ary key is autoi
fef0: 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66  ncrement */.#def
ff00: 69 6e 65 20 54 46 5f 56 69 72 74 75 61 6c 20 20  ine TF_Virtual  
ff10: 20 20 20 20 20 20 20 30 78 31 30 20 20 20 20 2f         0x10    /
ff20: 2a 20 49 73 20 61 20 76 69 72 74 75 61 6c 20 74  * Is a virtual t
ff30: 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
ff40: 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 20  TF_WithoutRowid 
ff50: 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20 4e 6f     0x20    /* No
ff60: 20 72 6f 77 69 64 2e 20 20 50 52 49 4d 41 52 59   rowid.  PRIMARY
ff70: 20 4b 45 59 20 69 73 20 74 68 65 20 6b 65 79 20   KEY is the key 
ff80: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4e 6f  */.#define TF_No
ff90: 56 69 73 69 62 6c 65 52 6f 77 69 64 20 20 30 78  VisibleRowid  0x
ffa0: 34 30 20 20 20 20 2f 2a 20 4e 6f 20 75 73 65 72  40    /* No user
ffb0: 2d 76 69 73 69 62 6c 65 20 22 72 6f 77 69 64 22  -visible "rowid"
ffc0: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69   column */.#defi
ffd0: 6e 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20  ne TF_OOOHidden 
ffe0: 20 20 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a        0x80    /*
fff0: 20 4f 75 74 2d 6f 66 2d 4f 72 64 65 72 20 68 69   Out-of-Order hi
10000 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a  dden columns */.
10010 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20  ../*.** Test to 
10020 73 65 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  see whether or n
10030 6f 74 20 61 20 74 61 62 6c 65 20 69 73 20 61 20  ot a table is a 
10040 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20  virtual table.  
10050 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20  This is.** done 
10060 61 73 20 61 20 6d 61 63 72 6f 20 73 6f 20 74 68  as a macro so th
10070 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20 6f 70  at it will be op
10080 74 69 6d 69 7a 65 64 20 6f 75 74 20 77 68 65 6e  timized out when
10090 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c   virtual.** tabl
100a0 65 20 73 75 70 70 6f 72 74 20 69 73 20 6f 6d 69  e support is omi
100b0 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75  tted from the bu
100c0 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ild..*/.#ifndef 
100d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
100e0 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69  UALTABLE.#  defi
100f0 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20  ne IsVirtual(X) 
10100 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46       (((X)->tabF
10110 6c 61 67 73 20 26 20 54 46 5f 56 69 72 74 75 61  lags & TF_Virtua
10120 6c 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65  l)!=0).#  define
10130 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
10140 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61  X) (((X)->colFla
10150 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44  gs & COLFLAG_HID
10160 44 45 4e 29 21 3d 30 29 0a 23 65 6c 73 65 0a 23  DEN)!=0).#else.#
10170 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75    define IsVirtu
10180 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23 20 20  al(X)      0.#  
10190 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43  define IsHiddenC
101a0 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69  olumn(X) 0.#endi
101b0 66 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20 74  f../* Does the t
101c0 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77 69  able have a rowi
101d0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61 73  d */.#define Has
101e0 52 6f 77 69 64 28 58 29 20 20 20 20 20 28 28 28  Rowid(X)     (((
101f0 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
10200 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29 3d  F_WithoutRowid)=
10210 3d 30 29 0a 23 64 65 66 69 6e 65 20 56 69 73 69  =0).#define Visi
10220 62 6c 65 52 6f 77 69 64 28 58 29 20 28 28 28 58  bleRowid(X) (((X
10230 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46  )->tabFlags & TF
10240 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 29  _NoVisibleRowid)
10250 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ==0)../*.** Each
10260 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
10270 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e  straint is an in
10280 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
10290 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
102a0 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69  e..**.** A forei
102b0 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69  gn key is associ
102c0 61 74 65 64 20 77 69 74 68 20 74 77 6f 20 74 61  ated with two ta
102d0 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d  bles.  The "from
102e0 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68  " table is.** th
102f0 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  e table that con
10300 74 61 69 6e 73 20 74 68 65 20 52 45 46 45 52 45  tains the REFERE
10310 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68 61 74  NCES clause that
10320 20 63 72 65 61 74 65 73 20 74 68 65 20 66 6f 72   creates the for
10330 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68  eign.** key.  Th
10340 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20  e "to" table is 
10350 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69  the table that i
10360 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52  s named in the R
10370 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
10380 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68  ..** Consider th
10390 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a  is example:.**.*
103a0 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42  *     CREATE TAB
103b0 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20  LE ex1(.**      
103c0 20 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41   a INTEGER PRIMA
103d0 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20  RY KEY,.**      
103e0 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54   b INTEGER CONST
103f0 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45  RAINT fk1 REFERE
10400 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20  NCES ex2(x).**  
10410 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20     );.**.** For 
10420 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31  foreign key "fk1
10430 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  ", the from-tabl
10440 65 20 69 73 20 22 65 78 31 22 20 61 6e 64 20 74  e is "ex1" and t
10450 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22  he to-table is "
10460 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c  ex2"..** Equival
10470 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a  ent names:.**.**
10480 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20       from-table 
10490 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a  == child-table.*
104a0 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65  *       to-table
104b0 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65   == parent-table
104c0 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45  .**.** Each REFE
104d0 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65  RENCES clause ge
104e0 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61  nerates an insta
104f0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
10500 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a  wing structure.*
10510 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61 63  * which is attac
10520 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d  hed to the from-
10530 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74  table.  The to-t
10540 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78  able need not ex
10550 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20  ist when.** the 
10560 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72  from-table is cr
10570 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69 73  eated.  The exis
10580 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d  tence of the to-
10590 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65  table is not che
105a0 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  cked..**.** The 
105b0 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65  list of all pare
105c0 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61  nts for child Ta
105d0 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61 74  ble X is held at
105e0 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20   X.pFKey..**.** 
105f0 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68  A list of all ch
10600 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62  ildren for a tab
10610 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63  le named Z (whic
10620 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e  h might not even
10630 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65   exist).** is he
10640 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65  ld in Schema.fke
10650 79 48 61 73 68 20 77 69 74 68 20 61 20 68 61 73  yHash with a has
10660 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73  h key of Z..*/.s
10670 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54  truct FKey {.  T
10680 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20  able *pFrom;    
10690 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69   /* Table contai
106a0 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e  ning the REFEREN
106b0 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a  CES clause (aka:
106c0 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65   Child) */.  FKe
106d0 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f  y *pNextFrom;  /
106e0 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68  * Next FKey with
106f0 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72   the same in pFr
10700 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20  om. Next parent 
10710 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68  of pFrom */.  ch
10720 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20  ar *zTo;        
10730 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65  /* Name of table
10740 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f   that the key po
10750 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61  ints to (aka: Pa
10760 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20  rent) */.  FKey 
10770 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20  *pNextTo;    /* 
10780 4e 65 78 74 20 77 69 74 68 20 74 68 65 20 73 61  Next with the sa
10790 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69  me zTo. Next chi
107a0 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20  ld of zTo. */.  
107b0 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20  FKey *pPrevTo;  
107c0 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69    /* Previous wi
107d0 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20  th the same zTo 
107e0 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20  */.  int nCol;  
107f0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
10800 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
10810 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20  his key */.  /* 
10820 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31  EV: R-30323-2191
10830 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65  7 */.  u8 isDefe
10840 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54  rred;       /* T
10850 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e  rue if constrain
10860 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65  t checking is de
10870 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d  ferred till COMM
10880 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69  IT */.  u8 aActi
10890 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  on[2];        /*
108a0 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f   ON DELETE and O
108b0 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73  N UPDATE actions
108c0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a  , respectively *
108d0 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70 54  /.  Trigger *apT
108e0 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69  rigger[2];/* Tri
108f0 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f  ggers for aActio
10900 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  n[] actions */. 
10910 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20   struct sColMap 
10920 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e  {      /* Mappin
10930 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  g of columns in 
10940 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73  pFrom to columns
10950 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69   in zTo */.    i
10960 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20  nt iFrom;       
10970 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
10980 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d   column in pFrom
10990 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43   */.    char *zC
109a0 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ol;           /*
109b0 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20   Name of column 
109c0 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c  in zTo.  If NULL
109d0 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59   use PRIMARY KEY
109e0 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b   */.  } aCol[1];
109f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
10a00 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
10a10 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e  h of nCol column
10a20 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  s */.};../*.** S
10a30 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d  QLite supports m
10a40 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61  any different wa
10a50 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20  ys to resolve a 
10a60 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
10a70 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70  ror.  ROLLBACK p
10a80 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
10a90 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e  that a constrain
10aa0 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63  t violation.** c
10ab0 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61 74  auses the operat
10ac0 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74  ion in process t
10ad0 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74  o fail and for t
10ae0 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
10af0 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20  action.** to be 
10b00 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42  rolled back.  AB
10b10 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  ORT processing m
10b20 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69  eans the operati
10b30 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a  on in process.**
10b40 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70   fails and any p
10b50 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f  rior changes fro
10b60 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61  m that one opera
10b70 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20  tion are backed 
10b80 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20  out,.** but the 
10b90 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
10ba0 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  ot rolled back. 
10bb0 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67   FAIL processing
10bc0 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74   means that.** t
10bd0 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
10be0 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61  progress stops a
10bf0 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72  nd returns an er
10c00 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70  ror code.  But p
10c10 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20  rior.** changes 
10c20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20  due to the same 
10c30 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f  operation are no
10c40 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64  t backed out and
10c50 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20   no rollback.** 
10c60 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20  occurs.  IGNORE 
10c70 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 70  means that the p
10c80 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68  articular row th
10c90 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63 6f  at caused the co
10ca0 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
10cb0 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65  r is not inserte
10cc0 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50  d or updated.  P
10cd0 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e  rocessing contin
10ce0 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ues and no error
10cf0 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e  .** is returned.
10d00 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20    REPLACE means 
10d10 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e 67  that preexisting
10d20 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74   database rows t
10d30 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20  hat caused.** a 
10d40 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
10d50 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20  t violation are 
10d60 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20  removed so that 
10d70 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f  the new insert o
10d80 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20  r.** update can 
10d90 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73  proceed.  Proces
10da0 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61  sing continues a
10db0 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72  nd no error is r
10dc0 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52  eported..**.** R
10dd0 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c  ESTRICT, SETNULL
10de0 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61 63  , and CASCADE ac
10df0 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79  tions apply only
10e00 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73   to foreign keys
10e10 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73  ..** RESTRICT is
10e20 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f   the same as ABO
10e30 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  RT for IMMEDIATE
10e40 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e   foreign keys an
10e50 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73  d the.** same as
10e60 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45   ROLLBACK for DE
10e70 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45  FERRED keys.  SE
10e80 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74  TNULL means that
10e90 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
10ea0 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55  key is set to NU
10eb0 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61  LL.  CASCADE mea
10ec0 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54 45  ns that a DELETE
10ed0 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74 68   or UPDATE of th
10ee0 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20  e.** referenced 
10ef0 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f  table row is pro
10f00 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65  pagated into the
10f10 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20   row that holds 
10f20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b  the.** foreign k
10f30 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 65 20 66  ey..** .** The f
10f40 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69  ollowing symboli
10f50 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65  c values are use
10f60 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63  d to record whic
10f70 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74  h type.** of act
10f80 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a  ion to take..*/.
10f90 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20  #define OE_None 
10fa0 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65      0   /* There
10fb0 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e   is no constrain
10fc0 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64  t to check */.#d
10fd0 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63  efine OE_Rollbac
10fe0 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68  k 1   /* Fail th
10ff0 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20  e operation and 
11000 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
11010 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
11020 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20  ine OE_Abort    
11030 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20  2   /* Back out 
11040 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e  changes but do n
11050 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73  o rollback trans
11060 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  action */.#defin
11070 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20  e OE_Fail     3 
11080 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70    /* Stop the op
11090 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76  eration but leav
110a0 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e  e all prior chan
110b0 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ges */.#define O
110c0 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f  E_Ignore   4   /
110d0 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72  * Ignore the err
110e0 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68  or. Do not do th
110f0 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  e INSERT or UPDA
11100 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  TE */.#define OE
11110 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a  _Replace  5   /*
11120 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67   Delete existing
11130 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f   record, then do
11140 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
11150 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45  E */..#define OE
11160 5f 52 65 73 74 72 69 63 74 20 36 20 20 20 2f 2a  _Restrict 6   /*
11170 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d   OE_Abort for IM
11180 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c  MEDIATE, OE_Roll
11190 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45  back for DEFERRE
111a0 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  D */.#define OE_
111b0 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20  SetNull  7   /* 
111c0 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
111d0 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c  key value to NUL
111e0 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  L */.#define OE_
111f0 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a 20  SetDflt  8   /* 
11200 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
11210 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73  key value to its
11220 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66   default */.#def
11230 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20  ine OE_Cascade  
11240 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74  9   /* Cascade t
11250 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23  he changes */..#
11260 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c  define OE_Defaul
11270 74 20 20 31 30 20 20 2f 2a 20 44 6f 20 77 68 61  t  10  /* Do wha
11280 74 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c  tever the defaul
11290 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a  t action is */..
112a0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
112b0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
112c0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
112d0 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
112e0 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
112f0 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b   to sqlite3VdbeK
11300 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73  eyCompare and is
11310 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c   used to control
11320 20 74 68 65 20 0a 2a 2a 20 63 6f 6d 70 61 72 69   the .** compari
11330 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69  son of the two i
11340 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a  ndex keys..**.**
11350 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74   Note that aSort
11360 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c  Order[] and aCol
11370 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b  l[] have nField+
11380 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a  1 slots.  There.
11390 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c  ** are nField sl
113a0 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  ots for the colu
113b0 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20  mns of an index 
113c0 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73  then one extra s
113d0 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  lot.** for the r
113e0 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e  owid at the end.
113f0 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e  .*/.struct KeyIn
11400 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b  fo {.  u32 nRef;
11410 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
11420 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63  mber of referenc
11430 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e  es to this KeyIn
11440 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75  fo object */.  u
11450 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
11460 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
11470 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65  ing - one of the
11480 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c   SQLITE_UTF* val
11490 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69  ues */.  u16 nFi
114a0 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  eld;         /* 
114b0 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f  Number of key co
114c0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64  lumns in the ind
114d0 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 58 46 69  ex */.  u16 nXFi
114e0 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  eld;        /* N
114f0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
11500 20 62 65 79 6f 6e 64 20 74 68 65 20 6b 65 79 20   beyond the key 
11510 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c  columns */.  sql
11520 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
11530 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
11540 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20   connection */. 
11550 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b   u8 *aSortOrder;
11560 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64       /* Sort ord
11570 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  er for each colu
11580 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71  mn. */.  CollSeq
11590 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20   *aColl[1];  /* 
115a0 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  Collating sequen
115b0 63 65 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d  ce for each term
115c0 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d   of the key */.}
115d0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
115e0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
115f0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
11600 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f  holds informatio
11610 6e 20 61 62 6f 75 74 20 61 0a 2a 2a 20 73 69 6e  n about a.** sin
11620 67 6c 65 20 69 6e 64 65 78 20 72 65 63 6f 72 64  gle index record
11630 20 74 68 61 74 20 68 61 73 20 61 6c 72 65 61 64   that has alread
11640 79 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75  y been parsed ou
11650 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61  t into individua
11660 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a  l.** values..**.
11670 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20 61  ** A record is a
11680 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f  n object that co
11690 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
116a0 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74  re fields of dat
116b0 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72  a..** Records ar
116c0 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
116d0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61  the content of a
116e0 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74   table row and t
116f0 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b  o store.** the k
11700 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20  ey of an index. 
11710 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67   A blob encoding
11720 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73 20   of a record is 
11730 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68  created by.** th
11740 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20  e OP_MakeRecord 
11750 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44  opcode of the VD
11760 42 45 20 61 6e 64 20 69 73 20 64 69 73 61 73 73  BE and is disass
11770 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a  embled by the.**
11780 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
11790 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74  e..**.** This st
117a0 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 61 20  ructure holds a 
117b0 72 65 63 6f 72 64 20 74 68 61 74 20 68 61 73 20  record that has 
117c0 61 6c 72 65 61 64 79 20 62 65 65 6e 20 64 69 73  already been dis
117d0 61 73 73 65 6d 62 6c 65 64 0a 2a 2a 20 69 6e 74  assembled.** int
117e0 6f 20 69 74 73 20 63 6f 6e 73 74 69 74 75 65 6e  o its constituen
117f0 74 20 66 69 65 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20  t fields..**.** 
11800 54 68 65 20 72 31 20 61 6e 64 20 72 32 20 6d 65  The r1 and r2 me
11810 6d 62 65 72 20 76 61 72 69 61 62 6c 65 73 20 61  mber variables a
11820 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 62 79 20  re only used by 
11830 74 68 65 20 6f 70 74 69 6d 69 7a 65 64 20 63 6f  the optimized co
11840 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 66 75 6e 63  mparison.** func
11850 74 69 6f 6e 73 20 76 64 62 65 52 65 63 6f 72 64  tions vdbeRecord
11860 43 6f 6d 70 61 72 65 49 6e 74 28 29 20 61 6e 64  CompareInt() and
11870 20 76 64 62 65 52 65 63 6f 72 64 43 6f 6d 70 61   vdbeRecordCompa
11880 72 65 53 74 72 69 6e 67 28 29 2e 0a 2a 2f 0a 73  reString()..*/.s
11890 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65  truct UnpackedRe
118a0 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f  cord {.  KeyInfo
118b0 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20   *pKeyInfo;  /* 
118c0 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f  Collation and so
118d0 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61  rt-order informa
118e0 74 69 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 6e 46  tion */.  u16 nF
118f0 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a  ield;         /*
11900 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
11910 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f  es in apMem[] */
11920 0a 20 20 69 38 20 64 65 66 61 75 6c 74 5f 72 63  .  i8 default_rc
11930 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72  ;      /* Compar
11940 69 73 6f 6e 20 72 65 73 75 6c 74 20 69 66 20 6b  ison result if k
11950 65 79 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f  eys are equal */
11960 0a 20 20 75 38 20 65 72 72 43 6f 64 65 3b 20 20  .  u8 errCode;  
11970 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20         /* Error 
11980 64 65 74 65 63 74 65 64 20 62 79 20 78 52 65 63  detected by xRec
11990 6f 72 64 43 6f 6d 70 61 72 65 20 28 43 4f 52 52  ordCompare (CORR
119a0 55 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f  UPT or NOMEM) */
119b0 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20  .  Mem *aMem;   
119c0 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73         /* Values
119d0 20 2a 2f 0a 20 20 69 6e 74 20 72 31 3b 20 20 20   */.  int r1;   
119e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
119f0 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20  ue to return if 
11a00 28 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a 20  (lhs > rhs) */. 
11a10 20 69 6e 74 20 72 32 3b 20 20 20 20 20 20 20 20   int r2;        
11a20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
11a30 20 72 65 74 75 72 6e 20 69 66 20 28 72 68 73 20   return if (rhs 
11a40 3c 20 6c 68 73 29 20 2a 2f 0a 7d 3b 0a 0a 0a 2f  < lhs) */.};.../
11a50 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e  *.** Each SQL in
11a60 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e 74  dex is represent
11a70 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20  ed in memory by 
11a80 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
11a90 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
11aa0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
11ab0 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   The columns of 
11ac0 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61  the table that a
11ad0 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  re to be indexed
11ae0 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a   are described.*
11af0 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d  * by the aiColum
11b00 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69  n[] field of thi
11b10 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  s structure.  Fo
11b20 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f  r example, suppo
11b30 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68  se.** we have th
11b40 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c  e following tabl
11b50 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a  e and index:.**.
11b60 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
11b70 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20  BLE Ex1(c1 int, 
11b80 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29  c2 int, c3 text)
11b90 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  ;.**     CREATE 
11ba0 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31  INDEX Ex2 ON Ex1
11bb0 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49  (c3,c1);.**.** I
11bc0 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72 75  n the Table stru
11bd0 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
11be0 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65   Ex1, nCol==3 be
11bf0 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65 0a  cause there are.
11c00 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73  ** three columns
11c10 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
11c20 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74 72  In the Index str
11c30 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
11c40 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d  g.** Ex2, nColum
11c50 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20  n==2 since 2 of 
11c60 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66  the 3 columns of
11c70 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65 64   Ex1 are indexed
11c80 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f  ..** The value o
11c90 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32  f aiColumn is {2
11ca0 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b  , 0}.  aiColumn[
11cb0 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68  0]==2 because th
11cc0 65 20 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75  e .** first colu
11cd0 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  mn to be indexed
11ce0 20 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64   (c3) has an ind
11cf0 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61  ex of 2 in Ex1.a
11d00 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65  Col[]..** The se
11d10 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  cond column to b
11d20 65 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68  e indexed (c1) h
11d30 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30  as an index of 0
11d40 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b   in.** Ex1.aCol[
11d50 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43  ], hence Ex2.aiC
11d60 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a  olumn[1]==0..**.
11d70 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45  ** The Index.onE
11d80 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72  rror field deter
11d90 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72  mines whether or
11da0 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64   not the indexed
11db0 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74   columns.** must
11dc0 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77   be unique and w
11dd0 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65  hat to do if the
11de0 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e  y are not.  When
11df0 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f   Index.onError=O
11e00 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65  E_None,.** it me
11e10 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20  ans this is not 
11e20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20  a unique index. 
11e30 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73   Otherwise it is
11e40 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a   a unique index.
11e50 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  ** and the value
11e60 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f   of Index.onErro
11e70 72 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77  r indicate the w
11e80 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65  hich conflict re
11e90 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20 61 6c 67  solution .** alg
11ea0 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79  orithm to employ
11eb0 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74   whenever an att
11ec0 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20  empt is made to 
11ed0 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69  insert a non-uni
11ee0 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a  que.** element..
11ef0 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72 73  **.** While pars
11f00 69 6e 67 20 61 20 43 52 45 41 54 45 20 54 41 42  ing a CREATE TAB
11f10 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44  LE or CREATE IND
11f20 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20  EX statement in 
11f30 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65  order to.** gene
11f40 72 61 74 65 20 56 44 42 45 20 63 6f 64 65 20 28  rate VDBE code (
11f50 61 73 20 6f 70 70 6f 73 65 64 20 74 6f 20 70 61  as opposed to pa
11f60 72 73 69 6e 67 20 6f 6e 65 20 72 65 61 64 20 66  rsing one read f
11f70 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61  rom an sqlite_ma
11f80 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73  ster.** table as
11f90 20 70 61 72 74 20 6f 66 20 70 61 72 73 69 6e 67   part of parsing
11fa0 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74   an existing dat
11fb0 61 62 61 73 65 20 73 63 68 65 6d 61 29 2c 20 74  abase schema), t
11fc0 72 61 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e 63  ransient instanc
11fd0 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74  es.** of this st
11fe0 72 75 63 74 75 72 65 20 6d 61 79 20 62 65 20 63  ructure may be c
11ff0 72 65 61 74 65 64 2e 20 49 6e 20 74 68 69 73 20  reated. In this 
12000 63 61 73 65 20 74 68 65 20 49 6e 64 65 78 2e 74  case the Index.t
12010 6e 75 6d 20 76 61 72 69 61 62 6c 65 20 69 73 0a  num variable is.
12020 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  ** used to store
12030 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
12040 61 20 56 44 42 45 20 69 6e 73 74 72 75 63 74 69  a VDBE instructi
12050 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61 62 61  on, not a databa
12060 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65  se page.** numbe
12070 72 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74  r (it cannot - t
12080 68 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65  he database page
12090 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65   is not allocate
120a0 64 20 75 6e 74 69 6c 20 74 68 65 20 56 44 42 45  d until the VDBE
120b0 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73 20 65  .** program is e
120c0 78 65 63 75 74 65 64 29 2e 20 53 65 65 20 63 6f  xecuted). See co
120d0 6e 76 65 72 74 54 6f 57 69 74 68 6f 75 74 52 6f  nvertToWithoutRo
120e0 77 69 64 54 61 62 6c 65 28 29 20 66 6f 72 20 64  widTable() for d
120f0 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63  etails..*/.struc
12100 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72  t Index {.  char
12110 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
12120 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
12130 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
12140 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20  i16 *aiColumn;  
12150 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
12160 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  h columns are us
12170 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78  ed by this index
12180 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20  .  1st is 0 */. 
12190 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f   LogEst *aiRowLo
121a0 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f  gEst;     /* Fro
121b0 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20  m ANALYZE: Est. 
121c0 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79  rows selected by
121d0 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
121e0 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b    Table *pTable;
121f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
12200 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e  e SQL table bein
12210 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63  g indexed */.  c
12220 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20  har *zColAff;   
12230 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e          /* Strin
12240 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
12250 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
12260 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
12270 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  x *pNext;       
12280 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74       /* The next
12290 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65   index associate
122a0 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  d with the same 
122b0 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d  table */.  Schem
122c0 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
122d0 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
122e0 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e  ntaining this in
122f0 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  dex */.  u8 *aSo
12300 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
12310 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f    /* for each co
12320 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43  lumn: True==DESC
12330 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a  , False==ASC */.
12340 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b    char **azColl;
12350 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
12360 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e  ray of collation
12370 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20   sequence names 
12380 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45  for index */.  E
12390 78 70 72 20 2a 70 50 61 72 74 49 64 78 57 68 65  xpr *pPartIdxWhe
123a0 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45  re;     /* WHERE
123b0 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74   clause for part
123c0 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20  ial indices */. 
123d0 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
123e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20            /* DB 
123f0 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  Page containing 
12400 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64  root of this ind
12410 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73  ex */.  LogEst s
12420 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20 20 20  zIdxRow;        
12430 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 61 76   /* Estimated av
12440 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65 20 69  erage row size i
12450 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 31 36  n bytes */.  u16
12460 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20 20   nKeyCol;       
12470 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
12480 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69  of columns formi
12490 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20  ng the key */.  
124a0 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  u16 nColumn;    
124b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
124c0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74  er of columns st
124d0 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e 64 65  ored in the inde
124e0 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f  x */.  u8 onErro
124f0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
12500 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f  /* OE_Abort, OE_
12510 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61  Ignore, OE_Repla
12520 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a  ce, or OE_None *
12530 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 64 78  /.  unsigned idx
12540 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a 20  Type:2;      /* 
12550 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52  1==UNIQUE, 2==PR
12560 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52  IMARY KEY, 0==CR
12570 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20  EATE INDEX */.  
12580 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65  unsigned bUnorde
12590 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20  red:1;   /* Use 
125a0 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d  this index for =
125b0 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20  = or IN queries 
125c0 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  only */.  unsign
125d0 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31  ed uniqNotNull:1
125e0 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e  ;  /* True if UN
125f0 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c  IQUE and NOT NUL
12600 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e  L for all column
12610 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  s */.  unsigned 
12620 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20  isResized:1;    
12630 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 69 7a  /* True if resiz
12640 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68  eIndexObject() h
12650 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a  as been called *
12660 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43  /.  unsigned isC
12670 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20  overing:1;   /* 
12680 54 72 75 65 20 69 66 20 74 68 69 73 20 69 73 20  True if this is 
12690 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78  a covering index
126a0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e   */.  unsigned n
126b0 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20 2f  oSkipScan:1;   /
126c0 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20  * Do not try to 
126d0 75 73 65 20 73 6b 69 70 2d 73 63 61 6e 20 69 66  use skip-scan if
126e0 20 74 72 75 65 20 2a 2f 0a 23 69 66 64 65 66 20   true */.#ifdef 
126f0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
12700 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69  AT3_OR_STAT4.  i
12710 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20  nt nSample;     
12720 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
12730 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e  r of elements in
12740 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20   aSample[] */.  
12750 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20  int nSampleCol; 
12760 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
12770 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e   of IndexSample.
12780 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e  anEq[] and so on
12790 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
127a0 41 76 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f  AvgEq;         /
127b0 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20 76 61  * Average nEq va
127c0 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f  lues for keys no
127d0 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a  t in aSample */.
127e0 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61    IndexSample *a
127f0 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61  Sample;    /* Sa
12800 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66  mples of the lef
12810 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20  t-most key */.  
12820 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73  tRowcnt *aiRowEs
12830 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d  t;       /* Non-
12840 6c 6f 67 61 72 69 74 68 6d 69 63 20 73 74 61 74  logarithmic stat
12850 31 20 64 61 74 61 20 66 6f 72 20 74 68 69 73 20  1 data for this 
12860 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63  index */.  tRowc
12870 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20 20 20 20  nt nRowEst0;    
12880 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72      /* Non-logar
12890 69 74 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66  ithmic number of
128a0 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64   rows in the ind
128b0 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a  ex */.#endif.};.
128c0 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
128d0 61 6c 75 65 73 20 66 6f 72 20 49 6e 64 65 78 2e  alues for Index.
128e0 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69  idxType.*/.#defi
128f0 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50  ne SQLITE_IDXTYP
12900 45 5f 41 50 50 44 45 46 20 20 20 20 20 20 30 20  E_APPDEF      0 
12910 20 20 2f 2a 20 43 72 65 61 74 65 64 20 75 73 69    /* Created usi
12920 6e 67 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  ng CREATE INDEX 
12930 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
12940 45 5f 49 44 58 54 59 50 45 5f 55 4e 49 51 55 45  E_IDXTYPE_UNIQUE
12950 20 20 20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70        1   /* Imp
12960 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49 51 55 45  lements a UNIQUE
12970 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23   constraint */.#
12980 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
12990 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59  XTYPE_PRIMARYKEY
129a0 20 20 32 20 20 20 2f 2a 20 49 73 20 74 68 65 20    2   /* Is the 
129b0 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20  PRIMARY KEY for 
129c0 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a  the table */../*
129d0 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
129e0 69 6e 64 65 78 20 58 20 69 73 20 61 20 50 52 49  index X is a PRI
129f0 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a  MARY KEY index *
12a00 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d  /.#define IsPrim
12a10 61 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20  aryKeyIndex(X)  
12a20 28 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53  ((X)->idxType==S
12a30 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52  QLITE_IDXTYPE_PR
12a40 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65  IMARYKEY)../* Re
12a50 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64  turn true if ind
12a60 65 78 20 58 20 69 73 20 61 20 55 4e 49 51 55 45  ex X is a UNIQUE
12a70 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
12a80 65 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28  e IsUniqueIndex(
12a90 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e  X)      ((X)->on
12aa0 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a  Error!=OE_None).
12ab0 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70  ./*.** Each samp
12ac0 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  le stored in the
12ad0 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61   sqlite_stat3 ta
12ae0 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e 74  ble is represent
12af0 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 0a 2a 2a  ed in memory .**
12b00 20 75 73 69 6e 67 20 61 20 73 74 72 75 63 74 75   using a structu
12b10 72 65 20 6f 66 20 74 68 69 73 20 74 79 70 65 2e  re of this type.
12b20 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74    See documentat
12b30 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20 6f  ion at the top o
12b40 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65  f the.** analyze
12b50 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66  .c source file f
12b60 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
12b70 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
12b80 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65  ruct IndexSample
12b90 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20 20   {.  void *p;   
12ba0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
12bb0 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65 63  r to sampled rec
12bc0 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20  ord */.  int n; 
12bd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
12be0 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e 20  ze of record in 
12bf0 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63  bytes */.  tRowc
12c00 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20  nt *anEq;    /* 
12c10 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72  Est. number of r
12c20 6f 77 73 20 77 68 65 72 65 20 74 68 65 20 6b 65  ows where the ke
12c30 79 20 65 71 75 61 6c 73 20 74 68 69 73 20 73 61  y equals this sa
12c40 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  mple */.  tRowcn
12c50 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45  t *anLt;    /* E
12c60 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  st. number of ro
12c70 77 73 20 77 68 65 72 65 20 6b 65 79 20 69 73 20  ws where key is 
12c80 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73  less than this s
12c90 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63  ample */.  tRowc
12ca0 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20  nt *anDLt;   /* 
12cb0 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64  Est. number of d
12cc0 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73  istinct keys les
12cd0 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70  s than this samp
12ce0 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
12cf0 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e  Each token comin
12d00 67 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78  g out of the lex
12d10 65 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  er is an instanc
12d20 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72  e of.** this str
12d30 75 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20  ucture.  Tokens 
12d40 61 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73  are also used as
12d50 20 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72   part of an expr
12d60 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  ession..**.** No
12d70 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30  te if Token.z==0
12d80 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20   then Token.dyn 
12d90 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20  and Token.n are 
12da0 75 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a  undefined and.**
12db0 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e   may contain ran
12dc0 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20  dom values.  Do 
12dd0 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73  not make any ass
12de0 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74 20 54  umptions about T
12df0 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20  oken.dyn.** and 
12e00 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b  Token.n when Tok
12e10 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75  en.z==0..*/.stru
12e20 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e  ct Token {.  con
12e30 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  st char *z;     
12e40 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 74  /* Text of the t
12e50 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d  oken.  Not NULL-
12e60 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20  terminated! */. 
12e70 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b   unsigned int n;
12e80 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
12e90 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74   characters in t
12ea0 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a  his token */.};.
12eb0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
12ec0 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
12ed0 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e  ture contains in
12ee0 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
12ef0 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
12f00 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43  code for a SELEC
12f10 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  T that contains 
12f20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
12f30 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78  ons..**.** If Ex
12f40 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f  pr.op==TK_AGG_CO
12f50 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46  LUMN or TK_AGG_F
12f60 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70  UNCTION then Exp
12f70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a  r.pAggInfo is a.
12f80 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ** pointer to th
12f90 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
12fa0 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  he Expr.iColumn 
12fb0 66 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64  field is the ind
12fc0 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f  ex in.** AggInfo
12fd0 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e  .aCol[] or AggIn
12fe0 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e  fo.aFunc[] of in
12ff0 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
13000 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20   to generate.** 
13010 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f  code for that no
13020 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66  de..**.** AggInf
13030 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41  o.pGroupBy and A
13040 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78  ggInfo.aFunc.pEx
13050 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c  pr point to fiel
13060 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a  ds within the.**
13070 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74   original Select
13080 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
13090 64 65 73 63 72 69 62 65 73 20 74 68 65 20 53 45  describes the SE
130a0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
130b0 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73   These.** fields
130c0 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20   do not need to 
130d0 62 65 20 66 72 65 65 64 20 77 68 65 6e 20 64 65  be freed when de
130e0 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41  allocating the A
130f0 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  ggInfo structure
13100 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49  ..*/.struct AggI
13110 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63  nfo {.  u8 direc
13120 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  tMode;          
13130 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65 72  /* Direct render
13140 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74  ing mode means t
13150 61 6b 65 20 64 61 74 61 20 64 69 72 65 63 74 6c  ake data directl
13160 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y.              
13170 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66              ** f
13180 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65  rom source table
13190 73 20 72 61 74 68 65 72 20 74 68 61 6e 20 66 72  s rather than fr
131a0 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20  om accumulators 
131b0 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69  */.  u8 useSorti
131c0 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20  ngIdx;       /* 
131d0 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20  In direct mode, 
131e0 72 65 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f  reference the so
131f0 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68  rting index rath
13200 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  er.             
13210 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
13220 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20  than the source 
13230 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73  table */.  int s
13240 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20  ortingIdx;      
13250 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
13260 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69  ber of the sorti
13270 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  ng index */.  in
13280 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62  t sortingIdxPTab
13290 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20  ;     /* Cursor 
132a0 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f  number of pseudo
132b0 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  -table */.  int 
132c0 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20  nSortingColumn; 
132d0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
132e0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
132f0 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
13300 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78  .  int mnReg, mx
13310 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61  Reg;       /* Ra
13320 6e 67 65 20 6f 66 20 72 65 67 69 73 74 65 72 73  nge of registers
13330 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61   allocated for a
13340 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f  Col and aFunc */
13350 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
13360 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68  oupBy;     /* Th
13370 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73  e group by claus
13380 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  e */.  struct Ag
13390 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f  gInfo_col {    /
133a0 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  * For each colum
133b0 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65  n used in source
133c0 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54   tables */.    T
133d0 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
133e0 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63          /* Sourc
133f0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
13400 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
13410 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
13420 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  r number of the 
13430 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
13440 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b      int iColumn;
13450 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13460 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69  Column number wi
13470 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20  thin the source 
13480 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
13490 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20   iSorterColumn; 
134a0 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
134b0 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f  number in the so
134c0 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
134d0 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20     int iMem;    
134e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
134f0 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
13500 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75  hat acts as accu
13510 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45  mulator */.    E
13520 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
13530 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f          /* The o
13540 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69  riginal expressi
13550 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b  on */.  } *aCol;
13560 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20  .  int nColumn; 
13570 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
13580 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74  mber of used ent
13590 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a  ries in aCol[] *
135a0 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c  /.  int nAccumul
135b0 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e  ator;       /* N
135c0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
135d0 20 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75   that show throu
135e0 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74  gh to the output
135f0 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13600 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41              ** A
13610 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e  dditional column
13620 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20  s are used only 
13630 61 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  as parameters to
13640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13650 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67             ** ag
13660 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
13670 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67  s */.  struct Ag
13680 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f  gInfo_func {   /
13690 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65  * For each aggre
136a0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  gate function */
136b0 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
136c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
136d0 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f   Expression enco
136e0 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f  ding the functio
136f0 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66  n */.    FuncDef
13700 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20   *pFunc;        
13710 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61    /* The aggrega
13720 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c  te function impl
13730 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ementation */.  
13740 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
13750 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
13760 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
13770 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d  at acts as accum
13780 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e  ulator */.    in
13790 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20  t iDistinct;    
137a0 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65         /* Epheme
137b0 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74  ral table used t
137c0 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e  o enforce DISTIN
137d0 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63  CT */.  } *aFunc
137e0 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20  ;.  int nFunc;  
137f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
13800 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
13810 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d   in aFunc[] */.}
13820 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74  ;../*.** The dat
13830 61 74 79 70 65 20 79 6e 56 61 72 20 69 73 20 61  atype ynVar is a
13840 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c   signed integer,
13850 20 65 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f   either 16-bit o
13860 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75  r 32-bit..** Usu
13870 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69  ally it is 16-bi
13880 74 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49  ts.  But if SQLI
13890 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
138a0 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61 74 65  NUMBER is greate
138b0 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20  r.** than 32767 
138c0 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20  we have to make 
138d0 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62  it 32-bit.  16-b
138e0 69 74 20 69 73 20 70 72 65 66 65 72 72 65 64 20  it is preferred 
138f0 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73  because.** it us
13900 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69  es less memory i
13910 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63  n the Expr objec
13920 74 2c 20 77 68 69 63 68 20 69 73 20 61 20 62 69  t, which is a bi
13930 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a  g memory user.**
13940 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   in systems with
13950 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65   lots of prepare
13960 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41  d statements.  A
13970 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61 74 69  nd few applicati
13980 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65  ons.** need more
13990 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f   than about 10 o
139a0 72 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20  r 20 variables. 
139b0 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d   But some extrem
139c0 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20  e users want.** 
139d0 74 6f 20 68 61 76 65 20 70 72 65 70 61 72 65 64  to have prepared
139e0 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
139f0 20 6f 76 65 72 20 33 32 37 36 37 20 76 61 72 69   over 32767 vari
13a00 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74  ables, and for t
13a10 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f  hem.** the optio
13a20 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28  n is available (
13a30 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29  at compile-time)
13a40 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
13a50 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
13a60 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64  BER<=32767.typed
13a70 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65  ef i16 ynVar;.#e
13a80 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20  lse.typedef int 
13a90 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ynVar;.#endif../
13aa0 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f  *.** Each node o
13ab0 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  f an expression 
13ac0 69 6e 20 74 68 65 20 70 61 72 73 65 20 74 72 65  in the parse tre
13ad0 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  e is an instance
13ae0 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
13af0 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70  cture..**.** Exp
13b00 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f  r.op is the opco
13b10 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20  de. The integer 
13b20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64  parser token cod
13b30 65 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a  es are reused.**
13b40 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65   as opcodes here
13b50 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74  . For example, t
13b60 68 65 20 70 61 72 73 65 72 20 64 65 66 69 6e 65  he parser define
13b70 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e  s TK_GE to be an
13b80 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65   integer.** code
13b90 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
13ba0 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e  e ">=" operator.
13bb0 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67   This same integ
13bc0 65 72 20 63 6f 64 65 20 69 73 20 72 65 75 73 65  er code is reuse
13bd0 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e  d.** to represen
13be0 74 20 74 68 65 20 67 72 65 61 74 65 72 2d 74 68  t the greater-th
13bf0 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f  an-or-equal-to o
13c00 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65  perator in the e
13c10 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65  xpression.** tre
13c20 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
13c30 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
13c40 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b   SQL literal (TK
13c50 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f  _INTEGER, TK_FLO
13c60 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a  AT, TK_BLOB, .**
13c70 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20   or TK_STRING), 
13c80 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
13c90 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78  contains the tex
13ca0 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74  t of the SQL lit
13cb0 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20  eral. If.** the 
13cc0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
13cd0 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52  variable (TK_VAR
13ce0 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70  IABLE), then Exp
13cf0 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
13d00 20 74 68 65 20 0a 2a 2a 20 76 61 72 69 61 62 6c   the .** variabl
13d10 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c  e name. Finally,
13d20 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69   if the expressi
13d30 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e  on is an SQL fun
13d40 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49  ction (TK_FUNCTI
13d50 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70  ON),.** then Exp
13d60 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
13d70 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
13d80 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a   function..**.**
13d90 20 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64   Expr.pRight and
13da0 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20   Expr.pLeft are 
13db0 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67  the left and rig
13dc0 68 74 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e  ht subexpression
13dd0 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79  s of a.** binary
13de0 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65   operator. Eithe
13df0 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65  r or both may be
13e00 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70   NULL..**.** Exp
13e10 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c  r.x.pList is a l
13e20 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ist of arguments
13e30 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69   if the expressi
13e40 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e  on is an SQL fun
13e50 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45  ction,.** a CASE
13e60 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61   expression or a
13e70 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20  n IN expression 
13e80 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68  of the form "<lh
13e90 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e  s> IN (<y>, <z>.
13ea0 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e  ..)"..** Expr.x.
13eb0 70 53 65 6c 65 63 74 20 69 73 20 75 73 65 64 20  pSelect is used 
13ec0 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
13ed0 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63  n is a sub-selec
13ee0 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69  t or an expressi
13ef0 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72  on of.** the for
13f00 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c  m "<lhs> IN (SEL
13f10 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68  ECT ...)". If th
13f20 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62  e EP_xIsSelect b
13f30 69 74 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  it is set in the
13f40 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  .** Expr.flags m
13f50 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78  ask, then Expr.x
13f60 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69  .pSelect is vali
13f70 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78  d. Otherwise, Ex
13f80 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 0a 2a  pr.x.pList is .*
13f90 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41  * valid..**.** A
13fa0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20  n expression of 
13fb0 74 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49  the form ID or I
13fc0 44 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20 61  D.ID refers to a
13fd0 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62   column in a tab
13fe0 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20  le..** For such 
13ff0 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70  expressions, Exp
14000 72 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54  r.op is set to T
14010 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70  K_COLUMN and Exp
14020 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74  r.iTable is.** t
14030 68 65 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f  he integer curso
14040 72 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44  r number of a VD
14050 42 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  BE cursor pointi
14060 6e 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65  ng to that table
14070 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f   and.** Expr.iCo
14080 6c 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75  lumn is the colu
14090 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  mn number for th
140a0 65 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d  e specific colum
140b0 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78  n.  If the.** ex
140c0 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64  pression is used
140d0 20 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20   as a result in 
140e0 61 6e 20 61 67 67 72 65 67 61 74 65 20 53 45 4c  an aggregate SEL
140f0 45 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ECT, then the.**
14100 20 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73   value is also s
14110 74 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78 70  tored in the Exp
14120 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e  r.iAgg column in
14130 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73   the aggregate s
14140 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e  o that.** it can
14150 20 62 65 20 61 63 63 65 73 73 65 64 20 61 66 74   be accessed aft
14160 65 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65  er all aggregate
14170 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a  s are computed..
14180 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
14190 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e  ression is an un
141a0 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d  bound variable m
141b0 61 72 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f  arker (a questio
141c0 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63 68 61 72 61  n mark .** chara
141d0 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20  cter '?' in the 
141e0 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68  original SQL) th
141f0 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61 62  en the Expr.iTab
14200 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64  le holds the ind
14210 65 78 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f  ex .** number fo
14220 72 20 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e  r that variable.
14230 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78  .**.** If the ex
14240 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75  pression is a su
14250 62 71 75 65 72 79 20 74 68 65 6e 20 45 78 70 72  bquery then Expr
14260 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61  .iColumn holds a
14270 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67  n integer.** reg
14280 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e  ister number con
14290 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75  taining the resu
142a0 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71 75 65  lt of the subque
142b0 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73  ry.  If the.** s
142c0 75 62 71 75 65 72 79 20 67 69 76 65 73 20 61 20  ubquery gives a 
142d0 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c  constant result,
142e0 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20   then iTable is 
142f0 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75 62 71  -1.  If the subq
14300 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20  uery.** gives a 
14310 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72  different answer
14320 20 61 74 20 64 69 66 66 65 72 65 6e 74 20 74 69   at different ti
14330 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61 74 65  mes during state
14340 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a  ment processing.
14350 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69  ** then iTable i
14360 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  s the address of
14370 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68   a subroutine th
14380 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20  at computes the 
14390 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20  subquery..**.** 
143a0 49 66 20 74 68 65 20 45 78 70 72 20 69 73 20 6f  If the Expr is o
143b0 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e  f type OP_Column
143c0 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20  , and the table 
143d0 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20  it is selecting 
143e0 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73  from.** is a dis
143f0 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22  k table or the "
14400 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61  old.*" pseudo-ta
14410 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70  ble, then pTab p
14420 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20  oints to the.** 
14430 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61  corresponding ta
14440 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a  ble definition..
14450 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e  **.** ALLOCATION
14460 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78   NOTES:.**.** Ex
14470 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75  pr objects can u
14480 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f  se a lot of memo
14490 72 79 20 73 70 61 63 65 20 69 6e 20 64 61 74 61  ry space in data
144a0 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f  base schema.  To
144b0 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20  .** help reduce 
144c0 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65  memory requireme
144d0 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61  nts, sometimes a
144e0 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69  n Expr object wi
144f0 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74  ll be.** truncat
14500 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75  ed.  And to redu
14510 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ce the number of
14520 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
14530 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a  ons, sometimes.*
14540 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78  * two or more Ex
14550 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20  pr objects will 
14560 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73  be stored in a s
14570 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  ingle memory all
14580 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65  ocation,.** toge
14590 74 68 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a  ther with Expr.z
145a0 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a  Token strings..*
145b0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52  *.** If the EP_R
145c0 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f  educed and EP_To
145d0 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72  kenOnly flags ar
145e0 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e  e set when.** an
145f0 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20   Expr object is 
14600 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e  truncated.  When
14610 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73   EP_Reduced is s
14620 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20  et, then all.** 
14630 74 68 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f  the child Expr o
14640 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45 78  bjects in the Ex
14650 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70  pr.pLeft and Exp
14660 72 2e 70 52 69 67 68 74 20 73 75 62 74 72 65 65  r.pRight subtree
14670 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e  s.** are contain
14680 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 73 61  ed within the sa
14690 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  me memory alloca
146a0 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77  tion.  Note, how
146b0 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68  ever, that.** th
146c0 65 20 73 75 62 74 72 65 65 73 20 69 6e 20 45 78  e subtrees in Ex
146d0 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78  pr.x.pList or Ex
146e0 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65  pr.x.pSelect are
146f0 20 61 6c 77 61 79 73 20 73 65 70 61 72 61 74 65   always separate
14700 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c  ly.** allocated,
14710 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   regardless of w
14720 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50  hether or not EP
14730 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2e  _Reduced is set.
14740 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20  .*/.struct Expr 
14750 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  {.  u8 op;      
14760 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70             /* Op
14770 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65  eration performe
14780 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a  d by this node *
14790 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
147a0 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  y;         /* Th
147b0 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68  e affinity of th
147c0 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66  e column or 0 if
147d0 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f   not a column */
147e0 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20  .  u32 flags;   
147f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72            /* Var
14800 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f  ious flags.  EP_
14810 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20  * See below */. 
14820 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61   union {.    cha
14830 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20  r *zToken;      
14840 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c      /* Token val
14850 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61  ue. Zero termina
14860 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64  ted and dequoted
14870 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c   */.    int iVal
14880 75 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ue;            /
14890 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69  * Non-negative i
148a0 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20  nteger value if 
148b0 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20  EP_IntValue */. 
148c0 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74   } u;..  /* If t
148d0 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  he EP_TokenOnly 
148e0 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74  flag is set in t
148f0 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  he Expr.flags ma
14900 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a  sk, then no.  **
14910 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61   space is alloca
14920 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c  ted for the fiel
14930 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f  ds below this po
14940 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  int. An attempt 
14950 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74  to.  ** access t
14960 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  hem will result 
14970 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72  in a segfault or
14980 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a 20   malfunction. . 
14990 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
149a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
149b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
149c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
149d0 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20  ******/..  Expr 
149e0 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20  *pLeft;         
149f0 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64    /* Left subnod
14a00 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69  e */.  Expr *pRi
14a10 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ght;          /*
14a20 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a   Right subnode *
14a30 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
14a40 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b  ExprList *pList;
14a50 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c       /* op = IN,
14a60 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 2c   EXISTS, SELECT,
14a70 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c   CASE, FUNCTION,
14a80 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20   BETWEEN */.    
14a90 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
14aa0 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53 65       /* EP_xIsSe
14ab0 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e  lect and op = IN
14ac0 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54  , EXISTS, SELECT
14ad0 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a   */.  } x;..  /*
14ae0 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63   If the EP_Reduc
14af0 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ed flag is set i
14b00 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
14b10 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20   mask, then no. 
14b20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c   ** space is all
14b30 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66  ocated for the f
14b40 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73  ields below this
14b50 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d   point. An attem
14b60 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73  pt to.  ** acces
14b70 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75  s them will resu
14b80 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74  lt in a segfault
14b90 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e   or malfunction.
14ba0 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
14bb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14bc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14bd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
14be0 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53  ********/..#if S
14bf0 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
14c00 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65  EPTH>0.  int nHe
14c10 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20  ight;           
14c20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68 65  /* Height of the
14c30 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79 20   tree headed by 
14c40 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e  this node */.#en
14c50 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65  dif.  int iTable
14c60 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
14c70 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f  TK_COLUMN: curso
14c80 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  r number of tabl
14c90 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e  e holding column
14ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14cb0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
14cc0 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73 74  REGISTER: regist
14cd0 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20  er number.      
14ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cf0 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52     ** TK_TRIGGER
14d00 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e  : 1 -> new, 0 ->
14d10 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20   old.           
14d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
14d30 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31   EP_Unlikely:  1
14d40 33 34 32 31 37 37 32 38 20 74 69 6d 65 73 20 6c  34217728 times l
14d50 69 6b 65 6c 69 68 6f 6f 64 20 2a 2f 0a 20 20 79  ikelihood */.  y
14d60 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20  nVar iColumn;   
14d70 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55        /* TK_COLU
14d80 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78  MN: column index
14d90 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e  .  -1 for rowid.
14da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14db0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
14dc0 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61 62  VARIABLE: variab
14dd0 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79  le number (alway
14de0 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20 20 69 31  s >= 1). */.  i1
14df0 36 20 69 41 67 67 3b 20 20 20 20 20 20 20 20 20  6 iAgg;         
14e00 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e       /* Which en
14e10 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d  try in pAggInfo-
14e20 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75  >aCol[] or ->aFu
14e30 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52  nc[] */.  i16 iR
14e40 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20  ightJoinTable;  
14e50 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f   /* If EP_FromJo
14e60 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74 61  in, the right ta
14e70 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20  ble of the join 
14e80 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20  */.  u8 op2;    
14e90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
14ea0 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67  K_REGISTER: orig
14eb0 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78  inal value of Ex
14ec0 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20  pr.op.          
14ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
14ee0 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65  * TK_COLUMN: the
14ef0 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72   value of p5 for
14f00 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20   OP_Column.     
14f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55      ** TK_AGG_FU
14f30 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20  NCTION: nesting 
14f40 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e  depth */.  AggIn
14f50 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20  fo *pAggInfo;   
14f60 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f    /* Used by TK_
14f70 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54  AGG_COLUMN and T
14f80 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a  K_AGG_FUNCTION *
14f90 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
14fa0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61             /* Ta
14fb0 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d  ble for TK_COLUM
14fc0 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a  N expressions. *
14fd0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
14fe0 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68  following are th
14ff0 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69  e meanings of bi
15000 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  ts in the Expr.f
15010 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
15020 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f  define EP_FromJo
15030 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f 2a 20  in  0x000001 /* 
15040 4f 72 69 67 69 6e 61 74 65 73 20 69 6e 20 4f 4e  Originates in ON
15050 2f 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66  /USING clause of
15060 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
15070 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20  define EP_Agg   
15080 20 20 20 20 30 78 30 30 30 30 30 32 20 2f 2a 20      0x000002 /* 
15090 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  Contains one or 
150a0 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
150b0 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  unctions */.#def
150c0 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76 65 64 20  ine EP_Resolved 
150d0 20 30 78 30 30 30 30 30 34 20 2f 2a 20 49 44 73   0x000004 /* IDs
150e0 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c   have been resol
150f0 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a  ved to COLUMNs *
15100 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 45 72 72  /.#define EP_Err
15110 6f 72 20 20 20 20 20 30 78 30 30 30 30 30 38 20  or     0x000008 
15120 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 63 6f  /* Expression co
15130 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
15140 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65  re errors */.#de
15150 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74  fine EP_Distinct
15160 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20 41 67    0x000010 /* Ag
15170 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
15180 20 77 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b   with DISTINCT k
15190 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e  eyword */.#defin
151a0 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20 30  e EP_VarSelect 0
151b0 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65  x000020 /* pSele
151c0 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64  ct is correlated
151d0 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a  , not constant *
151e0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c  /.#define EP_Dbl
151f0 51 75 6f 74 65 64 20 30 78 30 30 30 30 34 30 20  Quoted 0x000040 
15200 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f  /* token.z was o
15210 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e  riginally in "..
15220 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ." */.#define EP
15230 5f 49 6e 66 69 78 46 75 6e 63 20 30 78 30 30 30  _InfixFunc 0x000
15240 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  080 /* True for 
15250 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f  an infix functio
15260 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65  n: LIKE, GLOB, e
15270 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  tc */.#define EP
15280 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78 30 30 30  _Collate   0x000
15290 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74  100 /* Tree cont
152a0 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54  ains a TK_COLLAT
152b0 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64  E operator */.#d
152c0 65 66 69 6e 65 20 45 50 5f 47 65 6e 65 72 69 63  efine EP_Generic
152d0 20 20 20 30 78 30 30 30 32 30 30 20 2f 2a 20 49     0x000200 /* I
152e0 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72  gnore COLLATE or
152f0 20 61 66 66 69 6e 69 74 79 20 6f 6e 20 74 68 69   affinity on thi
15300 73 20 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e  s tree */.#defin
15310 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 30  e EP_IntValue  0
15320 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65 67  x000400 /* Integ
15330 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e  er value contain
15340 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a  ed in u.iValue *
15350 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73  /.#define EP_xIs
15360 53 65 6c 65 63 74 20 30 78 30 30 30 38 30 30 20  Select 0x000800 
15370 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20  /* x.pSelect is 
15380 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65  valid (otherwise
15390 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a   x.pList is) */.
153a0 23 64 65 66 69 6e 65 20 45 50 5f 53 6b 69 70 20  #define EP_Skip 
153b0 20 20 20 20 20 30 78 30 30 31 30 30 30 20 2f 2a       0x001000 /*
153c0 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72   COLLATE, AS, or
153d0 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65   UNLIKELY */.#de
153e0 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20  fine EP_Reduced 
153f0 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45 78    0x002000 /* Ex
15400 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 52  pr struct EXPR_R
15410 45 44 55 43 45 44 53 49 5a 45 20 62 79 74 65 73  EDUCEDSIZE bytes
15420 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
15430 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78   EP_TokenOnly 0x
15440 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20 73  004000 /* Expr s
15450 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e  truct EXPR_TOKEN
15460 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f  ONLYSIZE bytes o
15470 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  nly */.#define E
15480 50 5f 53 74 61 74 69 63 20 20 20 20 30 78 30 30  P_Static    0x00
15490 38 30 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20  8000 /* Held in 
154a0 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69  memory not obtai
154b0 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ned from malloc(
154c0 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ) */.#define EP_
154d0 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30 30  MemToken  0x0100
154e0 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71  00 /* Need to sq
154f0 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 45 78  lite3DbFree() Ex
15500 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65  pr.zToken */.#de
15510 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63 65  fine EP_NoReduce
15520 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43 61    0x020000 /* Ca
15530 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44  nnot EXPRDUP_RED
15540 55 43 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f  UCE this Expr */
15550 0a 23 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69  .#define EP_Unli
15560 6b 65 6c 79 20 20 30 78 30 34 30 30 30 30 20 2f  kely  0x040000 /
15570 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20  * unlikely() or 
15580 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e  likelihood() fun
15590 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
155a0 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63 20 30 78   EP_ConstFunc 0x
155b0 30 38 30 30 30 30 20 2f 2a 20 4e 6f 64 65 20 69  080000 /* Node i
155c0 73 20 61 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  s a SQLITE_FUNC_
155d0 43 4f 4e 53 54 41 4e 54 20 66 75 6e 63 74 69 6f  CONSTANT functio
155e0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
155f0 43 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30 30 30  CanBeNull 0x1000
15600 30 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75 6c  00 /* Can be nul
15610 6c 20 64 65 73 70 69 74 65 20 4e 4f 54 20 4e 55  l despite NOT NU
15620 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  LL constraint */
15630 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62 71  .#define EP_Subq
15640 75 65 72 79 20 20 30 78 32 30 30 30 30 30 20 2f  uery  0x200000 /
15650 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20  * Tree contains 
15660 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70 65 72  a TK_SELECT oper
15670 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43  ator */../*.** C
15680 6f 6d 62 69 6e 61 74 69 6f 6e 73 20 6f 66 20 74  ombinations of t
15690 77 6f 20 6f 72 20 6d 6f 72 65 20 45 50 5f 2a 20  wo or more EP_* 
156a0 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  flags.*/.#define
156b0 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20 28 45   EP_Propagate (E
156c0 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53 75 62  P_Collate|EP_Sub
156d0 71 75 65 72 79 29 20 2f 2a 20 50 72 6f 70 61 67  query) /* Propag
156e0 61 74 65 20 74 68 65 73 65 20 62 69 74 73 20 75  ate these bits u
156f0 70 20 74 72 65 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  p tree */../*.**
15700 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61   These macros ca
15710 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73  n be used to tes
15720 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72  t, set, or clear
15730 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a   bits in the .**
15740 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c   Expr.flags fiel
15750 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78  d..*/.#define Ex
15760 70 72 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c  prHasProperty(E,
15770 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c  P)     (((E)->fl
15780 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65  ags&(P))!=0).#de
15790 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c 6c 50  fine ExprHasAllP
157a0 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 28  roperty(E,P)  ((
157b0 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d  (E)->flags&(P))=
157c0 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78  =(P)).#define Ex
157d0 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c  prSetProperty(E,
157e0 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67  P)     (E)->flag
157f0 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45  s|=(P).#define E
15800 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79  xprClearProperty
15810 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61  (E,P)   (E)->fla
15820 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65  gs&=~(P)../* The
15830 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65   ExprSetVVAPrope
15840 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73 20 75  rty() macro is u
15850 73 65 64 20 66 6f 72 20 56 65 72 69 66 69 63 61  sed for Verifica
15860 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e  tion, Validation
15870 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65 64 69  ,.** and Accredi
15880 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74  tation only.  It
15890 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70 72   works like Expr
158a0 53 65 74 50 72 6f 70 65 72 74 79 28 29 20 64 75  SetProperty() du
158b0 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63  ring VVA.** proc
158c0 65 73 73 65 73 20 62 75 74 20 69 73 20 61 20 6e  esses but is a n
158d0 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76 65 72  o-op for deliver
158e0 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  y..*/.#ifdef SQL
158f0 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66 69  ITE_DEBUG.# defi
15900 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  ne ExprSetVVAPro
15910 70 65 72 74 79 28 45 2c 50 29 20 20 28 45 29 2d  perty(E,P)  (E)-
15920 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73  >flags|=(P).#els
15930 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53  e.# define ExprS
15940 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c  etVVAProperty(E,
15950 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  P).#endif../*.**
15960 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72   Macros to deter
15970 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20  mine the number 
15980 6f 66 20 62 79 74 65 73 20 72 65 71 75 69 72 65  of bytes require
15990 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78  d by a normal Ex
159a0 70 72 20 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61  pr .** struct, a
159b0 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69  n Expr struct wi
159c0 74 68 20 74 68 65 20 45 50 5f 52 65 64 75 63 65  th the EP_Reduce
159d0 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45 78  d flag set in Ex
159e0 70 72 2e 66 6c 61 67 73 20 0a 2a 2a 20 61 6e 64  pr.flags .** and
159f0 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20   an Expr struct 
15a00 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65  with the EP_Toke
15a10 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a  nOnly flag set..
15a20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
15a30 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20  FULLSIZE        
15a40 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20     sizeof(Expr) 
15a50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c            /* Ful
15a60 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e  l size */.#defin
15a70 65 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49  e EXPR_REDUCEDSI
15a80 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73 65 74  ZE        offset
15a90 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20  of(Expr,iTable) 
15aa0 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75   /* Common featu
15ab0 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  res */.#define E
15ac0 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a  XPR_TOKENONLYSIZ
15ad0 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28  E      offsetof(
15ae0 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a  Expr,pLeft)   /*
15af0 20 46 65 77 65 72 20 66 65 61 74 75 72 65 73 20   Fewer features 
15b00 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20  */../*.** Flags 
15b10 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 73 71  passed to the sq
15b20 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66  lite3ExprDup() f
15b30 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65  unction. See the
15b40 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20   header comment 
15b50 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65  .** above sqlite
15b60 33 45 78 70 72 44 75 70 28 29 20 66 6f 72 20 64  3ExprDup() for d
15b70 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69  etails..*/.#defi
15b80 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44 55 43  ne EXPRDUP_REDUC
15b90 45 20 20 20 20 20 20 20 20 20 30 78 30 30 30 31  E         0x0001
15ba0 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65    /* Used reduce
15bb0 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65  d-size Expr node
15bc0 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69  s */../*.** A li
15bd0 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
15be0 73 2e 20 20 45 61 63 68 20 65 78 70 72 65 73 73  s.  Each express
15bf0 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c  ion may optional
15c00 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d  ly have a.** nam
15c10 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65  e.  An expr/name
15c20 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e   combination can
15c30 20 62 65 20 75 73 65 64 20 69 6e 20 73 65 76 65   be used in seve
15c40 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a  ral ways, such.*
15c50 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66  * as the list of
15c60 20 22 65 78 70 72 20 41 53 20 49 44 22 20 66 69   "expr AS ID" fi
15c70 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  elds following a
15c80 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20   "SELECT" or in 
15c90 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22  the.** list of "
15ca0 49 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73  ID = expr" items
15cb0 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20   in an UPDATE.  
15cc0 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  A list of expres
15cd0 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73  sions can.** als
15ce0 6f 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65  o be used as the
15cf0 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66   argument to a f
15d00 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63  unction, in whic
15d10 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61  h case the a.zNa
15d20 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e  me.** field is n
15d30 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42  ot used..**.** B
15d40 79 20 64 65 66 61 75 6c 74 20 74 68 65 20 45 78  y default the Ex
15d50 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68  pr.zSpan field h
15d60 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61  olds a human-rea
15d70 64 61 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f  dable descriptio
15d80 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72  n of.** the expr
15d90 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75  ession that is u
15da0 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72  sed in the gener
15db0 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d  ation of error m
15dc0 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63  essages and.** c
15dd0 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49  olumn labels.  I
15de0 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45 78 70  n this case, Exp
15df0 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63  r.zSpan is typic
15e00 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66  ally the text of
15e10 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70   a.** column exp
15e20 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78  ression as it ex
15e30 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54  ists in a SELECT
15e40 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77   statement.  How
15e50 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20  ever, if.** the 
15e60 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20  bSpanIsTab flag 
15e70 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70  is set, then zSp
15e80 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64  an is overloaded
15e90 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d   to mean the nam
15ea0 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75  e.** of the resu
15eb0 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  lt column in the
15ec0 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e   form: DATABASE.
15ed0 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54  TABLE.COLUMN.  T
15ee0 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72  his later.** for
15ef0 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61  m is used for na
15f00 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69  me resolution wi
15f10 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63  th nested FROM c
15f20 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63  lauses..*/.struc
15f30 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69  t ExprList {.  i
15f40 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20  nt nExpr;       
15f50 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
15f60 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f  of expressions o
15f70 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20  n the list */.  
15f80 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f  struct ExprList_
15f90 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61  item { /* For ea
15fa0 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  ch expression in
15fb0 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20   the list */.   
15fc0 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
15fd0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
15fe0 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
15ff0 6f 6e 73 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ons */.    char 
16000 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
16010 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f     /* Token asso
16020 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
16030 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
16040 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20     char *zSpan; 
16050 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72             /* Or
16060 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74  iginal text of t
16070 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  he expression */
16080 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65  .    u8 sortOrde
16090 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
160a0 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20  1 for DESC or 0 
160b0 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75  for ASC */.    u
160c0 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b  nsigned done :1;
160d0 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67         /* A flag
160e0 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65   to indicate whe
160f0 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20  n processing is 
16100 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20  finished */.    
16110 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73  unsigned bSpanIs
16120 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e  Tab :1; /* zSpan
16130 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e   holds DB.TABLE.
16140 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e  COLUMN */.    un
16150 73 69 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20  signed reusable 
16160 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e  :1;   /* Constan
16170 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  t expression is 
16180 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20  reusable */.    
16190 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 73 74  union {.      st
161a0 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20 20 75  ruct {.        u
161b0 31 36 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20  16 iOrderByCol; 
161c0 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45       /* For ORDE
161d0 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d  R BY, column num
161e0 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20 73 65  ber in result se
161f0 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 75 31 36  t */.        u16
16200 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20   iAlias;        
16210 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f     /* Index into
16220 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20   Parse.aAlias[] 
16230 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20  for zName */.   
16240 20 20 20 7d 20 78 3b 0a 20 20 20 20 20 20 69 6e     } x;.      in
16250 74 20 69 43 6f 6e 73 74 45 78 70 72 52 65 67 3b  t iConstExprReg;
16260 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
16270 72 20 69 6e 20 77 68 69 63 68 20 45 78 70 72 20  r in which Expr 
16280 76 61 6c 75 65 20 69 73 20 63 61 63 68 65 64 20  value is cached 
16290 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20 7d 20  */.    } u;.  } 
162a0 2a 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *a;             
162b0 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 20 61 20       /* Alloc a 
162c0 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 67 72 65  power of two gre
162d0 61 74 65 72 20 6f 72 20 65 71 75 61 6c 20 74 6f  ater or equal to
162e0 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   nExpr */.};../*
162f0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
16300 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
16310 65 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65  e is used by the
16320 20 70 61 72 73 65 72 20 74 6f 20 72 65 63 6f 72   parser to recor
16330 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61  d both.** the pa
16340 72 73 65 20 74 72 65 65 20 66 6f 72 20 61 6e 20  rse tree for an 
16350 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74  expression and t
16360 68 65 20 73 70 61 6e 20 6f 66 20 69 6e 70 75 74  he span of input
16370 20 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20   text for an.** 
16380 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73  expression..*/.s
16390 74 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 7b  truct ExprSpan {
163a0 0a 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20  .  Expr *pExpr; 
163b0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
163c0 65 78 70 72 65 73 73 69 6f 6e 20 70 61 72 73 65  expression parse
163d0 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74   tree */.  const
163e0 20 63 68 61 72 20 2a 7a 53 74 61 72 74 3b 20 20   char *zStart;  
163f0 20 2f 2a 20 46 69 72 73 74 20 63 68 61 72 61 63   /* First charac
16400 74 65 72 20 6f 66 20 69 6e 70 75 74 20 74 65 78  ter of input tex
16410 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  t */.  const cha
16420 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20  r *zEnd;     /* 
16430 4f 6e 65 20 63 68 61 72 61 63 74 65 72 20 70 61  One character pa
16440 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e  st the end of in
16450 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a  put text */.};..
16460 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
16470 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
16480 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73  ure can hold a s
16490 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64  imple list of id
164a0 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75  entifiers,.** su
164b0 63 68 20 61 73 20 74 68 65 20 6c 69 73 74 20 22  ch as the list "
164c0 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f  a,b,c" in the fo
164d0 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e  llowing statemen
164e0 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49  ts:.**.**      I
164f0 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
16500 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a  ,c) VALUES ...;.
16510 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 49  **      CREATE I
16520 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c  NDEX idx ON t(a,
16530 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52  b,c);.**      CR
16540 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72 69  EATE TRIGGER tri
16550 67 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20  g BEFORE UPDATE 
16560 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b  ON t(a,b,c) ...;
16570 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73  .**.** The IdLis
16580 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73  t.a.idx field is
16590 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 49   used when the I
165a0 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74 73  dList represents
165b0 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20   the list of.** 
165c0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74  column names aft
165d0 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20  er a table name 
165e0 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  in an INSERT sta
165f0 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20  tement.  In the 
16600 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20  statement.**.** 
16610 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
16620 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a  t(a,b,c) ....**.
16630 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74 68 65  ** If "a" is the
16640 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   k-th column of 
16650 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20  table "t", then 
16660 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d  IdList.a[0].idx=
16670 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64  =k..*/.struct Id
16680 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20  List {.  struct 
16690 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20  IdList_item {.  
166a0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
166b0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
166c0 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f  he identifier */
166d0 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20  .    int idx;   
166e0 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
166f0 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43  in some Table.aC
16700 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  ol[] of a column
16710 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a   named zName */.
16720 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49    } *a;.  int nI
16730 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
16740 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69  mber of identifi
16750 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ers on the list 
16760 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
16770 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70   bitmask datatyp
16780 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20  e defined below 
16790 69 73 20 75 73 65 64 20 66 6f 72 20 76 61 72 69  is used for vari
167a0 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ous optimization
167b0 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e  s..**.** Changin
167c0 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34  g this from a 64
167d0 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74  -bit to a 32-bit
167e0 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65   type limits the
167f0 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61   number of.** ta
16800 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74  bles in a join t
16810 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20  o 32 instead of 
16820 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f  64.  But it also
16830 20 72 65 64 75 63 65 73 20 74 68 65 20 73 69 7a   reduces the siz
16840 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72  e.** of the libr
16850 61 72 79 20 62 79 20 37 33 38 20 62 79 74 65 73  ary by 738 bytes
16860 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74 79 70   on ix86..*/.typ
16870 65 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b  edef u64 Bitmask
16880 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d  ;../*.** The num
16890 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20 61  ber of bits in a
168a0 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22   Bitmask.  "BMS"
168b0 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b 20   means "BitMask 
168c0 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e  Size"..*/.#defin
168d0 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73 69  e BMS  ((int)(si
168e0 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 29  zeof(Bitmask)*8)
168f0 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69  )../*.** A bit i
16900 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23  n a Bitmask.*/.#
16910 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e  define MASKBIT(n
16920 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29 31  )   (((Bitmask)1
16930 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20  )<<(n)).#define 
16940 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28 28  MASKBIT32(n) (((
16950 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29 3c  unsigned int)1)<
16960 3c 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  <(n))../*.** The
16970 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
16980 74 75 72 65 20 64 65 73 63 72 69 62 65 73 20 74  ture describes t
16990 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f  he FROM clause o
169a0 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  f a SELECT state
169b0 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61  ment..** Each ta
169c0 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20  ble or subquery 
169d0 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
169e0 73 65 20 69 73 20 61 20 73 65 70 61 72 61 74 65  se is a separate
169f0 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74   element of.** t
16a00 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61  he SrcList.a[] a
16a10 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68  rray..**.** With
16a20 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66   the addition of
16a30 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61   multiple databa
16a40 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20  se support, the 
16a50 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
16a60 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20  ure.** can also 
16a70 62 65 20 75 73 65 64 20 74 6f 20 64 65 73 63 72  be used to descr
16a80 69 62 65 20 61 20 70 61 72 74 69 63 75 6c 61 72  ibe a particular
16a90 20 74 61 62 6c 65 20 73 75 63 68 20 61 73 20 74   table such as t
16aa0 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a  he table that.**
16ab0 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20   is modified by 
16ac0 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54  an INSERT, DELET
16ad0 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74 61  E, or UPDATE sta
16ae0 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e  tement.  In stan
16af0 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63  dard SQL,.** suc
16b00 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62  h a table must b
16b10 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a  e a simple name:
16b20 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c   ID.  But in SQL
16b30 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63  ite, the table c
16b40 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65  an.** now be ide
16b50 6e 74 69 66 69 65 64 20 62 79 20 61 20 64 61 74  ntified by a dat
16b60 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f  abase name, a do
16b70 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  t, then the tabl
16b80 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a  e name: ID.ID..*
16b90 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70  *.** The jointyp
16ba0 65 20 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f  e starts out sho
16bb0 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79  wing the join ty
16bc0 70 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 63  pe between the c
16bd0 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20  urrent table.** 
16be0 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61 62  and the next tab
16bf0 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20  le on the list. 
16c00 20 54 68 65 20 70 61 72 73 65 72 20 62 75 69 6c   The parser buil
16c10 64 73 20 74 68 65 20 6c 69 73 74 20 74 68 69 73  ds the list this
16c20 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c   way..** But sql
16c30 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74  ite3SrcListShift
16c40 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72  JoinType() later
16c50 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e   shifts the join
16c60 74 79 70 65 73 20 73 6f 20 74 68 61 74 20 65 61  types so that ea
16c70 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65  ch.** jointype e
16c80 78 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69  xpresses the joi
16c90 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 61  n between the ta
16ca0 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76  ble and the prev
16cb0 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  ious table..**.*
16cc0 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64  * In the colUsed
16cd0 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68   field, the high
16ce0 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69 74 20  -order bit (bit 
16cf0 36 33 29 20 69 73 20 73 65 74 20 69 66 20 74 68  63) is set if th
16d00 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61  e table.** conta
16d10 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33  ins more than 63
16d20 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65   columns and the
16d30 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20   64-th or later 
16d40 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a  column is used..
16d50 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73  */.struct SrcLis
16d60 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20  t {.  int nSrc; 
16d70 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16d80 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75   of tables or su
16d90 62 71 75 65 72 69 65 73 20 69 6e 20 74 68 65 20  bqueries in the 
16da0 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
16db0 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20   u32 nAlloc;    
16dc0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
16dd0 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64  ntries allocated
16de0 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f   in a[] below */
16df0 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c 69 73  .  struct SrcLis
16e00 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53 63 68  t_item {.    Sch
16e10 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f  ema *pSchema;  /
16e20 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68 69 63  * Schema to whic
16e30 68 20 74 68 69 73 20 69 74 65 6d 20 69 73 20 66  h this item is f
16e40 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72  ixed */.    char
16e50 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a   *zDatabase;  /*
16e60 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73   Name of databas
16e70 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74  e holding this t
16e80 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72  able */.    char
16e90 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a   *zName;      /*
16ea0 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   Name of the tab
16eb0 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  le */.    char *
16ec0 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54  zAlias;     /* T
16ed0 68 65 20 22 42 22 20 70 61 72 74 20 6f 66 20 61  he "B" part of a
16ee0 20 22 41 20 41 53 20 42 22 20 70 68 72 61 73 65   "A AS B" phrase
16ef0 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20  .  zName is the 
16f00 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  "A" */.    Table
16f10 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20   *pTab;      /* 
16f20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72  An SQL table cor
16f30 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e  responding to zN
16f40 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  ame */.    Selec
16f50 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20  t *pSelect;  /* 
16f60 41 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  A SELECT stateme
16f70 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65  nt used in place
16f80 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65   of a table name
16f90 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72   */.    int addr
16fa0 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64  FillSub;  /* Add
16fb0 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75 74 69  ress of subrouti
16fc0 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74 20 61  ne to manifest a
16fd0 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20 20 20   subquery */.   
16fe0 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20   int regReturn; 
16ff0 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
17000 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20 61 64  olding return ad
17010 64 72 65 73 73 20 6f 66 20 61 64 64 72 46 69 6c  dress of addrFil
17020 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20  lSub */.    int 
17030 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a  regResult;    /*
17040 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69   Registers holdi
17050 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20  ng results of a 
17060 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20  co-routine */.  
17070 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20    u8 jointype;  
17080 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a      /* Type of j
17090 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73  oin between this
170a0 20 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72   able and the pr
170b0 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 75 6e  evious */.    un
170c0 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65  signed notIndexe
170d0 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65  d :1;    /* True
170e0 20 69 66 20 74 68 65 72 65 20 69 73 20 61 20 4e   if there is a N
170f0 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73  OT INDEXED claus
17100 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  e */.    unsigne
17110 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a  d isCorrelated :
17120 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73  1;  /* True if s
17130 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72  ub-query is corr
17140 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 75 6e  elated */.    un
17150 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74  signed viaCorout
17160 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c  ine :1;  /* Impl
17170 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d  emented as a co-
17180 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 75  routine */.    u
17190 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75 72 73  nsigned isRecurs
171a0 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75  ive :1;   /* Tru
171b0 65 20 66 6f 72 20 72 65 63 75 72 73 69 76 65 20  e for recursive 
171c0 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57 49 54  reference in WIT
171d0 48 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  H */.#ifndef SQL
171e0 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
171f0 0a 20 20 20 20 75 38 20 69 53 65 6c 65 63 74 49  .    u8 iSelectI
17200 64 3b 20 20 20 20 20 2f 2a 20 49 66 20 70 53 65  d;     /* If pSe
17210 6c 65 63 74 21 3d 30 2c 20 74 68 65 20 69 64 20  lect!=0, the id 
17220 6f 66 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63  of the sub-selec
17230 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64  t in EQP */.#end
17240 69 66 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73  if.    int iCurs
17250 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  or;      /* The 
17260 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62  VDBE cursor numb
17270 65 72 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  er used to acces
17280 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  s this table */.
17290 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20      Expr *pOn;  
172a0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20        /* The ON 
172b0 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
172c0 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a   */.    IdList *
172d0 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65  pUsing;   /* The
172e0 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66   USING clause of
172f0 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42   a join */.    B
17300 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20  itmask colUsed; 
17310 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29   /* Bit N (1<<N)
17320 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e   set if column N
17330 20 6f 66 20 70 54 61 62 20 69 73 20 75 73 65 64   of pTab is used
17340 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 49   */.    char *zI
17350 6e 64 65 78 3b 20 20 20 20 20 2f 2a 20 49 64 65  ndex;     /* Ide
17360 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e  ntifier from "IN
17370 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78  DEXED BY <zIndex
17380 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  >" clause */.   
17390 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20   Index *pIndex; 
173a0 20 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75     /* Index stru
173b0 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64  cture correspond
173c0 69 6e 67 20 74 6f 20 7a 49 6e 64 65 78 2c 20 69  ing to zIndex, i
173d0 66 20 61 6e 79 20 2a 2f 0a 20 20 7d 20 61 5b 31  f any */.  } a[1
173e0 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ];             /
173f0 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * One entry for 
17400 65 61 63 68 20 69 64 65 6e 74 69 66 69 65 72 20  each identifier 
17410 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d  on the list */.}
17420 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74  ;../*.** Permitt
17430 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65  ed values of the
17440 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74   SrcList.a.joint
17450 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65  ype field.*/.#de
17460 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20  fine JT_INNER   
17470 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41    0x0001    /* A
17480 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72  ny kind of inner
17490 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a   or cross join *
174a0 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f  /.#define JT_CRO
174b0 53 53 20 20 20 20 20 30 78 30 30 30 32 20 20 20  SS     0x0002   
174c0 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65   /* Explicit use
174d0 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65   of the CROSS ke
174e0 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65  yword */.#define
174f0 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78   JT_NATURAL   0x
17500 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20  0004    /* True 
17510 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20  for a "natural" 
17520 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
17530 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30  JT_LEFT      0x0
17540 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f  008    /* Left o
17550 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  uter join */.#de
17560 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20  fine JT_RIGHT   
17570 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52    0x0010    /* R
17580 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20  ight outer join 
17590 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55  */.#define JT_OU
175a0 54 45 52 20 20 20 20 20 30 78 30 30 32 30 20 20  TER     0x0020  
175b0 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22    /* The "OUTER"
175c0 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65 73   keyword is pres
175d0 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  ent */.#define J
175e0 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78 30 30  T_ERROR     0x00
175f0 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e  40    /* unknown
17600 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20   or unsupported 
17610 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f  join type */.../
17620 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f  *.** Flags appro
17630 70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 77  priate for the w
17640 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65  ctrlFlags parame
17650 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68  ter of sqlite3Wh
17660 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e  ereBegin().** an
17670 64 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e  d the WhereInfo.
17680 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65  wctrlFlags membe
17690 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  r..*/.#define WH
176a0 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d  ERE_ORDERBY_NORM
176b0 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e  AL   0x0000 /* N
176c0 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  o-op */.#define 
176d0 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49  WHERE_ORDERBY_MI
176e0 4e 20 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a  N      0x0001 /*
176f0 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73   ORDER BY proces
17700 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66  sing for min() f
17710 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  unc */.#define W
17720 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58  HERE_ORDERBY_MAX
17730 20 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20        0x0002 /* 
17740 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73  ORDER BY process
17750 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75  ing for max() fu
17760 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nc */.#define WH
17770 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49  ERE_ONEPASS_DESI
17780 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57  RED  0x0004 /* W
17790 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61  ant to do one-pa
177a0 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45  ss UPDATE/DELETE
177b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
177c0 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20  E_DUPLICATES_OK 
177d0 20 20 20 30 78 30 30 30 38 20 2f 2a 20 4f 6b 20     0x0008 /* Ok 
177e0 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20  to return a row 
177f0 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a  more than once *
17800 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
17810 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53 45 20  OMIT_OPEN_CLOSE 
17820 20 30 78 30 30 31 30 20 2f 2a 20 54 61 62 6c 65   0x0010 /* Table
17830 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c 72   cursors are alr
17840 65 61 64 79 20 6f 70 65 6e 20 2a 2f 0a 23 64 65  eady open */.#de
17850 66 69 6e 65 20 57 48 45 52 45 5f 46 4f 52 43 45  fine WHERE_FORCE
17860 5f 54 41 42 4c 45 20 20 20 20 20 20 30 78 30 30  _TABLE      0x00
17870 32 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 75 73 65  20 /* Do not use
17880 20 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79 20 73   an index-only s
17890 65 61 72 63 68 20 2a 2f 0a 23 64 65 66 69 6e 65  earch */.#define
178a0 20 57 48 45 52 45 5f 4f 4e 45 54 41 42 4c 45 5f   WHERE_ONETABLE_
178b0 4f 4e 4c 59 20 20 20 20 30 78 30 30 34 30 20 2f  ONLY    0x0040 /
178c0 2a 20 4f 6e 6c 79 20 63 6f 64 65 20 74 68 65 20  * Only code the 
178d0 31 73 74 20 74 61 62 6c 65 20 69 6e 20 70 54 61  1st table in pTa
178e0 62 4c 69 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65  bList */.#define
178f0 20 57 48 45 52 45 5f 4e 4f 5f 41 55 54 4f 49 4e   WHERE_NO_AUTOIN
17900 44 45 58 20 20 20 20 20 30 78 30 30 38 30 20 2f  DEX     0x0080 /
17910 2a 20 44 69 73 61 6c 6c 6f 77 20 61 75 74 6f 6d  * Disallow autom
17920 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a  atic indexes */.
17930 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52  #define WHERE_GR
17940 4f 55 50 42 59 20 20 20 20 20 20 20 20 20 20 30  OUPBY          0
17950 78 30 31 30 30 20 2f 2a 20 70 4f 72 64 65 72 42  x0100 /* pOrderB
17960 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52  y is really a GR
17970 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e  OUP BY */.#defin
17980 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
17990 42 59 20 20 20 20 20 20 20 30 78 30 32 30 30 20  BY       0x0200 
179a0 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20 72  /* pOrderby is r
179b0 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54  eally a DISTINCT
179c0 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69   clause */.#defi
179d0 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49  ne WHERE_WANT_DI
179e0 53 54 49 4e 43 54 20 20 20 20 30 78 30 34 30 30  STINCT    0x0400
179f0 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e   /* All output n
17a00 65 65 64 73 20 74 6f 20 62 65 20 64 69 73 74 69  eeds to be disti
17a10 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  nct */.#define W
17a20 48 45 52 45 5f 53 4f 52 54 42 59 47 52 4f 55 50  HERE_SORTBYGROUP
17a30 20 20 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20        0x0800 /* 
17a40 53 75 70 70 6f 72 74 20 73 71 6c 69 74 65 33 57  Support sqlite3W
17a50 68 65 72 65 49 73 53 6f 72 74 65 64 28 29 20 2a  hereIsSorted() *
17a60 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
17a70 52 45 4f 50 45 4e 5f 49 44 58 20 20 20 20 20 20  REOPEN_IDX      
17a80 20 30 78 31 30 30 30 20 2f 2a 20 54 72 79 20 74   0x1000 /* Try t
17a90 6f 20 75 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49  o use OP_ReopenI
17aa0 64 78 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  dx */../* Allowe
17ab0 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20  d return values 
17ac0 66 72 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72  from sqlite3Wher
17ad0 65 49 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f  eIsDistinct().*/
17ae0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
17af0 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20  ISTINCT_NOOP    
17b00 20 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54    0  /* DISTINCT
17b10 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65   keyword not use
17b20 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  d */.#define WHE
17b30 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51  RE_DISTINCT_UNIQ
17b40 55 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64  UE    1  /* No d
17b50 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65  uplicates */.#de
17b60 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
17b70 4e 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20  NCT_ORDERED   2 
17b80 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74   /* All duplicat
17b90 65 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20  es are adjacent 
17ba0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
17bb0 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45  _DISTINCT_UNORDE
17bc0 52 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63  RED 3  /* Duplic
17bd0 61 74 65 73 20 61 72 65 20 73 63 61 74 74 65 72  ates are scatter
17be0 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e  ed */../*.** A N
17bf0 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e  ameContext defin
17c00 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20  es a context in 
17c10 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65  which to resolve
17c20 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d   table and colum
17c30 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65  n.** names.  The
17c40 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74   context consist
17c50 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74  s of a list of t
17c60 61 62 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c  ables (the pSrcL
17c70 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a  ist) field and.*
17c80 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65  * a list of name
17c90 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45  d expression (pE
17ca0 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65  List).  The name
17cb0 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73  d expression lis
17cc0 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c  t may.** be NULL
17cd0 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f 72 72  .  The pSrc corr
17ce0 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46  esponds to the F
17cf0 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ROM clause of a 
17d00 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20  SELECT or.** to 
17d10 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
17d20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49  operated on by I
17d30 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f  NSERT, UPDATE, o
17d40 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a  r DELETE.  The.*
17d50 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70  * pEList corresp
17d60 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73 75  onds to the resu
17d70 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45  lt set of a SELE
17d80 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66  CT and is NULL f
17d90 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74  or.** other stat
17da0 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61  ements..**.** Na
17db0 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62  meContexts can b
17dc0 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20  e nested.  When 
17dd0 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c  resolving names,
17de0 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 20   the inner-most 
17df0 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73  .** context is s
17e00 65 61 72 63 68 65 64 20 66 69 72 73 74 2e 20 20  earched first.  
17e10 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66  If no match is f
17e20 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f  ound, the next o
17e30 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20  uter.** context 
17e40 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20  is checked.  If 
17e50 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e  there is still n
17e60 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78  o match, the nex
17e70 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20  t context.** is 
17e80 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70  checked.  This p
17e90 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73  rocess continues
17ea0 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20   until either a 
17eb0 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a  match is found.*
17ec0 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74  * or all context
17ed0 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68  s are check.  Wh
17ee0 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f  en a match is fo
17ef0 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65  und, the nRef me
17f00 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63  mber of.** the c
17f10 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e  ontext containin
17f20 67 20 74 68 65 20 6d 61 74 63 68 20 69 73 20 69  g the match is i
17f30 6e 63 72 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a  ncremented. .**.
17f40 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65 72 79  ** Each subquery
17f50 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65   gets a new Name
17f60 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e  Context.  The pN
17f70 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73  ext field points
17f80 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43   to the.** NameC
17f90 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70 61  ontext in the pa
17fa0 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75  rent query.  Thu
17fb0 73 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66  s the process of
17fc0 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a   scanning the.**
17fd0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73   NameContext lis
17fe0 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
17ff0 20 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75   searching throu
18000 67 68 20 73 75 63 63 65 73 73 69 76 65 6c 79 20  gh successively 
18010 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72  outer.** subquer
18020 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20  ies looking for 
18030 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75  a match..*/.stru
18040 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b  ct NameContext {
18050 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
18060 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70  ;       /* The p
18070 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69  arser */.  SrcLi
18080 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20  st *pSrcList;   
18090 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74  /* One or more t
180a0 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65  ables used to re
180b0 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20  solve names */. 
180c0 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
180d0 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61  t;    /* Optiona
180e0 6c 20 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74  l list of result
180f0 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a  -set columns */.
18100 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49    AggInfo *pAggI
18110 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d  nfo;   /* Inform
18120 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72  ation about aggr
18130 65 67 61 74 65 73 20 61 74 20 74 68 69 73 20 6c  egates at this l
18140 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f  evel */.  NameCo
18150 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f  ntext *pNext;  /
18160 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d  * Next outer nam
18170 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c  e context.  NULL
18180 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a   for outermost *
18190 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
181a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
181b0 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f  er of names reso
181c0 6c 76 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e  lved by this con
181d0 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  text */.  int nE
181e0 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
181f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
18200 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77  rs encountered w
18210 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e  hile resolving n
18220 61 6d 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63  ames */.  u16 nc
18230 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f  Flags;         /
18240 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e  * Zero or more N
18250 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65  C_* flags define
18260 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f  d below */.};../
18270 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
18280 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65  ues for the Name
18290 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73  Context, ncFlags
182a0 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 4e 6f   field..**.** No
182b0 74 65 3a 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67  te:  NC_MinMaxAg
182c0 67 20 6d 75 73 74 20 68 61 76 65 20 74 68 65 20  g must have the 
182d0 73 61 6d 65 20 76 61 6c 75 65 20 61 73 20 53 46  same value as SF
182e0 5f 4d 69 6e 4d 61 78 41 67 67 20 61 6e 64 0a 2a  _MinMaxAgg and.*
182f0 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49  * SQLITE_FUNC_MI
18300 4e 4d 41 58 2e 0a 2a 2a 20 0a 2a 2f 0a 23 64 65  NMAX..** .*/.#de
18310 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67  fine NC_AllowAgg
18320 20 20 30 78 30 30 30 31 20 20 2f 2a 20 41 67 67    0x0001  /* Agg
18330 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
18340 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72   are allowed her
18350 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  e */.#define NC_
18360 48 61 73 41 67 67 20 20 20 20 30 78 30 30 30 32  HasAgg    0x0002
18370 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65    /* One or more
18380 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
18390 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65  ions seen */.#de
183a0 66 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20  fine NC_IsCheck 
183b0 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75    0x0004  /* Tru
183c0 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e  e if resolving n
183d0 61 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20  ames in a CHECK 
183e0 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64  constraint */.#d
183f0 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75  efine NC_InAggFu
18400 6e 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72  nc 0x0008  /* Tr
18410 75 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20  ue if analyzing 
18420 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20  arguments to an 
18430 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  agg func */.#def
18440 69 6e 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20  ine NC_PartIdx  
18450 20 30 78 30 30 31 30 20 20 2f 2a 20 54 72 75 65   0x0010  /* True
18460 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20   if resolving a 
18470 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48  partial index WH
18480 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  ERE */.#define N
18490 43 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30  C_MinMaxAgg 0x10
184a0 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61  00  /* min/max a
184b0 67 67 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20  ggregates seen. 
184c0 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20   See note above 
184d0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
184e0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
184f0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
18500 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e   contains all in
18510 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65  formation.** nee
18520 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20  ded to generate 
18530 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c  code for a singl
18540 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
18550 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74  nt..**.** nLimit
18560 20 69 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66   is set to -1 if
18570 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d   there is no LIM
18580 49 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66  IT clause.  nOff
18590 73 65 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e  set is set to 0.
185a0 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73 20  .** If there is 
185b0 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20  a LIMIT clause, 
185c0 74 68 65 20 70 61 72 73 65 72 20 73 65 74 73 20  the parser sets 
185d0 6e 4c 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61  nLimit to the va
185e0 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69  lue of the.** li
185f0 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20  mit and nOffset 
18600 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
18610 74 68 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30  the offset (or 0
18620 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74   if there is not
18630 0a 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75  .** offset).  Bu
18640 74 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d  t later on, nLim
18650 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62  it and nOffset b
18660 65 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79  ecome the memory
18670 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e   locations.** in
18680 20 74 68 65 20 56 44 42 45 20 74 68 61 74 20 72   the VDBE that r
18690 65 63 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20  ecord the limit 
186a0 61 6e 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74  and offset count
186b0 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f  ers..**.** addrO
186c0 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65  penEphm[] entrie
186d0 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64  s contain the ad
186e0 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e  dress of OP_Open
186f0 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65  Ephemeral opcode
18700 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72  s..** These addr
18710 65 73 73 65 73 20 6d 75 73 74 20 62 65 20 73 74  esses must be st
18720 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77 65 20  ored so that we 
18730 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20  can go back and 
18740 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50  fill in.** the P
18750 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32  4_KEYINFO and P2
18760 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65   parameters late
18770 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65 20  r.  Neither the 
18780 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74  KeyInfo nor.** t
18790 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
187a0 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62  umns in P2 can b
187b0 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68  e computed at th
187c0 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61  e same time.** a
187d0 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68  s the OP_OpenEph
187e0 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  m instruction is
187f0 20 63 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e   coded because n
18800 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66  ot.** enough inf
18810 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
18820 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72  he compound quer
18830 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68  y is known at th
18840 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65  at point..** The
18850 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64   KeyInfo for add
18860 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64  rOpenTran[0] and
18870 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f   [1] contains co
18880 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
18890 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73  s.** for the res
188a0 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65  ult set.  The Ke
188b0 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70  yInfo for addrOp
188c0 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69  enEphm[2] contai
188d0 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20  ns collating.** 
188e0 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68  sequences for th
188f0 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
18900 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c  e..*/.struct Sel
18910 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74  ect {.  ExprList
18920 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f   *pEList;      /
18930 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20  * The fields of 
18940 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20  the result */.  
18950 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
18960 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
18970 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c  : TK_UNION TK_AL
18980 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54  L TK_INTERSECT T
18990 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 75 31  K_EXCEPT */.  u1
189a0 36 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20  6 selFlags;     
189b0 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20       /* Various 
189c0 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  SF_* values */. 
189d0 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66   int iLimit, iOf
189e0 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72  fset;   /* Memor
189f0 79 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64  y registers hold
18a00 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53  ing LIMIT & OFFS
18a10 45 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 23  ET counters */.#
18a20 69 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45  if SELECTTRACE_E
18a30 4e 41 42 4c 45 44 0a 20 20 63 68 61 72 20 7a 53  NABLED.  char zS
18a40 65 6c 4e 61 6d 65 5b 31 32 5d 3b 20 20 20 20 20  elName[12];     
18a50 2f 2a 20 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65  /* Symbolic name
18a60 20 6f 66 20 74 68 69 73 20 53 45 4c 45 43 54 20   of this SELECT 
18a70 75 73 65 20 66 6f 72 20 64 65 62 75 67 67 69 6e  use for debuggin
18a80 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  g */.#endif.  in
18a90 74 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32  t addrOpenEphm[2
18aa0 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45  ];   /* OP_OpenE
18ab0 70 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c  phem opcodes rel
18ac0 61 74 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c  ated to this sel
18ad0 65 63 74 20 2a 2f 0a 20 20 75 36 34 20 6e 53 65  ect */.  u64 nSe
18ae0 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 20 20 20  lectRow;        
18af0 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d  /* Estimated num
18b00 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  ber of result ro
18b10 77 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  ws */.  SrcList 
18b20 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f  *pSrc;         /
18b30 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  * The FROM claus
18b40 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  e */.  Expr *pWh
18b50 65 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ere;          /*
18b60 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
18b70 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
18b80 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a  *pGroupBy;    /*
18b90 20 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c   The GROUP BY cl
18ba0 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ause */.  Expr *
18bb0 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20  pHaving;        
18bc0 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63   /* The HAVING c
18bd0 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
18be0 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20  ist *pOrderBy;  
18bf0 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42    /* The ORDER B
18c00 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65  Y clause */.  Se
18c10 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20  lect *pPrior;   
18c20 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65       /* Prior se
18c30 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  lect in a compou
18c40 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d  nd select statem
18c50 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  ent */.  Select 
18c60 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
18c70 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74  /* Next select t
18c80 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20  o the left in a 
18c90 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78  compound */.  Ex
18ca0 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20  pr *pLimit;     
18cb0 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78       /* LIMIT ex
18cc0 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d  pression. NULL m
18cd0 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a  eans not used. *
18ce0 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65  /.  Expr *pOffse
18cf0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46  t;         /* OF
18d00 46 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e  FSET expression.
18d10 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20   NULL means not 
18d20 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20  used. */.  With 
18d30 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20  *pWith;         
18d40 20 20 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65    /* WITH clause
18d50 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 69   attached to thi
18d60 73 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c  s select. Or NUL
18d70 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  L. */.};../*.** 
18d80 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
18d90 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61  or Select.selFla
18da0 67 73 2e 20 20 54 68 65 20 22 53 46 22 20 70 72  gs.  The "SF" pr
18db0 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a  efix stands for.
18dc0 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22  ** "Select Flag"
18dd0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  ..*/.#define SF_
18de0 44 69 73 74 69 6e 63 74 20 20 20 20 20 20 20 20  Distinct        
18df0 30 78 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75  0x0001  /* Outpu
18e00 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54  t should be DIST
18e10 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  INCT */.#define 
18e20 53 46 5f 41 6c 6c 20 20 20 20 20 20 20 20 20 20  SF_All          
18e30 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 6e     0x0002  /* In
18e40 63 6c 75 64 65 73 20 74 68 65 20 41 4c 4c 20 6b  cludes the ALL k
18e50 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e  eyword */.#defin
18e60 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20  e SF_Resolved   
18e70 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
18e80 49 64 65 6e 74 69 66 69 65 72 73 20 68 61 76 65  Identifiers have
18e90 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a   been resolved *
18ea0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67  /.#define SF_Agg
18eb0 72 65 67 61 74 65 20 20 20 20 20 20 20 30 78 30  regate       0x0
18ec0 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  008  /* Contains
18ed0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
18ee0 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
18ef0 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c  SF_UsesEphemeral
18f00 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20 55 73     0x0010  /* Us
18f10 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d  es the OpenEphem
18f20 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23  eral opcode */.#
18f30 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64  define SF_Expand
18f40 65 64 20 20 20 20 20 20 20 20 30 78 30 30 32 30  ed        0x0020
18f50 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65    /* sqlite3Sele
18f60 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65  ctExpand() calle
18f70 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65  d on this */.#de
18f80 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49  fine SF_HasTypeI
18f90 6e 66 6f 20 20 20 20 20 30 78 30 30 34 30 20 20  nfo     0x0040  
18fa0 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69  /* FROM subqueri
18fb0 65 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65  es have Table me
18fc0 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e  tadata */.#defin
18fd0 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20  e SF_Compound   
18fe0 20 20 20 20 20 30 78 30 30 38 30 20 20 2f 2a 20       0x0080  /* 
18ff0 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75  Part of a compou
19000 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65 66  nd query */.#def
19010 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20  ine SF_Values   
19020 20 20 20 20 20 20 20 30 78 30 31 30 30 20 20 2f         0x0100  /
19030 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72  * Synthesized fr
19040 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65  om VALUES clause
19050 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
19060 75 6c 74 69 56 61 6c 75 65 20 20 20 20 20 20 30  ultiValue      0
19070 78 30 32 30 30 20 20 2f 2a 20 53 69 6e 67 6c 65  x0200  /* Single
19080 20 56 41 4c 55 45 53 20 74 65 72 6d 20 77 69 74   VALUES term wit
19090 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  h multiple rows 
190a0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65  */.#define SF_Ne
190b0 73 74 65 64 46 72 6f 6d 20 20 20 20 20 20 30 78  stedFrom      0x
190c0 30 34 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66  0400  /* Part of
190d0 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64   a parenthesized
190e0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
190f0 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 79 62 65  #define SF_Maybe
19100 43 6f 6e 76 65 72 74 20 20 20 20 30 78 30 38 30  Convert    0x080
19110 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65  0  /* Need conve
19120 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74  rtCompoundSelect
19130 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a  ToSubquery() */.
19140 23 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61  #define SF_MinMa
19150 78 41 67 67 20 20 20 20 20 20 20 30 78 31 30 30  xAgg       0x100
19160 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  0  /* Aggregate 
19170 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29  containing min()
19180 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64 65   or max() */.#de
19190 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76  fine SF_Recursiv
191a0 65 20 20 20 20 20 20 20 30 78 32 30 30 30 20 20  e       0x2000  
191b0 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69 76 65  /* The recursive
191c0 20 70 61 72 74 20 6f 66 20 61 20 72 65 63 75 72   part of a recur
191d0 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66  sive CTE */.#def
191e0 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74 65 64  ine SF_Converted
191f0 20 20 20 20 20 20 20 30 78 34 30 30 30 20 20 2f         0x4000  /
19200 2a 20 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70  * By convertComp
19210 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
19220 75 65 72 79 28 29 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  uery() */.../*.*
19230 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66  * The results of
19240 20 61 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65   a SELECT can be
19250 20 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20   distributed in 
19260 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73  several ways, as
19270 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f   defined.** by o
19280 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ne of the follow
19290 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65  ing macros.  The
192a0 20 22 53 52 54 22 20 70 72 65 66 69 78 20 6d 65   "SRT" prefix me
192b0 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73 75  ans "SELECT Resu
192c0 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a  lt.** Type"..**.
192d0 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e  **     SRT_Union
192e0 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
192f0 75 6c 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e  ults as a key in
19300 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64   a temporary ind
19310 65 78 20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ex .**          
19320 20 20 20 20 20 20 20 20 20 20 20 69 64 65 6e 74             ident
19330 69 66 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e  ified by pDest->
19340 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20  iSDParm..**.**  
19350 20 20 20 53 52 54 5f 45 78 63 65 70 74 20 20 20     SRT_Except   
19360 20 20 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74     Remove result
19370 73 20 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f  s from the tempo
19380 72 61 72 79 20 69 6e 64 65 78 20 70 44 65 73 74  rary index pDest
19390 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a  ->iSDParm..**.**
193a0 20 20 20 20 20 53 52 54 5f 45 78 69 73 74 73 20       SRT_Exists 
193b0 20 20 20 20 20 53 74 6f 72 65 20 61 20 31 20 69       Store a 1 i
193c0 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44  n memory cell pD
193d0 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20  est->iSDParm if 
193e0 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20  the result.**   
193f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19400 20 20 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70    set is not emp
19410 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  ty..**.**     SR
19420 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 54 68  T_Discard     Th
19430 72 6f 77 20 74 68 65 20 72 65 73 75 6c 74 73 20  row the results 
19440 61 77 61 79 2e 20 20 54 68 69 73 20 69 73 20 75  away.  This is u
19450 73 65 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a  sed by SELECT.**
19460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19470 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20       statements 
19480 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20  within triggers 
19490 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f  whose only purpo
194a0 73 65 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20  se is.**        
194b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
194c0 20 73 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66   side-effects of
194d0 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
194e0 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f  * All of the abo
194f0 76 65 20 61 72 65 20 66 72 65 65 20 74 6f 20 69  ve are free to i
19500 67 6e 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45  gnore their ORDE
19510 52 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f  R BY clause. Tho
19520 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f  se that.** follo
19530 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65  w must honor the
19540 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
19550 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
19560 4f 75 74 70 75 74 20 20 20 20 20 20 47 65 6e 65  Output      Gene
19570 72 61 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75  rate a row of ou
19580 74 70 75 74 20 28 75 73 69 6e 67 20 74 68 65 20  tput (using the 
19590 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20  OP_ResultRow.** 
195a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195b0 20 20 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20      opcode) for 
195c0 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20  each row in the 
195d0 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a  result set..**.*
195e0 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20  *     SRT_Mem   
195f0 20 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64        Only valid
19600 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69   if the result i
19610 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  s a single colum
19620 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  n..**           
19630 20 20 20 20 20 20 20 20 20 20 53 74 6f 72 65 20            Store 
19640 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e  the first column
19650 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 72 65   of the first re
19660 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20  sult row.**     
19670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19680 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73  in register pDes
19690 74 2d 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20  t->iSDParm then 
196a0 61 62 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74  abandon the rest
196b0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
196c0 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 71          of the q
196d0 75 65 72 79 2e 20 20 54 68 69 73 20 64 65 73 74  uery.  This dest
196e0 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20  ination implies 
196f0 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a  "LIMIT 1"..**.**
19700 20 20 20 20 20 53 52 54 5f 53 65 74 20 20 20 20       SRT_Set    
19710 20 20 20 20 20 54 68 65 20 72 65 73 75 6c 74 20       The result 
19720 6d 75 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65  must be a single
19730 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20   column.  Store 
19740 65 61 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20  each.**         
19750 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 20              row 
19760 6f 66 20 72 65 73 75 6c 74 20 61 73 20 74 68 65  of result as the
19770 20 6b 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44   key in table pD
19780 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 20 0a 2a  est->iSDParm. .*
19790 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
197a0 20 20 20 20 20 20 41 70 70 6c 79 20 74 68 65 20        Apply the 
197b0 61 66 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e  affinity pDest->
197c0 61 66 66 53 64 73 74 20 62 65 66 6f 72 65 20 73  affSdst before s
197d0 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20  toring.**       
197e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
197f0 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20  sults.  Used to 
19800 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53  implement "IN (S
19810 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a  ELECT ...)"..**.
19820 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d  **     SRT_Ephem
19830 54 61 62 20 20 20 20 43 72 65 61 74 65 20 61 6e  Tab    Create an
19840 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
19850 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
19860 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20  and store.**    
19870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19880 20 74 68 65 20 72 65 73 75 6c 74 20 74 68 65 72   the result ther
19890 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20 69 73  e. The cursor is
198a0 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72   left open after
198b0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
198c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e          returnin
198d0 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65  g.  This is like
198e0 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70   SRT_Table excep
198f0 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20  t that.**       
19900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
19910 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75  is destination u
19920 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ses OP_OpenEphem
19930 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a  eral to create.*
19940 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19950 20 20 20 20 20 20 74 68 65 20 74 61 62 6c 65 20        the table 
19960 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  first..**.**    
19970 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20   SRT_Coroutine  
19980 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72   Generate a co-r
19990 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65 74 75  outine that retu
199a0 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66  rns a new row of
199b0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
199c0 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 20          results 
199d0 65 61 63 68 20 74 69 6d 65 20 69 74 20 69 73 20  each time it is 
199e0 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e  invoked.  The en
199f0 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20  try point.**    
19a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a10 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69   of the co-routi
19a20 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ne is stored in 
19a30 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e  register pDest->
19a40 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20  iSDParm.**      
19a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
19a60 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f  nd the result ro
19a70 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70  w is stored in p
19a80 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69  Dest->nDest regi
19a90 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20  sters.**        
19aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
19ab0 72 74 69 6e 67 20 77 69 74 68 20 70 44 65 73 74  rting with pDest
19ac0 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20  ->iSdst..**.**  
19ad0 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20     SRT_Table    
19ae0 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
19af0 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61   in temporary ta
19b00 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
19b10 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46  rm..**     SRT_F
19b20 69 66 6f 20 20 20 20 20 20 20 20 54 68 69 73 20  ifo        This 
19b30 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65  is like SRT_Ephe
19b40 6d 54 61 62 20 65 78 63 65 70 74 20 74 68 61 74  mTab except that
19b50 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20   the table.**   
19b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b70 20 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20    is assumed to 
19b80 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e  already be open.
19b90 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a    SRT_Fifo has.*
19ba0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19bb0 20 20 20 20 20 20 74 68 65 20 61 64 64 69 74 69        the additi
19bc0 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66  onal property of
19bd0 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69   being able to i
19be0 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20  gnore.**        
19bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
19c00 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
19c10 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
19c20 44 69 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72  DistFifo    Stor
19c30 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74  e results in a t
19c40 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
19c50 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
19c60 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
19c70 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75        But also u
19c80 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  se temporary tab
19c90 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
19ca0 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20  m+1 as.**       
19cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 20                a 
19cc0 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72  record of all pr
19cd0 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20  ior results and 
19ce0 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69  ignore any dupli
19cf0 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  cate.**         
19d00 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 73              rows
19d10 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20  .  Name means:  
19d20 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e  "Distinct Fifo".
19d30 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51  .**.**     SRT_Q
19d40 75 65 75 65 20 20 20 20 20 20 20 53 74 6f 72 65  ueue       Store
19d50 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f   results in prio
19d60 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74  rity queue pDest
19d70 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c  ->iSDParm (reall
19d80 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  y.**            
19d90 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65           an inde
19da0 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65  x).  Append a se
19db0 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f  quence number so
19dc0 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65   that all entrie
19dd0 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
19de0 20 20 20 20 20 20 20 20 20 61 72 65 20 64 69 73           are dis
19df0 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  tinct..**.**    
19e00 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20   SRT_DistQueue  
19e10 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
19e20 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65  n priority queue
19e30 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
19e40 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20  only if.**      
19e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
19e60 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68  he same record h
19e70 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74  as never been st
19e80 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68  ored before.  Th
19e90 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
19ea0 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 20 61           index a
19eb0 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  t pDest->iSDParm
19ec0 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f  +1 hold all prio
19ed0 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65  r stores..*/.#de
19ee0 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20  fine SRT_Union  
19ef0 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72        1  /* Stor
19f00 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73  e result as keys
19f10 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a   in an index */.
19f20 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65  #define SRT_Exce
19f30 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52  pt       2  /* R
19f40 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f  emove result fro
19f50 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20  m a UNION index 
19f60 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
19f70 78 69 73 74 73 20 20 20 20 20 20 20 33 20 20 2f  xists       3  /
19f80 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74 68 65  * Store 1 if the
19f90 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65   result is not e
19fa0 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
19fb0 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20  SRT_Discard     
19fc0 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61   4  /* Do not sa
19fd0 76 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 61  ve the results a
19fe0 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69  nywhere */.#defi
19ff0 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20  ne SRT_Fifo     
1a000 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20      5  /* Store 
1a010 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77  result as data w
1a020 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63  ith an automatic
1a030 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e   rowid */.#defin
1a040 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20  e SRT_DistFifo  
1a050 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52     6  /* Like SR
1a060 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71  T_Fifo, but uniq
1a070 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20  ue results only 
1a080 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51  */.#define SRT_Q
1a090 75 65 75 65 20 20 20 20 20 20 20 20 37 20 20 2f  ueue        7  /
1a0a0 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
1a0b0 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64  n an queue */.#d
1a0c0 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75  efine SRT_DistQu
1a0d0 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b  eue    8  /* Lik
1a0e0 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74  e SRT_Queue, but
1a0f0 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20   unique results 
1a100 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20  only */../* The 
1a110 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
1a120 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61  is ignored for a
1a130 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20  ll of the above 
1a140 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72  */.#define Ignor
1a150 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28  ableOrderby(X) (
1a160 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f  (X->eDest)<=SRT_
1a170 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66  DistQueue)..#def
1a180 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20  ine SRT_Output  
1a190 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75       9  /* Outpu
1a1a0 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65  t each row of re
1a1b0 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sult */.#define 
1a1c0 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20  SRT_Mem         
1a1d0 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  10  /* Store res
1a1e0 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20  ult in a memory 
1a1f0 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cell */.#define 
1a200 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20  SRT_Set         
1a210 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  11  /* Store res
1a220 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20  ults as keys in 
1a230 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  an index */.#def
1a240 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62  ine SRT_EphemTab
1a250 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74      12  /* Creat
1a260 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20  e transient tab 
1a270 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53  and store like S
1a280 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66  RT_Table */.#def
1a290 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e  ine SRT_Coroutin
1a2a0 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72  e   13  /* Gener
1a2b0 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  ate a single row
1a2c0 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64   of result */.#d
1a2d0 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20  efine SRT_Table 
1a2e0 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f        14  /* Sto
1a2f0 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74  re result as dat
1a300 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61  a with an automa
1a310 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a  tic rowid */../*
1a320 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
1a330 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64  of this object d
1a340 65 73 63 72 69 62 65 73 20 77 68 65 72 65 20 74  escribes where t
1a350 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72 65 73  o put of the res
1a360 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c  ults of.** a SEL
1a370 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
1a380 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 44  /.struct SelectD
1a390 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74  est {.  u8 eDest
1a3a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1a3b0 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f  How to dispose o
1a3c0 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20  f the results.  
1a3d0 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76  On of SRT_* abov
1a3e0 65 2e 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  e. */.  char aff
1a3f0 53 64 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  Sdst;        /* 
1a400 41 66 66 69 6e 69 74 79 20 75 73 65 64 20 77 68  Affinity used wh
1a410 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65  en eDest==SRT_Se
1a420 74 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61  t */.  int iSDPa
1a430 72 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  rm;         /* A
1a440 20 70 61 72 61 6d 65 74 65 72 20 75 73 65 64 20   parameter used 
1a450 62 79 20 74 68 65 20 65 44 65 73 74 20 64 69 73  by the eDest dis
1a460 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a  posal method */.
1a470 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20    int iSdst;    
1a480 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72         /* Base r
1a490 65 67 69 73 74 65 72 20 77 68 65 72 65 20 72 65  egister where re
1a4a0 73 75 6c 74 73 20 61 72 65 20 77 72 69 74 74 65  sults are writte
1a4b0 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74  n */.  int nSdst
1a4c0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
1a4d0 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65  umber of registe
1a4e0 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a  rs allocated */.
1a4f0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64    ExprList *pOrd
1a500 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f  erBy;  /* Key co
1a510 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75  lumns for SRT_Qu
1a520 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74  eue and SRT_Dist
1a530 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  Queue */.};../*.
1a540 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67  ** During code g
1a550 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61  eneration of sta
1a560 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20  tements that do 
1a570 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54  inserts into AUT
1a580 4f 49 4e 43 52 45 4d 45 4e 54 20 0a 2a 2a 20 74  OINCREMENT .** t
1a590 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f  ables, the follo
1a5a0 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  wing information
1a5b0 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20   is attached to 
1a5c0 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f  the Table.u.auto
1a5d0 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72  Inc.p.** pointer
1a5e0 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63   of each autoinc
1a5f0 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20  rement table to 
1a600 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65  record some side
1a610 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
1a620 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65  t.** the code ge
1a630 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20  nerator needs.  
1a640 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20  We have to keep 
1a650 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e  per-table autoin
1a660 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72  crement.** infor
1a670 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69  mation in case i
1a680 6e 73 65 72 74 73 20 61 72 65 20 64 6f 77 6e 20  nserts are down 
1a690 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
1a6a0 20 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f    Triggers do no
1a6b0 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f  t.** normally co
1a6c0 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72 20 61  ordinate their a
1a6d0 63 74 69 76 69 74 69 65 73 2c 20 62 75 74 20 77  ctivities, but w
1a6e0 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f  e do need to coo
1a6f0 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c  rdinate the.** l
1a700 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e  oading and savin
1a710 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65  g of autoincreme
1a720 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  nt information..
1a730 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e  */.struct Autoin
1a740 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e  cInfo {.  Autoin
1a750 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20  cInfo *pNext;   
1a760 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f  /* Next info blo
1a770 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20  ck in a list of 
1a780 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61  them all */.  Ta
1a790 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
1a7a0 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69      /* Table thi
1a7b0 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66  s info block ref
1a7c0 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20  ers to */.  int 
1a7d0 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
1a7e0 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71    /* Index in sq
1a7f0 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64  lite3.aDb[] of d
1a800 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
1a810 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65  pTab */.  int re
1a820 67 43 74 72 3b 20 20 20 20 20 20 20 20 20 20 20  gCtr;           
1a830 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74  /* Memory regist
1a840 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72  er holding the r
1a850 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  owid counter */.
1a860 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f  };../*.** Size o
1a870 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63  f the column cac
1a880 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  he.*/.#ifndef SQ
1a890 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a  LITE_N_COLCACHE.
1a8a0 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1a8b0 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a 23 65  N_COLCACHE 10.#e
1a8c0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c  ndif../*.** At l
1a8d0 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63  east one instanc
1a8e0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1a8f0 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
1a900 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68  created for each
1a910 20 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61   .** trigger tha
1a920 74 20 6d 61 79 20 62 65 20 66 69 72 65 64 20 77  t may be fired w
1a930 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20  hile parsing an 
1a940 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f  INSERT, UPDATE o
1a950 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74  r DELETE.** stat
1a960 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20  ement. All such 
1a970 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72  objects are stor
1a980 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64  ed in the linked
1a990 20 6c 69 73 74 20 68 65 61 64 65 64 20 61 74 0a   list headed at.
1a9a0 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  ** Parse.pTrigge
1a9b0 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64  rPrg and deleted
1a9c0 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20   once statement 
1a9d0 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20  compilation has 
1a9e0 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65  been.** complete
1a9f0 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20  d..**.** A Vdbe 
1aa00 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74  sub-program that
1aa10 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20   implements the 
1aa20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c  body and WHEN cl
1aa30 61 75 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a  ause of trigger.
1aa40 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70 54  ** TriggerPrg.pT
1aa50 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67  rigger, assuming
1aa60 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f   a default ON CO
1aa70 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66  NFLICT clause of
1aa80 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f  .** TriggerPrg.o
1aa90 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64  rconf, is stored
1aaa0 20 69 6e 20 74 68 65 20 54 72 69 67 67 65 72 50   in the TriggerP
1aab0 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69  rg.pProgram vari
1aac0 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72  able..** The Par
1aad0 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c  se.pTriggerPrg l
1aae0 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69  ist never contai
1aaf0 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77  ns two entries w
1ab00 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20  ith the same.** 
1ab10 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20  values for both 
1ab20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63  pTrigger and orc
1ab30 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54  onf..**.** The T
1ab40 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61  riggerPrg.aColma
1ab50 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69  sk[0] variable i
1ab60 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20  s set to a mask 
1ab70 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73  of old.* columns
1ab80 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72  .** accessed (or
1ab90 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72   set to 0 for tr
1aba0 69 67 67 65 72 73 20 66 69 72 65 64 20 61 73 20  iggers fired as 
1abb0 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45  a result of INSE
1abc0 52 54 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  RT .** statement
1abd0 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74  s). Similarly, t
1abe0 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43  he TriggerPrg.aC
1abf0 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62  olmask[1] variab
1ac00 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20  le is set to.** 
1ac10 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20  a mask of new.* 
1ac20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20  columns used by 
1ac30 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a  the program..*/.
1ac40 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72  struct TriggerPr
1ac50 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70  g {.  Trigger *p
1ac60 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a  Trigger;      /*
1ac70 20 54 72 69 67 67 65 72 20 74 68 69 73 20 70 72   Trigger this pr
1ac80 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20  ogram was coded 
1ac90 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65  from */.  Trigge
1aca0 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20  rPrg *pNext;    
1acb0 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20    /* Next entry 
1acc0 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  in Parse.pTrigge
1acd0 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53  rPrg list */.  S
1ace0 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67  ubProgram *pProg
1acf0 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61  ram;   /* Progra
1ad00 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70  m implementing p
1ad10 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a  Trigger/orconf *
1ad20 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20  /.  int orconf; 
1ad30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
1ad40 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1ad50 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75  CT policy */.  u
1ad60 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20  32 aColmask[2]; 
1ad70 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20         /* Masks 
1ad80 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20  of old.*, new.* 
1ad90 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64  columns accessed
1ada0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
1adb0 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79  e yDbMask dataty
1adc0 70 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61  pe for the bitma
1add0 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68  sk of all attach
1ade0 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f  ed databases..*/
1adf0 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
1ae00 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79  ATTACHED>30.  ty
1ae10 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63  pedef unsigned c
1ae20 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c  har yDbMask[(SQL
1ae30 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
1ae40 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65  +9)/8];.# define
1ae50 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29   DbMaskTest(M,I)
1ae60 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d      (((M)[(I)/8]
1ae70 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29 21 3d  &(1<<((I)&7)))!=
1ae80 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  0).# define DbMa
1ae90 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 6d  skZero(M)      m
1aea0 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65  emset((M),0,size
1aeb0 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e 65 20  of(M)).# define 
1aec0 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20  DbMaskSet(M,I)  
1aed0 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28     (M)[(I)/8]|=(
1aee0 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20 64 65  1<<((I)&7)).# de
1aef0 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65  fine DbMaskAllZe
1af00 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65 33 44  ro(M)   sqlite3D
1af10 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a  bMaskAllZero(M).
1af20 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e  # define DbMaskN
1af30 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73 71 6c  onZero(M)   (sql
1af40 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ite3DbMaskAllZer
1af50 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20  o(M)==0).#else. 
1af60 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65   typedef unsigne
1af70 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23  d int yDbMask;.#
1af80 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65   define DbMaskTe
1af90 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29  st(M,I)    (((M)
1afa0 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c  &(((yDbMask)1)<<
1afb0 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69  (I)))!=0).# defi
1afc0 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29  ne DbMaskZero(M)
1afd0 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20 64 65        (M)=0.# de
1afe0 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d  fine DbMaskSet(M
1aff0 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28 28 28  ,I)     (M)|=(((
1b000 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29  yDbMask)1)<<(I))
1b010 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1b020 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29  AllZero(M)   (M)
1b030 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  ==0.# define DbM
1b040 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20  askNonZero(M)   
1b050 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f  (M)!=0.#endif../
1b060 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73  *.** An SQL pars
1b070 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63  er context.  A c
1b080 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74 72 75  opy of this stru
1b090 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20  cture is passed 
1b0a0 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70  through.** the p
1b0b0 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69  arser and down i
1b0c0 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73  nto all the pars
1b0d0 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e  er action routin
1b0e0 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  e in order to.**
1b0f0 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e   carry around in
1b100 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69  formation that i
1b110 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20  s global to the 
1b120 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a  entire parse..**
1b130 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75 72  .** The structur
1b140 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74  e is divided int
1b150 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68  o two parts.  Wh
1b160 65 6e 20 74 68 65 20 70 61 72 73 65 72 20 61 6e  en the parser an
1b170 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61  d code.** genera
1b180 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76  te call themselv
1b190 65 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20  es recursively, 
1b1a0 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20 6f  the first part o
1b1b0 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65 0a  f the structure.
1b1c0 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ** is constant b
1b1d0 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  ut the second pa
1b1e0 72 74 20 69 73 20 72 65 73 65 74 20 61 74 20 74  rt is reset at t
1b1f0 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64  he beginning and
1b200 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20   end of.** each 
1b210 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  recursion..**.**
1b220 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20   The nTableLock 
1b230 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76  and aTableLock v
1b240 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c  ariables are onl
1b250 79 20 75 73 65 64 20 69 66 20 74 68 65 20 73 68  y used if the sh
1b260 61 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a 20 66  ared-cache .** f
1b270 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65  eature is enable
1b280 64 20 28 69 66 20 73 71 6c 69 74 65 33 54 73 64  d (if sqlite3Tsd
1b290 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74  ()->useSharedDat
1b2a0 61 20 69 73 20 74 72 75 65 29 2e 20 54 68 65 79  a is true). They
1b2b0 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20   are.** used to 
1b2c0 73 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66  store the set of
1b2d0 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71   table-locks req
1b2e0 75 69 72 65 64 20 62 79 20 74 68 65 20 73 74 61  uired by the sta
1b2f0 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20  tement being.** 
1b300 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69  compiled. Functi
1b310 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  on sqlite3TableL
1b320 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f  ock() is used to
1b330 20 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20   add entries to 
1b340 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a  the.** list..*/.
1b350 73 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20  struct Parse {. 
1b360 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
1b370 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69        /* The mai
1b380 6e 20 64 61 74 61 62 61 73 65 20 73 74 72 75 63  n database struc
1b390 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ture */.  char *
1b3a0 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f  zErrMsg;       /
1b3b0 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  * An error messa
1b3c0 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56  ge */.  Vdbe *pV
1b3d0 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  dbe;         /* 
1b3e0 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78  An engine for ex
1b3f0 65 63 75 74 69 6e 67 20 64 61 74 61 62 61 73 65  ecuting database
1b400 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69   bytecode */.  i
1b410 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
1b420 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f      /* Return co
1b430 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f  de from executio
1b440 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d  n */.  u8 colNam
1b450 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54  esSet;      /* T
1b460 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c  RUE after OP_Col
1b470 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e  umnName has been
1b480 20 69 73 73 75 65 64 20 74 6f 20 70 56 64 62 65   issued to pVdbe
1b490 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63   */.  u8 checkSc
1b4a0 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61  hema;      /* Ca
1b4b0 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b  uses schema cook
1b4c0 69 65 20 63 68 65 63 6b 20 61 66 74 65 72 20 61  ie check after a
1b4d0 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20  n error */.  u8 
1b4e0 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20 20 20  nested;         
1b4f0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
1b500 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74  ested calls to t
1b510 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67  he parser/code g
1b520 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38  enerator */.  u8
1b530 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20   nTempReg;      
1b540 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1b550 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
1b560 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b  ers in aTempReg[
1b570 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74  ] */.  u8 isMult
1b580 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54  iWrite;     /* T
1b590 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74  rue if statement
1b5a0 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65   may modify/inse
1b5b0 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  rt multiple rows
1b5c0 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72   */.  u8 mayAbor
1b5d0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  t;         /* Tr
1b5e0 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20  ue if statement 
1b5f0 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f  may throw an ABO
1b600 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a  RT exception */.
1b610 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64    u8 hasCompound
1b620 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74  ;      /* Need t
1b630 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74  o invoke convert
1b640 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f  CompoundSelectTo
1b650 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20  Subquery() */.  
1b660 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72  u8 okConstFactor
1b670 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61  ;    /* OK to fa
1b680 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e  ctor out constan
1b690 74 73 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d  ts */.  int aTem
1b6a0 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f 2a 20  pReg[8];     /* 
1b6b0 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72  Holding area for
1b6c0 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
1b6d0 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ters */.  int nR
1b6e0 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f  angeReg;       /
1b6f0 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65  * Size of the te
1b700 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
1b710 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   block */.  int 
1b720 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20  iRangeReg;      
1b730 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74   /* First regist
1b740 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20  er in temporary 
1b750 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a  register block *
1b760 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
1b770 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1b780 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65  er of errors see
1b790 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b  n */.  int nTab;
1b7a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1b7b0 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75  umber of previou
1b7c0 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44  sly allocated VD
1b7d0 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20  BE cursors */.  
1b7e0 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20  int nMem;       
1b7f0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1b800 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75  f memory cells u
1b810 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  sed so far */.  
1b820 69 6e 74 20 6e 53 65 74 3b 20 20 20 20 20 20 20  int nSet;       
1b830 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1b840 66 20 73 65 74 73 20 75 73 65 64 20 73 6f 20 66  f sets used so f
1b850 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 6e 63  ar */.  int nOnc
1b860 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
1b870 4e 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f 6e 63  Number of OP_Onc
1b880 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 73  e instructions s
1b890 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
1b8a0 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20  OpAlloc;        
1b8b0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f  /* Number of slo
1b8c0 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  ts allocated for
1b8d0 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20   Vdbe.aOp[] */. 
1b8e0 20 69 6e 74 20 69 46 69 78 65 64 4f 70 3b 20 20   int iFixedOp;  
1b8f0 20 20 20 20 20 20 2f 2a 20 4e 65 76 65 72 20 62        /* Never b
1b900 61 63 6b 20 6f 75 74 20 6f 70 63 6f 64 65 73 20  ack out opcodes 
1b910 69 46 69 78 65 64 4f 70 2d 31 20 6f 72 20 65 61  iFixedOp-1 or ea
1b920 72 6c 69 65 72 20 2a 2f 0a 20 20 69 6e 74 20 63  rlier */.  int c
1b930 6b 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 20  kBase;          
1b940 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72  /* Base register
1b950 20 6f 66 20 64 61 74 61 20 64 75 72 69 6e 67 20   of data during 
1b960 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74  check constraint
1b970 73 20 2a 2f 0a 20 20 69 6e 74 20 69 50 61 72 74  s */.  int iPart
1b980 49 64 78 54 61 62 3b 20 20 20 20 20 2f 2a 20 54  IdxTab;     /* T
1b990 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  able correspondi
1b9a0 6e 67 20 74 6f 20 61 20 70 61 72 74 69 61 6c 20  ng to a partial 
1b9b0 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69  index */.  int i
1b9c0 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20  CacheLevel;     
1b9d0 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69  /* ColCache vali
1b9e0 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65  d when aColCache
1b9f0 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68  [].iLevel<=iCach
1ba00 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20  eLevel */.  int 
1ba10 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20  iCacheCnt;      
1ba20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64   /* Counter used
1ba30 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f   to generate aCo
1ba40 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c  lCache[].lru val
1ba50 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61  ues */.  int nLa
1ba60 62 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  bel;          /*
1ba70 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c   Number of label
1ba80 73 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20  s used */.  int 
1ba90 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20  *aLabel;        
1baa0 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c   /* Space to hol
1bab0 64 20 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a  d the labels */.
1bac0 20 20 73 74 72 75 63 74 20 79 43 6f 6c 43 61 63    struct yColCac
1bad0 68 65 20 7b 0a 20 20 20 20 69 6e 74 20 69 54 61  he {.    int iTa
1bae0 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ble;           /
1baf0 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72 20 6e  * Table cursor n
1bb00 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69 31 36  umber */.    i16
1bb10 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   iColumn;       
1bb20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75     /* Table colu
1bb30 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  mn number */.   
1bb40 20 75 38 20 74 65 6d 70 52 65 67 3b 20 20 20 20   u8 tempReg;    
1bb50 20 20 20 20 20 20 20 2f 2a 20 69 52 65 67 20 69         /* iReg i
1bb60 73 20 61 20 74 65 6d 70 20 72 65 67 69 73 74 65  s a temp registe
1bb70 72 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20  r that needs to 
1bb80 62 65 20 66 72 65 65 64 20 2a 2f 0a 20 20 20 20  be freed */.    
1bb90 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20  int iLevel;     
1bba0 20 20 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67        /* Nesting
1bbb0 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e   level */.    in
1bbc0 74 20 69 52 65 67 3b 20 20 20 20 20 20 20 20 20  t iReg;         
1bbd0 20 20 20 20 2f 2a 20 52 65 67 20 77 69 74 68 20      /* Reg with 
1bbe0 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
1bbf0 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f  lumn. 0 means no
1bc00 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c  ne. */.    int l
1bc10 72 75 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ru;             
1bc20 20 2f 2a 20 4c 65 61 73 74 20 72 65 63 65 6e 74   /* Least recent
1bc30 6c 79 20 75 73 65 64 20 65 6e 74 72 79 20 68 61  ly used entry ha
1bc40 73 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76  s the smallest v
1bc50 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c  alue */.  } aCol
1bc60 43 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43  Cache[SQLITE_N_C
1bc70 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e  OLCACHE];  /* On
1bc80 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  e for each colum
1bc90 6e 20 63 61 63 68 65 20 65 6e 74 72 79 20 2a 2f  n cache entry */
1bca0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f  .  ExprList *pCo
1bcb0 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74  nstExpr;/* Const
1bcc0 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ant expressions 
1bcd0 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74  */.  Token const
1bce0 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d  raintName;/* Nam
1bcf0 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61  e of the constra
1bd00 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65  int currently be
1bd10 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 20 20  ing parsed */.  
1bd20 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73  yDbMask writeMas
1bd30 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20  k;   /* Start a 
1bd40 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
1bd50 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62  n on these datab
1bd60 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73  ases */.  yDbMas
1bd70 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f  k cookieMask;  /
1bd80 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68  * Bitmask of sch
1bd90 65 6d 61 20 76 65 72 69 66 69 65 64 20 64 61 74  ema verified dat
1bda0 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20  abases */.  int 
1bdb0 63 6f 6f 6b 69 65 56 61 6c 75 65 5b 53 51 4c 49  cookieValue[SQLI
1bdc0 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b  TE_MAX_ATTACHED+
1bdd0 32 5d 3b 20 20 2f 2a 20 56 61 6c 75 65 73 20 6f  2];  /* Values o
1bde0 66 20 63 6f 6f 6b 69 65 73 20 74 6f 20 76 65 72  f cookies to ver
1bdf0 69 66 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  ify */.  int reg
1be00 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a  Rowid;        /*
1be10 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
1be20 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54  g rowid of CREAT
1be30 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f  E TABLE entry */
1be40 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20  .  int regRoot; 
1be50 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
1be60 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74  ter holding root
1be70 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72   page number for
1be80 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a   new objects */.
1be90 20 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20    int nMaxArg;  
1bea0 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72         /* Max ar
1beb0 67 73 20 70 61 73 73 65 64 20 74 6f 20 75 73 65  gs passed to use
1bec0 72 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75  r function by su
1bed0 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69 66  b-program */.#if
1bee0 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
1bef0 42 4c 45 44 0a 20 20 69 6e 74 20 6e 53 65 6c 65  BLED.  int nSele
1bf00 63 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ct;         /* N
1bf10 75 6d 62 65 72 20 6f 66 20 53 45 4c 45 43 54 20  umber of SELECT 
1bf20 73 74 61 74 65 6d 65 6e 74 73 20 73 65 65 6e 20  statements seen 
1bf30 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74  */.  int nSelect
1bf40 49 6e 64 65 6e 74 3b 20 20 20 2f 2a 20 48 6f 77  Indent;   /* How
1bf50 20 66 61 72 20 74 6f 20 69 6e 64 65 6e 74 20 53   far to indent S
1bf60 45 4c 45 43 54 54 52 41 43 45 28 29 20 6f 75 74  ELECTTRACE() out
1bf70 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  put */.#endif.#i
1bf80 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1bf90 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20  T_SHARED_CACHE. 
1bfa0 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b   int nTableLock;
1bfb0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1bfc0 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54  r of locks in aT
1bfd0 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61  ableLock */.  Ta
1bfe0 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c  bleLock *aTableL
1bff0 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64  ock; /* Required
1c000 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72   table locks for
1c010 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
1c020 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41  de */.#endif.  A
1c030 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e  utoincInfo *pAin
1c040 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  c;  /* Informati
1c050 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43  on about AUTOINC
1c060 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20  REMENT counters 
1c070 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  */..  /* Informa
1c080 74 69 6f 6e 20 75 73 65 64 20 77 68 69 6c 65 20  tion used while 
1c090 63 6f 64 69 6e 67 20 74 72 69 67 67 65 72 20 70  coding trigger p
1c0a0 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50 61  rograms. */.  Pa
1c0b0 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20  rse *pToplevel; 
1c0c0 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75     /* Parse stru
1c0d0 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70  cture for main p
1c0e0 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29  rogram (or NULL)
1c0f0 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72   */.  Table *pTr
1c100 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61  iggerTab;  /* Ta
1c110 62 6c 65 20 74 72 69 67 67 65 72 73 20 61 72 65  ble triggers are
1c120 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72   being coded for
1c130 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72   */.  int addrCr
1c140 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64  Tab;       /* Ad
1c150 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61  dress of OP_Crea
1c160 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 6f  teTable opcode o
1c170 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a  n CREATE TABLE *
1c180 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f  /.  u32 nQueryLo
1c190 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20  op;      /* Est 
1c1a0 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74  number of iterat
1c1b0 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20  ions of a query 
1c1c0 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a  (10*log2(N)) */.
1c1d0 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20    u32 oldmask;  
1c1e0 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
1c1f0 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f old.* columns 
1c200 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20  referenced */.  
1c210 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20  u32 newmask;    
1c220 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
1c230 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  new.* columns re
1c240 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38  ferenced */.  u8
1c250 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20   eTriggerOp;    
1c260 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c     /* TK_UPDATE,
1c270 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b   TK_INSERT or TK
1c280 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20  _DELETE */.  u8 
1c290 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20  eOrconf;        
1c2a0 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20    /* Default ON 
1c2b0 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20  CONFLICT policy 
1c2c0 66 6f 72 20 74 72 69 67 67 65 72 20 73 74 65 70  for trigger step
1c2d0 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c  s */.  u8 disabl
1c2e0 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54  eTriggers;  /* T
1c2f0 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74  rue to disable t
1c300 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a  riggers */..  /*
1c310 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c330 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c340 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c350 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f  *******.  ** Abo
1c360 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ve is constant b
1c370 65 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e  etween recursion
1c380 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73  s.  Below is res
1c390 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66  et before and af
1c3a0 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65  ter.  ** each re
1c3b0 63 75 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f  cursion.  The bo
1c3c0 75 6e 64 61 72 79 20 62 65 74 77 65 65 6e 20 74  undary between t
1c3d0 68 65 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73  hese two regions
1c3e0 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20   is determined. 
1c3f0 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74   ** using offset
1c400 6f 66 28 50 61 72 73 65 2c 6e 56 61 72 29 20 73  of(Parse,nVar) s
1c410 6f 20 74 68 65 20 6e 56 61 72 20 66 69 65 6c 64  o the nVar field
1c420 20 6d 75 73 74 20 62 65 20 74 68 65 20 66 69 72   must be the fir
1c430 73 74 20 66 69 65 6c 64 0a 20 20 2a 2a 20 69 6e  st field.  ** in
1c440 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 72   the recursive r
1c450 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  egion..  *******
1c460 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c470 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c480 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c490 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1c4a0 2a 2f 0a 0a 20 20 69 6e 74 20 6e 56 61 72 3b 20  */..  int nVar; 
1c4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4c0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27  /* Number of '?'
1c4d0 20 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20   variables seen 
1c4e0 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61  in the SQL so fa
1c4f0 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 7a 56 61 72  r */.  int nzVar
1c500 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1c510 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 76   /* Number of av
1c520 61 69 6c 61 62 6c 65 20 73 6c 6f 74 73 20 69 6e  ailable slots in
1c530 20 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20 75 38   azVar[] */.  u8
1c540 20 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20   iPkSortOrder;  
1c550 20 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f          /* ASC o
1c560 72 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47  r DESC for INTEG
1c570 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a  ER PRIMARY KEY *
1c580 2f 0a 20 20 75 38 20 62 46 72 65 65 57 69 74 68  /.  u8 bFreeWith
1c590 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1c5a0 20 54 72 75 65 20 69 66 20 70 57 69 74 68 20 73   True if pWith s
1c5b0 68 6f 75 6c 64 20 62 65 20 66 72 65 65 64 20 77  hould be freed w
1c5c0 69 74 68 20 70 61 72 73 65 72 20 2a 2f 0a 20 20  ith parser */.  
1c5d0 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20  u8 explain;     
1c5e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1c5f0 65 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e  e if the EXPLAIN
1c600 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f   flag is found o
1c610 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23  n the query */.#
1c620 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1c630 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
1c640 20 20 75 38 20 64 65 63 6c 61 72 65 56 74 61 62    u8 declareVtab
1c650 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
1c660 72 75 65 20 69 66 20 69 6e 73 69 64 65 20 73 71  rue if inside sq
1c670 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
1c680 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  ab() */.  int nV
1c690 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20  tabLock;        
1c6a0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1c6b0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
1c6c0 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69  to lock */.#endi
1c6d0 66 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20  f.  int nAlias; 
1c6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1c6f0 20 4e 75 6d 62 65 72 20 6f 66 20 61 6c 69 61 73   Number of alias
1c700 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f  ed result set co
1c710 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  lumns */.  int n
1c720 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
1c730 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
1c740 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74 20 6f  on tree height o
1c750 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65  f current sub-se
1c760 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20  lect */.#ifndef 
1c770 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c  SQLITE_OMIT_EXPL
1c780 41 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63  AIN.  int iSelec
1c790 74 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  tId;            
1c7a0 2f 2a 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74  /* ID of current
1c7b0 20 73 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c   select for EXPL
1c7c0 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20  AIN output */.  
1c7d0 69 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49  int iNextSelectI
1c7e0 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  d;        /* Nex
1c7f0 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65  t available sele
1c800 63 74 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49  ct ID for EXPLAI
1c810 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64  N output */.#end
1c820 69 66 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56 61  if.  char **azVa
1c830 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
1c840 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61  * Pointers to na
1c850 6d 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72  mes of parameter
1c860 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65  s */.  Vdbe *pRe
1c870 70 72 65 70 61 72 65 3b 20 20 20 20 20 20 20 20  prepare;        
1c880 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70   /* VM being rep
1c890 72 65 70 61 72 65 64 20 28 73 71 6c 69 74 65 33  repared (sqlite3
1c8a0 52 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a  Reprepare()) */.
1c8b0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
1c8c0 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ail;        /* A
1c8d0 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74  ll SQL text past
1c8e0 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f   the last semico
1c8f0 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20  lon parsed */.  
1c900 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65  Table *pNewTable
1c910 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74  ;         /* A t
1c920 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74  able being const
1c930 72 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45  ructed by CREATE
1c940 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67   TABLE */.  Trig
1c950 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72  ger *pNewTrigger
1c960 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72  ;     /* Trigger
1c970 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74   under construct
1c980 20 62 79 20 61 20 43 52 45 41 54 45 20 54 52 49   by a CREATE TRI
1c990 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  GGER */.  const 
1c9a0 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65  char *zAuthConte
1c9b0 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70  xt; /* The 6th p
1c9c0 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e  arameter to db->
1c9d0 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20  xAuth callbacks 
1c9e0 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65  */.  Token sName
1c9f0 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f  Token;         /
1ca00 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71  * Token with unq
1ca10 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20  ualified schema 
1ca20 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20  object name */. 
1ca30 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65   Token sLastToke
1ca40 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  n;         /* Th
1ca50 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72  e last token par
1ca60 73 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  sed */.#ifndef S
1ca70 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
1ca80 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20  ALTABLE.  Token 
1ca90 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  sArg;           
1caa0 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20      /* Complete 
1cab0 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65  text of a module
1cac0 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54   argument */.  T
1cad0 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63  able **apVtabLoc
1cae0 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  k;       /* Poin
1caf0 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74  ter to virtual t
1cb00 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f  ables needing lo
1cb10 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a  cking */.#endif.
1cb20 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65    Table *pZombie
1cb30 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  Tab;        /* L
1cb40 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a  ist of Table obj
1cb50 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61  ects to delete a
1cb60 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f  fter code gen */
1cb70 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70  .  TriggerPrg *p
1cb80 54 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20  TriggerPrg;  /* 
1cb90 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63  Linked list of c
1cba0 6f 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f  oded triggers */
1cbb0 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20  .  With *pWith; 
1cbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1cbd0 43 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61  Current WITH cla
1cbe0 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  use, or NULL */.
1cbf0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  };../*.** Return
1cc00 20 74 72 75 65 20 69 66 20 63 75 72 72 65 6e 74   true if current
1cc10 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c  ly inside an sql
1cc20 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
1cc30 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66  b() call..*/.#if
1cc40 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1cc50 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23  VIRTUALTABLE.  #
1cc60 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
1cc70 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20  E_VTAB 0.#else. 
1cc80 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c   #define IN_DECL
1cc90 41 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65  ARE_VTAB (pParse
1cca0 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23  ->declareVtab).#
1ccb0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
1ccc0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
1ccd0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1cce0 75 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61  ure can be decla
1ccf0 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61  red on a stack a
1cd00 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  nd used.** to sa
1cd10 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75  ve the Parse.zAu
1cd20 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20  thContext value 
1cd30 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62  so that it can b
1cd40 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72  e restored later
1cd50 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68  ..*/.struct Auth
1cd60 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73  Context {.  cons
1cd70 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e  t char *zAuthCon
1cd80 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73  text;   /* Put s
1cd90 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68  aved Parse.zAuth
1cda0 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a  Context here */.
1cdb0 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
1cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1cdd0 20 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63   The Parse struc
1cde0 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ture */.};../*.*
1cdf0 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73  * Bitfield flags
1ce00 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e   for P5 value in
1ce10 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73   various opcodes
1ce20 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ..*/.#define OPF
1ce30 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20  LAG_NCHANGE     
1ce40 20 20 30 78 30 31 20 20 20 20 2f 2a 20 53 65 74    0x01    /* Set
1ce50 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e   to update db->n
1ce60 43 68 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e  Change */.#defin
1ce70 65 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20  e OPFLAG_EPHEM  
1ce80 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
1ce90 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68  * OP_Column: Eph
1cea0 65 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73  emeral output is
1ceb0 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f   ok */.#define O
1cec0 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20  PFLAG_LASTROWID 
1ced0 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53      0x02    /* S
1cee0 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d  et to update db-
1cef0 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64  >lastRowid */.#d
1cf00 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55  efine OPFLAG_ISU
1cf10 50 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20  PDATE      0x04 
1cf20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e     /* This OP_In
1cf30 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55  sert is an sql U
1cf40 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
1cf50 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20   OPFLAG_APPEND  
1cf60 20 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a        0x08    /*
1cf70 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20   This is likely 
1cf80 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20  to be an append 
1cf90 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1cfa0 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
1cfb0 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74  0x10    /* Try t
1cfc0 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69  o avoid a seek i
1cfd0 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20  n BtreeInsert() 
1cfe0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1cff0 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20  G_LENGTHARG     
1d000 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x40    /* OP_Co
1d010 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66  lumn only used f
1d020 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23  or length() */.#
1d030 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59  define OPFLAG_TY
1d040 50 45 4f 46 41 52 47 20 20 20 20 20 30 78 38 30  PEOFARG     0x80
1d050 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
1d060 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74   only used for t
1d070 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69  ypeof() */.#defi
1d080 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  ne OPFLAG_BULKCS
1d090 52 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20  R       0x01    
1d0a0 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65  /* OP_Open** use
1d0b0 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63  d to open bulk c
1d0c0 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  ursor */.#define
1d0d0 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20   OPFLAG_SEEKEQ  
1d0e0 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a        0x02    /*
1d0f0 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f   OP_Open** curso
1d100 72 20 75 73 65 73 20 45 51 20 73 65 65 6b 20 6f  r uses EQ seek o
1d110 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  nly */.#define O
1d120 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20  PFLAG_P2ISREG   
1d130 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 50      0x04    /* P
1d140 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69  2 to OP_Open** i
1d150 73 20 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d  s a register num
1d160 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ber */.#define O
1d170 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20  PFLAG_PERMUTE   
1d180 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
1d190 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74  P_Compare: use t
1d1a0 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a  he permutation *
1d1b0 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72  /../*. * Each tr
1d1c0 69 67 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e  igger present in
1d1d0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
1d1e0 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61  hema is stored a
1d1f0 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
1d200 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69 67 67  . * struct Trigg
1d210 65 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74  er. . *. * Point
1d220 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73  ers to instances
1d230 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
1d240 65 72 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  er are stored in
1d250 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e   two ways.. * 1.
1d260 20 49 6e 20 74 68 65 20 22 74 72 69 67 48 61 73   In the "trigHas
1d270 68 22 20 68 61 73 68 20 74 61 62 6c 65 20 28 70  h" hash table (p
1d280 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74  art of the sqlit
1d290 65 33 2a 20 74 68 61 74 20 72 65 70 72 65 73 65  e3* that represe
1d2a0 6e 74 73 20 74 68 65 20 0a 20 2a 20 20 20 20 64  nts the . *    d
1d2b0 61 74 61 62 61 73 65 29 2e 20 54 68 69 73 20 61  atabase). This a
1d2c0 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20 73 74  llows Trigger st
1d2d0 72 75 63 74 75 72 65 73 20 74 6f 20 62 65 20 72  ructures to be r
1d2e0 65 74 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65  etrieved by name
1d2f0 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67  .. * 2. All trig
1d300 67 65 72 73 20 61 73 73 6f 63 69 61 74 65 64 20  gers associated 
1d310 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61  with a single ta
1d320 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65  ble form a linke
1d330 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68  d list, using th
1d340 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65  e. *    pNext me
1d350 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74 20 54  mber of struct T
1d360 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65  rigger. A pointe
1d370 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65  r to the first e
1d380 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a  lement of the. *
1d390 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20      linked list 
1d3a0 69 73 20 73 74 6f 72 65 64 20 61 73 20 74 68 65  is stored as the
1d3b0 20 22 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62   "pTrigger" memb
1d3c0 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69  er of the associ
1d3d0 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63  ated. *    struc
1d3e0 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54  t Table.. *. * T
1d3f0 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d  he "step_list" m
1d400 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20  ember points to 
1d410 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
1d420 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69  t of a linked li
1d430 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67  st. * containing
1d440 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
1d450 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 61 73  nts specified as
1d460 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
1d470 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74  gram.. */.struct
1d480 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61   Trigger {.  cha
1d490 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
1d4a0 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65       /* The name
1d4b0 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 20   of the trigger 
1d4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4d0 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72         */.  char
1d4e0 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20   *table;        
1d4f0 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65      /* The table
1d500 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69 63   or view to whic
1d510 68 20 74 68 65 20 74 72 69 67 67 65 72 20 61 70  h the trigger ap
1d520 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70  plies */.  u8 op
1d530 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1d540 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f     /* One of TK_
1d550 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54  DELETE, TK_UPDAT
1d560 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20  E, TK_INSERT    
1d570 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f       */.  u8 tr_
1d580 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  tm;             
1d590 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47    /* One of TRIG
1d5a0 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47  GER_BEFORE, TRIG
1d5b0 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45  GER_AFTER */.  E
1d5c0 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20  xpr *pWhen;     
1d5d0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
1d5e0 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  EN clause of the
1d5f0 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79   expression (may
1d600 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49   be NULL) */.  I
1d610 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b  dList *pColumns;
1d620 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69         /* If thi
1d630 73 20 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f  s is an UPDATE O
1d640 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20  F <column-list> 
1d650 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20  trigger,.       
1d660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d670 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d        the <colum
1d680 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65  n-list> is store
1d690 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65  d here */.  Sche
1d6a0 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
1d6b0 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
1d6c0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69  ntaining the tri
1d6d0 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61  gger */.  Schema
1d6e0 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20   *pTabSchema;   
1d6f0 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
1d700 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65  aining the table
1d710 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65   */.  TriggerSte
1d720 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a  p *step_list; /*
1d730 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72   Link list of tr
1d740 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74  igger program st
1d750 65 70 73 20 20 20 20 20 20 20 20 20 20 20 20 20  eps             
1d760 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e  */.  Trigger *pN
1d770 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
1d780 4e 65 78 74 20 74 72 69 67 67 65 72 20 61 73 73  Next trigger ass
1d790 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
1d7a0 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   table */.};../*
1d7b0 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20 69 73  .** A trigger is
1d7c0 20 65 69 74 68 65 72 20 61 20 42 45 46 4f 52 45   either a BEFORE
1d7d0 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74 72 69   or an AFTER tri
1d7e0 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  gger.  The follo
1d7f0 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a  wing constants.*
1d800 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63  * determine whic
1d810 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  h. .**.** If the
1d820 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20  re are multiple 
1d830 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69  triggers, you mi
1d840 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f  ght of some BEFO
1d850 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45  RE and some AFTE
1d860 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61  R..** In that ca
1d870 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e  ses, the constan
1d880 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20  ts below can be 
1d890 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a  ORed together..*
1d8a0 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45  /.#define TRIGGE
1d8b0 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66  R_BEFORE  1.#def
1d8c0 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54 45  ine TRIGGER_AFTE
1d8d0 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20  R   2../*. * An 
1d8e0 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75  instance of stru
1d8f0 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 69  ct TriggerStep i
1d900 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
1d910 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61  a single SQL sta
1d920 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69  tement. * that i
1d930 73 20 61 20 70 61 72 74 20 6f 66 20 61 20 74 72  s a part of a tr
1d940 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 20 0a  igger-program. .
1d950 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20   *. * Instances 
1d960 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
1d970 72 53 74 65 70 20 61 72 65 20 73 74 6f 72 65 64  rStep are stored
1d980 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e   in a singly lin
1d990 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64  ked list (linked
1d9a0 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70  . * using the "p
1d9b0 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65  Next" member) re
1d9c0 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20  ferenced by the 
1d9d0 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62  "step_list" memb
1d9e0 65 72 20 6f 66 20 74 68 65 20 0a 20 2a 20 61 73  er of the . * as
1d9f0 73 6f 63 69 61 74 65 64 20 73 74 72 75 63 74 20  sociated struct 
1da00 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65  Trigger instance
1da10 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d  . The first elem
1da20 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65  ent of the linke
1da30 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65  d list is. * the
1da40 20 66 69 72 73 74 20 73 74 65 70 20 6f 66 20 74   first step of t
1da50 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72  he trigger-progr
1da60 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68 65 20 22  am.. * . * The "
1da70 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63  op" member indic
1da80 61 74 65 73 20 77 68 65 74 68 65 72 20 74 68 69  ates whether thi
1da90 73 20 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c  s is a "DELETE",
1daa0 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41   "INSERT", "UPDA
1dab0 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43  TE" or. * "SELEC
1dac0 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68  T" statement. Th
1dad0 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68  e meanings of th
1dae0 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20  e other members 
1daf0 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
1db00 20 74 68 65 20 0a 20 2a 20 76 61 6c 75 65 20 6f   the . * value o
1db10 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77  f "op" as follow
1db20 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20  s:. *. * (op == 
1db30 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72  TK_INSERT). * or
1db40 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65  conf    -> store
1db50 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43  s the ON CONFLIC
1db60 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70  T algorithm. * p
1db70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74  Select   -> If t
1db80 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
1db90 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54   INTO ... SELECT
1dba0 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20   ... statement, 
1dbb0 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20  then. *         
1dbc0 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73       this stores
1dbd0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
1dbe0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
1dbf0 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55  nt. Otherwise NU
1dc00 4c 4c 2e 0a 20 2a 20 7a 54 61 72 67 65 74 20 20  LL.. * zTarget  
1dc10 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d   -> Dequoted nam
1dc20 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
1dc30 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20  o insert into.. 
1dc40 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49  * pExprList -> I
1dc50 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
1dc60 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c  ERT INTO ... VAL
1dc70 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e  UES ... statemen
1dc80 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20  t, then. *      
1dc90 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f          this sto
1dca0 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65  res values to be
1dcb0 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72   inserted. Other
1dcc0 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49  wise NULL.. * pI
1dcd0 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68  dList   -> If th
1dce0 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
1dcf0 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d  INTO ... (<colum
1dd00 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53  n-names>) VALUES
1dd10 20 2e 2e 2e 20 0a 20 2a 20 20 20 20 20 20 20 20   ... . *        
1dd20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c        statement,
1dd30 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65   then this store
1dd40 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d  s the column-nam
1dd50 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20  es to be. *     
1dd60 20 20 20 20 20 20 20 20 20 69 6e 73 65 72 74 65           inserte
1dd70 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f  d into.. *. * (o
1dd80 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a  p == TK_DELETE).
1dd90 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20   * zTarget   -> 
1dda0 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  Dequoted name of
1ddb0 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65   the table to de
1ddc0 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57  lete from.. * pW
1ddd0 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57  here    -> The W
1dde0 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74  HERE clause of t
1ddf0 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  he DELETE statem
1de00 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70  ent if one is sp
1de10 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20  ecified.. *     
1de20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69           Otherwi
1de30 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20  se NULL.. * . * 
1de40 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45  (op == TK_UPDATE
1de50 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d  ). * zTarget   -
1de60 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20  > Dequoted name 
1de70 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
1de80 75 70 64 61 74 65 2e 0a 20 2a 20 70 57 68 65 72  update.. * pWher
1de90 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52  e    -> The WHER
1dea0 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  E clause of the 
1deb0 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
1dec0 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69   if one is speci
1ded0 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20  fied.. *        
1dee0 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20        Otherwise 
1def0 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69  NULL.. * pExprLi
1df00 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20  st -> A list of 
1df10 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75  the columns to u
1df20 70 64 61 74 65 20 61 6e 64 20 74 68 65 20 65 78  pdate and the ex
1df30 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64  pressions to upd
1df40 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ate. *          
1df50 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65      them to. See
1df60 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 29   sqlite3Update()
1df70 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f   documentation o
1df80 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20  f "pChanges". * 
1df90 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67               arg
1dfa0 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73  ument.. * . */.s
1dfb0 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
1dfc0 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20  p {.  u8 op;    
1dfd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
1dfe0 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20  e of TK_DELETE, 
1dff0 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e  TK_UPDATE, TK_IN
1e000 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20  SERT, TK_SELECT 
1e010 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20  */.  u8 orconf; 
1e020 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f            /* OE_
1e030 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f  Rollback etc. */
1e040 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69  .  Trigger *pTri
1e050 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74  g;      /* The t
1e060 72 69 67 67 65 72 20 74 68 61 74 20 74 68 69 73  rigger that this
1e070 20 73 74 65 70 20 69 73 20 61 20 70 61 72 74 20   step is a part 
1e080 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  of */.  Select *
1e090 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
1e0a0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1e0b0 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52   or RHS of INSER
1e0c0 54 20 49 4e 54 4f 20 53 45 4c 45 43 54 20 2e 2e  T INTO SELECT ..
1e0d0 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 61  . */.  char *zTa
1e0e0 72 67 65 74 3b 20 20 20 20 20 20 20 2f 2a 20 54  rget;       /* T
1e0f0 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20  arget table for 
1e100 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20  DELETE, UPDATE, 
1e110 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72  INSERT */.  Expr
1e120 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20   *pWhere;       
1e130 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c   /* The WHERE cl
1e140 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20  ause for DELETE 
1e150 6f 72 20 55 50 44 41 54 45 20 73 74 65 70 73 20  or UPDATE steps 
1e160 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1e170 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54  ExprList; /* SET
1e180 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41   clause for UPDA
1e190 54 45 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20  TE. */.  IdList 
1e1a0 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a  *pIdList;     /*
1e1b0 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f   Column names fo
1e1c0 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72  r INSERT */.  Tr
1e1d0 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74  iggerStep *pNext
1e1e0 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68  ;  /* Next in th
1e1f0 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20  e link-list */. 
1e200 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c   TriggerStep *pL
1e210 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c  ast;  /* Last el
1e220 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69  ement in link-li
1e230 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73  st. Valid for 1s
1e240 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d  t elem only */.}
1e250 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
1e260 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1e270 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d   contains inform
1e280 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68  ation used by th
1e290 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a  e sqliteFix....*
1e2a0 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68  * routines as th
1e2b0 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73  ey walk the pars
1e2c0 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64  e tree to make d
1e2d0 61 74 61 62 61 73 65 20 72 65 66 65 72 65 6e 63  atabase referenc
1e2e0 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20  es.** explicit. 
1e2f0 20 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72   .*/.typedef str
1e300 75 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69  uct DbFixer DbFi
1e310 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69  xer;.struct DbFi
1e320 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70  xer {.  Parse *p
1e330 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54  Parse;      /* T
1e340 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65  he parsing conte
1e350 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61  xt.  Error messa
1e360 67 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65  ges written here
1e370 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
1e380 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78  chema;    /* Fix
1e390 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73   items to this s
1e3a0 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62  chema */.  int b
1e3b0 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f  VarOnly;       /
1e3c0 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69  * Check for vari
1e3d0 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20  able references 
1e3e0 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  only */.  const 
1e3f0 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a  char *zDb;    /*
1e400 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f   Make sure all o
1e410 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61  bjects are conta
1e420 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74  ined in this dat
1e430 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74  abase */.  const
1e440 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f   char *zType;  /
1e450 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f  * Type of the co
1e460 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66  ntainer - used f
1e470 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  or error message
1e480 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b  s */.  const Tok
1e490 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61  en *pName; /* Na
1e4a0 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  me of the contai
1e4b0 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
1e4c0 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
1e4d0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62  .};../*.** An ob
1e4e0 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61  jected used to a
1e4f0 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65  ccumulate the te
1e500 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77  xt of a string w
1e510 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f  here we.** do no
1e520 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e  t necessarily kn
1e530 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73  ow how big the s
1e540 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e  tring will be in
1e550 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72   the end..*/.str
1e560 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20  uct StrAccum {. 
1e570 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
1e580 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61        /* Optiona
1e590 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c  l database for l
1e5a0 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62  ookaside.  Can b
1e5b0 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72  e NULL */.  char
1e5c0 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20   *zBase;        
1e5d0 20 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63   /* A base alloc
1e5e0 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d  ation.  Not from
1e5f0 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68   malloc. */.  ch
1e600 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20  ar *zText;      
1e610 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67     /* The string
1e620 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61   collected so fa
1e630 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61  r */.  int  nCha
1e640 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  r;          /* L
1e650 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72  ength of the str
1e660 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ing so far */.  
1e670 69 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20  int  nAlloc;    
1e680 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f       /* Amount o
1e690 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65  f space allocate
1e6a0 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20  d in zText */.  
1e6b0 69 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20  int  mxAlloc;   
1e6c0 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
1e6d0 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69  allowed allocati
1e6e0 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61  on.  0 for no ma
1e6f0 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20 20  lloc usage */.  
1e700 75 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20  u8   accError;  
1e710 20 20 20 20 20 2f 2a 20 53 54 52 41 43 43 55 4d       /* STRACCUM
1e720 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43 43  _NOMEM or STRACC
1e730 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a 7d 3b 0a  UM_TOOBIG */.};.
1e740 23 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d  #define STRACCUM
1e750 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66 69  _NOMEM   1.#defi
1e760 6e 65 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42  ne STRACCUM_TOOB
1e770 49 47 20 20 32 0a 0a 2f 2a 0a 2a 2a 20 41 20 70  IG  2../*.** A p
1e780 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
1e790 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
1e7a0 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20   to communicate 
1e7b0 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66  information.** f
1e7c0 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20  rom sqlite3Init 
1e7d0 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65  and OP_ParseSche
1e7e0 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69  ma into the sqli
1e7f0 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e  te3InitCallback.
1e800 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
1e810 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  ct {.  sqlite3 *
1e820 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  db;        /* Th
1e830 65 20 64 61 74 61 62 61 73 65 20 62 65 69 6e 67  e database being
1e840 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
1e850 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73    char **pzErrMs
1e860 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d  g;    /* Error m
1e870 65 73 73 61 67 65 20 73 74 6f 72 65 64 20 68 65  essage stored he
1e880 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b  re */.  int iDb;
1e890 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30              /* 0
1e8a0 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61   for main databa
1e8b0 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c  se.  1 for TEMP,
1e8c0 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65   2.. for ATTACHe
1e8d0 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20  d */.  int rc;  
1e8e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
1e8f0 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64  sult code stored
1e900 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44   here */.} InitD
1e910 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75  ata;../*.** Stru
1e920 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67  cture containing
1e930 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72   global configur
1e940 61 74 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74  ation data for t
1e950 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  he SQLite librar
1e960 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74  y..**.** This st
1e970 72 75 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e  ructure also con
1e980 74 61 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65  tains some state
1e990 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
1e9a0 0a 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43  .struct Sqlite3C
1e9b0 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d  onfig {.  int bM
1e9c0 65 6d 73 74 61 74 3b 20 20 20 20 20 20 20 20 20  emstat;         
1e9d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1e9e0 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65  rue to enable me
1e9f0 6d 6f 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20  mory status */. 
1ea00 20 69 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b   int bCoreMutex;
1ea10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
1ea30 61 62 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69  able core mutexi
1ea40 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c  ng */.  int bFul
1ea50 6c 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  lMutex;         
1ea60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1ea70 65 20 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c  e to enable full
1ea80 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69   mutexing */.  i
1ea90 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20  nt bOpenUri;    
1eaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eab0 20 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65   /* True to inte
1eac0 72 70 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20  rpret filenames 
1ead0 61 73 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74  as URIs */.  int
1eae0 20 62 55 73 65 43 69 73 3b 20 20 20 20 20 20 20   bUseCis;       
1eaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1eb00 2a 20 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69  * Use covering i
1eb10 6e 64 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d  ndices for full-
1eb20 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d  scans */.  int m
1eb30 78 53 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20  xStrlen;        
1eb40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1eb50 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c  Maximum string l
1eb60 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e  ength */.  int n
1eb70 65 76 65 72 43 6f 72 72 75 70 74 3b 20 20 20 20  everCorrupt;    
1eb80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1eb90 44 61 74 61 62 61 73 65 20 69 73 20 61 6c 77 61  Database is alwa
1eba0 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a  ys well-formed *
1ebb0 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73  /.  int szLookas
1ebc0 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ide;            
1ebd0 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
1ebe0 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65   lookaside buffe
1ebf0 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20  r size */.  int 
1ec00 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20  nLookaside;     
1ec10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ec20 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69   Default lookasi
1ec30 64 65 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20  de buffer count 
1ec40 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d  */.  sqlite3_mem
1ec50 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20  _methods m;     
1ec60 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65         /* Low-le
1ec70 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  vel memory alloc
1ec80 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20  ation interface 
1ec90 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
1eca0 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78  ex_methods mutex
1ecb0 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65  ;      /* Low-le
1ecc0 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66  vel mutex interf
1ecd0 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ace */.  sqlite3
1ece0 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32  _pcache_methods2
1ecf0 20 70 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f   pcache2;  /* Lo
1ed00 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63  w-level page-cac
1ed10 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  he interface */.
1ed20 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20    void *pHeap;  
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 48 65 61 70 20 73 74 6f 72      /* Heap stor
1ed50 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  age space */.  i
1ed60 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20  nt nHeap;       
1ed70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed80 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61   /* Size of pHea
1ed90 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52  p[] */.  int mnR
1eda0 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20  eq, mxReq;      
1edb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69             /* Mi
1edc0 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72  n and max heap r
1edd0 65 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f  equests sizes */
1ede0 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  .  sqlite3_int64
1edf0 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
1ee00 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73       /* mmap() s
1ee10 70 61 63 65 20 70 65 72 20 6f 70 65 6e 20 66 69  pace per open fi
1ee20 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  le */.  sqlite3_
1ee30 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20  int64 mxMmap;   
1ee40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
1ee50 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72 20 73  imum value for s
1ee60 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20  zMmap */.  void 
1ee70 2a 70 53 63 72 61 74 63 68 3b 20 20 20 20 20 20  *pScratch;      
1ee80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ee90 53 63 72 61 74 63 68 20 6d 65 6d 6f 72 79 20 2a  Scratch memory *
1eea0 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72 61 74 63  /.  int szScratc
1eeb0 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
1eec0 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
1eed0 20 65 61 63 68 20 73 63 72 61 74 63 68 20 62 75   each scratch bu
1eee0 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  ffer */.  int nS
1eef0 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20  cratch;         
1ef00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1ef10 75 6d 62 65 72 20 6f 66 20 73 63 72 61 74 63 68  umber of scratch
1ef20 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f   buffers */.  vo
1ef30 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20 20  id *pPage;      
1ef40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef50 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d 65  /* Page cache me
1ef60 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  mory */.  int sz
1ef70 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
1ef80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1ef90 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67 65  ize of each page
1efa0 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20   in pPage[] */. 
1efb0 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20 20   int nPage;     
1efc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efd0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1efe0 70 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b 5d  pages in pPage[]
1eff0 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72 73   */.  int mxPars
1f000 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20 20  erStack;        
1f010 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d          /* maxim
1f020 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65 20  um depth of the 
1f030 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a  parser stack */.
1f040 20 20 69 6e 74 20 73 68 61 72 65 64 43 61 63 68    int sharedCach
1f050 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20  eEnabled;       
1f060 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20 73      /* true if s
1f070 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
1f080 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 75 33   enabled */.  u3
1f090 32 20 73 7a 50 6d 61 3b 20 20 20 20 20 20 20 20  2 szPma;        
1f0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0b0 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72 74 65  /* Maximum Sorte
1f0c0 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a 20 20  r PMA size */.  
1f0d0 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69 67  /* The above mig
1f0e0 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65  ht be initialize
1f0f0 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20  d to non-zero.  
1f100 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65  The following ne
1f110 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a  ed to always.  *
1f120 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a  * initially be z
1f130 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f  ero, however. */
1f140 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20 20  .  int isInit;  
1f150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f160 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
1f170 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  er initializatio
1f180 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64 20 2a  n has finished *
1f190 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72 65  /.  int inProgre
1f1a0 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ss;             
1f1b0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77 68        /* True wh
1f1c0 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ile initializati
1f1d0 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 2a  on in progress *
1f1e0 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78 49  /.  int isMutexI
1f1f0 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
1f200 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
1f210 74 65 72 20 6d 75 74 65 78 65 73 20 61 72 65 20  ter mutexes are 
1f220 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
1f230 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69   int isMallocIni
1f240 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
1f250 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
1f260 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69   malloc is initi
1f270 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20  alized */.  int 
1f280 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20 20  isPCacheInit;   
1f290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f2a0 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c   True after mall
1f2b0 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  oc is initialize
1f2c0 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49  d */.  int nRefI
1f2d0 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20  nitMutex;       
1f2e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1f2f0 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20 70  er of users of p
1f300 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73  InitMutex */.  s
1f310 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70 49  qlite3_mutex *pI
1f320 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20  nitMutex;       
1f330 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20 62   /* Mutex used b
1f340 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61  y sqlite3_initia
1f350 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  lize() */.  void
1f360 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69   (*xLog)(void*,i
1f370 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
1f380 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72   /* Function for
1f390 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f   logging */.  vo
1f3a0 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20  id *pLogArg;    
1f3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3c0 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75     /* First argu
1f3d0 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a  ment to xLog() *
1f3e0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
1f3f0 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20  ENABLE_SQLLOG.  
1f400 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76  void(*xSqllog)(v
1f410 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f  oid*,sqlite3*,co
1f420 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  nst char*, int);
1f430 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67  .  void *pSqllog
1f440 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  Arg;.#endif.#ifd
1f450 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45 5f 43  ef SQLITE_VDBE_C
1f460 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54 68 65  OVERAGE.  /* The
1f470 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62   following callb
1f480 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c  ack (if not NULL
1f490 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20  ) is invoked on 
1f4a0 65 76 65 72 79 20 56 44 42 45 20 62 72 61 6e 63  every VDBE branc
1f4b0 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  h.  ** operation
1f4c0 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c 6c 62  .  Set the callb
1f4d0 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49 54 45  ack using SQLITE
1f4e0 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45 5f 43  _TESTCTRL_VDBE_C
1f4f0 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20  OVERAGE..  */.  
1f500 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72 61 6e  void (*xVdbeBran
1f510 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74 20 69 53  ch)(void*,int iS
1f520 72 63 4c 69 6e 65 2c 75 38 20 65 54 68 69 73 2c  rcLine,u8 eThis,
1f530 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c  u8 eMx);  /* Cal
1f540 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
1f550 2a 70 56 64 62 65 42 72 61 6e 63 68 41 72 67 3b  *pVdbeBranchArg;
1f560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f580 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75       /* 1st argu
1f590 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  ment */.#endif.#
1f5a0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1f5b0 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
1f5c0 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c    int (*xTestCal
1f5d0 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20  lback)(int);    
1f5e0 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62      /* Invoked b
1f5f0 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  y sqlite3FaultSi
1f600 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  m() */.#endif.  
1f610 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61  int bLocaltimeFa
1f620 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ult;            
1f630 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69    /* True to fai
1f640 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61  l localtime() ca
1f650 6c 6c 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  lls */.};../*.**
1f660 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75   This macro is u
1f670 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20 61 73  sed inside of as
1f680 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
1f690 73 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68  s to indicate th
1f6a0 61 74 0a 2a 2a 20 74 68 65 20 61 73 73 65 72 74  at.** the assert
1f6b0 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f   is only valid o
1f6c0 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  n a well-formed 
1f6d0 64 61 74 61 62 61 73 65 2e 20 20 49 6e 73 74 65  database.  Inste
1f6e0 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ad of:.**.**    
1f6f0 20 61 73 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a   assert( X );.**
1f700 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a  .** One writes:.
1f710 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74  **.**     assert
1f720 28 20 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44  ( X || CORRUPT_D
1f730 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55  B );.**.** CORRU
1f740 50 54 5f 44 42 20 69 73 20 74 72 75 65 20 64 75  PT_DB is true du
1f750 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72  ring normal oper
1f760 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f  ation.  CORRUPT_
1f770 44 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69  DB does not indi
1f780 63 61 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65  cate.** that the
1f790 20 64 61 74 61 62 61 73 65 20 69 73 20 64 65 66   database is def
1f7a0 69 6e 69 74 65 6c 79 20 63 6f 72 72 75 70 74 2c  initely corrupt,
1f7b0 20 6f 6e 6c 79 20 74 68 61 74 20 69 74 20 6d 69   only that it mi
1f7c0 67 68 74 20 62 65 20 63 6f 72 72 75 70 74 2e 0a  ght be corrupt..
1f7d0 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65 73 74  ** For most test
1f7e0 20 63 61 73 65 73 2c 20 43 4f 52 52 55 50 54 5f   cases, CORRUPT_
1f7f0 44 42 20 69 73 20 73 65 74 20 74 6f 20 66 61 6c  DB is set to fal
1f800 73 65 20 75 73 69 6e 67 20 61 20 73 70 65 63 69  se using a speci
1f810 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65  al.** sqlite3_te
1f820 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54  st_control().  T
1f830 68 69 73 20 65 6e 61 62 6c 65 73 20 61 73 73 65  his enables asse
1f840 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
1f850 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e  to prove.** thin
1f860 67 73 20 74 68 61 74 20 61 72 65 20 61 6c 77 61  gs that are alwa
1f870 79 73 20 74 72 75 65 20 66 6f 72 20 77 65 6c 6c  ys true for well
1f880 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65  -formed database
1f890 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  s..*/.#define CO
1f8a0 52 52 55 50 54 5f 44 42 20 20 28 73 71 6c 69 74  RRUPT_DB  (sqlit
1f8b0 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f  e3Config.neverCo
1f8c0 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a  rrupt==0)../*.**
1f8d0 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72   Context pointer
1f8e0 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72   passed down thr
1f8f0 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d 77 61  ough the tree-wa
1f900 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61  lk..*/.struct Wa
1f910 6c 6b 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78  lker {.  int (*x
1f920 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61  ExprCallback)(Wa
1f930 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20  lker*, Expr*);  
1f940 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66     /* Callback f
1f950 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  or expressions *
1f960 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63  /.  int (*xSelec
1f970 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65  tCallback)(Walke
1f980 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a  r*,Select*);  /*
1f990 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45   Callback for SE
1f9a0 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20  LECTs */.  void 
1f9b0 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63  (*xSelectCallbac
1f9c0 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65  k2)(Walker*,Sele
1f9d0 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63  ct*);/* Second c
1f9e0 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45  allback for SELE
1f9f0 43 54 73 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a  CTs */.  Parse *
1fa00 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20  pParse;         
1fa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa20 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e     /* Parser con
1fa30 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20  text.  */.  int 
1fa40 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20 20  walkerDepth;    
1fa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa60 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1fa70 6f 66 20 73 75 62 71 75 65 72 69 65 73 20 2a 2f  of subqueries */
1fa80 0a 20 20 75 38 20 65 43 6f 64 65 3b 20 20 20 20  .  u8 eCode;    
1fa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1faa0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1fab0 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65 73 73 69  A small processi
1fac0 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20 75 6e 69  ng code */.  uni
1fad0 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  on {            
1fae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1faf0 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20         /* Extra 
1fb00 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63  data for callbac
1fb10 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e  k */.    NameCon
1fb20 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20  text *pNC;      
1fb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb40 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f      /* Naming co
1fb50 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74  ntext */.    int
1fb60 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   n;             
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 2f 2a 20 41 20 63 6f 75          /* A cou
1fb90 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20  nter */.    int 
1fba0 69 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20  iCur;           
1fbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fbc0 20 20 20 20 20 20 20 2f 2a 20 41 20 63 75 72 73         /* A curs
1fbd0 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  or number */.   
1fbe0 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69   SrcList *pSrcLi
1fbf0 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  st;             
1fc00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
1fc10 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
1fc20 20 20 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e    struct SrcCoun
1fc30 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20  t *pSrcCount;   
1fc40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1fc50 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20  Counting column 
1fc60 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20  references */.  
1fc70 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77  } u;.};../* Forw
1fc80 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73  ard declarations
1fc90 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57   */.int sqlite3W
1fca0 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c  alkExpr(Walker*,
1fcb0 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
1fcc0 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74  ite3WalkExprList
1fcd0 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69  (Walker*, ExprLi
1fce0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
1fcf0 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b  3WalkSelect(Walk
1fd00 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
1fd10 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
1fd20 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a  lectExpr(Walker*
1fd30 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
1fd40 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
1fd50 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53  tFrom(Walker*, S
1fd60 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20  elect*);../*.** 
1fd70 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d  Return code from
1fd80 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65 20   the parse-tree 
1fd90 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76  walking primitiv
1fda0 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20  es and their.** 
1fdb0 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64  callbacks..*/.#d
1fdc0 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e  efine WRC_Contin
1fdd0 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e  ue    0   /* Con
1fde0 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20  tinue down into 
1fdf0 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66  children */.#def
1fe00 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20  ine WRC_Prune   
1fe10 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20      1   /* Omit 
1fe20 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e  children but con
1fe30 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69  tinue walking si
1fe40 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e  blings */.#defin
1fe50 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20  e WRC_Abort     
1fe60 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e    2   /* Abandon
1fe70 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a   the tree walk *
1fe80 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
1fe90 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
1fea0 75 63 74 75 72 65 20 72 65 70 72 65 73 65 6e 74  ucture represent
1feb0 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f  s a set of one o
1fec0 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28  r more CTEs.** (
1fed0 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
1fee0 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65  ressions) create
1fef0 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49  d by a single WI
1ff00 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74  TH clause..*/.st
1ff10 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e  ruct With {.  in
1ff20 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20  t nCte;         
1ff30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ff40 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20   Number of CTEs 
1ff50 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75  in the WITH clau
1ff60 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f  se */.  With *pO
1ff70 75 74 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  uter;           
1ff80 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61          /* Conta
1ff90 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73  ining WITH claus
1ffa0 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  e, or NULL */.  
1ffb0 73 74 72 75 63 74 20 43 74 65 20 7b 20 20 20 20  struct Cte {    
1ffc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ffd0 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45 20  /* For each CTE 
1ffe0 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75  in the WITH clau
1fff0 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68  se.... */.    ch
20000 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
20010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20020 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54   Name of this CT
20030 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73  E */.    ExprLis
20040 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20  t *pCols;       
20050 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74           /* List
20060 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c   of explicit col
20070 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55  umn names, or NU
20080 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  LL */.    Select
20090 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20   *pSelect;      
200a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
200b0 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74   definition of t
200c0 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63  his CTE */.    c
200d0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 72 72 3b  onst char *zErr;
200e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
200f0 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
20100 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65 66  for circular ref
20110 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61  erences */.  } a
20120 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20  [1];.};..#ifdef 
20130 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
20140 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
20150 66 20 74 68 65 20 54 72 65 65 56 69 65 77 20 6f  f the TreeView o
20160 62 6a 65 63 74 20 69 73 20 75 73 65 64 20 66 6f  bject is used fo
20170 72 20 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63  r printing the c
20180 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74  ontent of.** dat
20190 61 20 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20  a structures on 
201a0 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
201b0 74 66 28 29 20 75 73 69 6e 67 20 61 20 74 72 65  tf() using a tre
201c0 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a  e-like view..*/.
201d0 73 74 72 75 63 74 20 54 72 65 65 56 69 65 77 20  struct TreeView 
201e0 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20  {.  int iLevel; 
201f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
20200 68 69 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68  hich level of th
20210 65 20 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e  e tree we are on
20220 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b   */.  u8  bLine[
20230 31 30 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a  100];         /*
20240 20 44 72 61 77 20 76 65 72 74 69 63 61 6c 20 69   Draw vertical i
20250 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c  n column i if bL
20260 69 6e 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a  ine[i] is true *
20270 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  /.};.#endif /* S
20280 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a  QLITE_DEBUG */..
20290 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a  /*.** Assuming z
202a0 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  In points to the
202b0 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 61   first byte of a
202c0 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
202d0 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e  ,.** advance zIn
202e0 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65   to point to the
202f0 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 74   first byte of t
20300 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68  he next UTF-8 ch
20310 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66  aracter..*/.#def
20320 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f  ine SQLITE_SKIP_
20330 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20  UTF8(zIn) {     
20340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20350 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49     \.  if( (*(zI
20360 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20  n++))>=0xc0 ){  
20370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20380 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
20390 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26    while( (*zIn &
203a0 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20   0xc0)==0x80 ){ 
203b0 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20  zIn++; }        
203c0 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20       \.  }      
203d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
20400 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  }../*.** The SQL
20410 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f  ITE_*_BKPT macro
20420 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65  s are substitute
20430 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20  s for the error 
20440 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68  codes with.** th
20450 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20  e same name but 
20460 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50  without the _BKP
20470 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73 65  T suffix.  These
20480 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a   macros invoke.*
20490 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20  * routines that 
204a0 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d  report the line-
204b0 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20  number on which 
204c0 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e  the error origin
204d0 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71  ated.** using sq
204e0 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68  lite3_log().  Th
204f0 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20  e routines also 
20500 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e  provide a conven
20510 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f  ient place.** to
20520 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72 20   set a debugger 
20530 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69  breakpoint..*/.i
20540 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  nt sqlite3Corrup
20550 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  tError(int);.int
20560 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
20570 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
20580 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72  lite3CantopenErr
20590 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65  or(int);.#define
205a0 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
205b0 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72  BKPT sqlite3Corr
205c0 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  uptError(__LINE_
205d0 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  _).#define SQLIT
205e0 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71  E_MISUSE_BKPT sq
205f0 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
20600 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69  (__LINE__).#defi
20610 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50  ne SQLITE_CANTOP
20620 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  EN_BKPT sqlite3C
20630 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c  antopenError(__L
20640 49 4e 45 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46  INE__).../*.** F
20650 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e  TS4 is really an
20660 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46   extension for F
20670 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62  TS3.  It is enab
20680 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  led using the.**
20690 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
206a0 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20  TS3 macro.  But 
206b0 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69  to avoid confusi
206c0 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a  on we also call.
206d0 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e  ** the SQLITE_EN
206e0 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20  ABLE_FTS4 macro 
206f0 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20 61  to serve as an a
20700 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45 5f  lias for SQLITE_
20710 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a  ENABLE_FTS3..*/.
20720 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
20730 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20  TE_ENABLE_FTS4) 
20740 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
20750 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a  TE_ENABLE_FTS3).
20760 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
20770 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a 23 65  ENABLE_FTS3 1.#e
20780 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
20790 63 74 79 70 65 2e 68 20 68 65 61 64 65 72 20 69  ctype.h header i
207a0 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e  s needed for non
207b0 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20  -ASCII systems. 
207c0 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e   It is also.** n
207d0 65 65 64 65 64 20 62 79 20 46 54 53 33 20 77 68  eeded by FTS3 wh
207e0 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75  en FTS3 is inclu
207f0 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67  ded in the amalg
20800 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  amation..*/.#if 
20810 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
20820 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20  ASCII) || \.    
20830 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  (defined(SQLITE_
20840 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20  ENABLE_FTS3) && 
20850 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41  defined(SQLITE_A
20860 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20  MALGAMATION)).# 
20870 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68  include <ctype.h
20880 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  >.#endif../*.** 
20890 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
208a0 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73  cros mimic the s
208b0 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20  tandard library 
208c0 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65  functions touppe
208d0 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28  r(),.** isspace(
208e0 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73  ), isalnum(), is
208f0 64 69 67 69 74 28 29 20 61 6e 64 20 69 73 78 64  digit() and isxd
20900 69 67 69 74 28 29 2c 20 72 65 73 70 65 63 74 69  igit(), respecti
20910 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c  vely. The.** sql
20920 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c  ite versions onl
20930 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49  y work for ASCII
20940 20 63 68 61 72 61 63 74 65 72 73 2c 20 72 65 67   characters, reg
20950 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c  ardless of local
20960 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  e..*/.#ifdef SQL
20970 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69  ITE_ASCII.# defi
20980 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65  ne sqlite3Touppe
20990 72 28 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c  r(x)  ((x)&~(sql
209a0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
209b0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
209c0 26 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65  &0x20)).# define
209d0 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28   sqlite3Isspace(
209e0 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
209f0 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
20a00 63 68 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a  char)(x)]&0x01).
20a10 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20a20 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71  Isalnum(x)   (sq
20a30 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
20a40 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
20a50 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65  ]&0x06).# define
20a60 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28   sqlite3Isalpha(
20a70 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
20a80 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
20a90 63 68 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a  char)(x)]&0x02).
20aa0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20ab0 49 73 64 69 67 69 74 28 78 29 20 20 20 28 73 71  Isdigit(x)   (sq
20ac0 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
20ad0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
20ae0 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65  ]&0x04).# define
20af0 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74   sqlite3Isxdigit
20b00 28 78 29 20 20 28 73 71 6c 69 74 65 33 43 74 79  (x)  (sqlite3Cty
20b10 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
20b20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a  char)(x)]&0x08).
20b30 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20b40 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71  Tolower(x)   (sq
20b50 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65  lite3UpperToLowe
20b60 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r[(unsigned char
20b70 29 28 78 29 5d 29 0a 23 65 6c 73 65 0a 23 20 64  )(x)]).#else.# d
20b80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75  efine sqlite3Tou
20b90 70 70 65 72 28 78 29 20 20 20 74 6f 75 70 70 65  pper(x)   touppe
20ba0 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
20bb0 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
20bc0 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29  qlite3Isspace(x)
20bd0 20 20 20 69 73 73 70 61 63 65 28 28 75 6e 73 69     isspace((unsi
20be0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
20bf0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
20c00 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c  salnum(x)   isal
20c10 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68  num((unsigned ch
20c20 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
20c30 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28   sqlite3Isalpha(
20c40 78 29 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e  x)   isalpha((un
20c50 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
20c60 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20c70 33 49 73 64 69 67 69 74 28 78 29 20 20 20 69 73  3Isdigit(x)   is
20c80 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20  digit((unsigned 
20c90 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
20ca0 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67  ne sqlite3Isxdig
20cb0 69 74 28 78 29 20 20 69 73 78 64 69 67 69 74 28  it(x)  isxdigit(
20cc0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
20cd0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
20ce0 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20  ite3Tolower(x)  
20cf0 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e   tolower((unsign
20d00 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 65 6e  ed char)(x)).#en
20d10 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  dif.int sqlite3I
20d20 73 49 64 43 68 61 72 28 75 38 29 3b 0a 0a 2f 2a  sIdChar(u8);../*
20d30 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e  .** Internal fun
20d40 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73  ction prototypes
20d50 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  .*/.#define sqli
20d60 74 65 33 53 74 72 49 43 6d 70 20 73 71 6c 69 74  te3StrICmp sqlit
20d70 65 33 5f 73 74 72 69 63 6d 70 0a 69 6e 74 20 73  e3_stricmp.int s
20d80 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63  qlite3Strlen30(c
20d90 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65  onst char*);.#de
20da0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e  fine sqlite3StrN
20db0 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72  ICmp sqlite3_str
20dc0 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74  nicmp..int sqlit
20dd0 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69  e3MallocInit(voi
20de0 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
20df0 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b  MallocEnd(void);
20e00 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
20e10 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20  lloc(u64);.void 
20e20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65  *sqlite3MallocZe
20e30 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  ro(u64);.void *s
20e40 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
20e50 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34  ro(sqlite3*, u64
20e60 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
20e70 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69  DbMallocRaw(sqli
20e80 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72  te3*, u64);.char
20e90 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75   *sqlite3DbStrDu
20ea0 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  p(sqlite3*,const
20eb0 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73   char*);.char *s
20ec0 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28  qlite3DbStrNDup(
20ed0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
20ee0 68 61 72 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  har*, u64);.void
20ef0 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63   *sqlite3Realloc
20f00 28 76 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f  (void*, u64);.vo
20f10 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61  id *sqlite3DbRea
20f20 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74  llocOrFree(sqlit
20f30 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36  e3 *, void *, u6
20f40 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
20f50 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74  3DbRealloc(sqlit
20f60 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36  e3 *, void *, u6
20f70 34 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  4);.void sqlite3
20f80 44 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c  DbFree(sqlite3*,
20f90 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c   void*);.int sql
20fa0 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76  ite3MallocSize(v
20fb0 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
20fc0 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73  e3DbMallocSize(s
20fd0 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
20fe0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63  .void *sqlite3Sc
20ff0 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29  ratchMalloc(int)
21000 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63  ;.void sqlite3Sc
21010 72 61 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29  ratchFree(void*)
21020 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50  ;.void *sqlite3P
21030 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  ageMalloc(int);.
21040 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65  void sqlite3Page
21050 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  Free(void*);.voi
21060 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44  d sqlite3MemSetD
21070 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 76 6f  efault(void);.vo
21080 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e  id sqlite3Benign
21090 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64  MallocHooks(void
210a0 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64   (*)(void), void
210b0 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 69 6e 74   (*)(void));.int
210c0 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72   sqlite3HeapNear
210d0 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f  lyFull(void);../
210e0 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20  *.** On systems 
210f0 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b  with ample stack
21100 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20   space and that 
21110 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29  support alloca()
21120 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66  , make.** use of
21130 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74   alloca() to obt
21140 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61  ain space for la
21150 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62  rge automatic ob
21160 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75  jects.  By defau
21170 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70  lt,.** obtain sp
21180 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ace from malloc(
21190 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c  )..**.** The all
211a0 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65  oca() routine ne
211b0 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c  ver returns NULL
211c0 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75  .  This will cau
211d0 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a  se code paths.**
211e0 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20   that deal with 
211f0 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
21200 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20  c() failures to 
21210 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a  be unreachable..
21220 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
21230 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65  _USE_ALLOCA.# de
21240 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
21250 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
21260 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66   alloca(N).# def
21270 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
21280 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
21290 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29  memset(alloca(N)
212a0 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65  , 0, N).# define
212b0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
212c0 65 28 44 2c 50 29 20 20 20 20 20 20 20 0a 23 65  e(D,P)       .#e
212d0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
212e0 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61  ite3StackAllocRa
212f0 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33  w(D,N)   sqlite3
21300 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  DbMallocRaw(D,N)
21310 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
21320 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28  3StackAllocZero(
21330 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d  D,N)  sqlite3DbM
21340 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23  allocZero(D,N).#
21350 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
21360 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20  tackFree(D,P)   
21370 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
21380 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23  e(D,P).#endif..#
21390 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
213a0 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73  BLE_MEMSYS3.cons
213b0 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65  t sqlite3_mem_me
213c0 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65  thods *sqlite3Me
213d0 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64  mGetMemsys3(void
213e0 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  );.#endif.#ifdef
213f0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d   SQLITE_ENABLE_M
21400 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c  EMSYS5.const sql
21410 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
21420 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d   *sqlite3MemGetM
21430 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 65  emsys5(void);.#e
21440 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53  ndif...#ifndef S
21450 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54  QLITE_MUTEX_OMIT
21460 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
21470 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a  _methods const *
21480 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75  sqlite3DefaultMu
21490 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c  tex(void);.  sql
214a0 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
214b0 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65  ds const *sqlite
214c0 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29  3NoopMutex(void)
214d0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
214e0 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41  x *sqlite3MutexA
214f0 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74  lloc(int);.  int
21500 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69   sqlite3MutexIni
21510 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73  t(void);.  int s
21520 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76  qlite3MutexEnd(v
21530 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 73 71  oid);.#endif..sq
21540 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69  lite3_int64 sqli
21550 74 65 33 53 74 61 74 75 73 56 61 6c 75 65 28 69  te3StatusValue(i
21560 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21570 33 53 74 61 74 75 73 55 70 28 69 6e 74 2c 20 69  3StatusUp(int, i
21580 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
21590 33 53 74 61 74 75 73 44 6f 77 6e 28 69 6e 74 2c  3StatusDown(int,
215a0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
215b0 74 65 33 53 74 61 74 75 73 53 65 74 28 69 6e 74  te3StatusSet(int
215c0 2c 20 69 6e 74 29 3b 0a 0a 2f 2a 20 41 63 63 65  , int);../* Acce
215d0 73 73 20 74 6f 20 6d 75 74 65 78 65 73 20 75 73  ss to mutexes us
215e0 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73 74  ed by sqlite3_st
215f0 61 74 75 73 28 29 20 2a 2f 0a 73 71 6c 69 74 65  atus() */.sqlite
21600 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33  3_mutex *sqlite3
21610 50 63 61 63 68 65 31 4d 75 74 65 78 28 76 6f 69  Pcache1Mutex(voi
21620 64 29 3b 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65  d);.sqlite3_mute
21630 78 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  x *sqlite3Malloc
21640 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 0a 23 69  Mutex(void);..#i
21650 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
21660 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
21670 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73  .  int sqlite3Is
21680 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c  NaN(double);.#el
21690 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
216a0 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23  te3IsNaN(X)  0.#
216b0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
216c0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
216d0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
216e0 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d  ure holds inform
216f0 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a  ation about SQL.
21700 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67  ** functions arg
21710 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65 20  uments that are 
21720 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 74  the parameters t
21730 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29 20 66  o the printf() f
21740 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  unction..*/.stru
21750 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e  ct PrintfArgumen
21760 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b  ts {.  int nArg;
21770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21780 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20  /* Total number 
21790 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
217a0 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20    int nUsed;    
217b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
217c0 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
217d0 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f  s used so far */
217e0 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
217f0 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54   **apArg;   /* T
21800 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75  he argument valu
21810 65 73 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69 6e  es */.};..#defin
21820 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
21830 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 0a 23 64  INTERNAL 0x01.#d
21840 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49  efine SQLITE_PRI
21850 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78 30  NTF_SQLFUNC  0x0
21860 32 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58  2.void sqlite3VX
21870 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a  Printf(StrAccum*
21880 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20 63 68 61  , u32, const cha
21890 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f  r*, va_list);.vo
218a0 69 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74  id sqlite3XPrint
218b0 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 75 33 32  f(StrAccum*, u32
218c0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
218d0 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ..);.char *sqlit
218e0 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65  e3MPrintf(sqlite
218f0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
21900 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ...);.char *sqli
21910 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69  te3VMPrintf(sqli
21920 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
21930 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66 20  , va_list);.#if 
21940 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
21950 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
21960 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f  (SQLITE_HAVE_OS_
21970 54 52 41 43 45 29 0a 20 20 76 6f 69 64 20 73 71  TRACE).  void sq
21980 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
21990 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e  (const char*, ..
219a0 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  .);.#endif.#if d
219b0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
219c0 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  ST).  void *sqli
219d0 74 65 33 54 65 73 74 54 65 78 74 54 6f 50 74 72  te3TestTextToPtr
219e0 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  (const char*);.#
219f0 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
21a00 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
21a10 0a 20 20 54 72 65 65 56 69 65 77 20 2a 73 71 6c  .  TreeView *sql
21a20 69 74 65 33 54 72 65 65 56 69 65 77 50 75 73 68  ite3TreeViewPush
21a30 28 54 72 65 65 56 69 65 77 2a 2c 75 38 29 3b 0a  (TreeView*,u8);.
21a40 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
21a50 65 65 56 69 65 77 50 6f 70 28 54 72 65 65 56 69  eeViewPop(TreeVi
21a60 65 77 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ew*);.  void sql
21a70 69 74 65 33 54 72 65 65 56 69 65 77 4c 69 6e 65  ite3TreeViewLine
21a80 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
21a90 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 20  t char*, ...);. 
21aa0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
21ab0 65 56 69 65 77 49 74 65 6d 28 54 72 65 65 56 69  eViewItem(TreeVi
21ac0 65 77 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ew*, const char*
21ad0 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71  , u8);.  void sq
21ae0 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70  lite3TreeViewExp
21af0 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  r(TreeView*, con
21b00 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20  st Expr*, u8);. 
21b10 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
21b20 65 56 69 65 77 45 78 70 72 4c 69 73 74 28 54 72  eViewExprList(Tr
21b30 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45  eeView*, const E
21b40 78 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f  xprList*, u8, co
21b50 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
21b60 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
21b70 65 77 53 65 6c 65 63 74 28 54 72 65 65 56 69 65  ewSelect(TreeVie
21b80 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63 74  w*, const Select
21b90 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a  *, u8);.#endif..
21ba0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74  .void sqlite3Set
21bb0 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20  String(char **, 
21bc0 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
21bd0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
21be0 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72  ite3ErrorMsg(Par
21bf0 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
21c00 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20 73 71 6c 69  , ...);.int sqli
21c10 74 65 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a  te3Dequote(char*
21c20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65  );.int sqlite3Ke
21c30 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20  ywordCode(const 
21c40 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20  unsigned char*, 
21c50 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
21c60 33 52 75 6e 50 61 72 73 65 72 28 50 61 72 73 65  3RunParser(Parse
21c70 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
21c80 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73  char **);.void s
21c90 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69  qlite3FinishCodi
21ca0 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20  ng(Parse*);.int 
21cb0 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65  sqlite3GetTempRe
21cc0 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  g(Parse*);.void 
21cd0 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
21ce0 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74  mpReg(Parse*,int
21cf0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
21d00 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65  tTempRange(Parse
21d10 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
21d20 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52  ite3ReleaseTempR
21d30 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c  ange(Parse*,int,
21d40 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
21d50 65 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61  e3ClearTempRegCa
21d60 63 68 65 28 50 61 72 73 65 2a 29 3b 0a 45 78 70  che(Parse*);.Exp
21d70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c  r *sqlite3ExprAl
21d80 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  loc(sqlite3*,int
21d90 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e  ,const Token*,in
21da0 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
21db0 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69  3Expr(sqlite3*,i
21dc0 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
21dd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
21de0 72 41 74 74 61 63 68 53 75 62 74 72 65 65 73 28  rAttachSubtrees(
21df0 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45  sqlite3*,Expr*,E
21e00 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70  xpr*,Expr*);.Exp
21e10 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28  r *sqlite3PExpr(
21e20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Parse*, int, Exp
21e30 72 2a 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74  r*, Expr*, const
21e40 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a   Token*);.Expr *
21e50 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73  sqlite3ExprAnd(s
21e60 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45  qlite3*,Expr*, E
21e70 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  xpr*);.Expr *sql
21e80 69 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e  ite3ExprFunction
21e90 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
21ea0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
21eb0 20 73 71 6c 69 74 65 33 45 78 70 72 41 73 73 69   sqlite3ExprAssi
21ec0 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73  gnVarNumber(Pars
21ed0 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
21ee0 20 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65   sqlite3ExprDele
21ef0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70  te(sqlite3*, Exp
21f00 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73  r*);.ExprList *s
21f10 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70  qlite3ExprListAp
21f20 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72  pend(Parse*,Expr
21f30 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f  List*,Expr*);.vo
21f40 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
21f50 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a  stSetName(Parse*
21f60 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e  ,ExprList*,Token
21f70 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
21f80 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53  ite3ExprListSetS
21f90 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  pan(Parse*,ExprL
21fa0 69 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b  ist*,ExprSpan*);
21fb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
21fc0 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  rListDelete(sqli
21fd0 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  te3*, ExprList*)
21fe0 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 45 78 70  ;.u32 sqlite3Exp
21ff0 72 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e 73 74  rListFlags(const
22000 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
22010 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c   sqlite3Init(sql
22020 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  ite3*, char**);.
22030 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43  int sqlite3InitC
22040 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69  allback(void*, i
22050 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72  nt, char**, char
22060 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
22070 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54  3Pragma(Parse*,T
22080 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  oken*,Token*,Tok
22090 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  en*,int);.void s
220a0 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63  qlite3ResetAllSc
220b0 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f  hemasOfConnectio
220c0 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  n(sqlite3*);.voi
220d0 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e  d sqlite3ResetOn
220e0 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a  eSchema(sqlite3*
220f0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
22100 74 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62  te3CollapseDatab
22110 61 73 65 41 72 72 61 79 28 73 71 6c 69 74 65 33  aseArray(sqlite3
22120 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22130 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65  BeginParse(Parse
22140 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
22150 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e  ite3CommitIntern
22160 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65  alChanges(sqlite
22170 33 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  3*);.Table *sqli
22180 74 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65  te3ResultSetOfSe
22190 6c 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65  lect(Parse*,Sele
221a0 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ct*);.void sqlit
221b0 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c  e3OpenMasterTabl
221c0 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b  e(Parse *, int);
221d0 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50  .Index *sqlite3P
221e0 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54  rimaryKeyIndex(T
221f0 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69  able*);.i16 sqli
22200 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78  te3ColumnOfIndex
22210 28 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76  (Index*, i16);.v
22220 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 72 74  oid sqlite3Start
22230 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b  Table(Parse*,Tok
22240 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69  en*,Token*,int,i
22250 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69  nt,int,int);.voi
22260 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75  d sqlite3AddColu
22270 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  mn(Parse*,Token*
22280 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
22290 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a  ddNotNull(Parse*
222a0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
222b0 69 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65  ite3AddPrimaryKe
222c0 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
222d0 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  st*, int, int, i
222e0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
222f0 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61  3AddCheckConstra
22300 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  int(Parse*, Expr
22310 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22320 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61  AddColumnType(Pa
22330 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  rse*,Token*);.vo
22340 69 64 20 73 71 6c 69 74 65 33 41 64 64 44 65 66  id sqlite3AddDef
22350 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a  aultValue(Parse*
22360 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69  ,ExprSpan*);.voi
22370 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c  d sqlite3AddColl
22380 61 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20  ateType(Parse*, 
22390 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
223a0 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61  lite3EndTable(Pa
223b0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
223c0 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a  n*,u8,Select*);.
223d0 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
223e0 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  Uri(const char*,
223f0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69  const char*,unsi
22400 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20  gned int*,.     
22410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
22420 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61  qlite3_vfs**,cha
22430 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74  r**,char **);.Bt
22440 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61  ree *sqlite3DbNa
22450 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65  meToBtree(sqlite
22460 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  3*,const char*);
22470 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65  .int sqlite3Code
22480 4f 6e 63 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a  Once(Parse *);..
22490 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
224a0 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
224b0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
224c0 46 61 75 6c 74 53 69 6d 28 58 29 20 53 51 4c 49  FaultSim(X) SQLI
224d0 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e  TE_OK.#else.  in
224e0 74 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  t sqlite3FaultSi
224f0 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  m(int);.#endif..
22500 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33 42  Bitvec *sqlite3B
22510 69 74 76 65 63 43 72 65 61 74 65 28 75 33 32 29  itvecCreate(u32)
22520 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
22530 76 65 63 54 65 73 74 28 42 69 74 76 65 63 2a 2c  vecTest(Bitvec*,
22540 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74   u32);.int sqlit
22550 65 33 42 69 74 76 65 63 53 65 74 28 42 69 74 76  e3BitvecSet(Bitv
22560 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20  ec*, u32);.void 
22570 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65  sqlite3BitvecCle
22580 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c  ar(Bitvec*, u32,
22590 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71   void*);.void sq
225a0 6c 69 74 65 33 42 69 74 76 65 63 44 65 73 74 72  lite3BitvecDestr
225b0 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32  oy(Bitvec*);.u32
225c0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 69   sqlite3BitvecSi
225d0 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 69 6e 74  ze(Bitvec*);.int
225e0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42 75   sqlite3BitvecBu
225f0 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e  iltinTest(int,in
22600 74 2a 29 3b 0a 0a 52 6f 77 53 65 74 20 2a 73 71  t*);..RowSet *sq
22610 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28  lite3RowSetInit(
22620 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c  sqlite3*, void*,
22630 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a   unsigned int);.
22640 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53  void sqlite3RowS
22650 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a 29  etClear(RowSet*)
22660 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
22670 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65  wSetInsert(RowSe
22680 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71  t*, i64);.int sq
22690 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28  lite3RowSetTest(
226a0 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61  RowSet*, int iBa
226b0 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  tch, i64);.int s
226c0 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
226d0 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b  (RowSet*, i64*);
226e0 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ..void sqlite3Cr
226f0 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c  eateView(Parse*,
22700 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Token*,Token*,To
22710 6b 65 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74  ken*,Select*,int
22720 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66  ,int);..#if !def
22730 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
22740 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e  _VIEW) || !defin
22750 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
22760 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69  IRTUALTABLE).  i
22770 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77 47 65  nt sqlite3ViewGe
22780 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72  tColumnNames(Par
22790 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c  se*,Table*);.#el
227a0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
227b0 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
227c0 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e  Names(A,B) 0.#en
227d0 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  dif..#if SQLITE_
227e0 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a  MAX_ATTACHED>30.
227f0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d    int sqlite3DbM
22800 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61  askAllZero(yDbMa
22810 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  sk);.#endif.void
22820 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c   sqlite3DropTabl
22830 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
22840 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  t*, int, int);.v
22850 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44  oid sqlite3CodeD
22860 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
22870 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
22880 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22890 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69  DeleteTable(sqli
228a0 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23  te3*, Table*);.#
228b0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
228c0 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
228d0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
228e0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69  utoincrementBegi
228f0 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  n(Parse *pParse)
22900 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
22910 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
22920 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
22930 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
22940 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
22950 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64  mentBegin(X).# d
22960 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
22970 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29  oincrementEnd(X)
22980 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
22990 69 74 65 33 49 6e 73 65 72 74 28 50 61 72 73 65  ite3Insert(Parse
229a0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c  *, SrcList*, Sel
229b0 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69  ect*, IdList*, i
229c0 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
229d0 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28  e3ArrayAllocate(
229e0 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69  sqlite3*,void*,i
229f0 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49  nt,int*,int*);.I
22a00 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64  dList *sqlite3Id
22a10 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74  ListAppend(sqlit
22a20 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f  e3*, IdList*, To
22a30 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
22a40 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64  e3IdListIndex(Id
22a50 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72  List*,const char
22a60 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  *);.SrcList *sql
22a70 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72  ite3SrcListEnlar
22a80 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  ge(sqlite3*, Src
22a90 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  List*, int, int)
22aa0 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
22ab0 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28  e3SrcListAppend(
22ac0 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
22ad0 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  t*, Token*, Toke
22ae0 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  n*);.SrcList *sq
22af0 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65  lite3SrcListAppe
22b00 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65  ndFromTerm(Parse
22b10 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
22b20 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20  en*, 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 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63     Token*, Selec
22b60 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73  t*, Expr*, IdLis
22b70 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
22b80 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42  3SrcListIndexedB
22b90 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69  y(Parse *, SrcLi
22ba0 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a  st *, Token *);.
22bb0 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78  int sqlite3Index
22bc0 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65  edByLookup(Parse
22bd0 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69   *, struct SrcLi
22be0 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64  st_item *);.void
22bf0 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53   sqlite3SrcListS
22c00 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63  hiftJoinType(Src
22c10 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
22c20 69 74 65 33 53 72 63 4c 69 73 74 41 73 73 69 67  ite3SrcListAssig
22c30 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c  nCursors(Parse*,
22c40 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64   SrcList*);.void
22c50 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65   sqlite3IdListDe
22c60 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49  lete(sqlite3*, I
22c70 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  dList*);.void sq
22c80 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65  lite3SrcListDele
22c90 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  te(sqlite3*, Src
22ca0 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73  List*);.Index *s
22cb0 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e  qlite3AllocateIn
22cc0 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65  dexObject(sqlite
22cd0 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a  3*,i16,int,char*
22ce0 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  *);.Index *sqlit
22cf0 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50 61  e3CreateIndex(Pa
22d00 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
22d10 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  n*,SrcList*,Expr
22d20 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a  List*,int,Token*
22d30 2c 0a 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 20 45 78 70 72              Expr
22d50 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
22d60 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e  id sqlite3DropIn
22d70 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  dex(Parse*, SrcL
22d80 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ist*, int);.int 
22d90 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61  sqlite3Select(Pa
22da0 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53  rse*, Select*, S
22db0 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c  electDest*);.Sel
22dc0 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65  ect *sqlite3Sele
22dd0 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70  ctNew(Parse*,Exp
22de0 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  rList*,SrcList*,
22df0 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
22e00 0a 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 20 45 78 70 72 2a 2c            Expr*,
22e20 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45 78  ExprList*,u16,Ex
22e30 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64  pr*,Expr*);.void
22e40 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65   sqlite3SelectDe
22e50 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  lete(sqlite3*, S
22e60 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a  elect*);.Table *
22e70 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f  sqlite3SrcListLo
22e80 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63  okup(Parse*, Src
22e90 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
22ea0 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61  te3IsReadOnly(Pa
22eb0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
22ec0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
22ed0 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a  OpenTable(Parse*
22ee0 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20  , int iCur, int 
22ef0 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  iDb, Table*, int
22f00 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
22f10 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44  QLITE_ENABLE_UPD
22f20 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54  ATE_DELETE_LIMIT
22f30 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
22f40 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45  LITE_OMIT_SUBQUE
22f50 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  RY).Expr *sqlite
22f60 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72 73  3LimitWhere(Pars
22f70 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  e*,SrcList*,Expr
22f80 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
22f90 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a  *,Expr*,char*);.
22fa0 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
22fb0 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61  te3DeleteFrom(Pa
22fc0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
22fd0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
22fe0 69 74 65 33 55 70 64 61 74 65 28 50 61 72 73 65  ite3Update(Parse
22ff0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
23000 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69  rList*, Expr*, i
23010 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a  nt);.WhereInfo *
23020 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69  sqlite3WhereBegi
23030 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  n(Parse*,SrcList
23040 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
23050 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c  *,ExprList*,u16,
23060 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
23070 65 33 57 68 65 72 65 45 6e 64 28 57 68 65 72 65  e3WhereEnd(Where
23080 49 6e 66 6f 2a 29 3b 0a 75 36 34 20 73 71 6c 69  Info*);.u64 sqli
23090 74 65 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f  te3WhereOutputRo
230a0 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f  wCount(WhereInfo
230b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
230c0 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 57  hereIsDistinct(W
230d0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
230e0 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72  sqlite3WhereIsOr
230f0 64 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a  dered(WhereInfo*
23100 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
23110 65 72 65 49 73 53 6f 72 74 65 64 28 57 68 65 72  ereIsSorted(Wher
23120 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
23130 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75  ite3WhereContinu
23140 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  eLabel(WhereInfo
23150 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
23160 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57  hereBreakLabel(W
23170 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
23180 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e  sqlite3WhereOkOn
23190 65 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a  ePass(WhereInfo*
231a0 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
231b0 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
231c0 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61  olumn(Parse*, Ta
231d0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
231e0 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  int, u8);.void s
231f0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
23200 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56  tColumnOfTable(V
23210 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  dbe*, Table*, in
23220 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
23230 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
23240 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69  deMove(Parse*, i
23250 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
23260 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
23270 61 63 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a  acheStore(Parse*
23280 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
23290 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
232a0 70 72 43 61 63 68 65 50 75 73 68 28 50 61 72 73  prCachePush(Pars
232b0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
232c0 33 45 78 70 72 43 61 63 68 65 50 6f 70 28 50 61  3ExprCachePop(Pa
232d0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
232e0 74 65 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f  te3ExprCacheRemo
232f0 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  ve(Parse*, int, 
23300 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
23310 65 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72  e3ExprCacheClear
23320 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
23330 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 41  qlite3ExprCacheA
23340 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61  ffinityChange(Pa
23350 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
23360 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
23370 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78  rCode(Parse*, Ex
23380 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
23390 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46  sqlite3ExprCodeF
233a0 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a  actorable(Parse*
233b0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
233c0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
233d0 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a  odeAtInit(Parse*
233e0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38  , Expr*, int, u8
233f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
23400 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65  prCodeTemp(Parse
23410 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  *, Expr*, int*);
23420 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
23430 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65  CodeTarget(Parse
23440 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
23450 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23460 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72  CodeAndCache(Par
23470 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
23480 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
23490 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61  rCodeExprList(Pa
234a0 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
234b0 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69   int, u8);.#defi
234c0 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44  ne SQLITE_ECEL_D
234d0 55 50 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a  UP      0x01  /*
234e0 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c   Deep, not shall
234f0 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65  ow copies */.#de
23500 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
23510 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32 20 20  _FACTOR   0x02  
23520 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f  /* Factor out co
23530 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a  nstant terms */.
23540 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
23550 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45  IfTrue(Parse*, E
23560 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
23570 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
23580 72 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c  rIfFalse(Parse*,
23590 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
235a0 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
235b0 33 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74  3FindTable(sqlit
235c0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
235d0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54   const char*);.T
235e0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63  able *sqlite3Loc
235f0 61 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ateTable(Parse*,
23600 69 6e 74 20 69 73 56 69 65 77 2c 63 6f 6e 73 74  int isView,const
23610 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
23620 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ar*);.Table *sql
23630 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49  ite3LocateTableI
23640 74 65 6d 28 50 61 72 73 65 2a 2c 69 6e 74 20 69  tem(Parse*,int i
23650 73 56 69 65 77 2c 73 74 72 75 63 74 20 53 72 63  sView,struct Src
23660 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e  List_item *);.In
23670 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  dex *sqlite3Find
23680 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63  Index(sqlite3*,c
23690 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
236a0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
236b0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
236c0 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
236d0 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
236e0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
236f0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
23700 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  eIndex(sqlite3*,
23710 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
23720 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
23730 63 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e  cuum(Parse*);.in
23740 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75  t sqlite3RunVacu
23750 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74  um(char**, sqlit
23760 65 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  e3*);.char *sqli
23770 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e  te3NameFromToken
23780 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
23790 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
237a0 78 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72 2a  xprCompare(Expr*
237b0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
237c0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  nt sqlite3ExprLi
237d0 73 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69  stCompare(ExprLi
237e0 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  st*, ExprList*, 
237f0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
23800 33 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72  3ExprImpliesExpr
23810 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69  (Expr*, Expr*, i
23820 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
23830 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72  3ExprAnalyzeAggr
23840 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65  egates(NameConte
23850 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  xt*, Expr*);.voi
23860 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61  d sqlite3ExprAna
23870 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65  lyzeAggList(Name
23880 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73  Context*,ExprLis
23890 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
238a0 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73  FunctionUsesThis
238b0 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69  Src(Expr*, SrcLi
238c0 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69  st*);.Vdbe *sqli
238d0 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65  te3GetVdbe(Parse
238e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
238f0 50 72 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f  PrngSaveState(vo
23900 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
23910 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74  3PrngRestoreStat
23920 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  e(void);.void sq
23930 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c  lite3RollbackAll
23940 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
23950 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
23960 56 65 72 69 66 79 53 63 68 65 6d 61 28 50 61 72  VerifySchema(Par
23970 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
23980 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
23990 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61 72  yNamedSchema(Par
239a0 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  se*, const char 
239b0 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69  *zDb);.void sqli
239c0 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74  te3BeginTransact
239d0 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ion(Parse*, int)
239e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
239f0 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f 6e 28  mmitTransaction(
23a00 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
23a10 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61  lite3RollbackTra
23a20 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29  nsaction(Parse*)
23a30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 61  ;.void sqlite3Sa
23a40 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20  vepoint(Parse*, 
23a50 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  int, Token*);.vo
23a60 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53  id sqlite3CloseS
23a70 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65  avepoints(sqlite
23a80 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  3 *);.void sqlit
23a90 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43  e3LeaveMutexAndC
23aa0 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74  loseZombie(sqlit
23ab0 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
23ac0 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28  3ExprIsConstant(
23ad0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
23ae0 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
23af0 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b  tNotJoin(Expr*);
23b00 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
23b10 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63  IsConstantOrFunc
23b20 74 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b  tion(Expr*, u8);
23b30 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
23b40 49 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28  IsTableConstant(
23b50 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20  Expr*,int);.int 
23b60 73 71 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74  sqlite3ExprIsInt
23b70 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a  eger(Expr*, int*
23b80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
23b90 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73  prCanBeNull(cons
23ba0 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  t Expr*);.int sq
23bb0 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f  lite3ExprNeedsNo
23bc0 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63  AffinityChange(c
23bd0 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72  onst Expr*, char
23be0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
23bf0 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72  Rowid(const char
23c00 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23c10 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74  GenerateRowDelet
23c20 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  e(Parse*,Table*,
23c30 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74  Trigger*,int,int
23c40 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75  ,int,i16,u8,u8,u
23c50 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
23c60 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78  GenerateRowIndex
23c70 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54  Delete(Parse*, T
23c80 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
23c90 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
23ca0 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78  te3GenerateIndex
23cb0 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64 65  Key(Parse*, Inde
23cc0 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  x*, int, int, in
23cd0 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69  t, int*,Index*,i
23ce0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
23cf0 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78 4c  3ResolvePartIdxL
23d00 61 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29  abel(Parse*,int)
23d10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
23d20 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74  nerateConstraint
23d30 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61  Checks(Parse*,Ta
23d40 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e  ble*,int*,int,in
23d50 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20  t,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 20                  
23d80 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b  u8,u8,int,int*);
23d90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
23da0 70 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50  pleteInsertion(P
23db0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
23dc0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e  ,int,int,int*,in
23dd0 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20  t,int,int);.int 
23de0 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
23df0 41 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73 65  AndIndices(Parse
23e00 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
23e10 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20  int, u8*, int*, 
23e20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  int*);.void sqli
23e30 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65  te3BeginWriteOpe
23e40 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69  ration(Parse*, i
23e50 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
23e60 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65  qlite3MultiWrite
23e70 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
23e80 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50  qlite3MayAbort(P
23e90 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
23ea0 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69  ite3HaltConstrai
23eb0 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
23ec0 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20  int, char*, i8, 
23ed0 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
23ee0 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e  3UniqueConstrain
23ef0 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49  t(Parse*, int, I
23f00 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
23f10 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61  ite3RowidConstra
23f20 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
23f30 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a   Table*);.Expr *
23f40 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 73  sqlite3ExprDup(s
23f50 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
23f60 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  t);.ExprList *sq
23f70 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70  lite3ExprListDup
23f80 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69  (sqlite3*,ExprLi
23f90 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73  st*,int);.SrcLis
23fa0 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
23fb0 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72  tDup(sqlite3*,Sr
23fc0 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c  cList*,int);.IdL
23fd0 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
23fe0 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49  stDup(sqlite3*,I
23ff0 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20  dList*);.Select 
24000 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75  *sqlite3SelectDu
24010 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
24020 74 2a 2c 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c  t*,int);.#if SEL
24030 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
24040 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
24050 65 63 74 53 65 74 4e 61 6d 65 28 53 65 6c 65 63  ectSetName(Selec
24060 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  t*,const char*);
24070 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
24080 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74  sqlite3SelectSet
24090 4e 61 6d 65 28 41 2c 42 29 0a 23 65 6e 64 69 66  Name(A,B).#endif
240a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 75 6e  .void sqlite3Fun
240b0 63 44 65 66 49 6e 73 65 72 74 28 46 75 6e 63 44  cDefInsert(FuncD
240c0 65 66 48 61 73 68 2a 2c 20 46 75 6e 63 44 65 66  efHash*, FuncDef
240d0 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c  *);.FuncDef *sql
240e0 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e  ite3FindFunction
240f0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
24100 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38  char*,int,int,u8
24110 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ,u8);.void sqlit
24120 65 33 52 65 67 69 73 74 65 72 42 75 69 6c 74 69  e3RegisterBuilti
24130 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74  nFunctions(sqlit
24140 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
24150 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54 69  e3RegisterDateTi
24160 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  meFunctions(void
24170 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
24180 65 67 69 73 74 65 72 47 6c 6f 62 61 6c 46 75 6e  egisterGlobalFun
24190 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e  ctions(void);.in
241a0 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
241b0 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29  heckOk(sqlite3*)
241c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66  ;.int sqlite3Saf
241d0 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b  etyCheckSickOrOk
241e0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
241f0 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f   sqlite3ChangeCo
24200 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  okie(Parse*, int
24210 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  );..#if !defined
24220 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45  (SQLITE_OMIT_VIE
24230 57 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  W) && !defined(S
24240 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
24250 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ER).void sqlite3
24260 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28  MaterializeView(
24270 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
24280 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e  Expr*, int);.#en
24290 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
242a0 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
242b0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42  .  void sqlite3B
242c0 65 67 69 6e 54 72 69 67 67 65 72 28 50 61 72 73  eginTrigger(Pars
242d0 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  e*, Token*,Token
242e0 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74  *,int,int,IdList
242f0 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 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 20 45 78 70 72 2a 2c 69 6e 74         Expr*,int
24320 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
24330 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69 67  qlite3FinishTrig
24340 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  ger(Parse*, Trig
24350 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a  gerStep*, Token*
24360 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
24370 33 44 72 6f 70 54 72 69 67 67 65 72 28 50 61 72  3DropTrigger(Par
24380 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
24390 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
243a0 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74  te3DropTriggerPt
243b0 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
243c0 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  r*);.  Trigger *
243d0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45  sqlite3TriggersE
243e0 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61  xist(Parse *, Ta
243f0 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  ble*, int, ExprL
24400 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b  ist*, int *pMask
24410 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71  );.  Trigger *sq
24420 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74  lite3TriggerList
24430 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20  (Parse *, Table 
24440 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
24450 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
24460 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
24470 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73   *, int, ExprLis
24480 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a  t*, int, Table *
24490 2c 0a 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 20 69 6e                in
244b0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  t, int, int);.  
244c0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
244d0 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74  RowTriggerDirect
244e0 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65  (Parse *, Trigge
244f0 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e  r *, Table *, in
24500 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  t, int, int);.  
24510 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77 54  void sqliteViewT
24520 72 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20  riggers(Parse*, 
24530 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Table*, Expr*, i
24540 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  nt, ExprList*);.
24550 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
24560 6c 65 74 65 54 72 69 67 67 65 72 53 74 65 70 28  leteTriggerStep(
24570 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65  sqlite3*, Trigge
24580 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67  rStep*);.  Trigg
24590 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
245a0 72 69 67 67 65 72 53 65 6c 65 63 74 53 74 65 70  riggerSelectStep
245b0 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74  (sqlite3*,Select
245c0 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
245d0 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
245e0 72 49 6e 73 65 72 74 53 74 65 70 28 73 71 6c 69  rInsertStep(sqli
245f0 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c  te3*,Token*, IdL
24600 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
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 20 53 65                Se
24630 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69  lect*,u8);.  Tri
24640 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
24650 33 54 72 69 67 67 65 72 55 70 64 61 74 65 53 74  3TriggerUpdateSt
24660 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
24670 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  n*,ExprList*, Ex
24680 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69 67  pr*, u8);.  Trig
24690 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
246a0 54 72 69 67 67 65 72 44 65 6c 65 74 65 53 74 65  TriggerDeleteSte
246b0 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
246c0 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69  *, Expr*);.  voi
246d0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
246e0 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c  rigger(sqlite3*,
246f0 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f   Trigger*);.  vo
24700 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
24710 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
24720 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
24730 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33  nst char*);.  u3
24740 32 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  2 sqlite3Trigger
24750 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54  Colmask(Parse*,T
24760 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74  rigger*,ExprList
24770 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a  *,int,int,Table*
24780 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  ,int);.# define 
24790 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c  sqlite3ParseTopl
247a0 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54  evel(p) ((p)->pT
247b0 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70  oplevel ? (p)->p
247c0 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a  Toplevel : (p)).
247d0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
247e0 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78  qlite3TriggersEx
247f0 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30  ist(B,C,D,E,F) 0
24800 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24810 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41  3DeleteTrigger(A
24820 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,B).# define sql
24830 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50  ite3DropTriggerP
24840 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  tr(A,B).# define
24850 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
24860 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41  dDeleteTrigger(A
24870 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73  ,B,C).# define s
24880 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
24890 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  gger(A,B,C,D,E,F
248a0 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65  ,G,H,I).# define
248b0 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
248c0 72 69 67 67 65 72 44 69 72 65 63 74 28 41 2c 42  riggerDirect(A,B
248d0 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69  ,C,D,E,F).# defi
248e0 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
248f0 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20  rList(X, Y) 0.# 
24900 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61  define sqlite3Pa
24910 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70  rseToplevel(p) p
24920 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24930 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28  3TriggerColmask(
24940 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30  A,B,C,D,E,F,G) 0
24950 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c  .#endif..int sql
24960 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72  ite3JoinType(Par
24970 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
24980 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  en*, Token*);.vo
24990 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  id sqlite3Create
249a0 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65  ForeignKey(Parse
249b0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f  *, ExprList*, To
249c0 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ken*, ExprList*,
249d0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
249e0 74 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b  te3DeferForeignK
249f0 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ey(Parse*, int);
24a00 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
24a10 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49  OMIT_AUTHORIZATI
24a20 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ON.  void sqlite
24a30 33 41 75 74 68 52 65 61 64 28 50 61 72 73 65 2a  3AuthRead(Parse*
24a40 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53  ,Expr*,Schema*,S
24a50 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20  rcList*);.  int 
24a60 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b  sqlite3AuthCheck
24a70 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e  (Parse*,int, con
24a80 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
24a90 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
24aa0 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
24ab0 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75  te3AuthContextPu
24ac0 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43  sh(Parse*, AuthC
24ad0 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63  ontext*, const c
24ae0 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
24af0 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
24b00 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a  Pop(AuthContext*
24b10 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
24b20 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73  AuthReadCol(Pars
24b30 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  e*, const char *
24b40 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
24b50 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  int);.#else.# de
24b60 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
24b70 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20  Read(a,b,c,d).# 
24b80 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
24b90 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c  thCheck(a,b,c,d,
24ba0 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a  e)    SQLITE_OK.
24bb0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24bc0 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28  AuthContextPush(
24bd0 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20  a,b,c).# define 
24be0 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
24bf0 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64  xtPop(a)  ((void
24c00 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69  )(a)).#endif.voi
24c10 64 20 73 71 6c 69 74 65 33 41 74 74 61 63 68 28  d sqlite3Attach(
24c20 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45  Parse*, Expr*, E
24c30 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  xpr*, Expr*);.vo
24c40 69 64 20 73 71 6c 69 74 65 33 44 65 74 61 63 68  id sqlite3Detach
24c50 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
24c60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 78  .void sqlite3Fix
24c70 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50  Init(DbFixer*, P
24c80 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  arse*, int, cons
24c90 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54  t char*, const T
24ca0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
24cb0 74 65 33 46 69 78 53 72 63 4c 69 73 74 28 44 62  te3FixSrcList(Db
24cc0 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a  Fixer*, SrcList*
24cd0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
24ce0 78 53 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a  xSelect(DbFixer*
24cf0 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
24d00 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 28 44  sqlite3FixExpr(D
24d10 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b  bFixer*, Expr*);
24d20 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45  .int sqlite3FixE
24d30 78 70 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a  xprList(DbFixer*
24d40 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
24d50 74 20 73 71 6c 69 74 65 33 46 69 78 54 72 69 67  t sqlite3FixTrig
24d60 67 65 72 53 74 65 70 28 44 62 46 69 78 65 72 2a  gerStep(DbFixer*
24d70 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b  , TriggerStep*);
24d80 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46  .int sqlite3AtoF
24d90 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20  (const char *z, 
24da0 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38  double*, int, u8
24db0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
24dc0 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61  tInt32(const cha
24dd0 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  r *, int*);.int 
24de0 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73  sqlite3Atoi(cons
24df0 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
24e00 6c 69 74 65 33 55 74 66 31 36 42 79 74 65 4c 65  lite3Utf16ByteLe
24e10 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44  n(const void *pD
24e20 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b  ata, int nChar);
24e30 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38  .int sqlite3Utf8
24e40 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68  CharLen(const ch
24e50 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e  ar *pData, int n
24e60 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74  Byte);.u32 sqlit
24e70 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74  e3Utf8Read(const
24e80 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73   u8**);.LogEst s
24e90 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34  qlite3LogEst(u64
24ea0 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  );.LogEst sqlite
24eb0 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73  3LogEstAdd(LogEs
24ec0 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64  t,LogEst);.#ifnd
24ed0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
24ee0 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45  IRTUALTABLE.LogE
24ef0 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  st sqlite3LogEst
24f00 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c  FromDouble(doubl
24f10 65 29 3b 0a 23 65 6e 64 69 66 0a 75 36 34 20 73  e);.#endif.u64 s
24f20 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e  qlite3LogEstToIn
24f30 74 28 4c 6f 67 45 73 74 29 3b 0a 0a 2f 2a 0a 2a  t(LogEst);../*.*
24f40 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65  * Routines to re
24f50 61 64 20 61 6e 64 20 77 72 69 74 65 20 76 61 72  ad and write var
24f60 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74  iable-length int
24f70 65 67 65 72 73 2e 20 20 54 68 65 73 65 20 75 73  egers.  These us
24f80 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69  ed to.** be defi
24f90 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74  ned locally, but
24fa0 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68 65 20   now we use the 
24fb0 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20  varint routines 
24fc0 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a  in the util.c.**
24fd0 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71   file..*/.int sq
24fe0 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 75  lite3PutVarint(u
24ff0 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75  nsigned char*, u
25000 36 34 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47  64);.u8 sqlite3G
25010 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75  etVarint(const u
25020 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
25030 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74  u64 *);.u8 sqlit
25040 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f  e3GetVarint32(co
25050 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
25060 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74  r *, u32 *);.int
25070 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65   sqlite3VarintLe
25080 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a  n(u64 v);../*.**
25090 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65   The common case
250a0 20 69 73 20 66 6f 72 20 61 20 76 61 72 69 6e 74   is for a varint
250b0 20 74 6f 20 62 65 20 61 20 73 69 6e 67 6c 65 20   to be a single 
250c0 62 79 74 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c  byte.  They foll
250d0 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20  owing.** macros 
250e0 68 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f  handle the commo
250f0 6e 20 63 61 73 65 20 77 69 74 68 6f 75 74 20 61  n case without a
25100 20 70 72 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c   procedure call,
25110 20 62 75 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a   but then call.*
25120 2a 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20  * the procedure 
25130 66 6f 72 20 6c 61 72 67 65 72 20 76 61 72 69 6e  for larger varin
25140 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67  ts..*/.#define g
25150 65 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20  etVarint32(A,B) 
25160 20 5c 0a 20 20 28 75 38 29 28 28 2a 28 41 29 3c   \.  (u8)((*(A)<
25170 28 75 38 29 30 78 38 30 29 3f 28 28 42 29 3d 28  (u8)0x80)?((B)=(
25180 75 33 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69  u32)*(A)),1:sqli
25190 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 28  te3GetVarint32((
251a0 41 29 2c 28 75 33 32 20 2a 29 26 28 42 29 29 29  A),(u32 *)&(B)))
251b0 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69  .#define putVari
251c0 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28  nt32(A,B)  \.  (
251d0 75 38 29 28 28 28 75 33 32 29 28 42 29 3c 28 75  u8)(((u32)(B)<(u
251e0 33 32 29 30 78 38 30 29 3f 28 2a 28 41 29 3d 28  32)0x80)?(*(A)=(
251f0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 42  unsigned char)(B
25200 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33  )),1:\.  sqlite3
25210 50 75 74 56 61 72 69 6e 74 28 28 41 29 2c 28 42  PutVarint((A),(B
25220 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56  ))).#define getV
25230 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33  arint    sqlite3
25240 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e  GetVarint.#defin
25250 65 20 70 75 74 56 61 72 69 6e 74 20 20 20 20 73  e putVarint    s
25260 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a  qlite3PutVarint.
25270 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ..const char *sq
25280 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69  lite3IndexAffini
25290 74 79 53 74 72 28 56 64 62 65 20 2a 2c 20 49 6e  tyStr(Vdbe *, In
252a0 64 65 78 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  dex *);.void sql
252b0 69 74 65 33 54 61 62 6c 65 41 66 66 69 6e 69 74  ite3TableAffinit
252c0 79 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c  y(Vdbe*, Table*,
252d0 20 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69   int);.char sqli
252e0 74 65 33 43 6f 6d 70 61 72 65 41 66 66 69 6e 69  te3CompareAffini
252f0 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20  ty(Expr *pExpr, 
25300 63 68 61 72 20 61 66 66 32 29 3b 0a 69 6e 74 20  char aff2);.int 
25310 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69  sqlite3IndexAffi
25320 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a 70 45 78  nityOk(Expr *pEx
25330 70 72 2c 20 63 68 61 72 20 69 64 78 5f 61 66 66  pr, char idx_aff
25340 69 6e 69 74 79 29 3b 0a 63 68 61 72 20 73 71 6c  inity);.char sql
25350 69 74 65 33 45 78 70 72 41 66 66 69 6e 69 74 79  ite3ExprAffinity
25360 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69  (Expr *pExpr);.i
25370 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34  nt sqlite3Atoi64
25380 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36  (const char*, i6
25390 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e  4*, int, u8);.in
253a0 74 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65  t sqlite3DecOrHe
253b0 78 54 6f 49 36 34 28 63 6f 6e 73 74 20 63 68 61  xToI64(const cha
253c0 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20  r*, i64*);.void 
253d0 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68  sqlite3ErrorWith
253e0 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  Msg(sqlite3*, in
253f0 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  t, const char*,.
25400 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
25410 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c  3Error(sqlite3*,
25420 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
25430 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c  te3HexToBlob(sql
25440 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ite3*, const cha
25450 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38  r *z, int n);.u8
25460 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74   sqlite3HexToInt
25470 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c  (int h);.int sql
25480 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28  ite3TwoPartName(
25490 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Parse *, Token *
254a0 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e  , Token *, Token
254b0 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e   **);..#if defin
254c0 65 64 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45  ed(SQLITE_NEED_E
254d0 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63  RR_NAME).const c
254e0 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e  har *sqlite3ErrN
254f0 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66  ame(int);.#endif
25500 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ..const char *sq
25510 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29  lite3ErrStr(int)
25520 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61  ;.int sqlite3Rea
25530 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70  dSchema(Parse *p
25540 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20  Parse);.CollSeq 
25550 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c  *sqlite3FindColl
25560 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20  Seq(sqlite3*,u8 
25570 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  enc, const char*
25580 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  ,int);.CollSeq *
25590 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c  sqlite3LocateCol
255a0 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72  lSeq(Parse *pPar
255b0 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a  se, const char*z
255c0 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  Name);.CollSeq *
255d0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53  sqlite3ExprCollS
255e0 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
255f0 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  , Expr *pExpr);.
25600 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
25610 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e  rAddCollateToken
25620 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
25630 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b  Expr*, const Tok
25640 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20  en*, int);.Expr 
25650 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43  *sqlite3ExprAddC
25660 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72  ollateString(Par
25670 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20  se*,Expr*,const 
25680 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  char*);.Expr *sq
25690 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c  lite3ExprSkipCol
256a0 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74  late(Expr*);.int
256b0 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c   sqlite3CheckCol
256c0 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f  lSeq(Parse *, Co
256d0 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71  llSeq *);.int sq
256e0 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74  lite3CheckObject
256f0 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f  Name(Parse *, co
25700 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69  nst char *);.voi
25710 64 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74  d sqlite3VdbeSet
25720 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20  Changes(sqlite3 
25730 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
25740 69 74 65 33 41 64 64 49 6e 74 36 34 28 69 36 34  ite3AddInt64(i64
25750 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
25760 74 65 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a  te3SubInt64(i64*
25770 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
25780 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c  e3MulInt64(i64*,
25790 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
257a0 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a  3AbsInt32(int);.
257b0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
257c0 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76  ABLE_8_3_NAMES.v
257d0 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53  oid sqlite3FileS
257e0 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61  uffix3(const cha
257f0 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73  r*, char*);.#els
25800 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
25810 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c  e3FileSuffix3(X,
25820 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c  Y).#endif.u8 sql
25830 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63  ite3GetBoolean(c
25840 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75 38 29  onst char *z,u8)
25850 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73  ;..const void *s
25860 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28  qlite3ValueText(
25870 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
25880 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
25890 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74  ValueBytes(sqlit
258a0 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a  e3_value*, u8);.
258b0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
258c0 65 53 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f  eSetStr(sqlite3_
258d0 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e  value*, int, con
258e0 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20  st void *,u8, . 
258f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25900 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76         void(*)(v
25910 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c  oid*));.void sql
25920 69 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c  ite3ValueSetNull
25930 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
25940 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
25950 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f  lueFree(sqlite3_
25960 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33  value*);.sqlite3
25970 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56  _value *sqlite3V
25980 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20  alueNew(sqlite3 
25990 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  *);.char *sqlite
259a0 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65  3Utf16to8(sqlite
259b0 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  3 *, const void*
259c0 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
259d0 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d  sqlite3ValueFrom
259e0 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20  Expr(sqlite3 *, 
259f0 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20  Expr *, u8, u8, 
25a00 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
25a10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
25a20 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74  alueApplyAffinit
25a30 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  y(sqlite3_value 
25a40 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e  *, u8, u8);.#ifn
25a50 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47  def SQLITE_AMALG
25a60 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63  AMATION.extern c
25a70 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
25a80 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65  ar sqlite3Opcode
25a90 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65  Property[];.exte
25aa0 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
25ab0 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 55 70  d char sqlite3Up
25ac0 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78  perToLower[];.ex
25ad0 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
25ae0 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
25af0 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65  CtypeMap[];.exte
25b00 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73  rn const Token s
25b10 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b  qlite3IntTokens[
25b20 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45  ];.extern SQLITE
25b30 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c 69  _WSD struct Sqli
25b40 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65  te3Config sqlite
25b50 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20  3Config;.extern 
25b60 53 51 4c 49 54 45 5f 57 53 44 20 46 75 6e 63 44  SQLITE_WSD FuncD
25b70 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 47 6c  efHash sqlite3Gl
25b80 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a 23  obalFunctions;.#
25b90 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
25ba0 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e  IT_WSD.extern in
25bb0 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67  t sqlite3Pending
25bc0 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e  Byte;.#endif.#en
25bd0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
25be0 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73 71  RootPageMoved(sq
25bf0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74  lite3*, int, int
25c00 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
25c10 69 74 65 33 52 65 69 6e 64 65 78 28 50 61 72 73  ite3Reindex(Pars
25c20 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
25c30 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
25c40 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73 28  3AlterFunctions(
25c50 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
25c60 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61  te3AlterRenameTa
25c70 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
25c80 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  ist*, Token*);.i
25c90 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b  nt sqlite3GetTok
25ca0 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  en(const unsigne
25cb0 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29  d char *, int *)
25cc0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65  ;.void sqlite3Ne
25cd0 73 74 65 64 50 61 72 73 65 28 50 61 72 73 65 2a  stedParse(Parse*
25ce0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
25cf0 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
25d00 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
25d10 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65  tatements(sqlite
25d20 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
25d30 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50 61  CodeSubselect(Pa
25d40 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69  rse *, Expr *, i
25d50 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
25d60 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65 70  qlite3SelectPrep
25d70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
25d80 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b  , NameContext*);
25d90 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63  .int sqlite3Matc
25da0 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20  hSpanName(const 
25db0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
25dc0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
25dd0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69   const char*);.i
25de0 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  nt sqlite3Resolv
25df0 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43  eExprNames(NameC
25e00 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b  ontext*, Expr*);
25e10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
25e20 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28  olveSelectNames(
25e30 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
25e40 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a   NameContext*);.
25e50 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
25e60 6c 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65  lveSelfReference
25e70 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69  (Parse*,Table*,i
25e80 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  nt,Expr*,ExprLis
25e90 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
25ea0 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75  ResolveOrderGrou
25eb0 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  pBy(Parse*, Sele
25ec0 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  ct*, ExprList*, 
25ed0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
25ee0 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  id sqlite3Column
25ef0 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20  Default(Vdbe *, 
25f00 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Table *, int, in
25f10 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25f20 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f  AlterFinishAddCo
25f30 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f  lumn(Parse *, To
25f40 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ken *);.void sql
25f50 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64  ite3AlterBeginAd
25f60 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c  dColumn(Parse *,
25f70 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c   SrcList *);.Col
25f80 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74  lSeq *sqlite3Get
25f90 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20  CollSeq(Parse*, 
25fa0 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63  u8, CollSeq *, c
25fb0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61  onst char*);.cha
25fc0 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74  r sqlite3Affinit
25fd0 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72  yType(const char
25fe0 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71  *, u8*);.void sq
25ff0 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72  lite3Analyze(Par
26000 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
26010 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
26020 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c  3InvokeBusyHandl
26030 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29  er(BusyHandler*)
26040 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  ;.int sqlite3Fin
26050 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f  dDb(sqlite3*, To
26060 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
26070 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c  e3FindDbName(sql
26080 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
26090 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar *);.int sqlit
260a0 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73  e3AnalysisLoad(s
260b0 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29  qlite3*,int iDB)
260c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
260d0 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73  leteIndexSamples
260e0 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a  (sqlite3*,Index*
260f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
26100 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64  efaultRowEst(Ind
26110 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
26120 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75  e3RegisterLikeFu
26130 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  nctions(sqlite3*
26140 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
26150 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f  te3IsLikeFunctio
26160 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  n(sqlite3*,Expr*
26170 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f  ,int*,char*);.vo
26180 69 64 20 73 71 6c 69 74 65 33 4d 69 6e 69 6d 75  id sqlite3Minimu
26190 6d 46 69 6c 65 46 6f 72 6d 61 74 28 50 61 72 73  mFileFormat(Pars
261a0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
261b0 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d  oid sqlite3Schem
261c0 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a  aClear(void *);.
261d0 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53  Schema *sqlite3S
261e0 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33  chemaGet(sqlite3
261f0 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e   *, Btree *);.in
26200 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54  t sqlite3SchemaT
26210 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a  oIndex(sqlite3 *
26220 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b  db, Schema *);.K
26230 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
26240 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69  eyInfoAlloc(sqli
26250 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76  te3*,int,int);.v
26260 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49 6e  oid sqlite3KeyIn
26270 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a  foUnref(KeyInfo*
26280 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
26290 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65  te3KeyInfoRef(Ke
262a0 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f  yInfo*);.KeyInfo
262b0 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
262c0 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  OfIndex(Parse*, 
262d0 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65 66 20  Index*);.#ifdef 
262e0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74  SQLITE_DEBUG.int
262f0 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49   sqlite3KeyInfoI
26300 73 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e  sWriteable(KeyIn
26310 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  fo*);.#endif.int
26320 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75   sqlite3CreateFu
26330 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  nc(sqlite3 *, co
26340 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c  nst char *, int,
26350 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a 20   int, void *, . 
26360 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
26370 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
26380 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
26390 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c  ,.  void (*)(sql
263a0 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
263b0 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
263c0 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71  **), void (*)(sq
263d0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c  lite3_context*),
263e0 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  .  FuncDestructo
263f0 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29  r *pDestructor.)
26400 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69  ;.int sqlite3Api
26410 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  Exit(sqlite3 *db
26420 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
26430 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62  te3OpenTempDatab
26440 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76  ase(Parse *);..v
26450 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
26460 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d  cumInit(StrAccum
26470 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 68 61  *, sqlite3*, cha
26480 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
26490 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
264a0 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63  cumAppend(StrAcc
264b0 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  um*,const char*,
264c0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
264d0 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
264e0 41 6c 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f  All(StrAccum*,co
264f0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
26500 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64 43 68   sqlite3AppendCh
26510 61 72 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74  ar(StrAccum*,int
26520 2c 63 68 61 72 29 3b 0a 63 68 61 72 20 2a 73 71  ,char);.char *sq
26530 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e  lite3StrAccumFin
26540 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a  ish(StrAccum*);.
26550 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
26560 63 63 75 6d 52 65 73 65 74 28 53 74 72 41 63 63  ccumReset(StrAcc
26570 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  um*);.void sqlit
26580 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74  e3SelectDestInit
26590 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74  (SelectDest*,int
265a0 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
265b0 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e  ite3CreateColumn
265c0 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20  Expr(sqlite3 *, 
265d0 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20  SrcList *, int, 
265e0 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  int);..void sqli
265f0 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72 74  te3BackupRestart
26600 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20  (sqlite3_backup 
26610 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26620 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c  BackupUpdate(sql
26630 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50  ite3_backup *, P
26640 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29  gno, const u8 *)
26650 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
26660 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
26670 5f 53 54 41 54 34 0a 76 6f 69 64 20 73 71 6c 69  _STAT4.void sqli
26680 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69  te3AnalyzeFuncti
26690 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73  ons(void);.int s
266a0 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65  qlite3Stat4Probe
266b0 53 65 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c  SetValue(Parse*,
266c0 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52  Index*,UnpackedR
266d0 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 75 38  ecord**,Expr*,u8
266e0 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20  ,int,int*);.int 
266f0 73 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c 75  sqlite3Stat4Valu
26700 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65 2a  eFromExpr(Parse*
26710 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c  , Expr*, u8, sql
26720 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76  ite3_value**);.v
26730 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 34  oid sqlite3Stat4
26740 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b  ProbeFree(Unpack
26750 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20  edRecord*);.int 
26760 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c 75  sqlite3Stat4Colu
26770 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  mn(sqlite3*, con
26780 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69  st void*, int, i
26790 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  nt, sqlite3_valu
267a0 65 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  e**);.#endif../*
267b0 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
267c0 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67  e to the LEMON-g
267d0 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72 0a  enerated parser.
267e0 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  */.void *sqlite3
267f0 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64  ParserAlloc(void
26800 2a 28 2a 29 28 75 36 34 29 29 3b 0a 76 6f 69 64  *(*)(u64));.void
26810 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46 72   sqlite3ParserFr
26820 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a  ee(void*, void(*
26830 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20  )(void*));.void 
26840 73 71 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f  sqlite3Parser(vo
26850 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c  id*, int, Token,
26860 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66   Parse*);.#ifdef
26870 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b   YYTRACKMAXSTACK
26880 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69  DEPTH.  int sqli
26890 74 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65  te3ParserStackPe
268a0 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69  ak(void*);.#endi
268b0 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  f..void sqlite3A
268c0 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  utoLoadExtension
268d0 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66  s(sqlite3*);.#if
268e0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
268f0 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a  _LOAD_EXTENSION.
26900 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c    void sqlite3Cl
26910 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oseExtensions(sq
26920 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23  lite3*);.#else.#
26930 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
26940 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58  loseExtensions(X
26950 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ).#endif..#ifnde
26960 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
26970 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69  ARED_CACHE.  voi
26980 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  d sqlite3TableLo
26990 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c  ck(Parse *, int,
269a0 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20   int, u8, const 
269b0 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20  char *);.#else. 
269c0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
269d0 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c  TableLock(v,w,x,
269e0 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  y,z).#endif..#if
269f0 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
26a00 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66    int sqlite3Utf
26a10 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68  8To8(unsigned ch
26a20 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
26a30 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
26a40 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
26a50 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
26a60 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64  tabClear(Y).#  d
26a70 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
26a80 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54  bSync(X,Y) SQLIT
26a90 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
26aa0 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
26ab0 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
26ac0 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
26ad0 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
26ae0 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
26af0 28 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65  (db) 0.#  define
26b00 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
26b10 28 58 29 20 0a 23 20 20 64 65 66 69 6e 65 20 73  (X) .#  define s
26b20 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
26b30 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
26b40 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
26b50 69 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ist(X).#  define
26b60 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
26b70 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53  point(X, Y, Z) S
26b80 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69  QLITE_OK.#  defi
26b90 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56 54 61  ne sqlite3GetVTa
26ba0 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61 62  ble(X,Y)  ((VTab
26bb0 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20  le*)0).#else.   
26bc0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
26bd0 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64  Clear(sqlite3 *d
26be0 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76  b, Table*);.   v
26bf0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 44  oid sqlite3VtabD
26c00 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65  isconnect(sqlite
26c10 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29  3 *db, Table *p)
26c20 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
26c30 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33  VtabSync(sqlite3
26c40 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20   *db, Vdbe*);.  
26c50 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
26c60 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33  Rollback(sqlite3
26c70 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71   *db);.   int sq
26c80 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28  lite3VtabCommit(
26c90 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
26ca0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
26cb0 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b  bLock(VTable *);
26cc0 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
26cd0 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c  VtabUnlock(VTabl
26ce0 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  e *);.   void sq
26cf0 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
26d00 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20  ist(sqlite3*);. 
26d10 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
26d20 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74  bSavepoint(sqlit
26d30 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  e3 *, int, int);
26d40 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
26d50 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
26d60 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f  (Vdbe*, sqlite3_
26d70 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c  vtab*);.   VTabl
26d80 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61  e *sqlite3GetVTa
26d90 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61  ble(sqlite3*, Ta
26da0 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65  ble*);.#  define
26db0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79   sqlite3VtabInSy
26dc0 6e 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56  nc(db) ((db)->nV
26dd0 54 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d  Trans>0 && (db)-
26de0 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e  >aVTrans==0).#en
26df0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
26e00 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65  VtabMakeWritable
26e10 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b  (Parse*,Table*);
26e20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
26e30 62 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73  bBeginParse(Pars
26e40 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
26e50 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29  n*, Token*, int)
26e60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
26e70 61 62 46 69 6e 69 73 68 50 61 72 73 65 28 50 61  abFinishParse(Pa
26e80 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  rse*, Token*);.v
26e90 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41  oid sqlite3VtabA
26ea0 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a  rgInit(Parse*);.
26eb0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
26ec0 41 72 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a  ArgExtend(Parse*
26ed0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
26ee0 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72  qlite3VtabCallCr
26ef0 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69  eate(sqlite3*, i
26f00 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
26f10 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20  , char **);.int 
26f20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
26f30 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54  onnect(Parse*, T
26f40 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  able*);.int sqli
26f50 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72  te3VtabCallDestr
26f60 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  oy(sqlite3*, int
26f70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
26f80 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
26f90 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c  Begin(sqlite3 *,
26fa0 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63   VTable *);.Func
26fb0 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62  Def *sqlite3Vtab
26fc0 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e  OverloadFunction
26fd0 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44  (sqlite3 *,FuncD
26fe0 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45  ef*, int nArg, E
26ff0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
27000 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69  te3InvalidFuncti
27010 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  on(sqlite3_conte
27020 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
27030 76 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65  value**);.sqlite
27040 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53  3_int64 sqlite3S
27050 74 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73  tmtCurrentTime(s
27060 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
27070 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  ;.int sqlite3Vdb
27080 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28  eParameterIndex(
27090 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Vdbe*, const cha
270a0 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
270b0 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e  lite3TransferBin
270c0 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74  dings(sqlite3_st
270d0 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74  mt *, sqlite3_st
270e0 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  mt *);.void sqli
270f0 74 65 33 50 61 72 73 65 72 52 65 73 65 74 28 50  te3ParserReset(P
27100 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  arse*);.int sqli
27110 74 65 33 52 65 70 72 65 70 61 72 65 28 56 64 62  te3Reprepare(Vdb
27120 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
27130 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65  3ExprListCheckLe
27140 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70  ngth(Parse*, Exp
27150 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
27160 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  ar*);.CollSeq *s
27170 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70  qlite3BinaryComp
27180 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  areCollSeq(Parse
27190 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72   *, Expr *, Expr
271a0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
271b0 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e  TempInMemory(con
271c0 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f  st sqlite3*);.co
271d0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
271e0 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65  3JournalModename
271f0 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  (int);.#ifndef S
27200 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
27210 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63   int sqlite3Chec
27220 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c  kpoint(sqlite3*,
27230 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
27240 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71   int*);.  int sq
27250 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48  lite3WalDefaultH
27260 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  ook(void*,sqlite
27270 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  3*,const char*,i
27280 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e  nt);.#endif.#ifn
27290 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
272a0 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69  CTE.  With *sqli
272b0 74 65 33 57 69 74 68 41 64 64 28 50 61 72 73 65  te3WithAdd(Parse
272c0 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45  *,With*,Token*,E
272d0 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a  xprList*,Select*
272e0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
272f0 33 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69  3WithDelete(sqli
27300 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76  te3*,With*);.  v
27310 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 50  oid sqlite3WithP
27320 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68  ush(Parse*, With
27330 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64  *, u8);.#else.#d
27340 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74  efine sqlite3Wit
27350 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65  hPush(x,y,z).#de
27360 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68  fine sqlite3With
27370 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64  Delete(x,y).#end
27380 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69  if../* Declarati
27390 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e  ons for function
273a0 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c  s in fkey.c. All
273b0 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72 65   of these are re
273c0 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d  placed by.** no-
273d0 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49  op macros if OMI
273e0 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73  T_FOREIGN_KEY is
273f0 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69   defined. In thi
27400 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67  s case no foreig
27410 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f  n.** key functio
27420 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61  nality is availa
27430 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49  ble. If OMIT_TRI
27440 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64 20  GGER is defined 
27450 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45  but.** OMIT_FORE
27460 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20  IGN_KEY is not, 
27470 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65  only some of the
27480 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e   functions are n
27490 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68  o-oped. In.** th
274a0 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20  is case foreign 
274b0 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64 2c  keys are parsed,
274c0 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75   but no other fu
274d0 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 0a  nctionality is .
274e0 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66  ** provided (enf
274f0 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63  orcement of FK c
27500 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75 69  onstraints requi
27510 72 65 73 20 74 68 65 20 74 72 69 67 67 65 72 73  res the triggers
27520 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f   sub-system)..*/
27530 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
27540 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
27550 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e  N_KEY) && !defin
27560 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ed(SQLITE_OMIT_T
27570 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73  RIGGER).  void s
27580 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61  qlite3FkCheck(Pa
27590 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
275a0 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
275b0 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
275c0 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61  e3FkDropTable(Pa
275d0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  rse*, SrcList *,
275e0 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64   Table*);.  void
275f0 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e   sqlite3FkAction
27600 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
27610 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
27620 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  , int*, int);.  
27630 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71  int sqlite3FkReq
27640 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61  uired(Parse*, Ta
27650 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29  ble*, int*, int)
27660 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 46  ;.  u32 sqlite3F
27670 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c  kOldmask(Parse*,
27680 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79   Table*);.  FKey
27690 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72   *sqlite3FkRefer
276a0 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a  ences(Table *);.
276b0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
276c0 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73  sqlite3FkActions
276d0 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20  (a,b,c,d,e,f).  
276e0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
276f0 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65  kCheck(a,b,c,d,e
27700 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,f).  #define sq
27710 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65  lite3FkDropTable
27720 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e  (a,b,c).  #defin
27730 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61  e sqlite3FkOldma
27740 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20 20  sk(a,b)         
27750 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  0.  #define sqli
27760 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c  te3FkRequired(a,
27770 62 2c 63 2c 64 29 20 20 20 20 30 0a 23 65 6e 64  b,c,d)    0.#end
27780 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
27790 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
277a0 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  EY.  void sqlite
277b0 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74 65  3FkDelete(sqlite
277c0 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  3 *, Table*);.  
277d0 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63  int sqlite3FkLoc
277e0 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ateIndex(Parse*,
277f0 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64  Table*,FKey*,Ind
27800 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c  ex**,int**);.#el
27810 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
27820 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62  ite3FkDelete(a,b
27830 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
27840 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
27850 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64  (a,b,c,d,e).#end
27860 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c  if.../*.** Avail
27870 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63  able fault injec
27880 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65  tors.  Should be
27890 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e   numbered beginn
278a0 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23  ing with 0..*/.#
278b0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41  define SQLITE_FA
278c0 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c  ULTINJECTOR_MALL
278d0 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65  OC     0.#define
278e0 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a   SQLITE_FAULTINJ
278f0 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20  ECTOR_COUNT     
27900 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e   1../*.** The in
27910 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 63  terface to the c
27920 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75  ode in fault.c u
27930 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79  sed for identify
27940 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20  ing "benign".** 
27950 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e  malloc failures.
27960 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72   This is only pr
27970 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f  esent if SQLITE_
27980 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
27990 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69  T.** is not defi
279a0 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ned..*/.#ifndef 
279b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
279c0 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f 69 64 20  TIN_TEST.  void 
279d0 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
279e0 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a  gnMalloc(void);.
279f0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e    void sqlite3En
27a00 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f  dBenignMalloc(vo
27a10 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  id);.#else.  #de
27a20 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67 69  fine sqlite3Begi
27a30 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a  nBenignMalloc().
27a40 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
27a50 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
27a60 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ().#endif../*.**
27a70 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20   Allowed return 
27a80 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69  values from sqli
27a90 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29  te3FindInIndex()
27aa0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49  .*/.#define IN_I
27ab0 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20  NDEX_ROWID      
27ac0 20 20 31 20 20 20 2f 2a 20 53 65 61 72 63 68 20    1   /* Search 
27ad0 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
27ae0 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
27af0 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20  e IN_INDEX_EPH  
27b00 20 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 53          2   /* S
27b10 65 61 72 63 68 20 61 6e 20 65 70 68 65 6d 65 72  earch an ephemer
27b20 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64 65  al b-tree */.#de
27b30 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e  fine IN_INDEX_IN
27b40 44 45 58 5f 41 53 43 20 20 20 20 33 20 20 20 2f  DEX_ASC    3   /
27b50 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78  * Existing index
27b60 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64   ASCENDING */.#d
27b70 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49  efine IN_INDEX_I
27b80 4e 44 45 58 5f 44 45 53 43 20 20 20 34 20 20 20  NDEX_DESC   4   
27b90 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65  /* Existing inde
27ba0 78 20 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f 0a  x DESCENDING */.
27bb0 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
27bc0 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20 20 35 20  _NOOP         5 
27bd0 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61 76    /* No table av
27be0 61 69 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f 6d  ailable. Use com
27bf0 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a  parisons */./*.*
27c00 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73 20  * Allowed flags 
27c10 66 6f 72 20 74 68 65 20 33 72 64 20 70 61 72 61  for the 3rd para
27c20 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  meter to sqlite3
27c30 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a 2a  FindInIndex()..*
27c40 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
27c50 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20 30  EX_NOOP_OK     0
27c60 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20  x0001  /* OK to 
27c70 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58 5f  return IN_INDEX_
27c80 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NOOP */.#define 
27c90 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52 53  IN_INDEX_MEMBERS
27ca0 48 49 50 20 20 30 78 30 30 30 32 20 20 2f 2a 20  HIP  0x0002  /* 
27cb0 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64  IN operator used
27cc0 20 66 6f 72 20 6d 65 6d 62 65 72 73 68 69 70 20   for membership 
27cd0 74 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  test */.#define 
27ce0 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20 20  IN_INDEX_LOOP   
27cf0 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
27d00 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64  IN operator used
27d10 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e   as a loop */.in
27d20 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  t sqlite3FindInI
27d30 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78  ndex(Parse *, Ex
27d40 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a 29  pr *, u32, int*)
27d50 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
27d60 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57  _ENABLE_ATOMIC_W
27d70 52 49 54 45 0a 20 20 69 6e 74 20 73 71 6c 69 74  RITE.  int sqlit
27d80 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71  e3JournalOpen(sq
27d90 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e  lite3_vfs *, con
27da0 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74  st char *, sqlit
27db0 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20  e3_file *, int, 
27dc0 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
27dd0 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73  te3JournalSize(s
27de0 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a 20  qlite3_vfs *);. 
27df0 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
27e00 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65  nalCreate(sqlite
27e10 33 5f 66 69 6c 65 20 2a 29 3b 0a 20 20 69 6e 74  3_file *);.  int
27e20 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45   sqlite3JournalE
27e30 78 69 73 74 73 28 73 71 6c 69 74 65 33 5f 66 69  xists(sqlite3_fi
27e40 6c 65 20 2a 70 29 3b 0a 23 65 6c 73 65 0a 20 20  le *p);.#else.  
27e50 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4a  #define sqlite3J
27e60 6f 75 72 6e 61 6c 53 69 7a 65 28 70 56 66 73 29  ournalSize(pVfs)
27e70 20 28 28 70 56 66 73 29 2d 3e 73 7a 4f 73 46 69   ((pVfs)->szOsFi
27e80 6c 65 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  le).  #define sq
27e90 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73  lite3JournalExis
27ea0 74 73 28 70 29 20 31 0a 23 65 6e 64 69 66 0a 0a  ts(p) 1.#endif..
27eb0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a  void sqlite3MemJ
27ec0 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74  ournalOpen(sqlit
27ed0 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e 74 20  e3_file *);.int 
27ee0 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61  sqlite3MemJourna
27ef0 6c 53 69 7a 65 28 76 6f 69 64 29 3b 0a 69 6e 74  lSize(void);.int
27f00 20 73 71 6c 69 74 65 33 49 73 4d 65 6d 4a 6f 75   sqlite3IsMemJou
27f10 72 6e 61 6c 28 73 71 6c 69 74 65 33 5f 66 69 6c  rnal(sqlite3_fil
27f20 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  e *);..void sqli
27f30 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74  te3ExprSetHeight
27f40 41 6e 64 46 6c 61 67 73 28 50 61 72 73 65 20 2a  AndFlags(Parse *
27f50 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29  pParse, Expr *p)
27f60 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ;.#if SQLITE_MAX
27f70 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20  _EXPR_DEPTH>0.  
27f80 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
27f90 74 45 78 70 72 48 65 69 67 68 74 28 53 65 6c 65  tExprHeight(Sele
27fa0 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ct *);.  int sql
27fb0 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69  ite3ExprCheckHei
27fc0 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ght(Parse*, int)
27fd0 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
27fe0 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  e sqlite3SelectE
27ff0 78 70 72 48 65 69 67 68 74 28 78 29 20 30 0a 20  xprHeight(x) 0. 
28000 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
28010 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28  ExprCheckHeight(
28020 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32  x,y).#endif..u32
28030 20 73 71 6c 69 74 65 33 47 65 74 34 62 79 74 65   sqlite3Get4byte
28040 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69  (const u8*);.voi
28050 64 20 73 71 6c 69 74 65 33 50 75 74 34 62 79 74  d sqlite3Put4byt
28060 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69  e(u8*, u32);..#i
28070 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
28080 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
28090 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
280a0 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64  onnectionBlocked
280b0 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69  (sqlite3 *, sqli
280c0 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73  te3 *);.  void s
280d0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
280e0 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33  Unlocked(sqlite3
280f0 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71   *db);.  void sq
28100 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43  lite3ConnectionC
28110 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64  losed(sqlite3 *d
28120 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  b);.#else.  #def
28130 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
28140 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79  ctionBlocked(x,y
28150 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
28160 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c  te3ConnectionUnl
28170 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69  ocked(x).  #defi
28180 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
28190 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65  tionClosed(x).#e
281a0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
281b0 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64  ITE_DEBUG.  void
281c0 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72   sqlite3ParserTr
281d0 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20  ace(FILE*, char 
281e0 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  *);.#endif../*.*
281f0 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
28200 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65  ENABLE IOTRACE e
28210 78 69 73 74 73 20 74 68 65 6e 20 74 68 65 20 67  xists then the g
28220 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a  lobal variable.*
28230 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  * sqlite3IoTrace
28240 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
28250 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72   a printf-like r
28260 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a  outine used to.*
28270 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63  * print I/O trac
28280 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 20 0a 2a  ing messages. .*
28290 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
282a0 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23  ENABLE_IOTRACE.#
282b0 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28   define IOTRACE(
282c0 41 29 20 20 69 66 28 20 73 71 6c 69 74 65 33 49  A)  if( sqlite3I
282d0 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69 74 65  oTrace ){ sqlite
282e0 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20 20  3IoTrace A; }.  
282f0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
28300 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65 2a  IOTraceSql(Vdbe*
28310 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49 20 53 51  );.SQLITE_API SQ
28320 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f 69 64  LITE_EXTERN void
28330 20 28 53 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a   (SQLITE_CDECL *
28340 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29 28  sqlite3IoTrace)(
28350 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
28360 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
28370 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64 65   IOTRACE(A).# de
28380 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65  fine sqlite3Vdbe
28390 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23 65  IOTraceSql(X).#e
283a0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  ndif../*.** Thes
283b0 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61  e routines are a
283c0 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65  vailable for the
283d0 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69 6e   mem2.c debuggin
283e0 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  g memory allocat
283f0 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65  or.** only.  The
28400 79 20 61 72 65 20 75 73 65 64 20 74 6f 20 76 65  y are used to ve
28410 72 69 66 79 20 74 68 61 74 20 64 69 66 66 65 72  rify that differ
28420 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20 6d  ent "types" of m
28430 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74  emory.** allocat
28440 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72 6c  ions are properl
28450 79 20 74 72 61 63 6b 65 64 20 62 79 20 74 68 65  y tracked by the
28460 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73   system..**.** s
28470 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
28480 74 54 79 70 65 28 29 20 73 65 74 73 20 74 68 65  tType() sets the
28490 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61 6c   "type" of an al
284a0 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20  location to one 
284b0 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50  of.** the MEMTYP
284c0 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e  E_* macros defin
284d0 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20 74  ed below.  The t
284e0 79 70 65 20 6d 75 73 74 20 62 65 20 61 20 62 69  ype must be a bi
284f0 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20  tmask with.** a 
28500 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e 0a  single bit set..
28510 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  **.** sqlite3Mem
28520 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20 72  debugHasType() r
28530 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 61  eturns true if a
28540 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73 20 69  ny of the bits i
28550 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20  n its second.** 
28560 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74  argument match t
28570 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74  he type set by t
28580 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69  he previous sqli
28590 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
285a0 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33  pe()..** sqlite3
285b0 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
285c0 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f  ) is intended fo
285d0 72 20 75 73 65 20 69 6e 73 69 64 65 20 61 73 73  r use inside ass
285e0 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
285f0 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  ..**.** sqlite3M
28600 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29 20  emdebugNoType() 
28610 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20  returns true if 
28620 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74 73  none of the bits
28630 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a   in its second.*
28640 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68  * argument match
28650 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79   the type set by
28660 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71   the previous sq
28670 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
28680 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65  Type()..**.** Pe
28690 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20 69  rhaps the most i
286a0 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20 69  mportant point i
286b0 73 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65  s the difference
286c0 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50 45   between MEMTYPE
286d0 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d  _HEAP.** and MEM
286e0 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20  TYPE_LOOKASIDE. 
286f0 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f   If an allocatio
28700 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f  n is MEMTYPE_LOO
28710 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65 61  KASIDE, that mea
28720 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20 68  ns.** it might h
28730 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74  ave been allocat
28740 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c  ed by lookaside,
28750 20 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c 6f   except the allo
28760 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f  cation was.** to
28770 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61  o large or looka
28780 73 69 64 65 20 77 61 73 20 61 6c 72 65 61 64 79  side was already
28790 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d   full.  It is im
287a0 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69 66  portant to verif
287b0 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61  y.** that alloca
287c0 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74  tions that might
287d0 20 68 61 76 65 20 62 65 65 6e 20 73 61 74 69 73   have been satis
287e0 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64  fied by lookasid
287f0 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73  e are not.** pas
28800 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d  sed back to non-
28810 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29  lookaside free()
28820 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73 65   routines.  Asse
28830 72 74 73 20 73 75 63 68 20 61 73 20 74 68 65 0a  rts such as the.
28840 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65  ** example above
28850 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20 74   are placed on t
28860 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65  he non-lookaside
28870 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73   free() routines
28880 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68   to verify.** th
28890 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a  is constraint. .
288a0 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69  **.** All of thi
288b0 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61  s is no-op for a
288c0 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c   production buil
288d0 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65  d.  It only come
288e0 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77  s into.** play w
288f0 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 4d  hen the SQLITE_M
28900 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d  EMDEBUG compile-
28910 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75  time option is u
28920 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  sed..*/.#ifdef S
28930 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20  QLITE_MEMDEBUG. 
28940 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d   void sqlite3Mem
28950 64 65 62 75 67 53 65 74 54 79 70 65 28 76 6f 69  debugSetType(voi
28960 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71  d*,u8);.  int sq
28970 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
28980 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a  Type(void*,u8);.
28990 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d    int sqlite3Mem
289a0 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69 64  debugNoType(void
289b0 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64  *,u8);.#else.# d
289c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
289d0 64 65 62 75 67 53 65 74 54 79 70 65 28 58 2c 59  debugSetType(X,Y
289e0 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23  )  /* no-op */.#
289f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
28a00 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 58  emdebugHasType(X
28a10 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65 20  ,Y)  1.# define 
28a20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
28a30 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a 23  oType(X,Y)   1.#
28a40 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45  endif.#define ME
28a50 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20 20 20  MTYPE_HEAP      
28a60 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72 61   0x01  /* Genera
28a70 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f  l heap allocatio
28a80 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ns */.#define ME
28a90 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20  MTYPE_LOOKASIDE 
28aa0 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70 20 74   0x02  /* Heap t
28ab0 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20 62  hat might have b
28ac0 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f  een lookaside */
28ad0 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
28ae0 5f 53 43 52 41 54 43 48 20 20 20 20 30 78 30 34  _SCRATCH    0x04
28af0 20 20 2f 2a 20 53 63 72 61 74 63 68 20 61 6c 6c    /* Scratch all
28b00 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  ocations */.#def
28b10 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43  ine MEMTYPE_PCAC
28b20 48 45 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20  HE     0x08  /* 
28b30 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63  Page cache alloc
28b40 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ations */../*.**
28b50 20 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65 72   Threading inter
28b60 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  face.*/.#if SQLI
28b70 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
28b80 52 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69  READS>0.int sqli
28b90 74 65 33 54 68 72 65 61 64 43 72 65 61 74 65 28  te3ThreadCreate(
28ba0 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c 76  SQLiteThread**,v
28bb0 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76  oid*(*)(void*),v
28bc0 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
28bd0 65 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c  e3ThreadJoin(SQL
28be0 69 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69 64  iteThread*, void
28bf0 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  **);.#endif..#if
28c00 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
28c10 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f 56 54  ENABLE_DBSTAT_VT
28c20 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  AB) || defined(S
28c30 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74 20  QLITE_TEST).int 
28c40 73 71 6c 69 74 65 33 44 62 73 74 61 74 52 65 67  sqlite3DbstatReg
28c50 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b  ister(sqlite3*);
28c60 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20  .#endif..#endif 
28c70 2f 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  /* _SQLITEINT_H_
28c80 20 2a 2f 0a                                       */.